From 81bea17aefb26859f825b9293c7c99192874806e Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 8 Nov 2011 20:40:44 +0400 Subject: upgrade Dojo to 1.6.1 --- lib/dojo/AdapterRegistry.js | 7 +- lib/dojo/DeferredList.js | 6 +- lib/dojo/LICENSE | 2 +- lib/dojo/NodeList-data.js | 175 + lib/dojo/NodeList-fx.js | 35 +- lib/dojo/NodeList-html.js | 13 +- lib/dojo/NodeList-manipulate.js | 21 +- lib/dojo/NodeList-traverse.js | 33 +- lib/dojo/OpenAjax.js | 42 +- lib/dojo/Stateful.js | 35 +- lib/dojo/_base.js | 6 +- lib/dojo/_base/Color.js | 5 +- lib/dojo/_base/Deferred.js | 106 +- lib/dojo/_base/NodeList.js | 83 +- lib/dojo/_base/_loader/bootstrap.js | 33 +- lib/dojo/_base/_loader/hostenv_browser.js | 37 +- lib/dojo/_base/_loader/hostenv_ff_ext.js | 6 +- lib/dojo/_base/_loader/hostenv_rhino.js | 20 +- lib/dojo/_base/_loader/hostenv_spidermonkey.js | 22 +- lib/dojo/_base/_loader/loader.js | 176 +- lib/dojo/_base/_loader/loader_debug.js | 2 +- lib/dojo/_base/_loader/loader_xd.js | 40 +- lib/dojo/_base/array.js | 39 +- lib/dojo/_base/browser.js | 17 +- lib/dojo/_base/connect.js | 93 +- lib/dojo/_base/declare.js | 26 +- lib/dojo/_base/event.js | 124 +- lib/dojo/_base/fx.js | 3 +- lib/dojo/_base/html.js | 266 +- lib/dojo/_base/json.js | 15 +- lib/dojo/_base/lang.js | 35 +- lib/dojo/_base/query-sizzle.js | 32 +- lib/dojo/_base/query.js | 261 +- lib/dojo/_base/window.js | 20 +- lib/dojo/_base/xhr.js | 117 +- lib/dojo/_firebug/firebug.js | 108 +- lib/dojo/back.js | 65 +- lib/dojo/behavior.js | 89 +- lib/dojo/build.txt | 7 +- lib/dojo/cache.js | 11 +- lib/dojo/cldr/monetary.js | 4 +- lib/dojo/cldr/nls/ar/buddhist.js | 1 + lib/dojo/cldr/nls/ar/gregorian.js | 2 +- lib/dojo/cldr/nls/ar/number.js | 2 +- lib/dojo/cldr/nls/ca/number.js | 2 +- lib/dojo/cldr/nls/cs/gregorian.js | 2 +- lib/dojo/cldr/nls/cs/number.js | 2 +- lib/dojo/cldr/nls/da/buddhist.js | 1 + lib/dojo/cldr/nls/da/gregorian.js | 2 +- lib/dojo/cldr/nls/da/islamic.js | 1 + lib/dojo/cldr/nls/da/number.js | 2 +- lib/dojo/cldr/nls/de/buddhist.js | 1 + lib/dojo/cldr/nls/de/gregorian.js | 2 +- lib/dojo/cldr/nls/de/islamic.js | 1 + lib/dojo/cldr/nls/de/number.js | 2 +- lib/dojo/cldr/nls/el/buddhist.js | 1 + lib/dojo/cldr/nls/el/gregorian.js | 2 +- lib/dojo/cldr/nls/el/hebrew.js | 1 + lib/dojo/cldr/nls/el/number.js | 2 +- lib/dojo/cldr/nls/en-au/currency.js | 2 +- lib/dojo/cldr/nls/en-au/number.js | 2 +- lib/dojo/cldr/nls/en-ca/currency.js | 2 +- lib/dojo/cldr/nls/en-gb/buddhist.js | 1 + lib/dojo/cldr/nls/en-gb/islamic.js | 1 + lib/dojo/cldr/nls/en-gb/number.js | 2 +- lib/dojo/cldr/nls/en/buddhist.js | 1 + lib/dojo/cldr/nls/en/currency.js | 2 +- lib/dojo/cldr/nls/en/islamic.js | 1 + lib/dojo/cldr/nls/en/number.js | 2 +- lib/dojo/cldr/nls/es/buddhist.js | 1 + lib/dojo/cldr/nls/es/islamic.js | 1 + lib/dojo/cldr/nls/es/number.js | 2 +- lib/dojo/cldr/nls/fi/buddhist.js | 1 + lib/dojo/cldr/nls/fi/gregorian.js | 2 +- lib/dojo/cldr/nls/fi/hebrew.js | 1 + lib/dojo/cldr/nls/fi/islamic.js | 1 + lib/dojo/cldr/nls/fi/number.js | 2 +- lib/dojo/cldr/nls/fr-ch/gregorian.js | 1 + lib/dojo/cldr/nls/fr-ch/number.js | 1 + lib/dojo/cldr/nls/fr/gregorian.js | 2 +- lib/dojo/cldr/nls/fr/number.js | 2 +- lib/dojo/cldr/nls/he/number.js | 2 +- lib/dojo/cldr/nls/hu/gregorian.js | 2 +- lib/dojo/cldr/nls/hu/number.js | 2 +- lib/dojo/cldr/nls/it/gregorian.js | 2 +- lib/dojo/cldr/nls/it/number.js | 2 +- lib/dojo/cldr/nls/ja/gregorian.js | 2 +- lib/dojo/cldr/nls/ja/number.js | 2 +- lib/dojo/cldr/nls/ko/gregorian.js | 2 +- lib/dojo/cldr/nls/ko/number.js | 2 +- lib/dojo/cldr/nls/nb/gregorian.js | 2 +- lib/dojo/cldr/nls/nb/number.js | 2 +- lib/dojo/cldr/nls/nl/gregorian.js | 2 +- lib/dojo/cldr/nls/nl/number.js | 2 +- lib/dojo/cldr/nls/number.js | 2 +- lib/dojo/cldr/nls/pl/gregorian.js | 2 +- lib/dojo/cldr/nls/pl/number.js | 2 +- lib/dojo/cldr/nls/pt-pt/gregorian.js | 2 +- lib/dojo/cldr/nls/pt-pt/number.js | 2 +- lib/dojo/cldr/nls/pt/number.js | 2 +- lib/dojo/cldr/nls/ro/buddhist.js | 1 + lib/dojo/cldr/nls/ro/currency.js | 1 + lib/dojo/cldr/nls/ro/gregorian.js | 1 + lib/dojo/cldr/nls/ro/number.js | 1 + lib/dojo/cldr/nls/ru/gregorian.js | 2 +- lib/dojo/cldr/nls/ru/number.js | 2 +- lib/dojo/cldr/nls/sk/number.js | 2 +- lib/dojo/cldr/nls/sl/gregorian.js | 2 +- lib/dojo/cldr/nls/sl/number.js | 2 +- lib/dojo/cldr/nls/sv/gregorian.js | 2 +- lib/dojo/cldr/nls/sv/number.js | 2 +- lib/dojo/cldr/nls/th/number.js | 2 +- lib/dojo/cldr/nls/tr/number.js | 2 +- lib/dojo/cldr/nls/zh-hant/buddhist.js | 1 + lib/dojo/cldr/nls/zh-hant/currency.js | 1 + lib/dojo/cldr/nls/zh-hant/gregorian.js | 1 + lib/dojo/cldr/nls/zh-hant/islamic.js | 1 + lib/dojo/cldr/nls/zh-hant/number.js | 1 + lib/dojo/cldr/nls/zh-hk/currency.js | 1 + lib/dojo/cldr/nls/zh-hk/gregorian.js | 1 + lib/dojo/cldr/nls/zh-hk/number.js | 1 + lib/dojo/cldr/nls/zh-tw/currency.js | 2 +- lib/dojo/cldr/nls/zh-tw/gregorian.js | 2 +- lib/dojo/cldr/nls/zh/gregorian.js | 2 +- lib/dojo/cldr/nls/zh/number.js | 2 +- lib/dojo/cldr/supplemental.js | 17 +- lib/dojo/colors.js | 10 +- lib/dojo/cookie.js | 16 +- lib/dojo/currency.js | 15 +- lib/dojo/data/ItemFileReadStore.js | 195 +- lib/dojo/data/ItemFileWriteStore.js | 85 +- lib/dojo/data/ObjectStore.js | 487 + lib/dojo/data/api/Identity.js | 31 +- lib/dojo/data/api/Notification.js | 33 +- lib/dojo/data/api/Read.js | 161 +- lib/dojo/data/api/Request.js | 13 +- lib/dojo/data/api/Write.js | 41 +- lib/dojo/data/util/filter.js | 10 +- lib/dojo/data/util/simpleFetch.js | 26 +- lib/dojo/data/util/sorter.js | 22 +- lib/dojo/date.js | 14 +- lib/dojo/date/locale.js | 51 +- lib/dojo/date/stamp.js | 10 +- lib/dojo/dnd/Avatar.js | 6 +- lib/dojo/dnd/Container.js | 13 +- lib/dojo/dnd/Manager.js | 20 +- lib/dojo/dnd/Moveable.js | 29 +- lib/dojo/dnd/Mover.js | 48 +- lib/dojo/dnd/Selector.js | 4 +- lib/dojo/dnd/Source.js | 8 +- lib/dojo/dnd/TimedMoveable.js | 6 +- lib/dojo/dnd/autoscroll.js | 32 +- lib/dojo/dnd/common.js | 4 +- lib/dojo/dnd/move.js | 112 +- lib/dojo/dojo.js | 4 +- lib/dojo/dojo.js.uncompressed.js | 1448 +-- lib/dojo/fx.js | 34 +- lib/dojo/fx/Toggler.js | 15 +- lib/dojo/fx/easing.js | 60 +- lib/dojo/gears.js | 6 +- lib/dojo/hash.js | 38 +- lib/dojo/html.js | 101 +- lib/dojo/i18n.js | 22 +- lib/dojo/io/iframe.js | 70 +- lib/dojo/io/script.js | 22 +- lib/dojo/jaxer.js | 3 +- lib/dojo/lib/backCompat.js | 283 + lib/dojo/lib/kernel.js | 26 + lib/dojo/lib/main-browser.js | 61 + lib/dojo/lib/plugins/i18n.js | 94 + lib/dojo/lib/plugins/text.js | 70 + lib/dojo/nls/fi/colors.js | 2 +- lib/dojo/nls/kk/colors.js | 1 + lib/dojo/nls/pl/colors.js | 2 +- lib/dojo/nls/pt-pt/colors.js | 2 +- lib/dojo/nls/pt/colors.js | 2 +- lib/dojo/nls/sl/colors.js | 2 +- lib/dojo/nls/tt-rss-layer_ROOT.js | 2 +- lib/dojo/nls/tt-rss-layer_ar.js | 2 +- lib/dojo/nls/tt-rss-layer_ca.js | 2 +- lib/dojo/nls/tt-rss-layer_cs.js | 2 +- lib/dojo/nls/tt-rss-layer_da.js | 2 +- lib/dojo/nls/tt-rss-layer_de-de.js | 2 +- lib/dojo/nls/tt-rss-layer_de.js | 2 +- lib/dojo/nls/tt-rss-layer_el.js | 2 +- lib/dojo/nls/tt-rss-layer_en-gb.js | 2 +- lib/dojo/nls/tt-rss-layer_en-us.js | 2 +- lib/dojo/nls/tt-rss-layer_en.js | 2 +- lib/dojo/nls/tt-rss-layer_es-es.js | 2 +- lib/dojo/nls/tt-rss-layer_es.js | 2 +- lib/dojo/nls/tt-rss-layer_fi-fi.js | 2 +- lib/dojo/nls/tt-rss-layer_fi.js | 2 +- lib/dojo/nls/tt-rss-layer_fr-fr.js | 2 +- lib/dojo/nls/tt-rss-layer_fr.js | 2 +- lib/dojo/nls/tt-rss-layer_he-il.js | 2 +- lib/dojo/nls/tt-rss-layer_he.js | 2 +- lib/dojo/nls/tt-rss-layer_hu.js | 2 +- lib/dojo/nls/tt-rss-layer_it-it.js | 2 +- lib/dojo/nls/tt-rss-layer_it.js | 2 +- lib/dojo/nls/tt-rss-layer_ja-jp.js | 2 +- lib/dojo/nls/tt-rss-layer_ja.js | 2 +- lib/dojo/nls/tt-rss-layer_ko-kr.js | 2 +- lib/dojo/nls/tt-rss-layer_ko.js | 2 +- lib/dojo/nls/tt-rss-layer_nb.js | 2 +- lib/dojo/nls/tt-rss-layer_nl-nl.js | 2 +- lib/dojo/nls/tt-rss-layer_nl.js | 2 +- lib/dojo/nls/tt-rss-layer_pl.js | 2 +- lib/dojo/nls/tt-rss-layer_pt-br.js | 2 +- lib/dojo/nls/tt-rss-layer_pt-pt.js | 2 +- lib/dojo/nls/tt-rss-layer_pt.js | 2 +- lib/dojo/nls/tt-rss-layer_ru.js | 2 +- lib/dojo/nls/tt-rss-layer_sk.js | 2 +- lib/dojo/nls/tt-rss-layer_sl.js | 2 +- lib/dojo/nls/tt-rss-layer_sv.js | 2 +- lib/dojo/nls/tt-rss-layer_th.js | 2 +- lib/dojo/nls/tt-rss-layer_tr.js | 2 +- lib/dojo/nls/tt-rss-layer_xx.js | 2 +- lib/dojo/nls/tt-rss-layer_zh-cn.js | 2 +- lib/dojo/nls/tt-rss-layer_zh-tw.js | 2 +- lib/dojo/nls/tt-rss-layer_zh.js | 2 +- lib/dojo/nls/zh/colors.js | 2 +- lib/dojo/number.js | 32 +- lib/dojo/package.json | 21 + lib/dojo/parser.js | 302 +- lib/dojo/regexp.js | 14 +- lib/dojo/resources/_modules.js | 4 +- lib/dojo/robot.js | 6 +- lib/dojo/robotx.js | 77 +- lib/dojo/rpc/JsonService.js | 5 +- lib/dojo/rpc/JsonpService.js | 11 +- lib/dojo/rpc/RpcService.js | 11 +- lib/dojo/store/Cache.js | 152 + lib/dojo/store/DataStore.js | 142 + lib/dojo/store/JsonRest.js | 146 + lib/dojo/store/Memory.js | 164 + lib/dojo/store/Observable.js | 173 + lib/dojo/store/README | 10 + lib/dojo/store/api/Store.js | 304 + lib/dojo/store/util/QueryResults.js | 67 + lib/dojo/store/util/SimpleQueryEngine.js | 116 + lib/dojo/string.js | 22 +- lib/dojo/tt-rss-layer.js | 4 +- lib/dojo/tt-rss-layer.js.uncompressed.js | 13100 ++++++++++++----------- lib/dojo/uacss.js | 6 +- lib/dojo/window.js | 18 +- 245 files changed, 12549 insertions(+), 8708 deletions(-) create mode 100644 lib/dojo/NodeList-data.js create mode 100644 lib/dojo/cldr/nls/ar/buddhist.js create mode 100644 lib/dojo/cldr/nls/da/buddhist.js create mode 100644 lib/dojo/cldr/nls/da/islamic.js create mode 100644 lib/dojo/cldr/nls/de/buddhist.js create mode 100644 lib/dojo/cldr/nls/de/islamic.js create mode 100644 lib/dojo/cldr/nls/el/buddhist.js create mode 100644 lib/dojo/cldr/nls/el/hebrew.js create mode 100644 lib/dojo/cldr/nls/en-gb/buddhist.js create mode 100644 lib/dojo/cldr/nls/en-gb/islamic.js create mode 100644 lib/dojo/cldr/nls/en/buddhist.js create mode 100644 lib/dojo/cldr/nls/en/islamic.js create mode 100644 lib/dojo/cldr/nls/es/buddhist.js create mode 100644 lib/dojo/cldr/nls/es/islamic.js create mode 100644 lib/dojo/cldr/nls/fi/buddhist.js create mode 100644 lib/dojo/cldr/nls/fi/hebrew.js create mode 100644 lib/dojo/cldr/nls/fi/islamic.js create mode 100644 lib/dojo/cldr/nls/fr-ch/gregorian.js create mode 100644 lib/dojo/cldr/nls/fr-ch/number.js create mode 100644 lib/dojo/cldr/nls/ro/buddhist.js create mode 100644 lib/dojo/cldr/nls/ro/currency.js create mode 100644 lib/dojo/cldr/nls/ro/gregorian.js create mode 100644 lib/dojo/cldr/nls/ro/number.js create mode 100644 lib/dojo/cldr/nls/zh-hant/buddhist.js create mode 100644 lib/dojo/cldr/nls/zh-hant/currency.js create mode 100644 lib/dojo/cldr/nls/zh-hant/gregorian.js create mode 100644 lib/dojo/cldr/nls/zh-hant/islamic.js create mode 100644 lib/dojo/cldr/nls/zh-hant/number.js create mode 100644 lib/dojo/cldr/nls/zh-hk/currency.js create mode 100644 lib/dojo/cldr/nls/zh-hk/gregorian.js create mode 100644 lib/dojo/cldr/nls/zh-hk/number.js create mode 100644 lib/dojo/data/ObjectStore.js create mode 100644 lib/dojo/lib/backCompat.js create mode 100644 lib/dojo/lib/kernel.js create mode 100644 lib/dojo/lib/main-browser.js create mode 100644 lib/dojo/lib/plugins/i18n.js create mode 100644 lib/dojo/lib/plugins/text.js create mode 100644 lib/dojo/nls/kk/colors.js create mode 100644 lib/dojo/package.json create mode 100644 lib/dojo/store/Cache.js create mode 100644 lib/dojo/store/DataStore.js create mode 100644 lib/dojo/store/JsonRest.js create mode 100644 lib/dojo/store/Memory.js create mode 100644 lib/dojo/store/Observable.js create mode 100644 lib/dojo/store/README create mode 100644 lib/dojo/store/api/Store.js create mode 100644 lib/dojo/store/util/QueryResults.js create mode 100644 lib/dojo/store/util/SimpleQueryEngine.js (limited to 'lib/dojo') diff --git a/lib/dojo/AdapterRegistry.js b/lib/dojo/AdapterRegistry.js index bb6a60f41..1d688a3b1 100644 --- a/lib/dojo/AdapterRegistry.js +++ b/lib/dojo/AdapterRegistry.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by b dojo._hasResource["dojo.AdapterRegistry"] = true; dojo.provide("dojo.AdapterRegistry"); + dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){ // summary: // A registry to make contextual calling/searching easier. @@ -40,11 +41,11 @@ dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){ this.pairs = []; this.returnWrappers = returnWrappers || false; // Boolean -} +}; dojo.extend(dojo.AdapterRegistry, { register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){ - // summary: + // summary: // register a check function to determine if the wrap function or // object gets selected // name: diff --git a/lib/dojo/DeferredList.js b/lib/dojo/DeferredList.js index a8156aba2..afe6638a1 100644 --- a/lib/dojo/DeferredList.js +++ b/lib/dojo/DeferredList.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,6 +8,8 @@ if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo.DeferredList"] = true; dojo.provide("dojo.DeferredList"); + + dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){ // summary: // Provides event handling for a group of Deferred objects. @@ -65,7 +67,7 @@ dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*B dojo.DeferredList.prototype = new dojo.Deferred(); dojo.DeferredList.prototype.gatherResults= function(deferredList){ - // summary: + // summary: // Gathers the results of the deferreds for packaging // as the parameters to the Deferred Lists' callback diff --git a/lib/dojo/LICENSE b/lib/dojo/LICENSE index 4c93ded6b..aa6b39f8c 100644 --- a/lib/dojo/LICENSE +++ b/lib/dojo/LICENSE @@ -13,7 +13,7 @@ The text of the AFL and BSD licenses is reproduced below. The "New" BSD License: ********************** -Copyright (c) 2005-2010, The Dojo Foundation +Copyright (c) 2005-2011, The Dojo Foundation All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/lib/dojo/NodeList-data.js b/lib/dojo/NodeList-data.js new file mode 100644 index 000000000..0126448d2 --- /dev/null +++ b/lib/dojo/NodeList-data.js @@ -0,0 +1,175 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.NodeList-data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.NodeList-data"] = true; +dojo.provide("dojo.NodeList-data"); + +(function(d){ + +/*===== + dojo.NodeList.prototype.data = function(key, value){ + // summary: stash or get some arbitrary data on/from these nodes. + // + // description: + // Stash or get some arbirtrary data on/from these nodes. This private _data function is + // exposed publicly on `dojo.NodeList`, eg: as the result of a `dojo.query` call. + // DIFFERS from jQuery.data in that when used as a getter, the entire list is ALWAYS + // returned. EVEN WHEN THE LIST IS length == 1. + // + // A single-node version of this function is provided as `dojo._nodeData`, which follows + // the same signature, though expects a String ID or DomNode reference in the first + // position, before key/value arguments. + // + // node: String|DomNode + // The node to associate data with + // + // key: Object?|String? + // If an object, act as a setter and iterate over said object setting data items as defined. + // If a string, and `value` present, set the data for defined `key` to `value` + // If a string, and `value` absent, act as a getter, returning the data associated with said `key` + // + // value: Anything? + // The value to set for said `key`, provided `key` is a string (and not an object) + // + // example: + // Set a key `bar` to some data, then retrieve it. + // | dojo.query(".foo").data("bar", "touched"); + // | var touched = dojo.query(".foo").data("bar"); + // | if(touched[0] == "touched"){ alert('win'); } + // + // example: + // Get all the data items for a given node. + // | var list = dojo.query(".foo").data(); + // | var first = list[0]; + // + // example: + // Set the data to a complex hash. Overwrites existing keys with new value + // | dojo.query(".foo").data({ bar:"baz", foo:"bar" }); + // Then get some random key: + // | dojo.query(".foo").data("foo"); // returns [`bar`] + // + // returns: Object|Anything|Nothing + // When used as a setter via `dojo.NodeList`, a NodeList instance is returned + // for further chaning. When used as a getter via `dojo.NodeList` an ARRAY + // of items is returned. The items in the array correspond to the elements + // in the original list. This is true even when the list length is 1, eg: + // when looking up a node by ID (#foo) + }; + + dojo.NodeList.prototype.removeData = function(key){ + // summary: Remove the data associated with these nodes. + // key: String? + // If ommitted, clean all data for this node. + // If passed, remove the data item found at `key` + }; + + dojo._nodeDataCache = { + // summary: An alias to the private dataCache for NodeList-data. NEVER USE THIS! + // This private is only exposed for the benefit of unit testing, and is + // removed during the build process. + }; + +=====*/ + + var dataCache = {}, x = 0, dataattr = "data-dojo-dataid", nl = d.NodeList, + dopid = function(node){ + // summary: Return a uniqueish ID for the passed node reference + var pid = d.attr(node, dataattr); + if(!pid){ + pid = "pid" + (x++); + d.attr(node, dataattr, pid); + } + return pid; + } + ; + + + var dodata = d._nodeData = function(node, key, value){ + + var pid = dopid(node), r; + if(!dataCache[pid]){ dataCache[pid] = {}; } + + // API discrepency: calling with only a node returns the whole object. $.data throws + if(arguments.length == 1){ r = dataCache[pid]; } + if(typeof key == "string"){ + // either getter or setter, based on `value` presence + if(arguments.length > 2){ + dataCache[pid][key] = value; + }else{ + r = dataCache[pid][key]; + } + }else{ + // must be a setter, mix `value` into data hash + // API discrepency: using object as setter works here + r = d._mixin(dataCache[pid], key); + } + + return r; // Object|Anything|Nothing + }; + + var removeData = d._removeNodeData = function(node, key){ + // summary: Remove some data from this node + // node: String|DomNode + // The node reference to remove data from + // key: String? + // If omitted, remove all data in this dataset. + // If passed, remove only the passed `key` in the associated dataset + var pid = dopid(node); + if(dataCache[pid]){ + if(key){ + delete dataCache[pid][key]; + }else{ + delete dataCache[pid]; + } + } + }; + + d._gcNodeData = function(){ + // summary: super expensive: GC all data in the data for nodes that no longer exist in the dom. + // description: + // super expensive: GC all data in the data for nodes that no longer exist in the dom. + // MUCH safer to do this yourself, manually, on a per-node basis (via `NodeList.removeData()`) + // provided as a stop-gap for exceptionally large/complex applications with constantly changing + // content regions (eg: a dijit.layout.ContentPane with replacing data) + // There is NO automatic GC going on. If you dojo.destroy() a node, you should _removeNodeData + // prior to destruction. + var livePids = dojo.query("[" + dataattr + "]").map(dopid); + for(var i in dataCache){ + if(dojo.indexOf(livePids, i) < 0){ delete dataCache[i]; } + } + }; + + // make nodeData and removeNodeData public on dojo.NodeList: + d.extend(nl, { + data: nl._adaptWithCondition(dodata, function(a){ + return a.length === 0 || a.length == 1 && (typeof a[0] == "string"); + }), + removeData: nl._adaptAsForEach(removeData) + }); + +// TODO: this is the basic implemetation of adaptWithCondtionAndWhenMappedConsiderLength, for lack of a better API name +// it conflicts with the the `dojo.NodeList` way: always always return an arrayLike thinger. Consider for 2.0: +// +// nl.prototype.data = function(key, value){ +// var a = arguments, r; +// if(a.length === 0 || a.length == 1 && (typeof a[0] == "string")){ +// r = this.map(function(node){ +// return d._data(node, key); +// }); +// if(r.length == 1){ r = r[0]; } // the offending line, and the diff on adaptWithCondition +// }else{ +// r = this.forEach(function(node){ +// d._data(node, key, value); +// }); +// } +// return r; // dojo.NodeList|Array|SingleItem +// }; + +})(dojo); + +} diff --git a/lib/dojo/NodeList-fx.js b/lib/dojo/NodeList-fx.js index de2cc3255..b9ec76647 100644 --- a/lib/dojo/NodeList-fx.js +++ b/lib/dojo/NodeList-fx.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,6 +10,7 @@ dojo._hasResource["dojo.NodeList-fx"] = true; dojo.provide("dojo.NodeList-fx"); dojo.require("dojo.fx"); + /*===== dojo["NodeList-fx"] = { // summary: Adds dojo.fx animation support to dojo.query() @@ -25,7 +26,7 @@ dojo.extend(dojo.NodeList, { dojo.mixin(tmpArgs, args); return obj[method](tmpArgs); }) - ); + ); return args.auto ? a.play() && this : a; // dojo.Animation|dojo.NodeList }, @@ -34,7 +35,7 @@ dojo.extend(dojo.NodeList, { // wipe in all elements of this NodeList via `dojo.fx.wipeIn` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -58,7 +59,7 @@ dojo.extend(dojo.NodeList, { // wipe out all elements of this NodeList via `dojo.fx.wipeOut` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -77,7 +78,7 @@ dojo.extend(dojo.NodeList, { // slide all elements of the node list to the specified place via `dojo.fx.slideTo` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -100,7 +101,7 @@ dojo.extend(dojo.NodeList, { // fade in all elements of this NodeList via `dojo.fadeIn` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -119,7 +120,7 @@ dojo.extend(dojo.NodeList, { // fade out all elements of this NodeList via `dojo.fadeOut` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -155,14 +156,14 @@ dojo.extend(dojo.NodeList, { // example: // | dojo.query(".zork").animateProperty({ // | duration: 500, - // | properties: { + // | properties: { // | color: { start: "black", end: "white" }, - // | left: { end: 300 } - // | } + // | left: { end: 300 } + // | } // | }).play(); // // example: - // | dojo.query(".grue").animateProperty({ + // | dojo.query(".grue").animateProperty({ // | auto:true, // | properties: { // | height:240 @@ -171,9 +172,9 @@ dojo.extend(dojo.NodeList, { return this._anim(dojo, "animateProperty", args); // dojo.Animation|dojo.NodeList }, - anim: function( /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, + anim: function( /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, /*Function?*/ onEnd, /*Integer?*/ delay){ // summary: @@ -181,8 +182,8 @@ dojo.extend(dojo.NodeList, { // The returned animation object will already be playing when it // is returned. See the docs for `dojo.anim` for full details. // properties: Object - // the properties to animate. does NOT support the `auto` parameter like other - // NodeList-fx methods. + // the properties to animate. does NOT support the `auto` parameter like other + // NodeList-fx methods. // duration: Integer? // Optional. The time to run the animations for // easing: Function? @@ -207,7 +208,7 @@ dojo.extend(dojo.NodeList, { easing: easing }); }) - ); + ); if(onEnd){ dojo.connect(canim, "onEnd", onEnd); } diff --git a/lib/dojo/NodeList-html.js b/lib/dojo/NodeList-html.js index e8e0ac220..bc8da9d86 100644 --- a/lib/dojo/NodeList-html.js +++ b/lib/dojo/NodeList-html.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,6 +10,7 @@ dojo._hasResource["dojo.NodeList-html"] = true; dojo.provide("dojo.NodeList-html"); dojo.require("dojo.html"); + /*===== dojo["NodeList-html"] = { // summary: Adds a chainable html method to dojo.query() / Nodelist instances for setting/replacing node content @@ -21,15 +22,15 @@ dojo.extend(dojo.NodeList, { // summary: // see `dojo.html.set()`. Set the content of all elements of this NodeList // - // description: - // Based around `dojo.html.set()`, set the content of the Elements in a + // description: + // Based around `dojo.html.set()`, set the content of the Elements in a // NodeList to the given content (string/node/nodelist), with optional arguments // to further tune the set content behavior. // // example: // | dojo.query(".thingList").html("
  • 1
  • 2
  • 3
  • ", - // | { - // | parseContent: true, + // | { + // | parseContent: true, // | onBegin: function(){ // | this.content = this.content.replace(/([0-9])/g, this.id + ": $1"); // | this.inherited("onBegin", arguments); @@ -38,7 +39,7 @@ dojo.extend(dojo.NodeList, { var dhs = new dojo.html._ContentSetter(params || {}); this.forEach(function(elm){ - dhs.node = elm; + dhs.node = elm; dhs.set(content); dhs.tearDown(); }); diff --git a/lib/dojo/NodeList-manipulate.js b/lib/dojo/NodeList-manipulate.js index 171540faf..8a4603843 100644 --- a/lib/dojo/NodeList-manipulate.js +++ b/lib/dojo/NodeList-manipulate.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.NodeList-manipulate"]){ //_hasResource checks added dojo._hasResource["dojo.NodeList-manipulate"] = true; dojo.provide("dojo.NodeList-manipulate"); + /*===== dojo["NodeList-manipulate"] = { // summary: Adds a chainable methods to dojo.query() / Nodelist instances for manipulating HTML @@ -51,7 +52,7 @@ dojo["NodeList-manipulate"] = { } function makeWrapNode(/*DOMNode||String*/html, /*DOMNode*/refNode){ - // summary: + // summary: // convert HTML into nodes if it is not already a node. if(typeof html == "string"){ html = dojo._toDom(html, (refNode && refNode.ownerDocument)); @@ -655,25 +656,25 @@ dojo["NodeList-manipulate"] = { // example: // assume a DOM created by this markup: // |
    - // |
    ___
    + // |
    ___
    // |
    Red One
    - // |
    ___
    + // |
    ___
    // |
    Blue One
    - // |
    ___
    + // |
    ___
    // |
    Red Two
    - // |
    ___
    + // |
    ___
    // |
    Blue Two
    // |
    // Running this code: // | dojo.query(".red").replaceAll(".blue"); // Results in this DOM structure: // |
    - // |
    ___
    - // |
    ___
    + // |
    ___
    + // |
    ___
    // |
    Red One
    // |
    Red Two
    - // |
    ___
    - // |
    ___
    + // |
    ___
    + // |
    ___
    // |
    Red One
    // |
    Red Two
    // |
    diff --git a/lib/dojo/NodeList-traverse.js b/lib/dojo/NodeList-traverse.js index b5314eed6..b6167ad0e 100644 --- a/lib/dojo/NodeList-traverse.js +++ b/lib/dojo/NodeList-traverse.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.NodeList-traverse"]){ //_hasResource checks added by dojo._hasResource["dojo.NodeList-traverse"] = true; dojo.provide("dojo.NodeList-traverse"); + /*===== dojo["NodeList-traverse"] = { // summary: Adds a chainable methods to dojo.query() / Nodelist instances for traversing the DOM @@ -28,18 +29,7 @@ dojo.extend(dojo.NodeList, { ary = ary.concat(items); } } - return ary; - }, - - _filterQueryResult: function(nodeList, query){ - // summmary: - // Replacement for dojo._filterQueryResult that does a full - // query. Slower, but allows for more types of queries. - var filter = dojo.filter(nodeList, function(node){ - return dojo.query(query, node.parentNode).indexOf(node) != -1; - }); - var result = this._wrap(filter); - return result; + return ary; }, _getUniqueAsNodeList: function(nodes){ @@ -65,7 +55,7 @@ dojo.extend(dojo.NodeList, { // gets unique element nodes, filters them further // with an optional query and then calls _stash to track parent NodeList. var ary = this._getUniqueAsNodeList(nodes); - ary = (query ? this._filterQueryResult(ary, query) : ary); + ary = (query ? dojo._filterQueryResult(ary, query) : ary); return ary._stash(this); //dojo.NodeList }, @@ -73,7 +63,7 @@ dojo.extend(dojo.NodeList, { // summary: // cycles over all the nodes and calls a callback // to collect nodes for a possible inclusion in a result. - // The callback will get two args: callback(node, ary), + // The callback will get two args: callback(node, ary), // where ary is the array being used to collect the nodes. return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(callback), query); //dojo.NodeList }, @@ -109,7 +99,7 @@ dojo.extend(dojo.NodeList, { }); //dojo.NodeList }, - closest: function(/*String*/query){ + closest: function(/*String*/query, /*String|DOMNode?*/ root){ // summary: // Returns closest parent that matches query, including current node in this // dojo.NodeList if it matches the query. @@ -118,6 +108,8 @@ dojo.extend(dojo.NodeList, { // original dojo.NodeList. // query: // a CSS selector. + // root: + // If specified, query is relative to "root" rather than document body. // returns: // dojo.NodeList, the closest parent that matches the query, including the current // node in this dojo.NodeList if it matches the query. @@ -133,13 +125,12 @@ dojo.extend(dojo.NodeList, { // Running this code: // | dojo.query(".red").closest(".container"); // returns the div with class "container". - var self = this; - return this._getRelatedUniqueNodes(query, function(node, ary){ + return this._getRelatedUniqueNodes(null, function(node, ary){ do{ - if(self._filterQueryResult([node], query).length){ + if(dojo._filterQueryResult([node], query, root).length){ return node; } - }while((node = node.parentNode) && node.nodeType == 1); + }while(node != root && (node = node.parentNode) && node.nodeType == 1); return null; //To make rhino strict checking happy. }); //dojo.NodeList }, @@ -461,7 +452,7 @@ dojo.extend(dojo.NodeList, { // | // Running this code: // | dojo.query(".blue").last(); - // returns the last div with class "blue", + // returns the last div with class "blue", return this._wrap((this.length ? [this[this.length - 1]] : []), this); //dojo.NodeList }, diff --git a/lib/dojo/OpenAjax.js b/lib/dojo/OpenAjax.js index c777f3ea8..f99af1a13 100644 --- a/lib/dojo/OpenAjax.js +++ b/lib/dojo/OpenAjax.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,18 +9,18 @@ * OpenAjax.js * * Reference implementation of the OpenAjax Hub, as specified by OpenAjax Alliance. - * Specification is under development at: + * Specification is under development at: * * http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification * * Copyright 2006-2007 OpenAjax Alliance * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless - * required by applicable law or agreed to in writing, software distributed - * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless + * required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * ******************************************************************************/ @@ -51,7 +51,7 @@ if(!window["OpenAjax"]){ prefix: prefix, namespaceURI: nsURL, version: version, - extraData: extra + extraData: extra }; this.publish(ooh+"registerLibrary", libs[prefix]); } @@ -82,7 +82,7 @@ if(!window["OpenAjax"]){ this._publish(this._subscriptions, path, 0, name, message); this._pubDepth--; if((this._cleanup.length > 0) && (this._pubDepth == 0)){ - for(var i = 0; i < this._cleanup.length; i++){ + for(var i = 0; i < this._cleanup.length; i++){ this.unsubscribe(this._cleanup[i].hdl); } delete(this._cleanup); @@ -100,12 +100,12 @@ if(!window["OpenAjax"]){ var token = path[index]; if(index == path.length){ tree.s.push(sub); - }else{ + }else{ if(typeof tree.c == "undefined"){ tree.c = {}; } if(typeof tree.c[token] == "undefined"){ - tree.c[token] = { c: {}, s: [] }; + tree.c[token] = { c: {}, s: [] }; this._subscribe(tree.c[token], path, index + 1, sub); }else{ this._subscribe( tree.c[token], path, index + 1, sub); @@ -120,7 +120,7 @@ if(!window["OpenAjax"]){ node = tree; }else{ this._publish(tree.c[path[index]], path, index + 1, name, msg); - this._publish(tree.c["*"], path, index + 1, name, msg); + this._publish(tree.c["*"], path, index + 1, name, msg); node = tree.c["**"]; } if(typeof node != "undefined"){ @@ -140,7 +140,7 @@ if(!window["OpenAjax"]){ // get a function object fcb = sc[fcb]; } - if((!fcb) || + if((!fcb) || (fcb.call(sc, name, msg, d))) { cb.call(sc, name, msg, d); } @@ -156,24 +156,24 @@ if(!window["OpenAjax"]){ var childNode = tree.c[path[index]]; this._unsubscribe(childNode, path, index + 1, sid); if(childNode.s.length == 0) { - for(var x in childNode.c) - return; - delete tree.c[path[index]]; + for(var x in childNode.c) + return; + delete tree.c[path[index]]; } return; } else { var callbacks = tree.s; var max = callbacks.length; - for(var i = 0; i < max; i++) + for(var i = 0; i < max; i++) if(sid == callbacks[i].sid) { if(this._pubDepth > 0) { - callbacks[i].cb = null; - this._cleanup.push(callbacks[i]); + callbacks[i].cb = null; + this._cleanup.push(callbacks[i]); } else callbacks.splice(i, 1); - return; + return; } } } diff --git a/lib/dojo/Stateful.js b/lib/dojo/Stateful.js index e4f406309..147001962 100644 --- a/lib/dojo/Stateful.js +++ b/lib/dojo/Stateful.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.Stateful"]){ //_hasResource checks added by build. D dojo._hasResource["dojo.Stateful"] = true; dojo.provide("dojo.Stateful"); + dojo.declare("dojo.Stateful", null, { // summary: // Base class for objects that provide named properties with optional getter/setter @@ -33,7 +34,7 @@ dojo.declare("dojo.Stateful", null, { // description: // Get a named property on a Stateful object. The property may // potentially be retrieved via a getter method in subclasses. In the base class - // this just retrieves the object's property. + // this just retrieves the object's property. // For example: // | stateful = new dojo.Stateful({foo: 3}); // | stateful.get("foo") // returns 3 @@ -45,11 +46,11 @@ dojo.declare("dojo.Stateful", null, { // summary: // Set a property on a Stateful instance // name: - // The property to set. + // The property to set. // value: // The value to set in the property. // description: - // Sets named properties on a stateful object and notifies any watchers of + // Sets named properties on a stateful object and notifies any watchers of // the property. A programmatic setter may be defined in subclasses. // For example: // | stateful = new dojo.Stateful(); @@ -66,7 +67,7 @@ dojo.declare("dojo.Stateful", null, { // This is equivalent to calling set(foo, "Howdy") and set(bar, 3) if(typeof name === "object"){ for(var x in name){ - this.set(x, name[x]); + this.set(x, name[x]); } return this; } @@ -81,17 +82,17 @@ dojo.declare("dojo.Stateful", null, { // summary: // Watches a property for changes // name: - // Indicates the property to watch. This is optional (the callback may be the + // Indicates the property to watch. This is optional (the callback may be the // only parameter), and if omitted, all the properties will be watched // returns: - // An object handle for the watch. The unwatch method of this object + // An object handle for the watch. The unwatch method of this object // can be used to discontinue watching this property: // | var watchHandle = obj.watch("foo", callback); // | watchHandle.unwatch(); // callback won't be called now // callback: // The function to execute when the property changes. This will be called after // the property has been changed. The callback will be called with the |this| - // set to the instance, the first argument as the name of the property, the + // set to the instance, the first argument as the name of the property, the // second argument as the old value and the third argument as the new value. var callbacks = this._watchCallbacks; @@ -99,15 +100,18 @@ dojo.declare("dojo.Stateful", null, { var self = this; callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){ var notify = function(propertyCallbacks){ - for(var i = 0, l = propertyCallbacks && propertyCallbacks.length; i < l; i++){ - try{ - propertyCallbacks[i].call(self, name, oldValue, value); - }catch(e){ - console.error(e); + if(propertyCallbacks){ + propertyCallbacks = propertyCallbacks.slice(); + for(var i = 0, l = propertyCallbacks.length; i < l; i++){ + try{ + propertyCallbacks[i].call(self, name, oldValue, value); + }catch(e){ + console.error(e); + } } } }; - notify(callbacks[name]); + notify(callbacks['_' + name]); if(!ignoreCatchall){ notify(callbacks["*"]); // the catch-all } @@ -116,6 +120,9 @@ dojo.declare("dojo.Stateful", null, { if(!callback && typeof name === "function"){ callback = name; name = "*"; + }else{ + // prepend with dash to prevent name conflicts with function (like "name" property) + name = '_' + name; } var propertyCallbacks = callbacks[name]; if(typeof propertyCallbacks !== "object"){ diff --git a/lib/dojo/_base.js b/lib/dojo/_base.js index c77266788..78fc6064a 100644 --- a/lib/dojo/_base.js +++ b/lib/dojo/_base.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -15,6 +15,8 @@ dojo.require("dojo._base.connect"); dojo.require("dojo._base.Deferred"); dojo.require("dojo._base.json"); dojo.require("dojo._base.Color"); -dojo.requireIf(dojo.isBrowser, "dojo._base.browser"); +dojo.require("dojo._base.browser"); + + } diff --git a/lib/dojo/_base/Color.js b/lib/dojo/_base/Color.js index 5f5c5af9b..4707fa582 100644 --- a/lib/dojo/_base/Color.js +++ b/lib/dojo/_base/Color.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -11,6 +11,7 @@ dojo.provide("dojo._base.Color"); dojo.require("dojo._base.array"); dojo.require("dojo._base.lang"); + (function(){ var d = dojo; @@ -199,7 +200,7 @@ dojo.require("dojo._base.lang"); // Builds a `dojo.Color` from a 3 or 4 element array, mapping each // element in sequence to the rgb(a) values of the color. // example: - // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha // returns: // A dojo.Color object. If obj is passed, it will be the return value. var t = obj || new d.Color(); diff --git a/lib/dojo/_base/Deferred.js b/lib/dojo/_base/Deferred.js index 3193024ab..c5992c966 100644 --- a/lib/dojo/_base/Deferred.js +++ b/lib/dojo/_base/Deferred.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,42 +10,43 @@ dojo._hasResource["dojo._base.Deferred"] = true; dojo.provide("dojo._base.Deferred"); dojo.require("dojo._base.lang"); + (function(){ - var mutator = function(){}; + var mutator = function(){}; var freeze = Object.freeze || function(){}; // A deferred provides an API for creating and resolving a promise. dojo.Deferred = function(/*Function?*/canceller){ // summary: // Deferreds provide a generic means for encapsulating an asynchronous - // operation and notifying users of the completion and result of the operation. + // operation and notifying users of the completion and result of the operation. // description: // The dojo.Deferred API is based on the concept of promises that provide a // generic interface into the eventual completion of an asynchronous action. - // The motivation for promises fundamentally is about creating a - // separation of concerns that allows one to achieve the same type of - // call patterns and logical data flow in asynchronous code as can be - // achieved in synchronous code. Promises allows one - // to be able to call a function purely with arguments needed for - // execution, without conflating the call with concerns of whether it is - // sync or async. One shouldn't need to alter a call's arguments if the - // implementation switches from sync to async (or vice versa). By having - // async functions return promises, the concerns of making the call are - // separated from the concerns of asynchronous interaction (which are + // The motivation for promises fundamentally is about creating a + // separation of concerns that allows one to achieve the same type of + // call patterns and logical data flow in asynchronous code as can be + // achieved in synchronous code. Promises allows one + // to be able to call a function purely with arguments needed for + // execution, without conflating the call with concerns of whether it is + // sync or async. One shouldn't need to alter a call's arguments if the + // implementation switches from sync to async (or vice versa). By having + // async functions return promises, the concerns of making the call are + // separated from the concerns of asynchronous interaction (which are // handled by the promise). - // - // The dojo.Deferred is a type of promise that provides methods for fulfilling the - // promise with a successful result or an error. The most important method for - // working with Dojo's promises is the then() method, which follows the + // + // The dojo.Deferred is a type of promise that provides methods for fulfilling the + // promise with a successful result or an error. The most important method for + // working with Dojo's promises is the then() method, which follows the // CommonJS proposed promise API. An example of using a Dojo promise: - // + // // | var resultingPromise = someAsyncOperation.then(function(result){ // | ... handle result ... // | }, // | function(error){ // | ... handle error ... // | }); - // - // The .then() call returns a new promise that represents the result of the + // + // The .then() call returns a new promise that represents the result of the // execution of the callback. The callbacks will never affect the original promises value. // // The dojo.Deferred instances also provide the following functions for backwards compatibility: @@ -55,7 +56,7 @@ dojo.require("dojo._base.lang"); // * callback(result) // * errback(result) // - // Callbacks are allowed to return promisesthemselves, so + // Callbacks are allowed to return promises themselves, so // you can build complicated sequences of events with ease. // // The creator of the Deferred may specify a canceller. The canceller @@ -115,7 +116,7 @@ dojo.require("dojo._base.lang"); // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -129,7 +130,7 @@ dojo.require("dojo._base.lang"); // | // again, so we could chain adding callbacks or save the // | // deferred for later should we need to be notified again. // example: - // In this example, renderLotsOfData is syncrhonous and so both + // In this example, renderLotsOfData is synchronous and so both // versions are pretty artificial. Putting the data display on a // timeout helps show why Deferreds rock: // @@ -142,7 +143,7 @@ dojo.require("dojo._base.lang"); // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -157,11 +158,11 @@ dojo.require("dojo._base.lang"); // Note that the caller doesn't have to change his code at all to // handle the asynchronous case. var result, finished, isError, head, nextListener; - var promise = this.promise = {}; + var promise = (this.promise = {}); function complete(value){ if(finished){ - throw new Error("This deferred has already been resolved"); + throw new Error("This deferred has already been resolved"); } result = value; finished = true; @@ -172,7 +173,7 @@ dojo.require("dojo._base.lang"); while(!mutated && nextListener){ var listener = nextListener; nextListener = nextListener.next; - if(mutated = (listener.progress == mutator)){ // assignment and check + if((mutated = (listener.progress == mutator))){ // assignment and check finished = false; } var func = (isError ? listener.error : listener.resolved); @@ -184,6 +185,9 @@ dojo.require("dojo._base.lang"); continue; } var unchanged = mutated && newResult === undefined; + if(mutated && !unchanged){ + isError = newResult instanceof Error; + } listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult); } catch (e) { @@ -196,7 +200,7 @@ dojo.require("dojo._base.lang"); listener.deferred.resolve(result); } } - } + } } // calling resolve will resolve the promise this.resolve = this.callback = function(value){ @@ -211,7 +215,7 @@ dojo.require("dojo._base.lang"); // calling error will indicate that the promise failed this.reject = this.errback = function(error){ // summary: - // Fulfills the Deferred instance as an error with the provided error + // Fulfills the Deferred instance as an error with the provided error isError = true; this.fired = 1; complete(error); @@ -228,7 +232,7 @@ dojo.require("dojo._base.lang"); while(listener){ var progress = listener.progress; progress && progress(update); - listener = listener.next; + listener = listener.next; } }; this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){ @@ -237,35 +241,35 @@ dojo.require("dojo._base.lang"); }; // provide the implementation of the promise this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){ - // summary - // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for - // completion of a promise. The fulfilledHandler is called when the promise - // is fulfilled. The errorHandler is called when a promise fails. The - // progressHandler is called for progress events. All arguments are optional - // and non-function values are ignored. The progressHandler is not only an - // optional argument, but progress events are purely optional. Promise + // summary: + // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for + // completion of a promise. The fulfilledHandler is called when the promise + // is fulfilled. The errorHandler is called when a promise fails. The + // progressHandler is called for progress events. All arguments are optional + // and non-function values are ignored. The progressHandler is not only an + // optional argument, but progress events are purely optional. Promise // providers are not required to ever create progress events. - // - // This function will return a new promise that is fulfilled when the given - // fulfilledHandler or errorHandler callback is finished. This allows promise - // operations to be chained together. The value returned from the callback - // handler is the fulfillment value for the returned promise. If the callback + // + // This function will return a new promise that is fulfilled when the given + // fulfilledHandler or errorHandler callback is finished. This allows promise + // operations to be chained together. The value returned from the callback + // handler is the fulfillment value for the returned promise. If the callback // throws an error, the returned promise will be moved to failed state. - // + // // example: // An example of using a CommonJS compliant promise: // | asyncComputeTheAnswerToEverything(). // | then(addTwo). // | then(printResult, onError); - // | >44 - // + // | >44 + // var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel); var listener = { - resolved: resolvedCallback, - error: errorCallback, - progress: progressCallback, + resolved: resolvedCallback, + error: errorCallback, + progress: progressCallback, deferred: returnDeferred - }; + }; if(nextListener){ head = head.next = listener; } @@ -291,7 +295,7 @@ dojo.require("dojo._base.lang"); deferred.reject(error); } } - } + }; freeze(promise); }; dojo.extend(dojo.Deferred, { @@ -312,7 +316,7 @@ dojo.require("dojo._base.lang"); })(); dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){ // summary: - // This provides normalization between normal synchronous values and + // This provides normalization between normal synchronous values and // asynchronous promises, so you can interact with them in a common way // example: // | function printFirstAndList(items){ diff --git a/lib/dojo/_base/NodeList.js b/lib/dojo/_base/NodeList.js index 12b631a4b..8cdc1c0f7 100644 --- a/lib/dojo/_base/NodeList.js +++ b/lib/dojo/_base/NodeList.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,6 +10,9 @@ dojo._hasResource["dojo._base.NodeList"] = true; dojo.provide("dojo._base.NodeList"); dojo.require("dojo._base.lang"); dojo.require("dojo._base.array"); +dojo.require("dojo._base.connect"); +dojo.require("dojo._base.html"); + (function(){ @@ -248,7 +251,7 @@ dojo.require("dojo._base.array"); }); // add forEach actions - d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty", "removeAttr"], function(name){ + d.forEach(["connect", "addClass", "removeClass", "replaceClass", "toggleClass", "empty", "removeAttr"], function(name){ nlp[name] = adaptAsForEach(d[name]); }); @@ -306,7 +309,7 @@ dojo.require("dojo._base.array"); _cloneNode: function(/*DOMNode*/ node){ // summary: - // private utiltity to clone a node. Not very interesting in the vanilla + // private utility to clone a node. Not very interesting in the vanilla // dojo.NodeList case, but delegates could do interesting things like // clone event handlers if that is derivable from the node. return node.cloneNode(true); @@ -400,7 +403,7 @@ dojo.require("dojo._base.array"); if(this._parent){ return this._parent; }else{ - //Just return empy list. + //Just return empty list. return new this._NodeListCtor(); } }, @@ -468,12 +471,12 @@ dojo.require("dojo._base.array"); indexOf: function(value, fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: Object: // The value to search for. // fromIndex: Integer?: - // The loction to start searching from. Optional. Defaults to 0. + // The location to start searching from. Optional. Defaults to 0. // description: // For more details on the behavior of indexOf, see Mozilla's // (indexOf @@ -494,7 +497,7 @@ dojo.require("dojo._base.array"); // value: Object // The value to search for. // fromIndex: Integer? - // The loction to start searching from. Optional. Defaults to 0. + // The location to start searching from. Optional. Defaults to 0. // returns: // Positive Integer or 0 for a match, -1 of not found. return d.lastIndexOf(this, value, fromIndex); // Integer @@ -572,12 +575,12 @@ dojo.require("dojo._base.array"); forEach: function(callback, thisObj){ // summary: - // see `dojo.forEach()`. The primary difference is that the acted-on + // see `dojo.forEach()`. The primary difference is that the acted-on // array is implicitly this NodeList. If you want the option to break out // of the forEach loop, use every() or some() instead. d.forEach(this, callback, thisObj); // non-standard return to allow easier chaining - return this; // dojo.NodeList + return this; // dojo.NodeList }, /*===== @@ -594,7 +597,7 @@ dojo.require("dojo._base.array"); // summary: // Returns border-box objects (x/y/w/h) of all elements in a node list // as an Array (*not* a NodeList). Acts like `dojo.position`, though - // assumes the node passed is each node in this list. + // assumes the node passed is each node in this list. return d.map(this, d.position); // Array }, @@ -617,7 +620,7 @@ dojo.require("dojo._base.array"); // Disable a group of buttons: // | dojo.query("button.group").attr("disabled", true); // example: - // innerHTML can be assigned or retreived as well: + // innerHTML can be assigned or retrieved as well: // | // get the innerHTML (as an array) for each list item // | var ih = dojo.query("li.replaceable").attr("innerHTML"); return; // dojo.NodeList @@ -682,7 +685,7 @@ dojo.require("dojo._base.array"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: String? // optional. A string naming the function in objOrFunc to bind to the @@ -728,7 +731,7 @@ dojo.require("dojo._base.array"); // by queryOrNode. Returns the original NodeList. See: `dojo.place` // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -743,18 +746,15 @@ dojo.require("dojo._base.array"); return this.forEach(function(node){ d.place(node, item, position); }); // dojo.NodeList }, - orphan: function(/*String?*/ simpleFilter){ + orphan: function(/*String?*/ filter){ // summary: - // removes elements in this list that match the simple filter + // removes elements in this list that match the filter // from their parents and returns them as a new NodeList. - // simpleFilter: - // single-expression CSS rule. For example, ".thinger" or - // "#someId[attrName='value']" but not "div > span". In short, - // anything which does not invoke a descent to evaluate but - // can instead be used to test a single node is acceptable. + // filter: + // CSS selector like ".foo" or "div > span" // returns: - // `dojo.NodeList` containing the orpahned elements - return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList + // `dojo.NodeList` containing the orphaned elements + return (filter ? d._filterQueryResult(this, filter) : this).forEach(orphan); // dojo.NodeList }, adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){ @@ -781,7 +781,7 @@ dojo.require("dojo._base.array"); // FIXME: do we need this? query: function(/*String*/ queryStr){ // summary: - // Returns a new list whose memebers match the passed query, + // Returns a new list whose members match the passed query, // assuming elements of the current NodeList as the root for // each search. // example: @@ -792,9 +792,9 @@ dojo.require("dojo._base.array"); // |

    // | // |
    - // |

    great commedians may not be funny in person

    + // |

    great comedians may not be funny in person

    // |
    - // If we are presented with the following defintion for a NodeList: + // If we are presented with the following definition for a NodeList: // | var l = new dojo.NodeList(dojo.byId("foo"), dojo.byId("bar")); // it's possible to find all span elements under paragraphs // contained by these elements with this sub-query: @@ -809,18 +809,14 @@ dojo.require("dojo._base.array"); return this._wrap(apc.apply([], ret), this); // dojo.NodeList }, - filter: function(/*String|Function*/ simpleFilter){ + filter: function(/*String|Function*/ filter){ // summary: // "masks" the built-in javascript filter() method (supported // in Dojo via `dojo.filter`) to support passing a simple // string filter in addition to supporting filtering function // objects. - // simpleFilter: - // If a string, a single-expression CSS rule. For example, - // ".thinger" or "#someId[attrName='value']" but not "div > - // span". In short, anything which does not invoke a descent - // to evaluate but can instead be used to test a single node - // is acceptable. + // filter: + // If a string, a CSS rule like ".thinger" or "div > span". // example: // "regular" JS filter syntax as exposed in dojo.filter: // | dojo.query("*").filter(function(item){ @@ -832,7 +828,7 @@ dojo.require("dojo._base.array"); // | dojo.query("*").filter("p").styles("backgroundColor", "yellow"); var a = arguments, items = this, start = 0; - if(typeof simpleFilter == "string"){ // inline'd type check + if(typeof filter == "string"){ // inline'd type check items = d._filterQueryResult(this, a[0]); if(a.length == 1){ // if we only got a string query, pass back the filtered results @@ -880,10 +876,10 @@ dojo.require("dojo._base.array"); // | "before" // | "after" // | "replace" (replaces nodes in this NodeList with new content) - // | "only" (removes other children of the nodes so new content is hte only child) + // | "only" (removes other children of the nodes so new content is the only child) // or an offset in the childNodes property // example: - // appends content to the end if the position is ommitted + // appends content to the end if the position is omitted // | dojo.query("h3 > p").addContent("hey there!"); // example: // add something to the front of each element that has a @@ -914,7 +910,7 @@ dojo.require("dojo._base.array"); // text: "Send" // }); content = this._normalize(content, this[0]); - for(var i = 0, node; node = this[i]; i++){ + for(var i = 0, node; (node = this[i]); i++){ this._place(content, node, position, i > 0); } return this; //dojo.NodeList @@ -943,11 +939,11 @@ dojo.require("dojo._base.array"); // index: Integer... // One or more 0-based indices of items in the current // NodeList. A negative index will start at the end of the - // list and go backwards. + // list and go backwards. // // example: // Shorten the list to the first, second, and third elements - // | dojo.query("a").at(0, 1, 2).forEach(fn); + // | dojo.query("a").at(0, 1, 2).forEach(fn); // // example: // Retrieve the first and last elements of a unordered list: @@ -957,13 +953,13 @@ dojo.require("dojo._base.array"); // Do something for the first element only, but end() out back to // the original list and continue chaining: // | dojo.query("a").at(0).onclick(fn).end().forEach(function(n){ - // | console.log(n); // all anchors on the page. - // | }) + // | console.log(n); // all anchors on the page. + // | }) // // returns: // dojo.NodeList var t = new this._NodeListCtor(); - d.forEach(arguments, function(i){ + d.forEach(arguments, function(i){ if(i < 0){ i = this.length + i } if(this[i]){ t.push(this[i]); } }, this); @@ -973,7 +969,8 @@ dojo.require("dojo._base.array"); }); nl.events = [ - // summary: list of all DOM events used in NodeList + // summary: + // list of all DOM events used in NodeList "blur", "focus", "change", "click", "error", "keydown", "keypress", "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup", "submit" @@ -986,7 +983,7 @@ dojo.require("dojo._base.array"); var _oe = "on" + evt; nlp[_oe] = function(a, b){ return this.connect(_oe, a, b); - } + }; // FIXME: should these events trigger publishes? /* return (a ? this.connect(_oe, a, b) : diff --git a/lib/dojo/_base/_loader/bootstrap.js b/lib/dojo/_base/_loader/bootstrap.js index 3ef3012a2..a1f99276a 100644 --- a/lib/dojo/_base/_loader/bootstrap.js +++ b/lib/dojo/_base/_loader/bootstrap.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -76,7 +76,7 @@ djConfig = { // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple // modules may be configured via `djConfig.modulePaths`. modulePaths: {}, - // afterOnLoad: Boolean + // afterOnLoad: Boolean // Indicates Dojo was added to the page after the page load. In this case // Dojo will not wait for the page DOMContentLoad/load events and fire // its dojo.addOnLoad callbacks after making sure all outstanding @@ -103,7 +103,7 @@ djConfig = { // dojoBlankHtmlUrl: String // Used by some modules to configure an empty iframe. Used by dojo.io.iframe and // dojo.back, and dijit popup support in IE where an iframe is needed to make sure native - // controls do not bleed through the popups. Normally this configuration variable + // controls do not bleed through the popups. Normally this configuration variable // does not need to be set, except when using cross-domain/CDN Dojo builds. // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` // to the path on your domain your copy of blank.html. @@ -149,7 +149,7 @@ djConfig = { "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", "trace", "warn", "log" ]; - var i=0, tn; + var i = 0, tn; while((tn=cn[i++])){ if(!console[tn]){ (function(){ @@ -209,9 +209,13 @@ dojo.global = { debugAtAllCosts: false }; - if(typeof djConfig != "undefined"){ - for(var opt in djConfig){ - d.config[opt] = djConfig[opt]; + // FIXME: 2.0, drop djConfig support. Use dojoConfig exclusively for global config. + var cfg = typeof djConfig != "undefined" ? djConfig : + typeof dojoConfig != "undefined" ? dojoConfig : null; + + if(cfg){ + for(var c in cfg){ + d.config[c] = cfg[c]; } } @@ -223,7 +227,7 @@ dojo.global = { =====*/ dojo.locale = d.config.locale; - var rev = "$Rev: 22487 $".match(/\d+/); + var rev = "$Rev: 24595 $".match(/\d+/); /*===== dojo.version = function(){ @@ -247,7 +251,7 @@ dojo.global = { } =====*/ dojo.version = { - major: 1, minor: 5, patch: 0, flag: "", + major: 1, minor: 6, patch: 1, flag: "", revision: rev ? +rev[0] : NaN, toString: function(){ with(d.version){ @@ -323,7 +327,7 @@ dojo.global = { // | constructor: function(properties){ // | // property configuration: // | dojo.mixin(this, properties); - // | + // | // | console.log(this.quip); // | // ... // | }, @@ -344,7 +348,7 @@ dojo.global = { // | name: "Carl Brutanananadilewski" // | } // | ); - // | + // | // | // will print "Carl Brutanananadilewski" // | console.log(flattened.name); // | // will print "true" @@ -419,10 +423,7 @@ dojo.global = { // determine if an object supports a given method // description: // useful for longer api chains where you have to test each object in - // the chain. Useful only for object and method detection. - // Not useful for testing generic properties on an object. - // In particular, dojo.exists("foo.bar") when foo.bar = "" - // will return false. Use ("bar" in foo) to test for those cases. + // the chain. Useful for object and method detection. // name: // Path to an object, in the form "A.B.C". // obj: @@ -441,7 +442,7 @@ dojo.global = { // | // search from a particular scope // | dojo.exists("bar", foo); // true // | dojo.exists("bar.baz", foo); // false - return !!d.getObject(name, false, obj); // Boolean + return d.getObject(name, false, obj) !== undefined; // Boolean } dojo["eval"] = function(/*String*/ scriptFragment){ diff --git a/lib/dojo/_base/_loader/hostenv_browser.js b/lib/dojo/_base/_loader/hostenv_browser.js index 7d92d70e3..b31bd77dc 100644 --- a/lib/dojo/_base/_loader/hostenv_browser.js +++ b/lib/dojo/_base/_loader/hostenv_browser.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -26,9 +26,9 @@ dojo.isIE = { dojo.isSafari = { // example: // | if(dojo.isSafari){ ... } - // example: + // example: // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. // | } }; @@ -71,7 +71,6 @@ dojo = { // True if the client runs on Mac } =====*/ - if(typeof window != 'undefined'){ dojo.isBrowser = true; dojo._name = "browser"; @@ -98,7 +97,7 @@ if(typeof window != 'undefined'){ d.config.baseUrl = src.substring(0, m.index); } // and find out if we need to modify our behavior - var cfg = scripts[i].getAttribute("djConfig"); + var cfg = (scripts[i].getAttribute("djConfig") || scripts[i].getAttribute("data-dojo-config")); if(cfg){ var cfgo = eval("({ "+cfg+" })"); for(var x in cfgo){ @@ -172,7 +171,7 @@ if(typeof window != 'undefined'){ d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; d._xhrObj = function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest object. var http, last_e; if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ @@ -205,10 +204,11 @@ if(typeof window != 'undefined'){ var stat = http.status || 0, lp = location.protocol; return (stat >= 200 && stat < 300) || // Boolean - stat == 304 || // allow any 2XX response code - stat == 1223 || // get it out of the cache + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + // Internet Explorer mangled the status code // Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file - (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:") ); + (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:")); } //See if base tag is in use. @@ -303,7 +303,7 @@ if(typeof window != 'undefined'){ d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ // summary: // registers a function to be triggered when window.onunload - // fires. + // fires. // description: // The first time that addOnWindowUnload is called Dojo // will register a page listener to trigger your unload @@ -334,7 +334,7 @@ if(typeof window != 'undefined'){ // description: // The first time that addOnUnload is called Dojo will // register a page listener to trigger your unload handler - // with. + // with. // // In a browser enviroment, the functions will be triggered // during the window.onbeforeunload event. Be careful of doing @@ -347,7 +347,7 @@ if(typeof window != 'undefined'){ // // Further note that calling dojo.addOnUnload will prevent // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. + // loading via back button instantaneous. // example: // | dojo.addOnUnload(functionPointer) // | dojo.addOnUnload(object, "functionName") @@ -384,7 +384,7 @@ if(typeof window != 'undefined'){ } } - if(!dojo.config.afterOnLoad){ + if(!dojo.config.afterOnLoad){ if(document.addEventListener){ //Standards. Hooray! Assumption here that if standards based, //it knows about DOMContentLoaded. It is OK if it does not, the fall through @@ -401,10 +401,10 @@ if(typeof window != 'undefined'){ if(!dojo.config.skipIeDomLoaded && self === self.top){ dojo._scrollIntervalId = setInterval(function (){ try{ - //When dojo is loaded into an iframe in an IE HTML Application + //When dojo is loaded into an iframe in an IE HTML Application //(HTA), such as in a selenium test, javascript in the iframe //can't see anything outside of it, so self===self.top is true, - //but the iframe is not the top window and doScroll will be + //but the iframe is not the top window and doScroll will be //available before document.body is set. Test document.body //before trying the doScroll trick if(document.body){ @@ -467,8 +467,11 @@ if(dojo.config.isDebug){ } if(dojo.config.debugAtAllCosts){ - dojo.config.useXDomain = true; - dojo.require("dojo._base._loader.loader_xd"); + // this breaks the new AMD based module loader. The XDomain won't be necessary + // anyway if you switch to the asynchronous loader + //dojo.config.useXDomain = true; + //dojo.require("dojo._base._loader.loader_xd"); dojo.require("dojo._base._loader.loader_debug"); dojo.require("dojo.i18n"); } + diff --git a/lib/dojo/_base/_loader/hostenv_ff_ext.js b/lib/dojo/_base/_loader/hostenv_ff_ext.js index 94a0a8046..ca47a4c1c 100644 --- a/lib/dojo/_base/_loader/hostenv_ff_ext.js +++ b/lib/dojo/_base/_loader/hostenv_ff_ext.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -241,7 +241,7 @@ if(typeof window != 'undefined'){ return oc; }; - // FIXME: + // FIXME: // don't really like the current arguments and order to // _inContext, so don't make it public until it's right! dojo._inContext = function(g, d, f){ @@ -302,7 +302,7 @@ if(typeof window != 'undefined'){ // Dojo's to fire once..but we might care if pages navigate. We'll // probably need an extension-specific API if(!dojo.config.afterOnLoad){ - window.addEventListener("DOMContentLoaded",function(e){ + window.addEventListener("DOMContentLoaded",function(e){ dojo._loadInit(e); // console.log("DOM content loaded", e); }, false); diff --git a/lib/dojo/_base/_loader/hostenv_rhino.js b/lib/dojo/_base/_loader/hostenv_rhino.js index ee9ad8b43..e3aa78524 100644 --- a/lib/dojo/_base/_loader/hostenv_rhino.js +++ b/lib/dojo/_base/_loader/hostenv_rhino.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -58,6 +58,9 @@ dojo._isLocalUrl = function(/*String*/ uri) { // see comments in spidermonkey loadUri dojo._loadUri = function(uri, cb){ + if(dojo._loadedUrls[uri]){ + return true; // Boolean + } try{ var local; try{ @@ -67,29 +70,32 @@ dojo._loadUri = function(uri, cb){ return false; } + dojo._loadedUrls[uri] = true; //FIXME: Use Rhino 1.6 native readFile/readUrl if available? if(cb){ var contents = (local ? readText : readUri)(uri, "UTF-8"); // patch up the input to eval until https://bugzilla.mozilla.org/show_bug.cgi?id=471005 is fixed. if(!eval("'\u200f'").length){ - contents = String(contents).replace(/[\u200E\u200F\u202A-\u202E]/g, function(match){ - return "\\u" + match.charCodeAt(0).toString(16); + contents = String(contents).replace(/[\u200E\u200F\u202A-\u202E]/g, function(match){ + return "\\u" + match.charCodeAt(0).toString(16); }) } - - cb(eval('('+contents+')')); + contents = /^define\(/.test(contents) ? contents : '('+contents+')'; + cb(eval(contents)); }else{ load(uri); } + dojo._loadedUrls.push(uri); return true; }catch(e){ + dojo._loadedUrls[uri] = false; console.debug("rhino load('" + uri + "') failed. Exception: " + e); return false; } } -dojo.exit = function(exitcode){ +dojo.exit = function(exitcode){ quit(exitcode); } @@ -157,7 +163,7 @@ dojo._getText = function(/*URI*/ uri, /*Boolean*/ fail_ok){ dojo.doc = typeof document != "undefined" ? document : null; dojo.body = function(){ - return document.body; + return document.body; } // Supply setTimeout/clearTimeout implementations if they aren't already there diff --git a/lib/dojo/_base/_loader/hostenv_spidermonkey.js b/lib/dojo/_base/_loader/hostenv_spidermonkey.js index 17b21f5f0..a3d2dfc6f 100644 --- a/lib/dojo/_base/_loader/hostenv_spidermonkey.js +++ b/lib/dojo/_base/_loader/hostenv_spidermonkey.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -19,13 +19,13 @@ dojo._name = 'spidermonkey'; /*===== dojo.isSpidermonkey = { - // summary: Detect spidermonkey + // summary: Detect spidermonkey }; =====*/ dojo.isSpidermonkey = true; -dojo.exit = function(exitcode){ - quit(exitcode); +dojo.exit = function(exitcode){ + quit(exitcode); } if(typeof print == "function"){ @@ -37,15 +37,15 @@ if(typeof line2pc == 'undefined'){ } dojo._spidermonkeyCurrentFile = function(depth){ - // + // // This is a hack that determines the current script file by parsing a // generated stack trace (relying on the non-standard "stack" member variable // of the SpiderMonkey Error object). - // + // // If param depth is passed in, it'll return the script file which is that far down // the stack, but that does require that you know how deep your stack is when you are // calling. - // + // var s = ''; try{ throw Error("whatever"); @@ -54,23 +54,23 @@ dojo._spidermonkeyCurrentFile = function(depth){ } // lines are like: bu_getCurrentScriptURI_spidermonkey("ScriptLoader.js")@burst/Runtime.js:101 var matches = s.match(/[^@]*\.js/gi); - if(!matches){ + if(!matches){ throw Error("could not parse stack string: '" + s + "'"); } var fname = (typeof depth != 'undefined' && depth) ? matches[depth + 1] : matches[matches.length - 1]; - if(!fname){ + if(!fname){ throw Error("could not find file name in stack string '" + s + "'"); } //print("SpiderMonkeyRuntime got fname '" + fname + "' from stack string '" + s + "'"); return fname; } -// print(dojo._spidermonkeyCurrentFile(0)); +// print(dojo._spidermonkeyCurrentFile(0)); dojo._loadUri = function(uri){ // spidermonkey load() evaluates the contents into the global scope (which // is what we want). - // TODO: sigh, load() does not return a useful value. + // TODO: sigh, load() does not return a useful value. // Perhaps it is returning the value of the last thing evaluated? var ok = load(uri); // console.log("spidermonkey load(", uri, ") returned ", ok); diff --git a/lib/dojo/_base/_loader/loader.js b/lib/dojo/_base/_loader/loader.js index 9206de888..73df544fa 100644 --- a/lib/dojo/_base/_loader/loader.js +++ b/lib/dojo/_base/_loader/loader.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -11,9 +11,8 @@ dojo._hasResource["dojo.foo"] = true; * loader.js - A bootstrap module. Runs before the hostenv_*.js file. Contains * all of the package loading methods. */ - (function(){ - var d = dojo; + var d = dojo, currentModule; d.mixin(d, { _loadedModules: {}, @@ -45,11 +44,11 @@ dojo._hasResource["dojo.foo"] = true; _loadedUrls: [], - //WARNING: + //WARNING: // This variable is referenced by packages outside of bootstrap: // FloatingPane.js and undo/browser.js _postLoad: false, - + //Egad! Lots of test files push on this directly instead of using dojo.addOnLoad. _loaders: [], _unloaders: [], @@ -68,21 +67,24 @@ dojo._hasResource["dojo.foo"] = true; // not caught by us, so the caller will see it. We return a true // value if and only if the script is found. // - // relpath: + // relpath: // A relative path to a script (no leading '/', and typically ending // in '.js'). - // module: + // module: // A module whose existance to check for after loading a path. Can be // used to determine success or failure of the load. - // cb: + // cb: // a callback function to pass the result of evaluating the script var uri = ((relpath.charAt(0) == '/' || relpath.match(/^\w+:/)) ? "" : d.baseUrl) + relpath; try{ + currentModule = module; return !module ? d._loadUri(uri, cb) : d._loadUriAndCheck(uri, module, cb); // Boolean }catch(e){ console.error(e); return false; // Boolean + }finally{ + currentModule = null; } } @@ -95,7 +97,7 @@ dojo._hasResource["dojo.foo"] = true; // it succeeded. Returns false if the URI reading failed. Throws if // the evaluation throws. // uri: a uri which points at the script to be loaded - // cb: + // cb: // a callback function to process the result of evaluating the script // as an expression, typically used by the resource bundle loader to // load JSON-style resources @@ -109,7 +111,8 @@ dojo._hasResource["dojo.foo"] = true; d._loadedUrls[uri] = true; d._loadedUrls.push(uri); if(cb){ - contents = '('+contents+')'; + //conditional to support script-inject i18n bundle format + contents = /^define\(/.test(contents) ? contents : '('+contents+')'; }else{ //Only do the scoping if no callback. If a callback is specified, //it is most likely the i18n bundle stuff. @@ -121,16 +124,16 @@ dojo._hasResource["dojo.foo"] = true; } // Check to see if we need to call _callLoaded() due to an addOnLoad() that arrived while we were busy downloading if(--d._inFlightCount == 0 && d._postLoad && d._loaders.length){ - // We shouldn't be allowed to get here but Firefox allows an event - // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. + // We shouldn't be allowed to get here but Firefox allows an event + // (mouse, keybd, async xhrGet) to interrupt a synchronous xhrGet. // If the current script block contains multiple require() statements, then after each // require() returns, inFlightCount == 0, but we want to hold the _callLoaded() until // all require()s are done since the out-of-sequence addOnLoad() presumably needs them all. // setTimeout allows the next require() to start (if needed), and then we check this again. - setTimeout(function(){ - // If inFlightCount > 0, then multiple require()s are running sequentially and + setTimeout(function(){ + // If inFlightCount > 0, then multiple require()s are running sequentially and // the next require() started after setTimeout() was executed but before we got here. - if(d._inFlightCount == 0){ + if(d._inFlightCount == 0){ d._callLoaded(); } }, 0); @@ -153,10 +156,10 @@ dojo._hasResource["dojo.foo"] = true; dojo.loaded = function(){ // summary: // signal fired when initial environment and package loading is - // complete. You should use dojo.addOnLoad() instead of doing a + // complete. You should use dojo.addOnLoad() instead of doing a // direct dojo.connect() to this method in order to handle // initialization tasks that require the environment to be - // initialized. In a browser host, declarative widgets will + // initialized. In a browser host, declarative widgets will // be constructed when this function finishes runing. d._loadNotifying = true; d._postLoad = true; @@ -183,8 +186,8 @@ dojo._hasResource["dojo.foo"] = true; dojo.unloaded = function(){ // summary: // signal fired by impending environment destruction. You should use - // dojo.addOnUnload() instead of doing a direct dojo.connect() to this - // method to perform page/application cleanup methods. See + // dojo.addOnUnload() instead of doing a direct dojo.connect() to this + // method to perform page/application cleanup methods. See // dojo.addOnUnload for more info. var mll = d._unloaders; while(mll.length){ @@ -203,13 +206,13 @@ dojo._hasResource["dojo.foo"] = true; dojo.ready = dojo.addOnLoad = function(/*Object*/obj, /*String|Function?*/functionName){ // summary: - // Registers a function to be triggered after the DOM and dojo.require() calls + // Registers a function to be triggered after the DOM and dojo.require() calls // have finished loading. // // description: // Registers a function to be triggered after the DOM has finished - // loading and `dojo.require` modules have loaded. Widgets declared in markup - // have been instantiated if `djConfig.parseOnLoad` is true when this fires. + // loading and `dojo.require` modules have loaded. Widgets declared in markup + // have been instantiated if `djConfig.parseOnLoad` is true when this fires. // // Images and CSS files may or may not have finished downloading when // the specified function is called. (Note that widgets' CSS and HTML @@ -252,7 +255,7 @@ dojo._hasResource["dojo.foo"] = true; dojo._modulesLoaded = function(){ if(d._postLoad){ return; } - if(d._inFlightCount > 0){ + if(d._inFlightCount > 0){ console.warn("files still in flight!"); return; } @@ -284,8 +287,8 @@ dojo._hasResource["dojo.foo"] = true; var syms = modulename.split("."); for(var i = syms.length; i>0; i--){ var parentModule = syms.slice(0, i).join("."); - if(i == 1 && !d._moduleHasPrefix(parentModule)){ - // Support default module directory (sibling of dojo) for top-level modules + if(i == 1 && !d._moduleHasPrefix(parentModule)){ + // Support default module directory (sibling of dojo) for top-level modules syms[0] = "../" + syms[0]; }else{ var parentModulePath = d._getModulePrefix(parentModule); @@ -320,87 +323,95 @@ dojo._hasResource["dojo.foo"] = true; dojo._loadModule = dojo.require = function(/*String*/moduleName, /*Boolean?*/omitModuleCheck){ // summary: // loads a Javascript module from the appropriate URI - // moduleName: + // + // moduleName: String // module name to load, using periods for separators, // e.g. "dojo.date.locale". Module paths are de-referenced by dojo's // internal mapping of locations to names and are disambiguated by // longest prefix. See `dojo.registerModulePath()` for details on // registering new modules. - // omitModuleCheck: + // + // omitModuleCheck: Boolean? // if `true`, omitModuleCheck skips the step of ensuring that the // loaded file actually defines the symbol it is referenced by. // For example if it called as `dojo.require("a.b.c")` and the // file located at `a/b/c.js` does not define an object `a.b.c`, // and exception will be throws whereas no exception is raised // when called as `dojo.require("a.b.c", true)` + // // description: // Modules are loaded via dojo.require by using one of two loaders: the normal loader // and the xdomain loader. The xdomain loader is used when dojo was built with a // custom build that specified loader=xdomain and the module lives on a modulePath // that is a whole URL, with protocol and a domain. The versions of Dojo that are on // the Google and AOL CDNs use the xdomain loader. - // + // // If the module is loaded via the xdomain loader, it is an asynchronous load, since // the module is added via a dynamically created script tag. This - // means that dojo.require() can return before the module has loaded. However, this + // means that dojo.require() can return before the module has loaded. However, this // should only happen in the case where you do dojo.require calls in the top-level // HTML page, or if you purposely avoid the loader checking for dojo.require // dependencies in your module by using a syntax like dojo["require"] to load the module. - // + // // Sometimes it is useful to not have the loader detect the dojo.require calls in the // module so that you can dynamically load the modules as a result of an action on the // page, instead of right at module load time. - // + // // Also, for script blocks in an HTML page, the loader does not pre-process them, so // it does not know to download the modules before the dojo.require calls occur. - // + // // So, in those two cases, when you want on-the-fly module loading or for script blocks // in the HTML page, special care must be taken if the dojo.required code is loaded // asynchronously. To make sure you can execute code that depends on the dojo.required // modules, be sure to add the code that depends on the modules in a dojo.addOnLoad() // callback. dojo.addOnLoad waits for all outstanding modules to finish loading before - // executing. Example: - // - // | - // + // executing. + // // This type of syntax works with both xdomain and normal loaders, so it is good // practice to always use this idiom for on-the-fly code loading and in HTML script // blocks. If at some point you change loaders and where the code is loaded from, // it will all still work. - // + // // More on how dojo.require // `dojo.require("A.B")` first checks to see if symbol A.B is // defined. If it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for `A/B.js` in the script root // directory. - // - // `dojo.require` throws an excpetion if it cannot find a file + // + // `dojo.require` throws an exception if it cannot find a file // to load, or if the symbol `A.B` is not defined after loading. - // + // // It returns the object `A.B`, but note the caveats above about on-the-fly loading and // HTML script blocks when the xdomain loader is loading a module. - // + // // `dojo.require()` does nothing about importing symbols into // the current namespace. It is presumed that the caller will - // take care of that. For example, to import all symbols into a - // local block, you might write: - // + // take care of that. + // + // example: + // To use dojo.require in conjunction with dojo.ready: + // + // | dojo.require("foo"); + // | dojo.require("bar"); + // | dojo.addOnLoad(function(){ + // | //you can now safely do something with foo and bar + // | }); + // + // example: + // For example, to import all symbols into a local block, you might write: + // // | with (dojo.require("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol to a local variable: - // + // // | var B = dojo.require("A.B"); // | ... - // returns: the required namespace object + // + // returns: + // the required namespace object omitModuleCheck = d._global_omit_module_check || omitModuleCheck; //Check if it is already loaded. @@ -411,10 +422,8 @@ dojo._hasResource["dojo.foo"] = true; // convert periods to slashes var relpath = d._getModuleSymbols(moduleName).join("/") + '.js'; - var modArg = !omitModuleCheck ? moduleName : null; var ok = d._loadPath(relpath, modArg); - if(!ok && !omitModuleCheck){ throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'"); } @@ -425,7 +434,7 @@ dojo._hasResource["dojo.foo"] = true; // pass in false so we can give better error module = d._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -446,14 +455,14 @@ dojo._hasResource["dojo.foo"] = true; // the file name. For example, `js/dojo/foo.js` must have // `dojo.provide("dojo.foo");` before any calls to // `dojo.require()` are made. - // + // // For backwards compatibility reasons, in addition to registering // the resource, `dojo.provide()` also ensures that the javascript // object for the module exists. For example, // `dojo.provide("dojox.data.FlickrStore")`, in addition to // registering that `FlickrStore.js` is a resource for the // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like + // javascript object exists, so that calls like // `dojo.data.foo = function(){ ... }` don't fail. // // In the case of a build where multiple javascript source files @@ -462,11 +471,11 @@ dojo._hasResource["dojo.foo"] = true; // note that it includes multiple resources. // // resourceName: String - // A dot-sperated string identifying a resource. + // A dot-sperated string identifying a resource. // // example: // Safely create a `my` object, and make dojo.require("my.CustomModule") work - // | dojo.provide("my.CustomModule"); + // | dojo.provide("my.CustomModule"); //Make sure we have a string. resourceName = resourceName + ""; @@ -523,7 +532,7 @@ dojo._hasResource["dojo.foo"] = true; if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -533,13 +542,13 @@ dojo._hasResource["dojo.foo"] = true; dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // Maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../[module], // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. // example: // If your dojo.js is located at this location in the web root: // | /myapp/js/dojo/dojo/dojo.js @@ -552,7 +561,7 @@ dojo._hasResource["dojo.foo"] = true; // At which point you can then use dojo.require() to load the // modules (assuming they provide() the same things which are // required). The full code might be: - // | // | d._modulePrefixes[module] = { name: module, value: prefix }; - } - + }; + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ // summary: // Declares translated resources and loads them if necessary, in the @@ -573,7 +582,7 @@ dojo._hasResource["dojo.foo"] = true; // description: // Load translated resource bundles provided underneath the "nls" // directory within a package. Translated resources may be located in - // different packages throughout the source tree. + // different packages throughout the source tree. // // Each directory is named for a locale as specified by RFC 3066, // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. @@ -588,21 +597,21 @@ dojo._hasResource["dojo.foo"] = true; // preload the bundles to avoid data redundancy and the multiple // network hits normally required to load these resources. // - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found // - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a // a bundle name is not supported, since "nls" is the name of the folder // that holds bundles. Using "nls" as the bundle name will cause problems // with the custom build. // - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale // - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // @@ -644,11 +653,11 @@ dojo._hasResource["dojo.foo"] = true; ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url|String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -715,7 +724,7 @@ dojo._hasResource["dojo.foo"] = true; } uri = []; - if(relobj.scheme){ + if(relobj.scheme){ uri.push(relobj.scheme, ":"); } if(relobj.authority){ @@ -755,7 +764,7 @@ dojo._hasResource["dojo.foo"] = true; dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a `dojo._Url` object relative to a module. // example: // | var pngPath = dojo.moduleUrl("acme","images/small.png"); @@ -763,10 +772,10 @@ dojo._hasResource["dojo.foo"] = true; // | // create an image and set it's source to pngPath's value: // | var img = document.createElement("img"); // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); + // | img.src = pngPath.toString(); // | // add our image to the document // | dojo.body().appendChild(img); - // example: + // example: // you may de-reference as far as you like down the package // hierarchy. This is sometimes handy to avoid lenghty relative // urls or for building portable sub-packages. In this example, @@ -777,9 +786,9 @@ dojo._hasResource["dojo.foo"] = true; // | // somewhere in a configuration block // | dojo.registerModulePath("acme.widget", "../../acme/widget"); // | dojo.registerModulePath("acme.util", "../../util"); - // | + // | // | // ... - // | + // | // | // code in a module using acme resources // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); @@ -798,7 +807,10 @@ dojo._hasResource["dojo.foo"] = true; } return new d._Url(loc, url); // dojo._Url - } + }; + + + })(); } diff --git a/lib/dojo/_base/_loader/loader_debug.js b/lib/dojo/_base/_loader/loader_debug.js index fa26d8efb..f2043e4de 100644 --- a/lib/dojo/_base/_loader/loader_debug.js +++ b/lib/dojo/_base/_loader/loader_debug.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ diff --git a/lib/dojo/_base/_loader/loader_xd.js b/lib/dojo/_base/_loader/loader_xd.js index c60b86b05..e59f814c0 100644 --- a/lib/dojo/_base/_loader/loader_xd.js +++ b/lib/dojo/_base/_loader/loader_xd.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -170,23 +170,27 @@ dojo._xdIsXDomainPath = function(/*string*/relpath) { var colonIndex = relpath.indexOf(":"); var slashIndex = relpath.indexOf("/"); - if(colonIndex > 0 && colonIndex < slashIndex){ + if(colonIndex > 0 && colonIndex < slashIndex || relpath.indexOf("//") === 0){ return true; }else{ //Is the base script URI-based URL a cross domain URL? //If so, then the relpath will be evaluated relative to //baseUrl, and therefore qualify as xdomain. //Only treat it as xdomain if the page does not have a - //host (file:// url) or if the baseUrl does not match the - //current window's domain. + //host (file:// url), if the baseUrl does not match the + //current window's domain, or if the baseUrl starts with //. + //If baseUrl starts with // then it probably means that xdomain + //is wanted since it is such a specific path request. This is not completely robust, + //but something more robust would require normalizing the protocol on baseUrl and on the location + //to see if they differ. However, that requires more code, and // as a start path is unusual. var url = dojo.baseUrl; colonIndex = url.indexOf(":"); slashIndex = url.indexOf("/"); - if(colonIndex > 0 && colonIndex < slashIndex && (!location.host || url.indexOf("http://" + location.host) != 0)){ + if(url.indexOf("//") === 0 || (colonIndex > 0 && colonIndex < slashIndex && (!location.host || url.indexOf("http://" + location.host) != 0))){ return true; } } - return false; + return false; } dojo._loadPath = function(/*String*/relpath, /*String?*/module, /*Function?*/cb){ @@ -218,8 +222,8 @@ dojo._loadUri = function(/*String*/uri, /*Function?*/cb, /*boolean*/currentIsXDo } //Add the module (resource) to the list of modules. - //Only do this work if we have a modlue name. Otherwise, - //it is a non-xd i18n bundle, which can load immediately and does not + //Only do this work if we have a modlue name. Otherwise, + //it is a non-xd i18n bundle, which can load immediately and does not //need to be tracked. Also, don't track dojo.i18n, since it is a prerequisite //and will be loaded correctly if we load it right away: it has no dependencies. if(dojo._isXDomain && module && module != "dojo.i18n"){ @@ -386,7 +390,7 @@ dojo._xdResourceLoaded = function(/*Object*/res){ } //Now update the inflight status for any provided resources in this loaded resource. - //Do this at the very end (in a *separate* for loop) to avoid shutting down the + //Do this at the very end (in a *separate* for loop) to avoid shutting down the //inflight timer check too soon. for(i = 0; i < provideList.length; i++){ dojo._xdInFlight[provideList[i]] = false; @@ -490,7 +494,7 @@ dojo.xdRequireLocalization = function(/*String*/moduleName, /*String*/bundleName // Replace dojo.requireLocalization with a wrapper dojo._xdRealRequireLocalization = dojo.requireLocalization; dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String*/availableFlatLocales){ - // summary: loads a bundle intelligently based on whether the module is + // summary: loads a bundle intelligently based on whether the module is // local or xd. Overrides the local-case implementation. var modulePath = dojo.moduleUrl(moduleName).toString(); @@ -525,7 +529,7 @@ dojo._xdUnpackDependency = function(/*Array*/dep){ case "platformRequire": var modMap = dep[1]; var common = modMap["common"]||[]; - newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]); + newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_]||[]) : common.concat(modMap["default"]||[]); //Flatten the array of arrays into a one-level deep array. //Each result could be an array of 3 elements (the 3 arguments to dojo.require). //We only need the first one. @@ -562,7 +566,7 @@ dojo._xdUnpackDependency = function(/*Array*/dep){ } dojo._xdWalkReqs = function(){ - //summary: Internal xd loader function. + //summary: Internal xd loader function. //Walks the requires and evaluates module resource contents in //the right order. var reqChain = null; @@ -578,7 +582,7 @@ dojo._xdWalkReqs = function(){ } dojo._xdEvalReqs = function(/*Array*/reqChain){ - //summary: Internal xd loader function. + //summary: Internal xd loader function. //Does a depth first, breadth second search and eval of required modules. while(reqChain.length > 0){ var req = reqChain[reqChain.length - 1]; @@ -673,7 +677,7 @@ dojo._xdWatchInFlight = function(){ dojo._xdDebugQueue.push({resourceName: content.resourceName, resourcePath: content.resourcePath}); }else{ //Evaluate the resource to bring it into being. - //Pass in scope args to allow multiple versions of modules in a page. + //Pass in scope args to allow multiple versions of modules in a page. content.apply(dojo.global, dojo._scopeArgs); } } @@ -685,7 +689,7 @@ dojo._xdWatchInFlight = function(){ for(i = 0; i < dojo._xdContents.length; i++){ var current = dojo._xdContents[i]; if(current.content && !current.isDefined){ - //Pass in scope args to allow multiple versions of modules in a page. + //Pass in scope args to allow multiple versions of modules in a page. current.content.apply(dojo.global, dojo._scopeArgs); } } @@ -712,10 +716,10 @@ dojo._xdNotifyLoaded = function(){ } } - dojo._inFlightCount = 0; + dojo._inFlightCount = 0; - //Only trigger call loaded if dj_load_init has run. - if(dojo._initFired && !dojo._loadNotifying){ + //Only trigger call loaded if dj_load_init has run. + if(dojo._initFired && !dojo._loadNotifying){ dojo._callLoaded(); } } diff --git a/lib/dojo/_base/array.js b/lib/dojo/_base/array.js index 26fa1900d..57cea4229 100644 --- a/lib/dojo/_base/array.js +++ b/lib/dojo/_base/array.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -7,13 +7,14 @@ if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.array"] = true; -dojo.require("dojo._base.lang"); dojo.provide("dojo._base.array"); +dojo.require("dojo._base.lang"); + (function(){ var _getParts = function(arr, obj, cb){ - return [ - (typeof arr == "string") ? arr.split("") : arr, + return [ + (typeof arr == "string") ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb @@ -32,7 +33,7 @@ dojo.provide("dojo._base.array"); }; dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -41,7 +42,7 @@ dojo.provide("dojo._base.array"); // passed array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's indexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf @@ -66,7 +67,7 @@ dojo.provide("dojo._base.array"); // array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's lastIndexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf @@ -85,7 +86,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. // For more details, see: @@ -108,21 +109,21 @@ dojo.provide("dojo._base.array"); // | ); // example: // | // use a scoped object member as the callback - // | + // | // | var obj = { - // | prefix: "logged via obj.callback:", + // | prefix: "logged via obj.callback:", // | callback: function(item){ // | console.log(this.prefix, item); // | } // | }; - // | + // | // | // specifying the scope function executes the callback in that scope // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | obj.callback, // | obj // | ); - // | + // | // | // alternately, we can accomplish the same thing with dojo.hitch() // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], @@ -135,7 +136,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; - for(var i=0,l=arr.length; i1; }); // example: - // | // returns true + // | // returns true // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); return everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -178,7 +179,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. // For more details, see: @@ -205,7 +206,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. // For more details, see: @@ -236,9 +237,9 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. + // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. // For more details, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter // example: diff --git a/lib/dojo/_base/browser.js b/lib/dojo/_base/browser.js index 496fe46b3..209330f0d 100644 --- a/lib/dojo/_base/browser.js +++ b/lib/dojo/_base/browser.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,7 +8,6 @@ if(!dojo._hasResource["dojo._base.browser"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.browser"] = true; dojo.provide("dojo._base.browser"); - dojo.require("dojo._base.window"); dojo.require("dojo._base.connect"); dojo.require("dojo._base.event"); @@ -18,12 +17,12 @@ dojo.require("dojo._base.query"); dojo.require("dojo._base.xhr"); dojo.require("dojo._base.fx"); -//Need this to be the last code segment in base, so do not place any -//dojo.requireIf calls in this file. Otherwise, due to how the build system -//puts all requireIf dependencies after the current file, the require calls -//could be called before all of base is defined. -dojo.forEach(dojo.config.require, function(i){ - dojo["require"](i); -}); + //Need this to be the last code segment in base, so do not place any + //dojo/requireIf calls in this file/ Otherwise, due to how the build system + //puts all requireIf dependencies after the current file, the require calls + //could be called before all of base is defined/ + dojo.forEach(dojo.config.require, function(i){ + dojo["require"](i); + }); } diff --git a/lib/dojo/_base/connect.js b/lib/dojo/_base/connect.js index f37af65b2..7e8006221 100644 --- a/lib/dojo/_base/connect.js +++ b/lib/dojo/_base/connect.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,27 +10,28 @@ dojo._hasResource["dojo._base.connect"] = true; dojo.provide("dojo._base.connect"); dojo.require("dojo._base.lang"); + // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA // low-level delegation machinery dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ - var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target; + var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target, // return value comes from original target function - var r = t && t.apply(this, arguments); + r = t && t.apply(this, arguments), // make local copy of listener array so it is immutable during processing - var i, lls; - lls = [].concat(ls); - + i, lls = [].concat(ls) + ; + // invoke listeners after target function for(i in lls){ if(!(i in ap)){ @@ -44,12 +45,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -59,15 +60,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -89,9 +90,9 @@ dojo._listener = { // and dontFix argument here to help the autodocs. Actual DOM aware code is in // event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean?*/ dontFix){ // summary: @@ -126,37 +127,37 @@ dojo.connect = function(/*Object|null*/ obj, // arguments may simply be omitted such that fewer than 4 arguments // may be required to set up a connection See the examples for details. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with `dojo.disconnect`. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to `dojo.global` if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property `obj[event]`. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation + // If obj is a DOM node, set dontFix to true to prevent delegation // of this connection to the DOM event manager. // // example: @@ -206,9 +207,9 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle -} +}; dojo.disconnect = function(/*Handle*/ handle){ // summary: @@ -222,11 +223,11 @@ dojo.disconnect = function(/*Handle*/ handle){ // let's not keep this reference delete handle[0]; } -} +}; dojo._disconnect = function(obj, event, handle, listener){ listener.remove(obj, event, handle); -} +}; // topic publish/subscribe @@ -244,15 +245,15 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ -} +}; dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -262,7 +263,7 @@ dojo.unsubscribe = function(/*Handle*/ handle){ if(handle){ dojo._listener.remove(dojo._topics, handle[0], handle[1]); } -} +}; dojo.publish = function(/*String*/ topic, /*Array*/ args){ // summary: @@ -270,11 +271,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -283,10 +284,10 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ if(f){ f.apply(this, args||[]); } -} +}; -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that every time obj.event() is called, a message is published @@ -295,11 +296,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); diff --git a/lib/dojo/_base/declare.js b/lib/dojo/_base/declare.js index 8e46b12c0..437914870 100644 --- a/lib/dojo/_base/declare.js +++ b/lib/dojo/_base/declare.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,18 +8,18 @@ if(!dojo._hasResource["dojo._base.declare"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.declare"] = true; dojo.provide("dojo._base.declare"); - dojo.require("dojo._base.lang"); dojo.require("dojo._base.array"); + (function(){ var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString, xtor = new Function, counter = 0, cname = "constructor"; - function err(msg){ throw new Error("declare: " + msg); } + function err(msg, cls){ throw new Error("declare" + (cls ? " " + cls : "") + ": " + msg); } // C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/) - function c3mro(bases){ + function c3mro(bases, className){ var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1, l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs; @@ -27,9 +27,9 @@ dojo.require("dojo._base.array"); for(; i < l; ++i){ base = bases[i]; if(!base){ - err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?"); + err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?", className); }else if(opts.call(base) != "[object Function]"){ - err("mixin #" + i + " is not a callable constructor."); + err("mixin #" + i + " is not a callable constructor.", className); } lin = base._meta ? base._meta.bases : [base]; top = 0; @@ -82,7 +82,7 @@ dojo.require("dojo._base.array"); } } if(clsCount){ - err("can't build consistent linearization"); + err("can't build consistent linearization", className); } // calculate the superclass offset @@ -109,7 +109,7 @@ dojo.require("dojo._base.array"); caller = args.callee; name = name || caller.nom; if(!name){ - err("can't deduce a name to call inherited()"); + err("can't deduce a name to call inherited()", this.declaredClass); } meta = this.constructor._meta; @@ -127,7 +127,7 @@ dojo.require("dojo._base.array"); // error detection chains = meta.chains; if(chains && typeof chains[name] == "string"){ - err("calling chained method with inherited: " + name); + err("calling chained method with inherited: " + name, this.declaredClass); } // find caller do{ @@ -168,7 +168,7 @@ dojo.require("dojo._base.array"); // error detection chains = meta.chains; if(!chains || chains.constructor !== "manual"){ - err("calling chained constructor with inherited"); + err("calling chained constructor with inherited", this.declaredClass); } // find caller while(base = bases[++pos]){ // intentional assignment @@ -464,7 +464,7 @@ dojo.require("dojo._base.array"); // build a prototype if(opts.call(superclass) == "[object Array]"){ // C3 MRO - bases = c3mro(superclass); + bases = c3mro(superclass, className); t = bases[0]; mixins = bases.length - t; superclass = bases[mixins]; @@ -475,10 +475,10 @@ dojo.require("dojo._base.array"); t = superclass._meta; bases = bases.concat(t ? t.bases : superclass); }else{ - err("base class is not a callable constructor."); + err("base class is not a callable constructor.", className); } }else if(superclass !== null){ - err("unknown base class. Did you use dojo.require to pull it in?") + err("unknown base class. Did you use dojo.require to pull it in?", className); } } if(superclass){ diff --git a/lib/dojo/_base/event.js b/lib/dojo/_base/event.js index 5268c6cff..65239bf50 100644 --- a/lib/dojo/_base/event.js +++ b/lib/dojo/_base/event.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,27 +10,26 @@ dojo._hasResource["dojo._base.event"] = true; dojo.provide("dojo._base.event"); dojo.require("dojo._base.connect"); + // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA (function(){ // DOM event listener machinery var del = (dojo._event_listener = { add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); - var oname = name; if( - !dojo.isIE && + !dojo.isIE && (name == "mouseenter" || name == "mouseleave") ){ var ofp = fp; - //oname = name; name = (name == "mouseenter") ? "mouseover" : "mouseout"; fp = function(e){ if(!dojo.isDescendant(e.relatedTarget, node)){ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. - return ofp.call(this, e); + return ofp.call(this, e); } } } @@ -71,7 +70,7 @@ dojo.require("dojo._base.connect"); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -81,26 +80,26 @@ dojo.require("dojo._base.connect"); return evt; }, _setKeyChar: function(evt){ - evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + evt.keyChar = evt.charCode >= 32 ? String.fromCharCode(evt.charCode) : ''; evt.charOrCode = evt.keyChar || evt.keyCode; }, // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 } }); @@ -115,7 +114,7 @@ dojo.require("dojo._base.connect"); // sender: DOMNode // node to treat as "currentTarget" return del._fixEvent(evt, sender); - } + }; dojo.stopEvent = function(/*Event*/ evt){ // summary: @@ -126,7 +125,7 @@ dojo.require("dojo._base.connect"); evt.preventDefault(); evt.stopPropagation(); // NOTE: below, this method is overridden for IE - } + }; // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; @@ -141,16 +140,16 @@ dojo.require("dojo._base.connect"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package return [ obj, event, h, lid ]; - } + }; dojo._disconnect = function(obj, event, handle, listener){ ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); - } + }; // Constants @@ -280,7 +279,7 @@ dojo.require("dojo._base.connect"); }; =====*/ - if(dojo.isIE){ + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ dojo.mouseButtons = { LEFT: 1, MIDDLE: 4, @@ -305,7 +304,7 @@ dojo.require("dojo._base.connect"); } // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -314,7 +313,7 @@ dojo.require("dojo._base.connect"); }catch(e){ return 0; } - } + }; // by default, use the standard listener var iel = dojo._listener; @@ -323,7 +322,7 @@ dojo.require("dojo._base.connect"); if(!dojo.config._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -376,7 +375,7 @@ dojo.require("dojo._base.connect"); }, remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ event = del._normalizeEventName(event); - iel.remove(node, event, handle); + iel.remove(node, event, handle); if(event=="onkeypress"){ var kd = node.onkeydown; if(--kd._stealthKeydownRefs <= 0){ @@ -402,11 +401,11 @@ dojo.require("dojo._base.connect"); // node to treat as "currentTarget" if(!evt){ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -419,14 +418,16 @@ dojo.require("dojo._base.connect"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } - evt.stopPropagation = del._stopPropagation; - evt.preventDefault = del._preventDefault; + if (dojo.isIE < 9 || dojo.isQuirks) { + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + } return del._fixKeys(evt); }, _fixKeys: function(evt){ @@ -460,38 +461,41 @@ dojo.require("dojo._base.connect"); var k=evt.keyCode; // These are Windows Virtual Key Codes // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp - var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + var unprintable = (k!=13 || (dojo.isIE >= 9 && !dojo.isQuirks)) && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys if(unprintable||evt.ctrlKey){ var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } // simulate a keypress event var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); kp.call(evt.currentTarget, faux); - evt.cancelBubble = faux.cancelBubble; + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ + evt.cancelBubble = faux.cancelBubble; + } evt.returnValue = faux.returnValue; _trySetKeyCode(evt, faux.keyCode); } }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -501,23 +505,23 @@ dojo.require("dojo._base.connect"); }); // override stopEvent for IE - dojo.stopEvent = function(evt){ + dojo.stopEvent = (dojo.isIE < 9 || dojo.isQuirks) ? function(evt){ evt = evt || window.event; del._stopPropagation.call(evt); del._preventDefault.call(evt); - } + } : dojo.stopEvent; } del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; - } + }; // Opera event normalization if(dojo.isOpera){ @@ -568,12 +572,12 @@ dojo.require("dojo._base.connect"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if(!evt.shiftKey && c>=65 && c<=90){ + }else if(!evt.shiftKey && c>=65 && c<=90){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -630,16 +634,16 @@ if(dojo.isIE){ } } return r; - } + }; dojo._getIeDispatcher = function(){ // ensure the returned function closes over nothing ("new Function" apparently doesn't close) return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function - } + }; // keep this out of the closure to reduce RAM allocation dojo._event_listener._fixCallback = function(fp){ var f = dojo._event_listener._fixEvent; return function(e){ return fp.call(this, f(e, this)); }; - } + }; } } diff --git a/lib/dojo/_base/fx.js b/lib/dojo/_base/fx.js index 21243c1c9..860e0e18b 100644 --- a/lib/dojo/_base/fx.js +++ b/lib/dojo/_base/fx.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -13,6 +13,7 @@ dojo.require("dojo._base.connect"); dojo.require("dojo._base.lang"); dojo.require("dojo._base.html"); + /* Animation loosely package based on Dan Pupius' work, contributed under CLA: http://pupius.co.uk/js/Toolkit.Drawing.js diff --git a/lib/dojo/_base/html.js b/lib/dojo/_base/html.js index be5fd2aaa..8661b2b12 100644 --- a/lib/dojo/_base/html.js +++ b/lib/dojo/_base/html.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -7,8 +7,9 @@ if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.html"] = true; -dojo.require("dojo._base.lang"); dojo.provide("dojo._base.html"); +dojo.require("dojo._base.lang"); + // FIXME: need to add unit tests for all the semi-public methods @@ -53,13 +54,13 @@ dojo.byId = function(id, doc){ // | } =====*/ -if(dojo.isIE || dojo.isOpera){ +if(dojo.isIE){ dojo.byId = function(id, doc){ if(typeof id != "string"){ return id; } var _d = doc || dojo.doc, te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && (te.attributes.id.value == id || te.id == id)){ return te; @@ -80,8 +81,9 @@ if(dojo.isIE || dojo.isOpera){ }; }else{ dojo.byId = function(id, doc){ - // inline'd type check - return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode + // inline'd type check. + // be sure to return null per documentation, to match IE branch. + return ((typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id) || null; // DomNode }; } /*===== @@ -164,16 +166,16 @@ if(dojo.isIE || dojo.isOpera){ }; dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ - // summary: + // summary: // Enable or disable selection on a node // node: // id or reference to node // selectable: - // state to put the node in. false indicates unselectable, true + // state to put the node in. false indicates unselectable, true // allows selection. // example: // Make the node id="bar" unselectable - // | dojo.setSelectable("bar"); + // | dojo.setSelectable("bar"); // example: // Make the node id="bar" selectable // | dojo.setSelectable("bar", true); @@ -256,7 +258,7 @@ if(dojo.isIE || dojo.isOpera){ refNode = byId(refNode); if(typeof node == "string"){ // inline'd type check - node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node); + node = /^\s*= 0){ s.width = w + u; } if(h >= 0){ s.height = h + u; } - } + }; dojo._isButtonTag = function(/*DomNode*/node) { // summary: // True if the node is BUTTON or INPUT.type="button". return node.tagName == "BUTTON" || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean - } + }; dojo._usesBorderBox = function(/*DomNode*/node){ // summary: @@ -898,7 +914,7 @@ if(dojo.isIE || dojo.isOpera){ var n = node.tagName; return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean - } + }; dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ // summary: @@ -910,7 +926,7 @@ if(dojo.isIE || dojo.isOpera){ if(heightPx >= 0){ heightPx += pb.h; } } d._setBox(node, NaN, NaN, widthPx, heightPx); - } + }; dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, /*Number?*/widthPx, /*Number?*/heightPx, @@ -942,7 +958,7 @@ if(dojo.isIE || dojo.isOpera){ if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } d._setBox(node, leftPx, topPx, widthPx, heightPx); - } + }; var _nilExtents = { l:0, t:0, w:0, h:0 }; @@ -977,7 +993,7 @@ if(dojo.isIE || dojo.isOpera){ var n = byId(node), s = gcs(n), b = box; return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object - } + }; dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ // summary: @@ -1002,14 +1018,14 @@ if(dojo.isIE || dojo.isOpera){ // All properties are optional if passed. var n = byId(node), s = gcs(n), b = box; return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object - } + }; // ============================= - // Positioning + // Positioning // ============================= var _sumAncestorProperties = function(node, prop){ - if(!(node = (node||0).parentNode)){return 0} + if(!(node = (node||0).parentNode)){return 0;} var val, retVal = 0, _b = d.body(); while(node && node.style){ if(gcs(node).position == "fixed"){ @@ -1025,19 +1041,19 @@ if(dojo.isIE || dojo.isOpera){ node = node.parentNode; } return retVal; // integer - } + }; dojo._docScroll = function(){ var n = d.global; - return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } : - (n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } : - (n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 })); + return "pageXOffset" in n + ? { x:n.pageXOffset, y:n.pageYOffset } + : (n = d.isQuirks? d.doc.body : d.doc.documentElement, { x:d._fixIeBiDiScrollLeft(n.scrollLeft || 0), y:n.scrollTop || 0 }); }; dojo._isBodyLtr = function(){ return "_bodyLtr" in d? d._bodyLtr : - d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean - } + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + }; dojo._getIeDocumentElementOffset = function(){ // summary: @@ -1058,7 +1074,7 @@ if(dojo.isIE || dojo.isOpera){ //NOTE: assumes we're being called in an IE browser - var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks if(d.isIE < 8){ var r = de.getBoundingClientRect(); // works well for IE6+ @@ -1083,18 +1099,22 @@ if(dojo.isIE || dojo.isOpera){ }; dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ - // In RTL direction, scrollLeft should be a negative value, but IE < 8 + // In RTL direction, scrollLeft should be a negative value, but IE // returns a positive one. All codes using documentElement.scrollLeft // must call this function to fix this error, otherwise the position // will offset to right when there is a horizontal scrollbar. - var dd = d.doc; - if(d.isIE < 8 && !d._isBodyLtr()){ - var de = d.isQuirks ? dd.body : dd.documentElement; - return scrollLeft + de.clientWidth - de.scrollWidth; // Integer + var ie = d.isIE; + if(ie && !d._isBodyLtr()){ + var qk = d.isQuirks, + de = qk ? d.doc.body : d.doc.documentElement; + if(ie == 6 && !qk && d.global.frameElement && de.scrollHeight > de.clientHeight){ + scrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels + } + return (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer } return scrollLeft; // Integer - } + }; // FIXME: need a setter for coords or a moveTo!! dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ @@ -1112,10 +1132,9 @@ if(dojo.isIE || dojo.isOpera){ // Uses the border-box model (inclusive of border and padding but // not margin). Does not act as a setter. - var db = d.body(), dh = db.parentNode, ret; node = byId(node); - if(node["getBoundingClientRect"]){ - // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch + var db = d.body(), + dh = db.parentNode, ret = node.getBoundingClientRect(); ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top }; if(d.isIE){ @@ -1132,60 +1151,7 @@ if(dojo.isIE || dojo.isOpera){ ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); } - }else{ - // FF2 and older WebKit - ret = { - x: 0, - y: 0, - w: node.offsetWidth, - h: node.offsetHeight - }; - if(node["offsetParent"]){ - ret.x -= _sumAncestorProperties(node, "scrollLeft"); - ret.y -= _sumAncestorProperties(node, "scrollTop"); - - var curnode = node; - do{ - var n = curnode.offsetLeft, - t = curnode.offsetTop; - ret.x += isNaN(n) ? 0 : n; - ret.y += isNaN(t) ? 0 : t; - - cs = gcs(curnode); - if(curnode != node){ - if(d.isMoz){ - // tried left+right with differently sized left/right borders - // it really is 2xleft border in FF, not left+right, even in RTL! - ret.x += 2 * px(curnode,cs.borderLeftWidth); - ret.y += 2 * px(curnode,cs.borderTopWidth); - }else{ - ret.x += px(curnode, cs.borderLeftWidth); - ret.y += px(curnode, cs.borderTopWidth); - } - } - // static children in a static div in FF2 are affected by the div's border as well - // but offsetParent will skip this div! - if(d.isMoz && cs.position=="static"){ - var parent=curnode.parentNode; - while(parent!=curnode.offsetParent){ - var pcs=gcs(parent); - if(pcs.position=="static"){ - ret.x += px(curnode,pcs.borderLeftWidth); - ret.y += px(curnode,pcs.borderTopWidth); - } - parent=parent.parentNode; - } - } - curnode = curnode.offsetParent; - }while((curnode != dh) && curnode); - }else if(node.x && node.y){ - ret.x += isNaN(node.x) ? 0 : node.x; - ret.y += isNaN(node.y) ? 0 : node.y; - } - } - // account for document scrolling - // if offsetParent is used, ret value already includes scroll position - // so we may have to actually remove that value if !includeScroll + // account for document scrolling if(includeScroll){ var scroll = d._docScroll(); ret.x += scroll.x; @@ -1193,7 +1159,7 @@ if(dojo.isIE || dojo.isOpera){ } return ret; // Object - } + }; dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ // summary: @@ -1215,7 +1181,7 @@ if(dojo.isIE || dojo.isOpera){ mb.x = abs.x; mb.y = abs.y; return mb; - } + }; // ============================= // Element attribute Functions @@ -1277,7 +1243,7 @@ if(dojo.isIE || dojo.isOpera){ // given element, and false otherwise var lc = name.toLowerCase(); return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean - } + }; var _evtHdlrMap = {}, _ctr = 0, _attrId = dojo._scopeName + "attrid", @@ -1447,7 +1413,7 @@ if(dojo.isIE || dojo.isOpera){ // node's attribute // we need _hasAttr() here to guard against IE returning a default value return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything - } + }; dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){ // summary: @@ -1457,7 +1423,7 @@ if(dojo.isIE || dojo.isOpera){ // name: // the name of the attribute to remove byId(node).removeAttribute(_fixAttrName(name)); - } + }; dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){ // summary: @@ -1476,7 +1442,7 @@ if(dojo.isIE || dojo.isOpera){ // node's attribute var attrName = _attrNames[lc] || name; return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything - } + }; dojo.create = function(tag, attrs, refNode, pos){ // summary: @@ -1491,7 +1457,7 @@ if(dojo.isIE || dojo.isOpera){ // Attributes are set by passing the optional object through `dojo.attr`. // See `dojo.attr` for noted caveats and nuances, and API if applicable. //| - // Placement is done via `dojo.place`, assuming the new node to be the action + // Placement is done via `dojo.place`, assuming the new node to be the action // node, passing along the optional reference node and position. // // tag: String|DomNode @@ -1529,7 +1495,7 @@ if(dojo.isIE || dojo.isOpera){ // | var n = dojo.create("div", null, dojo.body()); // // example: - // Create an UL, and populate it with LI's. Place the list as the first-child of a + // Create an UL, and populate it with LI's. Place the list as the first-child of a // node with id="someId": // | var ul = dojo.create("ul", null, "someId", "first"); // | var items = ["one", "two", "three", "four"]; @@ -1559,7 +1525,7 @@ if(dojo.isIE || dojo.isOpera){ if(attrs){ d.attr(tag, attrs); } if(refNode){ d.place(tag, refNode, pos); } return tag; // DomNode - } + }; /*===== dojo.empty = function(node){ @@ -1627,11 +1593,13 @@ if(dojo.isIE || dojo.isOpera){ // generate start/end tag strings to use // for the injection for each special tag wrap case. for(var param in tagWrap){ - var tw = tagWrap[param]; - tw.pre = param == "option" ? '' : "<" + tw.join("><") + ">"; + tw.post = ""; + // the last line is destructive: it reverses the array, + // but we don't care at this point + } } d._toDom = function(frag, doc){ @@ -1674,7 +1642,7 @@ if(dojo.isIE || dojo.isOpera){ df.appendChild(fc); } return df; // DOMNode - } + }; // ============================= // (CSS) Class Functions @@ -1700,6 +1668,7 @@ if(dojo.isIE || dojo.isOpera){ }; var spaces = /\s+/, a1 = [""], + fakeNode = {}, str2array = function(s){ if(typeof s == "string" || s instanceof String){ if(s.indexOf(" ") < 0){ @@ -1805,6 +1774,39 @@ if(dojo.isIE || dojo.isOpera){ if(node[_className] != cls){ node[_className] = cls; } }; + dojo.replaceClass = function(/*DomNode|String*/node, /*String|Array*/addClassStr, /*String|Array?*/removeClassStr){ + // summary: + // Replaces one or more classes on a node if not present. + // Operates more quickly than calling dojo.removeClass and dojo.addClass + // node: + // String ID or DomNode reference to remove the class from. + // addClassStr: + // A String class name to add, or several space-separated class names, + // or an array of class names. + // removeClassStr: + // A String class name to remove, or several space-separated class names, + // or an array of class names. + // + // example: + // | dojo.replaceClass("someNode", "add1 add2", "remove1 remove2"); + // + // example: + // Replace all classes with addMe + // | dojo.replaceClass("someNode", "addMe"); + // + // example: + // Available in `dojo.NodeList()` for multiple toggles + // | dojo.query(".findMe").replaceClass("addMe", "removeMe"); + + node = byId(node); + fakeNode.className = node.className; + dojo.removeClass(fakeNode, removeClassStr); + dojo.addClass(fakeNode, addClassStr); + if(node.className !== fakeNode.className){ + node.className = fakeNode.className; + } + }; + dojo.toggleClass = function(/*DomNode|String*/node, /*String|Array*/classStr, /*Boolean?*/condition){ // summary: // Adds a class to node if not present, or removes if present. diff --git a/lib/dojo/_base/json.js b/lib/dojo/_base/json.js index 4d50400c9..4267c225e 100644 --- a/lib/dojo/_base/json.js +++ b/lib/dojo/_base/json.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. dojo._hasResource["dojo._base.json"] = true; dojo.provide("dojo._base.json"); + dojo.fromJson = function(/*String*/ json){ // summary: // Parses a [JSON](http://json.org) string to return a JavaScript object. @@ -16,12 +17,12 @@ dojo.fromJson = function(/*String*/ json){ // Throws for invalid JSON strings, but it does not use a strict JSON parser. It // delegates to eval(). The content passed to this method must therefore come // from a trusted source. - // json: + // json: // a string literal of a JSON item, for instance: // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` return eval("(" + json + ")"); // Object -} +}; dojo._escapeString = function(/*String*/str){ //summary: @@ -31,7 +32,7 @@ dojo._escapeString = function(/*String*/str){ return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string -} +}; dojo.toJsonIndentStr = "\t"; dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ @@ -75,8 +76,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } // recurse var recurse = arguments.callee; @@ -149,6 +150,6 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind output.push(newLine + nextIndent + keyStr + ":" + sep + val); } return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String -} +}; } diff --git a/lib/dojo/_base/lang.js b/lib/dojo/_base/lang.js index 0e9c7c2f9..9061de01e 100644 --- a/lib/dojo/_base/lang.js +++ b/lib/dojo/_base/lang.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. dojo._hasResource["dojo._base.lang"] = true; dojo.provide("dojo._base.lang"); + (function(){ var d = dojo, opts = Object.prototype.toString; @@ -18,14 +19,14 @@ dojo.provide("dojo._base.lang"); // summary: // Return true if it is a String return (typeof it == "string" || it instanceof String); // Boolean - } + }; dojo.isArray = function(/*anything*/ it){ // summary: // Return true if it is an Array. // Does not work on Arrays created in other windows. return it && (it instanceof Array || typeof it == "array"); // Boolean - } + }; dojo.isFunction = function(/*anything*/ it){ // summary: @@ -39,7 +40,7 @@ dojo.provide("dojo._base.lang"); // or null) return it !== undefined && (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean - } + }; dojo.isArrayLike = function(/*anything*/ it){ // summary: @@ -58,14 +59,14 @@ dojo.provide("dojo._base.lang"); !d.isString(it) && !d.isFunction(it) && !(it.tagName && it.tagName.toLowerCase() == 'form') && (d.isArray(it) || isFinite(it.length)); - } + }; dojo.isAlien = function(/*anything*/ it){ // summary: // Returns true if it is a built-in function or some other kind of // oddball that *should* report as a function but doesn't return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean - } + }; dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ // summary: @@ -76,7 +77,7 @@ dojo.provide("dojo._base.lang"); d._mixin(constructor.prototype, arguments[i]); } return constructor; // Object - } + }; dojo._hitchArgs = function(scope, method /*,...*/){ var pre = d._toArray(arguments, 2); @@ -88,8 +89,8 @@ dojo.provide("dojo._base.lang"); var f = named ? (scope||d.global)[method] : method; // invoke with collected args return f && f.apply(scope || this, pre.concat(args)); // mixed - } // Function - } + }; // Function + }; dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){ // summary: @@ -97,7 +98,7 @@ dojo.provide("dojo._base.lang"); // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) // for the hitched function. @@ -137,7 +138,7 @@ dojo.provide("dojo._base.lang"); return function(){ return scope[method].apply(scope, arguments || []); }; // Function } return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function - } + }; /*===== dojo.delegate = function(obj, props){ @@ -181,7 +182,7 @@ dojo.provide("dojo._base.lang"); d._mixin(tmp, props); } return tmp; // Object - } + }; })(); /*===== @@ -230,7 +231,7 @@ dojo.provide("dojo._base.lang"); // | dojo.hitch(null, funcName, ...); var arr = [ null ]; return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function - } + }; var extraNames = d._extraNames, extraLen = extraNames.length, empty = {}; @@ -250,6 +251,10 @@ dojo.provide("dojo._base.lang"); // Date return new Date(o.getTime()); // Date } + if(o instanceof RegExp){ + // RegExp + return new RegExp(o); // RegExp + } var r, i, l, s, name; if(d.isArray(o)){ // array @@ -288,7 +293,7 @@ dojo.provide("dojo._base.lang"); } } return r; // Object - } + }; /*===== dojo.trim = function(str){ @@ -317,7 +322,7 @@ dojo.provide("dojo._base.lang"); dojo.replace = function(tmpl, map, pattern){ // summary: // Performs parameterized substitutions on a string. Throws an - // exception if any parameter is unmatched. + // exception if any parameter is unmatched. // tmpl: String // String to be used as a template. // map: Object|Function diff --git a/lib/dojo/_base/query-sizzle.js b/lib/dojo/_base/query-sizzle.js index 5d160ec55..aad4e824d 100644 --- a/lib/dojo/_base/query-sizzle.js +++ b/lib/dojo/_base/query-sizzle.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -20,11 +20,7 @@ dojo._hasResource["dojo._base.query"] = true; * Finally, dojo.provide/require added. */ -//This file gets copied to dojo/_base/query.js, so set the provide accordingly. -if(typeof dojo != "undefined"){ - dojo.provide("dojo._base.query"); - dojo.require("dojo._base.NodeList"); - +var startDojoMappings= function(dojo) { //Start Dojo mappings. dojo.query = function(/*String*/ query, /*String|DOMNode?*/ root, /*Function?*/listCtor){ listCtor = listCtor || dojo.NodeList; @@ -45,16 +41,16 @@ if(typeof dojo != "undefined"){ } return dojo.Sizzle(query, root, new listCtor()); - } + }; dojo._filterQueryResult = function(nodeList, simpleFilter){ return dojo.Sizzle.filter(simpleFilter, nodeList); - } -} + }; +}; //Main Sizzle code follows... //ns argument, added for dojo, used at the end of the file. -;(function(ns){ +var defineSizzle= function(ns){ var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g, done = 0, @@ -862,8 +858,20 @@ var contains = document.compareDocumentPosition ? function(a, b){ // EXPOSE -(ns || window).Sizzle = Sizzle; +ns.Sizzle = Sizzle; -})(typeof dojo == "undefined" ? null : dojo); +}; + +if (this["dojo"]) { + var defined= 0; + if (!defined) { + // must be in a built version that stripped out the define above + dojo.provide("dojo._base.query"); + dojo.require("dojo._base.NodeList"); + defineSizzle(dojo); + } // else must be in a source version (or a build that likes define) +} else { + defineSizzle(window); +} } diff --git a/lib/dojo/_base/query.js b/lib/dojo/_base/query.js index 7b9878e47..59411952f 100644 --- a/lib/dojo/_base/query.js +++ b/lib/dojo/_base/query.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -7,12 +7,7 @@ if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.query"] = true; -if(typeof dojo != "undefined"){ - dojo.provide("dojo._base.query"); - dojo.require("dojo._base.NodeList"); - dojo.require("dojo._base.lang"); - -} +(function(){ /* dojo.query() architectural overview: @@ -46,7 +41,7 @@ if(typeof dojo != "undefined"){ 5.) matched nodes are pruned to ensure they are unique (if necessary) */ -;(function(d){ +var defineQuery= function(d){ // define everything in a closure for compressability reasons. "d" is an // alias to "dojo" (or the toolkit alias object, e.g., "acme"). @@ -54,7 +49,7 @@ if(typeof dojo != "undefined"){ // Toolkit aliases //////////////////////////////////////////////////////////////////////// - // if you are extracing dojo.query for use in your own system, you will + // if you are extracting dojo.query for use in your own system, you will // need to provide these methods and properties. No other porting should be // necessary, save for configuring the system to use a class other than // dojo.NodeList as the return instance instantiator @@ -65,7 +60,7 @@ if(typeof dojo != "undefined"){ // d.isOpera; // float // d.isWebKit; // float // d.doc ; // document element - var qlc = d._NodeListCtor = d.NodeList; + var qlc = (d._NodeListCtor = d.NodeList); var getDoc = function(){ return d.doc; }; // NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo @@ -96,7 +91,7 @@ if(typeof dojo != "undefined"){ //////////////////////////////////////////////////////////////////////// var getQueryParts = function(query){ - // summary: + // summary: // state machine for query tokenization // description: // instead of using a brittle and slow regex-based CSS parser, @@ -105,16 +100,16 @@ if(typeof dojo != "undefined"){ // the same query run multiple times or under different root nodes // does not re-parse the selector expression but instead uses the // cached data structure. The state machine implemented here - // terminates on the last " " (space) charachter and returns an + // terminates on the last " " (space) character and returns an // ordered array of query component structures (or "parts"). Each // part represents an operator or a simple CSS filtering // expression. The structure for parts is documented in the code // below. - // NOTE: + // NOTE: // this code is designed to run fast and compress well. Sacrifices - // to readibility and maintainability have been made. Your best + // to readability and maintainability have been made. Your best // bet when hacking the tokenizer is to put The Donnas on *really* // loud (may we recommend their "Spend The Night" release?) and // just assume you're gonna make mistakes. Keep the unit tests @@ -130,7 +125,7 @@ if(typeof dojo != "undefined"){ } var ts = function(/*Integer*/ s, /*Integer*/ e){ - // trim and slice. + // trim and slice. // take an index to start a string slice from and an end position // and return a trimmed copy of that sub-string @@ -138,12 +133,12 @@ if(typeof dojo != "undefined"){ } // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; + var queryParts = []; // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, + var inBrackets = -1, inParens = -1, inMatchFor = -1, + inPseudo = -1, inClass = -1, inId = -1, inTag = -1, lc = "", cc = "", pStart; // iteration vars @@ -152,7 +147,7 @@ if(typeof dojo != "undefined"){ currentPart = null, // data structure representing the entire clause _cp = null; // the current pseudo or attr matcher - // several temporary variables are assigned to this structure durring a + // several temporary variables are assigned to this structure during a // potential sub-expression match: // attr: // a string representing the current full attribute match in a @@ -207,9 +202,9 @@ if(typeof dojo != "undefined"){ // needs to do any iteration. Many simple selectors don't, and // we can avoid significant construction-time work by advising // the system to skip them - currentPart.loops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.loops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string @@ -239,9 +234,9 @@ if(typeof dojo != "undefined"){ currentPart.infixOper = queryParts.pop(); currentPart.query = currentPart.infixOper.query + " " + currentPart.query; /* - console.debug( "swapping out the infix", - currentPart.infixOper, - "and attaching it to", + console.debug( "swapping out the infix", + currentPart.infixOper, + "and attaching it to", currentPart); */ } @@ -250,15 +245,15 @@ if(typeof dojo != "undefined"){ currentPart = null; } - // iterate over the query, charachter by charachter, building up a + // iterate over the query, character by character, building up a // list of query part objects for(; lc=cc, cc=query.charAt(x), x < ql; x++){ // cc: the current character in the match - // lc: the last charachter (if any) + // lc: the last character (if any) // someone is trying to escape something, so don't try to match any // fragments. We assume we're inside a literal. - if(lc == "\\"){ continue; } + if(lc == "\\"){ continue; } if(!currentPart){ // a part was just ended or none has yet been created // NOTE: I hate all this alloc, but it's shorter than writing tons of if's pStart = x; @@ -301,7 +296,7 @@ if(typeof dojo != "undefined"){ // the beginning of a match, which should be a tag name. This // might fault a little later on, but we detect that and this // iteration will still be fine. - inTag = x; + inTag = x; } if(inBrackets >= 0){ @@ -309,7 +304,7 @@ if(typeof dojo != "undefined"){ if(cc == "]"){ // if we're in a [...] clause and we end, do assignment if(!_cp.attr){ // no attribute match was previously begun, so we - // assume this is an attribute existance match in the + // assume this is an attribute existence match in the // form of [someAttributeName] _cp.attr = ts(inBrackets+1, x); }else{ @@ -320,19 +315,19 @@ if(typeof dojo != "undefined"){ var cmf = _cp.matchFor; if(cmf){ // try to strip quotes from the matchFor value. We want - // [attrName=howdy] to match the same + // [attrName=howdy] to match the same // as [attrName = 'howdy' ] if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){ _cp.matchFor = cmf.slice(1, -1); } } - // end the attribute by adding it to the list of attributes. + // end the attribute by adding it to the list of attributes. currentPart.attrs.push(_cp); _cp = null; // necessary? inBrackets = inMatchFor = -1; }else if(cc == "="){ // if the last char was an operator prefix, make sure we - // record it along with the "=" operator. + // record it along with the "=" operator. var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; _cp.type = addToCc+cc; _cp.attr = ts(inBrackets+1, x-addToCc.length); @@ -341,7 +336,7 @@ if(typeof dojo != "undefined"){ // now look for other clause parts }else if(inParens >= 0){ // if we're in a parenthetical expression, we need to figure - // out if it's attached to a pseduo-selector rule like + // out if it's attached to a pseudo-selector rule like // :nth-child(1) if(cc == ")"){ if(inPseudo >= 0){ @@ -362,7 +357,7 @@ if(typeof dojo != "undefined"){ endAll(); inPseudo = x; }else if(cc == "["){ - // start of an attribute match. + // start of an attribute match. endAll(); inBrackets = x; // provide a new structure for the attribute match to fill-in @@ -376,15 +371,15 @@ if(typeof dojo != "undefined"){ // expression if we're already inside a pseudo-selector match if(inPseudo >= 0){ // provide a new structure for the pseudo match to fill-in - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); } inParens = x; }else if( - (cc == " ") && + (cc == " ") && // if it's a space char and the last char is too, consume the // current one without doing more work (lc != cc) @@ -404,7 +399,7 @@ if(typeof dojo != "undefined"){ // the basic building block of the yes/no chaining system. agree(f1, // f2) generates a new function which returns the boolean results of // both of the passed functions to a single logical-anded result. If - // either are not possed, the other is used exclusively. + // either are not passed, the other is used exclusively. if(!first){ return second; } if(!second){ return first; } @@ -456,7 +451,7 @@ if(typeof dojo != "undefined"){ } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -466,7 +461,7 @@ if(typeof dojo != "undefined"){ } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -532,7 +527,7 @@ if(typeof dojo != "undefined"){ if(!tret){ return -1; } var l = tret.length; - // we calcuate the parent length as a cheap way to invalidate the + // we calculate the parent length as a cheap way to invalidate the // cache. It's not 100% accurate, but it's much more honest than what // other libraries do if( cl == l && ci >= 0 && cl >= 0 ){ @@ -544,11 +539,11 @@ if(typeof dojo != "undefined"){ root["_l"] = l; ci = -1; for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ + if(_simpleNodeTest(te)){ te["_i"] = ++i; - if(node === te){ + if(node === te){ // NOTE: - // shortcuting the return at this step in indexing works + // shortcutting the return at this step in indexing works // very well for benchmarking but we avoid it here since // it leads to potential O(n^2) behavior in sequential // getNodexIndex operations on a previously un-indexed @@ -579,7 +574,7 @@ if(typeof dojo != "undefined"){ "first-child": function(){ return _lookLeft; }, "last-child": function(){ return _lookRight; }, "only-child": function(name, condition){ - return function(node){ + return function(node){ if(!_lookLeft(node)){ return false; } if(!_lookRight(node)){ return false; } return true; @@ -610,7 +605,7 @@ if(typeof dojo != "undefined"){ }, "not": function(name, condition){ var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; + var ignores = { el: 1 }; if(p.tag != "*"){ ignores.tag = 1; } @@ -670,7 +665,7 @@ if(typeof dojo != "undefined"){ } }; - var defaultGetter = (d.isIE) ? function(cond){ + var defaultGetter = (d.isIE < 9 || (dojo.isIE && dojo.isQuirks)) ? function(cond){ var clc = cond.toLowerCase(); if(clc == "class"){ cond = "className"; } return function(elem){ @@ -684,7 +679,7 @@ if(typeof dojo != "undefined"){ var getSimpleFilterFunc = function(query, ignores){ // generates a node tester function based on the passed query part. The - // query part is one of the structures generatd by the query parser + // query part is one of the structures generated by the query parser // when it creates the query AST. The "ignores" object specifies which // (if any) tests to skip, allowing the system to avoid duplicating // work where it may have already been taken into account by other @@ -715,7 +710,7 @@ if(typeof dojo != "undefined"){ if(isWildcard){ cname = cname.substr(0, cname.length-1); } - // I dislike the regex thing, even if memozied in a cache, but it's VERY short + // I dislike the regex thing, even if memoized in a cache, but it's VERY short var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)"); */ var re = new RegExp("(?:^|\\s)" + cname + "(?:\\s|$)"); @@ -753,7 +748,7 @@ if(typeof dojo != "undefined"){ if(!("id" in ignores)){ if(query.id){ - ff = agree(ff, function(elem){ + ff = agree(ff, function(elem){ return (!!elem && (elem.id == query.id)); }); } @@ -761,7 +756,7 @@ if(typeof dojo != "undefined"){ if(!ff){ if(!("default" in ignores)){ - ff = yesman; + ff = yesman; } } return ff; @@ -812,7 +807,7 @@ if(typeof dojo != "undefined"){ _simpleNodeTest(te) && (!bag || _isUnique(te, bag)) && (filterFunc(te, x)) - ){ + ){ ret.push(te); } } @@ -854,7 +849,7 @@ if(typeof dojo != "undefined"){ // filters them. The search may be specialized by infix operators // (">", "~", or "+") else it will default to searching all // descendants (the " " selector). Once a group of children is - // founde, a test function is applied to weed out the ones we + // found, a test function is applied to weed out the ones we // don't want. Many common cases can be fast-pathed. We spend a // lot of cycles to create a dispatcher that doesn't do more work // than necessary at any point since, unlike this function, the @@ -907,7 +902,7 @@ if(typeof dojo != "undefined"){ var filterFunc = getSimpleFilterFunc(query, { el: 1 }); var qt = query.tag; var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; + var ecs = getDoc()["getElementsByClassName"]; if(!oper){ // if there's no infix operator, then it's a descendant query. ID @@ -917,8 +912,8 @@ if(typeof dojo != "undefined"){ // testing shows that the overhead of yesman() is acceptable // and can save us some bytes vs. re-defining the function // everywhere. - filterFunc = (!query.loops && wildcardTag) ? - yesman : + filterFunc = (!query.loops && wildcardTag) ? + yesman : getSimpleFilterFunc(query, { el: 1, id: 1 }); retFunc = function(root, arr){ @@ -933,9 +928,9 @@ if(typeof dojo != "undefined"){ } } }else if( - ecs && + ecs && // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && + /\{\s*\[native code\]\s*\}/.test(String(ecs)) && query.classes.length && !cssCaseBug ){ @@ -1101,8 +1096,8 @@ if(typeof dojo != "undefined"){ // We need te detect the right "internal" webkit version to make this work. var wk = "WebKit/"; var is525 = ( - d.isWebKit && - (nua.indexOf(wk) > 0) && + d.isWebKit && + (nua.indexOf(wk) > 0) && (parseFloat(nua.split(wk)[1]) > 528) ); @@ -1113,7 +1108,7 @@ if(typeof dojo != "undefined"){ var qsa = "querySelectorAll"; var qsaAvail = ( - !!getDoc()[qsa] && + !!getDoc()[qsa] && // see #5832 (!d.isSafari || (d.isSafari > 3.1) || is525 ) ); @@ -1142,7 +1137,7 @@ if(typeof dojo != "undefined"){ var domCached = _queryFuncCacheDOM[query]; if(domCached){ return domCached; } - // TODO: + // TODO: // today we're caching DOM and QSA branches separately so we // recalc useQSA every time. If we had a way to tag root+query // efficiently, we'd be in good shape to do a global cache. @@ -1156,11 +1151,11 @@ if(typeof dojo != "undefined"){ forceDOM = true; } - var useQSA = ( + var useQSA = ( qsaAvail && (!forceDOM) && // as per CSS 3, we can't currently start w/ combinator: // http://www.w3.org/TR/css3-selectors/#w3cselgrammar - (specials.indexOf(qcz) == -1) && + (specials.indexOf(qcz) == -1) && // IE's QSA impl sucks on pseudos (!d.isIE || (query.indexOf(":") == -1)) && @@ -1173,11 +1168,11 @@ if(typeof dojo != "undefined"){ // elements, even though according to spec, selected options should // match :checked. So go nonQSA for it: // http://bugs.dojotoolkit.org/ticket/5179 - (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && + (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && (query.indexOf("|=") == -1) // some browsers don't grok it ); - // TODO: + // TODO: // if we've got a descendant query (e.g., "> .thinger" instead of // just ".thinger") in a QSA-able doc, but are passed a child as a // root, it should be possible to give the item a synthetic ID and @@ -1186,7 +1181,7 @@ if(typeof dojo != "undefined"){ if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? + var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? (query + " *") : query; return _queryFuncCacheQSA[query] = function(root){ try{ @@ -1213,9 +1208,9 @@ if(typeof dojo != "undefined"){ }else{ // DOM branch var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? + return _queryFuncCacheDOM[query] = ((parts.length < 2) ? // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - getStepQueryFunc(query) : + getStepQueryFunc(query) : // if it *is* a complex query, break it up into its // constituent parts and return a dispatcher that will // merge the parts when run @@ -1245,7 +1240,7 @@ if(typeof dojo != "undefined"){ }else{ return node.uniqueID; } - } : + } : function(node){ return (node._uid || (node._uid = ++_zipIdx)); }; @@ -1254,7 +1249,7 @@ if(typeof dojo != "undefined"){ // to flatten a list of unique items, but rather just tell if the item in // question is already in the bag. Normally we'd just use hash lookup to do // this for us but IE's DOM is busted so we can't really count on that. On - // the upside, it gives us a built in unique ID function. + // the upside, it gives us a built in unique ID function. var _isUnique = function(node, bag){ if(!bag){ return 1; } var id = _nodeUID(node); @@ -1266,7 +1261,7 @@ if(typeof dojo != "undefined"){ // returning a list of "uniques", hopefully in doucment order var _zipIdxName = "_zipIdx"; var _zip = function(arr){ - if(arr && arr.nozip){ + if(arr && arr.nozip){ return (qlc._wrap) ? qlc._wrap(arr) : arr; } // var ret = new d._NodeListCtor(); @@ -1285,7 +1280,7 @@ if(typeof dojo != "undefined"){ var szidx = _zipIdx+""; arr[0].setAttribute(_zipIdxName, szidx); for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ + if(arr[x].getAttribute(_zipIdxName) != szidx){ ret.push(te); } te.setAttribute(_zipIdxName, szidx); @@ -1293,7 +1288,7 @@ if(typeof dojo != "undefined"){ }else if(d.isIE && arr.commentStrip){ try{ for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ + if(_isElement(te)){ ret.push(te); } } @@ -1301,7 +1296,7 @@ if(typeof dojo != "undefined"){ }else{ if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ + if(arr[x][_zipIdxName] != _zipIdx){ ret.push(te); } te[_zipIdxName] = _zipIdx; @@ -1331,11 +1326,11 @@ if(typeof dojo != "undefined"){ // * class selectors (e.g., `.foo`) // * node type selectors like `span` // * ` ` descendant selectors - // * `>` child element selectors + // * `>` child element selectors // * `#foo` style ID selectors // * `*` universal selector - // * `~`, the immediately preceeded-by sibling selector - // * `+`, the preceeded-by sibling selector + // * `~`, the preceded-by sibling selector + // * `+`, the immediately preceded-by sibling selector // * attribute queries: // | * `[foo]` attribute presence selector // | * `[foo='bar']` attribute value exact match @@ -1356,14 +1351,14 @@ if(typeof dojo != "undefined"){ // palette of selectors and when combined with functions for // manipulation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // ---------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of - // what's resaonable for a programmatic node querying engine to + // what's reasonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * all `::` pseduo-element selectors // * certain pseduo-selectors which don't get a lot of day-to-day use: @@ -1372,10 +1367,10 @@ if(typeof dojo != "undefined"){ // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, // `:enabled`, `:disabled` // * `:*-of-type` pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- - // + // // `dojo.query` (as of dojo 1.2) supports searching XML documents // in a case-sensitive manner. If an HTML document is served with // a doctype that forces case-sensitivity (e.g., XHTML 1.1 @@ -1485,12 +1480,12 @@ if(typeof dojo != "undefined"){ // NOTE: // Opera in XHTML mode doesn't detect case-sensitivity correctly // and it's not clear that there's any way to test for it - caseSensitive = (root.contentType && root.contentType=="application/xml") || + caseSensitive = (root.contentType && root.contentType=="application/xml") || (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && + (!!od) && (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion)); - // NOTE: + // NOTE: // adding "true" as the 2nd argument to getQueryFunc is useful for // testing the DOM branch without worrying about the // behavior/performance of the QSA branch. @@ -1507,16 +1502,98 @@ if(typeof dojo != "undefined"){ // FIXME: need to add infrastructure for post-filtering pseudos, ala :last d.query.pseudos = pseudos; - // one-off function for filtering a NodeList based on a simple selector - d._filterQueryResult = function(nodeList, simpleFilter){ - var tmpNodeList = new d._NodeListCtor(); - var filterFunc = getSimpleFilterFunc(getQueryParts(simpleFilter)[0]); + // function for filtering a NodeList based on a selector, optimized for simple selectors + d._filterQueryResult = function(/*NodeList*/ nodeList, /*String*/ filter, /*String|DOMNode?*/ root){ + var tmpNodeList = new d._NodeListCtor(), + parts = getQueryParts(filter), + filterFunc = + (parts.length == 1 && !/[^\w#\.]/.test(filter)) ? + getSimpleFilterFunc(parts[0]) : + function(node) { + return dojo.query(filter, root).indexOf(node) != -1; + }; for(var x = 0, te; te = nodeList[x]; x++){ if(filterFunc(te)){ tmpNodeList.push(te); } } return tmpNodeList; } -})(this["queryPortability"]||this["acme"]||dojo); +};//end defineQuery + +var defineAcme= function(){ + // a self-sufficient query impl + acme = { + trim: function(/*String*/ str){ + // summary: + // trims whitespaces from both sides of the string + 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 + }, + forEach: function(/*String*/ arr, /*Function*/ callback, /*Object?*/ thisObject){ + // summary: + // an iterator function that passes items, indexes, + // and the array to a callback + if(!arr || !arr.length){ return; } + for(var i=0,l=arr.length; i= 0) ? tv: undefined; + acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined; + acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; + acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; + var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(index && !acme.isChrome){ + acme.isSafari = parseFloat(dav.split("Version/")[1]); + if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ + acme.isSafari = 2; + } + } + if(document.all && !acme.isOpera){ + acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; + } + + Array._wrap = function(arr){ return arr; }; + return acme; +}; + + //prefers queryPortability, then acme, then dojo + if(this["dojo"]){ + dojo.provide("dojo._base.query"); + dojo.require("dojo._base.NodeList"); + dojo.require("dojo._base.lang"); + defineQuery(this["queryPortability"]||this["acme"]||dojo); + }else{ + defineQuery(this["queryPortability"]||this["acme"]||defineAcme()); + } + +})(); /* */ diff --git a/lib/dojo/_base/window.js b/lib/dojo/_base/window.js index 5c6e2e952..143bad610 100644 --- a/lib/dojo/_base/window.js +++ b/lib/dojo/_base/window.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by buil dojo._hasResource["dojo._base.window"] = true; dojo.provide("dojo._base.window"); + /*===== dojo.doc = { // summary: @@ -34,7 +35,7 @@ dojo.body = function(){ // Note: document.body is not defined for a strict xhtml document // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node -} +}; dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ // summary: @@ -47,9 +48,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu dojo.doc = globalDocument; }; -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with globalObject as dojo.global and @@ -68,11 +69,11 @@ dojo.withGlobal = function( /*Object*/globalObject, }finally{ dojo.global = oldGlob; } -} +}; -dojo.withDoc = function( /*DocumentElement*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with documentObject as dojo.doc. @@ -103,6 +104,5 @@ dojo.withDoc = function( /*DocumentElement*/documentObject, dojo.isQuirks = oldQ; } }; - } diff --git a/lib/dojo/_base/xhr.js b/lib/dojo/_base/xhr.js index 818f8e418..58f1fdb62 100644 --- a/lib/dojo/_base/xhr.js +++ b/lib/dojo/_base/xhr.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -13,6 +13,7 @@ dojo.require("dojo._base.json"); dojo.require("dojo._base.lang"); dojo.require("dojo._base.query"); + (function(){ var _d = dojo, cfg = _d.config; @@ -53,7 +54,7 @@ dojo.require("dojo._base.query"); var type = (item.type||"").toLowerCase(); if(_in && type && !item.disabled){ if(type == "radio" || type == "checkbox"){ - if(item.checked){ ret = item.value } + if(item.checked){ ret = item.value; } }else if(item.multiple){ ret = []; _d.query("option", item).forEach(function(opt){ @@ -67,7 +68,7 @@ dojo.require("dojo._base.query"); } } return ret; // Object - } + }; dojo.formToObject = function(/*DOMNode||String*/ formNode){ // summary: @@ -94,7 +95,7 @@ dojo.require("dojo._base.query"); // yields this object structure as the result of a call to // formToObject(): // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -115,7 +116,7 @@ dojo.require("dojo._base.query"); } }); return ret; // Object - } + }; dojo.objectToQuery = function(/*Object*/ map){ // summary: @@ -124,7 +125,7 @@ dojo.require("dojo._base.query"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -133,7 +134,7 @@ dojo.require("dojo._base.query"); // | }; // // yields the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" // FIXME: need to implement encodeAscii!! @@ -154,21 +155,21 @@ dojo.require("dojo._base.query"); } } return pairs.join("&"); // String - } + }; dojo.formToQuery = function(/*DOMNode||String*/ formNode){ // summary: // Returns a URL-encoded string representing the form passed as either a // node or string ID identifying the form to serialize return _d.objectToQuery(_d.formToObject(formNode)); // String - } + }; dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ // summary: // Create a serialized JSON string from a form node or string // ID identifying the form to serialize return _d.toJson(_d.formToObject(formNode), prettyPrint); // String - } + }; dojo.queryToObject = function(/*String*/ str){ // summary: @@ -179,7 +180,7 @@ dojo.require("dojo._base.query"); // This string: // // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // results in this object structure: // // | { @@ -187,7 +188,7 @@ dojo.require("dojo._base.query"); // | thinger: " spaces =blah", // | zonk: "blarg" // | } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -212,7 +213,7 @@ dojo.require("dojo._base.query"); } }); return ret; // Object - } + }; // need to block async callbacks from snatching this thread as the result // of an async callback might call another sync XHR, this hangs khtml forever @@ -222,7 +223,7 @@ dojo.require("dojo._base.query"); // MOW: remove dojo._contentHandlers alias in 2.0 var handlers = _d._contentHandlers = dojo.contentHandlers = { - // summary: + // summary: // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. // @@ -230,41 +231,41 @@ dojo.require("dojo._base.query"); // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. Each contentHandler is // called, passing the xhr object for manipulation. The return value - // from the contentHandler will be passed to the `load` or `handle` - // functions defined in the original xhr call. - // + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // // example: // Creating a custom content-handler: // | dojo.contentHandlers.makeCaps = function(xhr){ // | return xhr.responseText.toUpperCase(); // | } // | // and later: - // | dojo.xhrGet({ + // | dojo.xhrGet({ // | url:"foo.txt", // | handleAs:"makeCaps", // | load: function(data){ /* data is a toUpper version of foo.txt */ } // | }); - text: function(xhr){ + text: function(xhr){ // summary: A contentHandler which simply returns the plaintext response data - return xhr.responseText; + return xhr.responseText; }, json: function(xhr){ // summary: A contentHandler which returns a JavaScript object created from the response data return _d.fromJson(xhr.responseText || null); }, - "json-comment-filtered": function(xhr){ - // summary: A contentHandler which expects comment-filtered JSON. - // description: - // A contentHandler which expects comment-filtered JSON. + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. // the json-comment-filtered option was implemented to prevent // "JavaScript Hijacking", but it is less secure than standard JSON. Use // standard JSON instead. JSON prefixing can be used to subvert hijacking. - // + // // Will throw a notice suggesting to use application/json mimetype, as // json-commenting can introduce security issues. To decrease the chances of hijacking, - // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& - // + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // // use djConfig.useCommentedJson = true to turn off the notice if(!dojo.config.useCommentedJson){ console.warn("Consider using the standard mimetype:application/json." @@ -282,7 +283,7 @@ dojo.require("dojo._base.query"); } return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - javascript: function(xhr){ + javascript: function(xhr){ // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript // FIXME: try Moz and IE specific eval variants? @@ -294,7 +295,7 @@ dojo.require("dojo._base.query"); if(_d.isIE && (!result || !result.documentElement)){ //WARNING: this branch used by the xml handling in dojo.io.iframe, //so be sure to test dojo.io.iframe if making changes below. - var ms = function(n){ return "MSXML" + n + ".DOMDocument"; } + var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }; var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; _d.some(dp, function(p){ try{ @@ -309,7 +310,7 @@ dojo.require("dojo._base.query"); return result; // DOMDocument }, "json-comment-optional": function(xhr){ - // summary: A contentHandler which checks the presence of comment-filtered JSON and + // summary: A contentHandler which checks the presence of comment-filtered JSON and // alternates between the `json` and `json-comment-filtered` contentHandlers. if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ return handlers["json-comment-filtered"](xhr); @@ -341,7 +342,7 @@ dojo.require("dojo._base.query"); // handleAs: String? // Acceptable values depend on the type of IO // transport (see specific IO calls for more information). - // rawBody: String? + // rawBody: String? // Sets the raw body for an HTTP request. If this is used, then the content // property is ignored. This is mostly useful for HTTP methods that have // a body to their requests, like PUT or POST. This property can be used instead @@ -486,7 +487,7 @@ dojo.require("dojo._base.query"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -502,19 +503,19 @@ dojo.require("dojo._base.query"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } @@ -587,7 +588,7 @@ dojo.require("dojo._base.query"); // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; - } + }; var _deferredCancel = function(/*Deferred*/dfd){ // summary: canceller function for dojo._ioSetArgs call. @@ -604,13 +605,13 @@ dojo.require("dojo._base.query"); err.dojoType="cancel"; } return err; - } + }; var _deferredOk = function(/*Deferred*/dfd){ // summary: okHandler function for dojo._ioSetArgs call. var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); return ret === undefined ? null : ret; - } + }; var _deferError = function(/*Error*/error, /*Deferred*/dfd){ // summary: errHandler function for dojo._ioSetArgs call. @@ -618,7 +619,7 @@ dojo.require("dojo._base.query"); console.error(error); } return error; - } + }; // avoid setting a timer per request. It degrades performance on IE // something fierece if we don't use unified loops. @@ -642,7 +643,7 @@ dojo.require("dojo._base.query"); }; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. @@ -657,7 +658,7 @@ dojo.require("dojo._base.query"); var dfd = tif.dfd; var func = function(){ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); _pubCount -= 1; }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); @@ -695,7 +696,7 @@ dojo.require("dojo._base.query"); _inFlightIntvl = null; return; } - } + }; dojo._ioCancelAll = function(){ //summary: Cancels all pending IO requests, regardless of IO type @@ -707,7 +708,7 @@ dojo.require("dojo._base.query"); }catch(e){/*squelch*/} }); }catch(e){/*squelch*/} - } + }; //Automatically call cancel all io calls on unload //in IE for trac issue #2357. @@ -730,10 +731,10 @@ dojo.require("dojo._base.query"); _pubCount += 1; _d.publish("/dojo/io/send", [dfd]); } - } + }; _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ - // summary: + // summary: // Watches the io request represented by dfd to see if it completes. // dfd: Deferred // The Deferred object to watch. @@ -763,16 +764,16 @@ dojo.require("dojo._base.query"); if(args.sync){ _watchInFlight(); } - } + }; var _defaultContentType = "application/x-www-form-urlencoded"; var _validCheck = function(/*Deferred*/dfd){ return dfd.ioArgs.xhr.readyState; //boolean - } + }; var _ioCheck = function(/*Deferred*/dfd){ return 4 == dfd.ioArgs.xhr.readyState; //boolean - } + }; var _resHandle = function(/*Deferred*/dfd){ var xhr = dfd.ioArgs.xhr; if(_d._isDocumentOk(xhr)){ @@ -783,7 +784,7 @@ dojo.require("dojo._base.query"); err.responseText = xhr.responseText; dfd.errback(err); } - } + }; dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ //summary: Adds query params discovered by the io deferred construction to the URL. @@ -791,8 +792,8 @@ dojo.require("dojo._base.query"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } - } + } + }; /*===== dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { @@ -893,13 +894,13 @@ dojo.require("dojo._base.query"); _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); xhr = null; return dfd; // dojo.Deferred - } + }; dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. return _d.xhr("GET", args); // dojo.Deferred - } + }; dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ // summary: @@ -908,7 +909,7 @@ dojo.require("dojo._base.query"); // postData: // String. Send raw data in the body of the POST request. return _d.xhr("POST", args, true); // dojo.Deferred - } + }; dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ // summary: @@ -917,13 +918,13 @@ dojo.require("dojo._base.query"); // putData: // String. Send raw data in the body of the PUT request. return _d.xhr("PUT", args, true); // dojo.Deferred - } + }; dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ // summary: // Sends an HTTP DELETE request to the server. return _d.xhr("DELETE", args); //dojo.Deferred - } + }; /* dojo.wrapForm = function(formNode){ diff --git a/lib/dojo/_firebug/firebug.js b/lib/dojo/_firebug/firebug.js index d1f112f69..c78b50fa6 100644 --- a/lib/dojo/_firebug/firebug.js +++ b/lib/dojo/_firebug/firebug.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,13 +8,14 @@ if(!dojo._hasResource["dojo._firebug.firebug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._firebug.firebug"] = true; dojo.provide("dojo._firebug.firebug"); + dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){ - // summary: + // summary: // Log a debug message to indicate that a behavior has been // deprecated. // extra: Text to append to the message. - // removal: + // removal: // Text to indicate when in the future the behavior will be removed. var message = "DEPRECATED: " + behaviour; if(extra){ message += " " + extra; } @@ -24,16 +25,16 @@ dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ // summary: Marks code as experimental. - // description: + // description: // This can be used to mark a function, file, or module as // experimental. Experimental code is not ready to be used, and the // APIs are subject to change without notice. Experimental code may be // completed deleted without going through the normal deprecation // process. - // moduleName: + // moduleName: // The name of a module, or the name of a module file or a specific // function - // extra: + // extra: // some additional message for the user // example: // | dojo.experimental("dojo.data.Result"); @@ -49,10 +50,10 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ // description: // Opens a console for logging, debugging, and error messages. // Contains partial functionality to Firebug. See function list below. - // NOTE: + // NOTE: // Firebug is a Firefox extension created by Joe Hewitt (see license). You do not need Dojo to run Firebug. // Firebug Lite is included in Dojo by permission from Joe Hewitt - // If you are new to Firebug, or used to the Dojo 0.4 dojo.debug, you can learn Firebug + // If you are new to Firebug, or used to the Dojo 0.4 dojo.debug, you can learn Firebug // functionality by reading the function comments below or visiting http://www.getfirebug.com/docs.html // NOTE: // To test Firebug Lite in Firefox: @@ -80,13 +81,13 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ var calls = ["log", "info", "debug", "warn", "error"]; for(var i=0;i'+label+''; }; - consoleFrame.innerHTML = + consoleFrame.innerHTML = '
    ' + '
      ' @@ -598,8 +599,8 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ function layout(h){ var tHeight = 25; //consoleToolbar.offsetHeight; // tab style not ready on load - throws off layout - var height = h ? - h - (tHeight + commandLine.offsetHeight +25 + (h*.01)) + "px" : + var height = h ? + h - (tHeight + commandLine.offsetHeight +25 + (h*.01)) + "px" : (consoleFrame.offsetHeight - tHeight - commandLine.offsetHeight) + "px"; consoleBody.style.top = tHeight + "px"; @@ -610,7 +611,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ consoleDomInspector.style.top = tHeight + "px"; commandLine.style.bottom = 0; - dojo.addOnWindowUnload(clearFrame) + dojo.addOnWindowUnload(clearFrame); } function logRow(message, className, handler){ @@ -755,7 +756,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ function parseFormat(format){ var parts = []; - var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/; + var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/; var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat}; for(var m = reg.exec(format); m; m = reg.exec(format)){ @@ -900,7 +901,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ appendNode(child, html); } - html.push('
    </', + html.push('
    </', node.nodeName.toLowerCase(), '>
    '); }else{ html.push('/>'); @@ -933,7 +934,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ if(document.all){ event.cancelBubble = true; }else{ - event.stopPropagation(); + event.stopPropagation(); } } @@ -942,7 +943,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1); var html = [ - '', msg, '', + '', msg, '', '' ]; @@ -965,7 +966,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ toggleConsole(); }else if( (ekc == keys.NUMPAD_ENTER || ekc == 76) && - event.shiftKey && + event.shiftKey && (event.metaKey || event.ctrlKey) ){ focusCommandLine(); @@ -1072,7 +1073,7 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ function objectLength(o){ var cnt = 0; for(var nm in o){ - cnt++ + cnt++; } return cnt; } @@ -1222,5 +1223,4 @@ dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ })(); - } diff --git a/lib/dojo/back.js b/lib/dojo/back.js index 5e2998c97..0bb4817b4 100644 --- a/lib/dojo/back.js +++ b/lib/dojo/back.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.back"]){ //_hasResource checks added by build. Do no dojo._hasResource["dojo.back"] = true; dojo.provide("dojo.back"); +dojo.getObject("back", true, dojo); + /*===== dojo.back = { // summary: Browser history management resources @@ -16,29 +18,23 @@ dojo.back = { =====*/ -(function(){ - var back = dojo.back; +(function(){ + var back = dojo.back, // everyone deals with encoding the hash slightly differently - function getHash(){ + getHash= back.getHash= function(){ var h = window.location.hash; if(h.charAt(0) == "#"){ h = h.substring(1); } - return dojo.isMozilla ? h : decodeURIComponent(h); - } + return dojo.isMozilla ? h : decodeURIComponent(h); + }, - function setHash(h){ + setHash= back.setHash= function(h){ if(!h){ h = ""; } window.location.hash = encodeURIComponent(h); historyCounter = history.length; - } - - // if we're in the test for these methods, expose them on dojo.back. ok'd with alex. - if(dojo.exists("tests.back-hash")){ - back.getHash = getHash; - back.setHash = setHash; - } - + }; + var initialHref = (typeof(window) !== "undefined") ? window.location.href : ""; var initialHash = (typeof(window) !== "undefined") ? getHash() : ""; var initialState = null; @@ -150,18 +146,11 @@ dojo.back = { return; } } - - if(dojo.isSafari && dojo.isSafari < 3){ - var hisLen = history.length; - if(hisLen > historyCounter) handleForwardButton(); - else if(hisLen < historyCounter) handleBackButton(); - historyCounter = hisLen; - } } }; back.init = function(){ - //summary: Initializes the undo stack. This must be called from a - // + // executing. + // // This type of syntax works with both xdomain and normal loaders, so it is good // practice to always use this idiom for on-the-fly code loading and in HTML script // blocks. If at some point you change loaders and where the code is loaded from, // it will all still work. - // + // // More on how dojo.require // `dojo.require("A.B")` first checks to see if symbol A.B is // defined. If it is, it is simply returned (nothing to do). - // + // // If it is not defined, it will look for `A/B.js` in the script root // directory. - // - // `dojo.require` throws an excpetion if it cannot find a file + // + // `dojo.require` throws an exception if it cannot find a file // to load, or if the symbol `A.B` is not defined after loading. - // + // // It returns the object `A.B`, but note the caveats above about on-the-fly loading and // HTML script blocks when the xdomain loader is loading a module. - // + // // `dojo.require()` does nothing about importing symbols into // the current namespace. It is presumed that the caller will - // take care of that. For example, to import all symbols into a - // local block, you might write: - // + // take care of that. + // + // example: + // To use dojo.require in conjunction with dojo.ready: + // + // | dojo.require("foo"); + // | dojo.require("bar"); + // | dojo.addOnLoad(function(){ + // | //you can now safely do something with foo and bar + // | }); + // + // example: + // For example, to import all symbols into a local block, you might write: + // // | with (dojo.require("A.B")) { // | ... // | } - // + // // And to import just the leaf symbol to a local variable: - // + // // | var B = dojo.require("A.B"); // | ... - // returns: the required namespace object + // + // returns: + // the required namespace object omitModuleCheck = d._global_omit_module_check || omitModuleCheck; //Check if it is already loaded. @@ -953,10 +965,8 @@ dojo.global = { // convert periods to slashes var relpath = d._getModuleSymbols(moduleName).join("/") + '.js'; - var modArg = !omitModuleCheck ? moduleName : null; var ok = d._loadPath(relpath, modArg); - if(!ok && !omitModuleCheck){ throw new Error("Could not load '" + moduleName + "'; last tried '" + relpath + "'"); } @@ -967,7 +977,7 @@ dojo.global = { // pass in false so we can give better error module = d._loadedModules[moduleName]; if(!module){ - throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); + throw new Error("symbol '" + moduleName + "' is not defined after loading '" + relpath + "'"); } } @@ -988,14 +998,14 @@ dojo.global = { // the file name. For example, `js/dojo/foo.js` must have // `dojo.provide("dojo.foo");` before any calls to // `dojo.require()` are made. - // + // // For backwards compatibility reasons, in addition to registering // the resource, `dojo.provide()` also ensures that the javascript // object for the module exists. For example, // `dojo.provide("dojox.data.FlickrStore")`, in addition to // registering that `FlickrStore.js` is a resource for the // `dojox.data` module, will ensure that the `dojox.data` - // javascript object exists, so that calls like + // javascript object exists, so that calls like // `dojo.data.foo = function(){ ... }` don't fail. // // In the case of a build where multiple javascript source files @@ -1004,11 +1014,11 @@ dojo.global = { // note that it includes multiple resources. // // resourceName: String - // A dot-sperated string identifying a resource. + // A dot-sperated string identifying a resource. // // example: // Safely create a `my` object, and make dojo.require("my.CustomModule") work - // | dojo.provide("my.CustomModule"); + // | dojo.provide("my.CustomModule"); //Make sure we have a string. resourceName = resourceName + ""; @@ -1065,7 +1075,7 @@ dojo.global = { if(condition === true){ // FIXME: why do we support chained require()'s here? does the build system? var args = []; - for(var i = 1; i < arguments.length; i++){ + for(var i = 1; i < arguments.length; i++){ args.push(arguments[i]); } d.require.apply(d, args); @@ -1075,13 +1085,13 @@ dojo.global = { dojo.requireAfterIf = d.requireIf; dojo.registerModulePath = function(/*String*/module, /*String*/prefix){ - // summary: + // summary: // Maps a module name to a path - // description: + // description: // An unregistered module is given the default path of ../[module], // relative to Dojo root. For example, module acme is mapped to // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. + // dojo.registerModulePath. // example: // If your dojo.js is located at this location in the web root: // | /myapp/js/dojo/dojo/dojo.js @@ -1094,7 +1104,7 @@ dojo.global = { // At which point you can then use dojo.require() to load the // modules (assuming they provide() the same things which are // required). The full code might be: - // | // | d._modulePrefixes[module] = { name: module, value: prefix }; - } - + }; + dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ // summary: // Declares translated resources and loads them if necessary, in the @@ -1115,7 +1125,7 @@ dojo.global = { // description: // Load translated resource bundles provided underneath the "nls" // directory within a package. Translated resources may be located in - // different packages throughout the source tree. + // different packages throughout the source tree. // // Each directory is named for a locale as specified by RFC 3066, // (http://www.ietf.org/rfc/rfc3066.txt), normalized in lowercase. @@ -1130,21 +1140,21 @@ dojo.global = { // preload the bundles to avoid data redundancy and the multiple // network hits normally required to load these resources. // - // moduleName: + // moduleName: // name of the package containing the "nls" directory in which the // bundle is found // - // bundleName: + // bundleName: // bundle name, i.e. the filename without the '.js' suffix. Using "nls" as a // a bundle name is not supported, since "nls" is the name of the folder // that holds bundles. Using "nls" as the bundle name will cause problems // with the custom build. // - // locale: + // locale: // the locale to load (optional) By default, the browser's user // locale as defined by dojo.locale // - // availableFlatLocales: + // availableFlatLocales: // A comma-separated list of the available, flattened locales for this // bundle. This argument should only be set by the build process. // @@ -1186,11 +1196,11 @@ dojo.global = { ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); dojo._Url = function(/*dojo._Url|String...*/){ - // summary: + // summary: // Constructor to create an object representing a URL. // It is marked as private, since we might consider removing // or simplifying it. - // description: + // description: // Each argument is evaluated in order relative to the next until // a canonical uri is produced. To get an absolute Uri relative to // the current document use: @@ -1257,7 +1267,7 @@ dojo.global = { } uri = []; - if(relobj.scheme){ + if(relobj.scheme){ uri.push(relobj.scheme, ":"); } if(relobj.authority){ @@ -1297,7 +1307,7 @@ dojo.global = { dojo._Url.prototype.toString = function(){ return this.uri; }; dojo.moduleUrl = function(/*String*/module, /*dojo._Url||String*/url){ - // summary: + // summary: // Returns a `dojo._Url` object relative to a module. // example: // | var pngPath = dojo.moduleUrl("acme","images/small.png"); @@ -1305,10 +1315,10 @@ dojo.global = { // | // create an image and set it's source to pngPath's value: // | var img = document.createElement("img"); // | // NOTE: we assign the string representation of the url object - // | img.src = pngPath.toString(); + // | img.src = pngPath.toString(); // | // add our image to the document // | dojo.body().appendChild(img); - // example: + // example: // you may de-reference as far as you like down the package // hierarchy. This is sometimes handy to avoid lenghty relative // urls or for building portable sub-packages. In this example, @@ -1319,9 +1329,9 @@ dojo.global = { // | // somewhere in a configuration block // | dojo.registerModulePath("acme.widget", "../../acme/widget"); // | dojo.registerModulePath("acme.util", "../../util"); - // | + // | // | // ... - // | + // | // | // code in a module using acme resources // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); @@ -1340,7 +1350,10 @@ dojo.global = { } return new d._Url(loc, url); // dojo._Url - } + }; + + + })(); /*===== @@ -1364,9 +1377,9 @@ dojo.isIE = { dojo.isSafari = { // example: // | if(dojo.isSafari){ ... } - // example: + // example: // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ + // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. // | } }; @@ -1409,7 +1422,6 @@ dojo = { // True if the client runs on Mac } =====*/ - if(typeof window != 'undefined'){ dojo.isBrowser = true; dojo._name = "browser"; @@ -1436,7 +1448,7 @@ if(typeof window != 'undefined'){ d.config.baseUrl = src.substring(0, m.index); } // and find out if we need to modify our behavior - var cfg = scripts[i].getAttribute("djConfig"); + var cfg = (scripts[i].getAttribute("djConfig") || scripts[i].getAttribute("data-dojo-config")); if(cfg){ var cfgo = eval("({ "+cfg+" })"); for(var x in cfgo){ @@ -1510,7 +1522,7 @@ if(typeof window != 'undefined'){ d._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0']; d._xhrObj = function(){ - // summary: + // summary: // does the work of portably generating a new XMLHTTPRequest object. var http, last_e; if(!dojo.isIE || !dojo.config.ieForceActiveXXhr){ @@ -1543,10 +1555,11 @@ if(typeof window != 'undefined'){ var stat = http.status || 0, lp = location.protocol; return (stat >= 200 && stat < 300) || // Boolean - stat == 304 || // allow any 2XX response code - stat == 1223 || // get it out of the cache + stat == 304 || // allow any 2XX response code + stat == 1223 || // get it out of the cache + // Internet Explorer mangled the status code // Internet Explorer mangled the status code OR we're Titanium/browser chrome/chrome extension requesting a local file - (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:") ); + (!stat && (lp == "file:" || lp == "chrome:" || lp == "chrome-extension:" || lp == "app:")); } //See if base tag is in use. @@ -1641,7 +1654,7 @@ if(typeof window != 'undefined'){ d.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ // summary: // registers a function to be triggered when window.onunload - // fires. + // fires. // description: // The first time that addOnWindowUnload is called Dojo // will register a page listener to trigger your unload @@ -1672,7 +1685,7 @@ if(typeof window != 'undefined'){ // description: // The first time that addOnUnload is called Dojo will // register a page listener to trigger your unload handler - // with. + // with. // // In a browser enviroment, the functions will be triggered // during the window.onbeforeunload event. Be careful of doing @@ -1685,7 +1698,7 @@ if(typeof window != 'undefined'){ // // Further note that calling dojo.addOnUnload will prevent // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. + // loading via back button instantaneous. // example: // | dojo.addOnUnload(functionPointer) // | dojo.addOnUnload(object, "functionName") @@ -1722,7 +1735,7 @@ if(typeof window != 'undefined'){ } } - if(!dojo.config.afterOnLoad){ + if(!dojo.config.afterOnLoad){ if(document.addEventListener){ //Standards. Hooray! Assumption here that if standards based, //it knows about DOMContentLoaded. It is OK if it does not, the fall through @@ -1739,10 +1752,10 @@ if(typeof window != 'undefined'){ if(!dojo.config.skipIeDomLoaded && self === self.top){ dojo._scrollIntervalId = setInterval(function (){ try{ - //When dojo is loaded into an iframe in an IE HTML Application + //When dojo is loaded into an iframe in an IE HTML Application //(HTA), such as in a selenium test, javascript in the iframe //can't see anything outside of it, so self===self.top is true, - //but the iframe is not the top window and doScroll will be + //but the iframe is not the top window and doScroll will be //available before document.body is set. Test document.body //before trying the doScroll trick if(document.body){ @@ -1805,16 +1818,20 @@ if(dojo.config.isDebug){ } if(dojo.config.debugAtAllCosts){ - dojo.config.useXDomain = true; - dojo.require("dojo._base._loader.loader_xd"); + // this breaks the new AMD based module loader. The XDomain won't be necessary + // anyway if you switch to the asynchronous loader + //dojo.config.useXDomain = true; + //dojo.require("dojo._base._loader.loader_xd"); dojo.require("dojo._base._loader.loader_debug"); dojo.require("dojo.i18n"); } + if(!dojo._hasResource["dojo._base.lang"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.lang"] = true; dojo.provide("dojo._base.lang"); + (function(){ var d = dojo, opts = Object.prototype.toString; @@ -1824,14 +1841,14 @@ dojo.provide("dojo._base.lang"); // summary: // Return true if it is a String return (typeof it == "string" || it instanceof String); // Boolean - } + }; dojo.isArray = function(/*anything*/ it){ // summary: // Return true if it is an Array. // Does not work on Arrays created in other windows. return it && (it instanceof Array || typeof it == "array"); // Boolean - } + }; dojo.isFunction = function(/*anything*/ it){ // summary: @@ -1845,7 +1862,7 @@ dojo.provide("dojo._base.lang"); // or null) return it !== undefined && (it === null || typeof it == "object" || d.isArray(it) || d.isFunction(it)); // Boolean - } + }; dojo.isArrayLike = function(/*anything*/ it){ // summary: @@ -1864,14 +1881,14 @@ dojo.provide("dojo._base.lang"); !d.isString(it) && !d.isFunction(it) && !(it.tagName && it.tagName.toLowerCase() == 'form') && (d.isArray(it) || isFinite(it.length)); - } + }; dojo.isAlien = function(/*anything*/ it){ // summary: // Returns true if it is a built-in function or some other kind of // oddball that *should* report as a function but doesn't return it && !d.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean - } + }; dojo.extend = function(/*Object*/ constructor, /*Object...*/ props){ // summary: @@ -1882,7 +1899,7 @@ dojo.provide("dojo._base.lang"); d._mixin(constructor.prototype, arguments[i]); } return constructor; // Object - } + }; dojo._hitchArgs = function(scope, method /*,...*/){ var pre = d._toArray(arguments, 2); @@ -1894,8 +1911,8 @@ dojo.provide("dojo._base.lang"); var f = named ? (scope||d.global)[method] : method; // invoke with collected args return f && f.apply(scope || this, pre.concat(args)); // mixed - } // Function - } + }; // Function + }; dojo.hitch = function(/*Object*/scope, /*Function|String*/method /*,...*/){ // summary: @@ -1903,7 +1920,7 @@ dojo.provide("dojo._base.lang"); // This allows for easy use of object member functions // in callbacks and other places in which the "this" keyword may // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters + // Any number of default positional arguments may be passed as parameters // beyond "method". // Each of these values will be used to "placehold" (similar to curry) // for the hitched function. @@ -1943,7 +1960,7 @@ dojo.provide("dojo._base.lang"); return function(){ return scope[method].apply(scope, arguments || []); }; // Function } return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function - } + }; /*===== dojo.delegate = function(obj, props){ @@ -1987,7 +2004,7 @@ dojo.provide("dojo._base.lang"); d._mixin(tmp, props); } return tmp; // Object - } + }; })(); /*===== @@ -2036,7 +2053,7 @@ dojo.provide("dojo._base.lang"); // | dojo.hitch(null, funcName, ...); var arr = [ null ]; return d.hitch.apply(d, arr.concat(d._toArray(arguments))); // Function - } + }; var extraNames = d._extraNames, extraLen = extraNames.length, empty = {}; @@ -2056,6 +2073,10 @@ dojo.provide("dojo._base.lang"); // Date return new Date(o.getTime()); // Date } + if(o instanceof RegExp){ + // RegExp + return new RegExp(o); // RegExp + } var r, i, l, s, name; if(d.isArray(o)){ // array @@ -2094,7 +2115,7 @@ dojo.provide("dojo._base.lang"); } } return r; // Object - } + }; /*===== dojo.trim = function(str){ @@ -2123,7 +2144,7 @@ dojo.provide("dojo._base.lang"); dojo.replace = function(tmpl, map, pattern){ // summary: // Performs parameterized substitutions on a string. Throws an - // exception if any parameter is unmatched. + // exception if any parameter is unmatched. // tmpl: String // String to be used as a template. // map: Object|Function @@ -2199,13 +2220,14 @@ dojo.provide("dojo._base.lang"); if(!dojo._hasResource["dojo._base.array"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.array"] = true; - dojo.provide("dojo._base.array"); + + (function(){ var _getParts = function(arr, obj, cb){ - return [ - (typeof arr == "string") ? arr.split("") : arr, + return [ + (typeof arr == "string") ? arr.split("") : arr, obj || dojo.global, // FIXME: cache the anonymous functions we create here? (typeof cb == "string") ? new Function("item", "index", "array", cb) : cb @@ -2224,7 +2246,7 @@ dojo.provide("dojo._base.array"); }; dojo.mixin(dojo, { - indexOf: function( /*Array*/ array, + indexOf: function( /*Array*/ array, /*Object*/ value, /*Integer?*/ fromIndex, /*Boolean?*/ findLast){ @@ -2233,7 +2255,7 @@ dojo.provide("dojo._base.array"); // passed array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's indexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf @@ -2258,7 +2280,7 @@ dojo.provide("dojo._base.array"); // array. If the value is not found, -1 is returned. // description: // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript + // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript // 1.6's lastIndexOf skips the holes in the sparse array. // For details on this method, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf @@ -2277,7 +2299,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. // For more details, see: @@ -2300,21 +2322,21 @@ dojo.provide("dojo._base.array"); // | ); // example: // | // use a scoped object member as the callback - // | + // | // | var obj = { - // | prefix: "logged via obj.callback:", + // | prefix: "logged via obj.callback:", // | callback: function(item){ // | console.log(this.prefix, item); // | } // | }; - // | + // | // | // specifying the scope function executes the callback in that scope // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], // | obj.callback, // | obj // | ); - // | + // | // | // alternately, we can accomplish the same thing with dojo.hitch() // | dojo.forEach( // | [ "thinger", "blah", "howdy", 10 ], @@ -2327,7 +2349,7 @@ dojo.provide("dojo._base.array"); // FIXME: there are several ways of handilng thisObject. Is // dojo.global always the default context? var _p = _getParts(arr, thisObject, callback); arr = _p[0]; - for(var i=0,l=arr.length; i1; }); // example: - // | // returns true + // | // returns true // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); return everyOrSome(true, arr, callback, thisObject); // Boolean }, @@ -2370,7 +2392,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. // For more details, see: @@ -2397,7 +2419,7 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. // For more details, see: @@ -2428,9 +2450,9 @@ dojo.provide("dojo._base.array"); // thisObject: // may be used to scope the call to callback // description: - // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when + // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when // run over sparse arrays, this implemenation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. + // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. // For more details, see: // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter // example: @@ -2464,10 +2486,10 @@ dojo.provide("dojo._base.declare"); var d = dojo, mix = d._mixin, op = Object.prototype, opts = op.toString, xtor = new Function, counter = 0, cname = "constructor"; - function err(msg){ throw new Error("declare: " + msg); } + function err(msg, cls){ throw new Error("declare" + (cls ? " " + cls : "") + ": " + msg); } // C3 Method Resolution Order (see http://www.python.org/download/releases/2.3/mro/) - function c3mro(bases){ + function c3mro(bases, className){ var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1, l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs; @@ -2475,9 +2497,9 @@ dojo.provide("dojo._base.declare"); for(; i < l; ++i){ base = bases[i]; if(!base){ - err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?"); + err("mixin #" + i + " is unknown. Did you use dojo.require to pull it in?", className); }else if(opts.call(base) != "[object Function]"){ - err("mixin #" + i + " is not a callable constructor."); + err("mixin #" + i + " is not a callable constructor.", className); } lin = base._meta ? base._meta.bases : [base]; top = 0; @@ -2530,7 +2552,7 @@ dojo.provide("dojo._base.declare"); } } if(clsCount){ - err("can't build consistent linearization"); + err("can't build consistent linearization", className); } // calculate the superclass offset @@ -2557,7 +2579,7 @@ dojo.provide("dojo._base.declare"); caller = args.callee; name = name || caller.nom; if(!name){ - err("can't deduce a name to call inherited()"); + err("can't deduce a name to call inherited()", this.declaredClass); } meta = this.constructor._meta; @@ -2575,7 +2597,7 @@ dojo.provide("dojo._base.declare"); // error detection chains = meta.chains; if(chains && typeof chains[name] == "string"){ - err("calling chained method with inherited: " + name); + err("calling chained method with inherited: " + name, this.declaredClass); } // find caller do{ @@ -2616,7 +2638,7 @@ dojo.provide("dojo._base.declare"); // error detection chains = meta.chains; if(!chains || chains.constructor !== "manual"){ - err("calling chained constructor with inherited"); + err("calling chained constructor with inherited", this.declaredClass); } // find caller while(base = bases[++pos]){ // intentional assignment @@ -2912,7 +2934,7 @@ dojo.provide("dojo._base.declare"); // build a prototype if(opts.call(superclass) == "[object Array]"){ // C3 MRO - bases = c3mro(superclass); + bases = c3mro(superclass, className); t = bases[0]; mixins = bases.length - t; superclass = bases[mixins]; @@ -2923,10 +2945,10 @@ dojo.provide("dojo._base.declare"); t = superclass._meta; bases = bases.concat(t ? t.bases : superclass); }else{ - err("base class is not a callable constructor."); + err("base class is not a callable constructor.", className); } }else if(superclass !== null){ - err("unknown base class. Did you use dojo.require to pull it in?") + err("unknown base class. Did you use dojo.require to pull it in?", className); } } if(superclass){ @@ -3500,27 +3522,28 @@ dojo._hasResource["dojo._base.connect"] = true; dojo.provide("dojo._base.connect"); + // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA // low-level delegation machinery dojo._listener = { // create a dispatcher function getDispatcher: function(){ - // following comments pulled out-of-line to prevent cloning them + // following comments pulled out-of-line to prevent cloning them // in the returned function. - // - indices (i) that are really in the array of listeners (ls) will + // - indices (i) that are really in the array of listeners (ls) will // not be in Array.prototype. This is the 'sparse array' trick - // that keeps us safe from libs that take liberties with built-in + // that keeps us safe from libs that take liberties with built-in // objects // - listener is invoked with current scope (this) return function(){ - var ap=Array.prototype, c=arguments.callee, ls=c._listeners, t=c.target; + var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target, // return value comes from original target function - var r = t && t.apply(this, arguments); + r = t && t.apply(this, arguments), // make local copy of listener array so it is immutable during processing - var i, lls; - lls = [].concat(ls); - + i, lls = [].concat(ls) + ; + // invoke listeners after target function for(i in lls){ if(!(i in ap)){ @@ -3534,12 +3557,12 @@ dojo._listener = { // add a listener to an object add: function(/*Object*/ source, /*String*/ method, /*Function*/ listener){ // Whenever 'method' is invoked, 'listener' will have the same scope. - // Trying to supporting a context object for the listener led to - // complexity. + // Trying to supporting a context object for the listener led to + // complexity. // Non trivial to provide 'once' functionality here // because listener could be the result of a dojo.hitch call, // in which case two references to the same hitch target would not - // be equivalent. + // be equivalent. source = source || dojo.global; // The source method is either null, a dispatcher, or some other function var f = source[method]; @@ -3549,15 +3572,15 @@ dojo._listener = { // original target function is special d.target = f; // dispatcher holds a list of listeners - d._listeners = []; + d._listeners = []; // redirect source to dispatcher f = source[method] = d; } - // The contract is that a handle is returned that can - // identify this listener for disconnect. + // The contract is that a handle is returned that can + // identify this listener for disconnect. // - // The type of the handle is private. Here is it implemented as Integer. - // DOM event code has this same contract but handle is Function + // The type of the handle is private. Here is it implemented as Integer. + // DOM event code has this same contract but handle is Function // in non-IE browsers. // // We could have separate lists of before and after listeners. @@ -3579,9 +3602,9 @@ dojo._listener = { // and dontFix argument here to help the autodocs. Actual DOM aware code is in // event.js. -dojo.connect = function(/*Object|null*/ obj, - /*String*/ event, - /*Object|null*/ context, +dojo.connect = function(/*Object|null*/ obj, + /*String*/ event, + /*Object|null*/ context, /*String|Function*/ method, /*Boolean?*/ dontFix){ // summary: @@ -3616,37 +3639,37 @@ dojo.connect = function(/*Object|null*/ obj, // arguments may simply be omitted such that fewer than 4 arguments // may be required to set up a connection See the examples for details. // - // The return value is a handle that is needed to + // The return value is a handle that is needed to // remove this connection with `dojo.disconnect`. // - // obj: - // The source object for the event function. + // obj: + // The source object for the event function. // Defaults to `dojo.global` if null. - // If obj is a DOM node, the connection is delegated + // If obj is a DOM node, the connection is delegated // to the DOM event manager (unless dontFix is true). // // event: - // String name of the event function in obj. + // String name of the event function in obj. // I.e. identifies a property `obj[event]`. // - // context: + // context: // The object that method will receive as "this". // // If context is null and method is a function, then method // inherits the context of event. - // - // If method is a string then context must be the source + // + // If method is a string then context must be the source // object object for method (context[method]). If context is null, // dojo.global is used. // // method: - // A function reference, or name of a function in context. - // The function identified by method fires after event does. + // A function reference, or name of a function in context. + // The function identified by method fires after event does. // method receives the same arguments as the event. // See context argument comments for information on method's scope. // // dontFix: - // If obj is a DOM node, set dontFix to true to prevent delegation + // If obj is a DOM node, set dontFix to true to prevent delegation // of this connection to the DOM event manager. // // example: @@ -3696,9 +3719,9 @@ dojo.connect = function(/*Object|null*/ obj, // used by non-browser hostenvs. always overriden by event.js dojo._connect = function(obj, event, context, method){ - var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); + var l=dojo._listener, h=l.add(obj, event, dojo.hitch(context, method)); return [obj, event, h, l]; // Handle -} +}; dojo.disconnect = function(/*Handle*/ handle){ // summary: @@ -3712,11 +3735,11 @@ dojo.disconnect = function(/*Handle*/ handle){ // let's not keep this reference delete handle[0]; } -} +}; dojo._disconnect = function(obj, event, handle, listener){ listener.remove(obj, event, handle); -} +}; // topic publish/subscribe @@ -3734,15 +3757,15 @@ dojo.subscribe = function(/*String*/ topic, /*Object|null*/ context, /*String|Fu // is invoked when topic is published. // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }); - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // support for 2 argument invocation (omitting context) depends on hitch return [topic, dojo._listener.add(dojo._topics, topic, dojo.hitch(context, method))]; /*Handle*/ -} +}; dojo.unsubscribe = function(/*Handle*/ handle){ // summary: - // Remove a topic listener. + // Remove a topic listener. // handle: // The handle returned from a call to subscribe. // example: @@ -3752,7 +3775,7 @@ dojo.unsubscribe = function(/*Handle*/ handle){ if(handle){ dojo._listener.remove(dojo._topics, handle[0], handle[1]); } -} +}; dojo.publish = function(/*String*/ topic, /*Array*/ args){ // summary: @@ -3760,11 +3783,11 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ // topic: // The name of the topic to publish. // args: - // An array of arguments. The arguments will be applied + // An array of arguments. The arguments will be applied // to each topic subscriber (as first class parameters, via apply). // example: // | dojo.subscribe("alerts", null, function(caption, message){ alert(caption + "\n" + message); }; - // | dojo.publish("alerts", [ "read this", "hello world" ]); + // | dojo.publish("alerts", [ "read this", "hello world" ]); // Note that args is an array, which is more efficient vs variable length // argument list. Ideally, var args would be implemented via Array @@ -3773,10 +3796,10 @@ dojo.publish = function(/*String*/ topic, /*Array*/ args){ if(f){ f.apply(this, args||[]); } -} +}; -dojo.connectPublisher = function( /*String*/ topic, - /*Object|null*/ obj, +dojo.connectPublisher = function( /*String*/ topic, + /*Object|null*/ obj, /*String*/ event){ // summary: // Ensure that every time obj.event() is called, a message is published @@ -3785,11 +3808,11 @@ dojo.connectPublisher = function( /*String*/ topic, // the topic. // topic: // The name of the topic to publish. - // obj: + // obj: // The source object for the event function. Defaults to dojo.global // if null. // event: - // The name of the event function in obj. + // The name of the event function in obj. // I.e. identifies a property obj[event]. // example: // | dojo.connectPublisher("/ajax/start", dojo, "xhrGet"); @@ -3804,42 +3827,43 @@ dojo._hasResource["dojo._base.Deferred"] = true; dojo.provide("dojo._base.Deferred"); + (function(){ - var mutator = function(){}; + var mutator = function(){}; var freeze = Object.freeze || function(){}; // A deferred provides an API for creating and resolving a promise. dojo.Deferred = function(/*Function?*/canceller){ // summary: // Deferreds provide a generic means for encapsulating an asynchronous - // operation and notifying users of the completion and result of the operation. + // operation and notifying users of the completion and result of the operation. // description: // The dojo.Deferred API is based on the concept of promises that provide a // generic interface into the eventual completion of an asynchronous action. - // The motivation for promises fundamentally is about creating a - // separation of concerns that allows one to achieve the same type of - // call patterns and logical data flow in asynchronous code as can be - // achieved in synchronous code. Promises allows one - // to be able to call a function purely with arguments needed for - // execution, without conflating the call with concerns of whether it is - // sync or async. One shouldn't need to alter a call's arguments if the - // implementation switches from sync to async (or vice versa). By having - // async functions return promises, the concerns of making the call are - // separated from the concerns of asynchronous interaction (which are + // The motivation for promises fundamentally is about creating a + // separation of concerns that allows one to achieve the same type of + // call patterns and logical data flow in asynchronous code as can be + // achieved in synchronous code. Promises allows one + // to be able to call a function purely with arguments needed for + // execution, without conflating the call with concerns of whether it is + // sync or async. One shouldn't need to alter a call's arguments if the + // implementation switches from sync to async (or vice versa). By having + // async functions return promises, the concerns of making the call are + // separated from the concerns of asynchronous interaction (which are // handled by the promise). - // - // The dojo.Deferred is a type of promise that provides methods for fulfilling the - // promise with a successful result or an error. The most important method for - // working with Dojo's promises is the then() method, which follows the + // + // The dojo.Deferred is a type of promise that provides methods for fulfilling the + // promise with a successful result or an error. The most important method for + // working with Dojo's promises is the then() method, which follows the // CommonJS proposed promise API. An example of using a Dojo promise: - // + // // | var resultingPromise = someAsyncOperation.then(function(result){ // | ... handle result ... // | }, // | function(error){ // | ... handle error ... // | }); - // - // The .then() call returns a new promise that represents the result of the + // + // The .then() call returns a new promise that represents the result of the // execution of the callback. The callbacks will never affect the original promises value. // // The dojo.Deferred instances also provide the following functions for backwards compatibility: @@ -3849,7 +3873,7 @@ dojo.provide("dojo._base.Deferred"); // * callback(result) // * errback(result) // - // Callbacks are allowed to return promisesthemselves, so + // Callbacks are allowed to return promises themselves, so // you can build complicated sequences of events with ease. // // The creator of the Deferred may specify a canceller. The canceller @@ -3909,7 +3933,7 @@ dojo.provide("dojo._base.Deferred"); // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | return d; @@ -3923,7 +3947,7 @@ dojo.provide("dojo._base.Deferred"); // | // again, so we could chain adding callbacks or save the // | // deferred for later should we need to be notified again. // example: - // In this example, renderLotsOfData is syncrhonous and so both + // In this example, renderLotsOfData is synchronous and so both // versions are pretty artificial. Putting the data display on a // timeout helps show why Deferreds rock: // @@ -3936,7 +3960,7 @@ dojo.provide("dojo._base.Deferred"); // | renderDataitem(data[x]); // | } // | d.callback(true); - // | }catch(e){ + // | }catch(e){ // | d.errback(new Error("rendering failed")); // | } // | }, 100); @@ -3951,11 +3975,11 @@ dojo.provide("dojo._base.Deferred"); // Note that the caller doesn't have to change his code at all to // handle the asynchronous case. var result, finished, isError, head, nextListener; - var promise = this.promise = {}; + var promise = (this.promise = {}); function complete(value){ if(finished){ - throw new Error("This deferred has already been resolved"); + throw new Error("This deferred has already been resolved"); } result = value; finished = true; @@ -3966,7 +3990,7 @@ dojo.provide("dojo._base.Deferred"); while(!mutated && nextListener){ var listener = nextListener; nextListener = nextListener.next; - if(mutated = (listener.progress == mutator)){ // assignment and check + if((mutated = (listener.progress == mutator))){ // assignment and check finished = false; } var func = (isError ? listener.error : listener.resolved); @@ -3978,6 +4002,9 @@ dojo.provide("dojo._base.Deferred"); continue; } var unchanged = mutated && newResult === undefined; + if(mutated && !unchanged){ + isError = newResult instanceof Error; + } listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult); } catch (e) { @@ -3990,7 +4017,7 @@ dojo.provide("dojo._base.Deferred"); listener.deferred.resolve(result); } } - } + } } // calling resolve will resolve the promise this.resolve = this.callback = function(value){ @@ -4005,7 +4032,7 @@ dojo.provide("dojo._base.Deferred"); // calling error will indicate that the promise failed this.reject = this.errback = function(error){ // summary: - // Fulfills the Deferred instance as an error with the provided error + // Fulfills the Deferred instance as an error with the provided error isError = true; this.fired = 1; complete(error); @@ -4022,7 +4049,7 @@ dojo.provide("dojo._base.Deferred"); while(listener){ var progress = listener.progress; progress && progress(update); - listener = listener.next; + listener = listener.next; } }; this.addCallbacks = function(/*Function?*/callback, /*Function?*/errback){ @@ -4031,35 +4058,35 @@ dojo.provide("dojo._base.Deferred"); }; // provide the implementation of the promise this.then = promise.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){ - // summary - // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for - // completion of a promise. The fulfilledHandler is called when the promise - // is fulfilled. The errorHandler is called when a promise fails. The - // progressHandler is called for progress events. All arguments are optional - // and non-function values are ignored. The progressHandler is not only an - // optional argument, but progress events are purely optional. Promise + // summary: + // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for + // completion of a promise. The fulfilledHandler is called when the promise + // is fulfilled. The errorHandler is called when a promise fails. The + // progressHandler is called for progress events. All arguments are optional + // and non-function values are ignored. The progressHandler is not only an + // optional argument, but progress events are purely optional. Promise // providers are not required to ever create progress events. - // - // This function will return a new promise that is fulfilled when the given - // fulfilledHandler or errorHandler callback is finished. This allows promise - // operations to be chained together. The value returned from the callback - // handler is the fulfillment value for the returned promise. If the callback + // + // This function will return a new promise that is fulfilled when the given + // fulfilledHandler or errorHandler callback is finished. This allows promise + // operations to be chained together. The value returned from the callback + // handler is the fulfillment value for the returned promise. If the callback // throws an error, the returned promise will be moved to failed state. - // + // // example: // An example of using a CommonJS compliant promise: // | asyncComputeTheAnswerToEverything(). // | then(addTwo). // | then(printResult, onError); - // | >44 - // + // | >44 + // var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel); var listener = { - resolved: resolvedCallback, - error: errorCallback, - progress: progressCallback, + resolved: resolvedCallback, + error: errorCallback, + progress: progressCallback, deferred: returnDeferred - }; + }; if(nextListener){ head = head.next = listener; } @@ -4085,7 +4112,7 @@ dojo.provide("dojo._base.Deferred"); deferred.reject(error); } } - } + }; freeze(promise); }; dojo.extend(dojo.Deferred, { @@ -4106,7 +4133,7 @@ dojo.provide("dojo._base.Deferred"); })(); dojo.when = function(promiseOrValue, /*Function?*/callback, /*Function?*/errback, /*Function?*/progressHandler){ // summary: - // This provides normalization between normal synchronous values and + // This provides normalization between normal synchronous values and // asynchronous promises, so you can interact with them in a common way // example: // | function printFirstAndList(items){ @@ -4139,6 +4166,7 @@ if(!dojo._hasResource["dojo._base.json"]){ //_hasResource checks added by build. dojo._hasResource["dojo._base.json"] = true; dojo.provide("dojo._base.json"); + dojo.fromJson = function(/*String*/ json){ // summary: // Parses a [JSON](http://json.org) string to return a JavaScript object. @@ -4146,12 +4174,12 @@ dojo.fromJson = function(/*String*/ json){ // Throws for invalid JSON strings, but it does not use a strict JSON parser. It // delegates to eval(). The content passed to this method must therefore come // from a trusted source. - // json: + // json: // a string literal of a JSON item, for instance: // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` return eval("(" + json + ")"); // Object -} +}; dojo._escapeString = function(/*String*/str){ //summary: @@ -4161,7 +4189,7 @@ dojo._escapeString = function(/*String*/str){ return ('"' + str.replace(/(["\\])/g, '\\$1') + '"'). replace(/[\f]/g, "\\f").replace(/[\b]/g, "\\b").replace(/[\n]/g, "\\n"). replace(/[\t]/g, "\\t").replace(/[\r]/g, "\\r"); // string -} +}; dojo.toJsonIndentStr = "\t"; dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _indentStr){ @@ -4205,8 +4233,8 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind if(it === null){ return "null"; } - if(dojo.isString(it)){ - return dojo._escapeString(it); + if(dojo.isString(it)){ + return dojo._escapeString(it); } // recurse var recurse = arguments.callee; @@ -4279,7 +4307,7 @@ dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint, /*String?*/ _ind output.push(newLine + nextIndent + keyStr + ":" + sep + val); } return "{" + output.join("," + sep) + newLine + _indentStr + "}"; // String -} +}; } @@ -4289,6 +4317,7 @@ dojo.provide("dojo._base.Color"); + (function(){ var d = dojo; @@ -4477,7 +4506,7 @@ dojo.provide("dojo._base.Color"); // Builds a `dojo.Color` from a 3 or 4 element array, mapping each // element in sequence to the rgb(a) values of the color. // example: - // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha + // | var myColor = dojo.colorFromArray([237,237,237,0.5]); // grey, 50% alpha // returns: // A dojo.Color object. If obj is passed, it will be the return value. var t = obj || new d.Color(); @@ -4502,26 +4531,13 @@ dojo.provide("dojo._base.Color"); }; })(); -} - -if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo._base"] = true; -dojo.provide("dojo._base"); - - - - - - - - - } if(!dojo._hasResource["dojo._base.window"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.window"] = true; dojo.provide("dojo._base.window"); + /*===== dojo.doc = { // summary: @@ -4547,7 +4563,7 @@ dojo.body = function(){ // Note: document.body is not defined for a strict xhtml document // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node -} +}; dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ // summary: @@ -4560,9 +4576,9 @@ dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocu dojo.doc = globalDocument; }; -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withGlobal = function( /*Object*/globalObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with globalObject as dojo.global and @@ -4581,11 +4597,11 @@ dojo.withGlobal = function( /*Object*/globalObject, }finally{ dojo.global = oldGlob; } -} +}; -dojo.withDoc = function( /*DocumentElement*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, +dojo.withDoc = function( /*DocumentElement*/documentObject, + /*Function*/callback, + /*Object?*/thisObject, /*Array?*/cbArguments){ // summary: // Invoke callback with documentObject as dojo.doc. @@ -4616,7 +4632,6 @@ dojo.withDoc = function( /*DocumentElement*/documentObject, dojo.isQuirks = oldQ; } }; - } @@ -4625,27 +4640,26 @@ dojo._hasResource["dojo._base.event"] = true; dojo.provide("dojo._base.event"); + // this file courtesy of the TurboAjax Group, licensed under a Dojo CLA (function(){ // DOM event listener machinery var del = (dojo._event_listener = { add: function(/*DOMNode*/ node, /*String*/ name, /*Function*/ fp){ - if(!node){return;} + if(!node){return;} name = del._normalizeEventName(name); fp = del._fixCallback(name, fp); - var oname = name; if( - !dojo.isIE && + !dojo.isIE && (name == "mouseenter" || name == "mouseleave") ){ var ofp = fp; - //oname = name; name = (name == "mouseenter") ? "mouseover" : "mouseout"; fp = function(e){ if(!dojo.isDescendant(e.relatedTarget, node)){ // e.type = oname; // FIXME: doesn't take? SJM: event.type is generally immutable. - return ofp.call(this, e); + return ofp.call(this, e); } } } @@ -4686,7 +4700,7 @@ dojo.provide("dojo._base.event"); }, _fixEvent: function(evt, sender){ // _fixCallback only attaches us to keypress. - // Switch on evt.type anyway because we might + // Switch on evt.type anyway because we might // be called directly from dojo.fixEvent. switch(evt.type){ case "keypress": @@ -4696,26 +4710,26 @@ dojo.provide("dojo._base.event"); return evt; }, _setKeyChar: function(evt){ - evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; + evt.keyChar = evt.charCode >= 32 ? String.fromCharCode(evt.charCode) : ''; evt.charOrCode = evt.keyChar || evt.keyCode; }, // For IE and Safari: some ctrl-key combinations (mostly w/punctuation) do not emit a char code in IE // we map those virtual key codes to ascii here // not valid for all (non-US) keyboards, so maybe we shouldn't bother - _punctMap: { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39 + _punctMap: { + 106:42, + 111:47, + 186:59, + 187:43, + 188:44, + 189:45, + 190:46, + 191:47, + 192:96, + 219:91, + 220:92, + 221:93, + 222:39 } }); @@ -4730,7 +4744,7 @@ dojo.provide("dojo._base.event"); // sender: DOMNode // node to treat as "currentTarget" return del._fixEvent(evt, sender); - } + }; dojo.stopEvent = function(/*Event*/ evt){ // summary: @@ -4741,7 +4755,7 @@ dojo.provide("dojo._base.event"); evt.preventDefault(); evt.stopPropagation(); // NOTE: below, this method is overridden for IE - } + }; // the default listener to use on dontFix nodes, overriden for IE var node_listener = dojo._listener; @@ -4756,16 +4770,16 @@ dojo.provide("dojo._base.event"); // create a listener var h = l.add(obj, event, dojo.hitch(context, method)); // formerly, the disconnect package contained "l" directly, but if client code - // leaks the disconnect package (by connecting it to a node), referencing "l" + // leaks the disconnect package (by connecting it to a node), referencing "l" // compounds the problem. // instead we return a listener id, which requires custom _disconnect below. // return disconnect package return [ obj, event, h, lid ]; - } + }; dojo._disconnect = function(obj, event, handle, listener){ ([dojo._listener, del, node_listener][listener]).remove(obj, event, handle); - } + }; // Constants @@ -4895,7 +4909,7 @@ dojo.provide("dojo._base.event"); }; =====*/ - if(dojo.isIE){ + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ dojo.mouseButtons = { LEFT: 1, MIDDLE: 4, @@ -4920,7 +4934,7 @@ dojo.provide("dojo._base.event"); } // IE event normalization - if(dojo.isIE){ + if(dojo.isIE){ var _trySetKeyCode = function(e, code){ try{ // squelch errors when keyCode is read-only @@ -4929,7 +4943,7 @@ dojo.provide("dojo._base.event"); }catch(e){ return 0; } - } + }; // by default, use the standard listener var iel = dojo._listener; @@ -4938,7 +4952,7 @@ dojo.provide("dojo._base.event"); if(!dojo.config._allow_leaks){ // custom listener that handles leak protection for DOM events node_listener = iel = dojo._ie_listener = { - // support handler indirection: event handler functions are + // support handler indirection: event handler functions are // referenced here. Event dispatchers hold only indices. handlers: [], // add a listener to an object @@ -4991,7 +5005,7 @@ dojo.provide("dojo._base.event"); }, remove: function(/*DOMNode*/ node, /*String*/ event, /*Handle*/ handle){ event = del._normalizeEventName(event); - iel.remove(node, event, handle); + iel.remove(node, event, handle); if(event=="onkeypress"){ var kd = node.onkeydown; if(--kd._stealthKeydownRefs <= 0){ @@ -5017,11 +5031,11 @@ dojo.provide("dojo._base.event"); // node to treat as "currentTarget" if(!evt){ var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; + evt = w.event; } if(!evt){return(evt);} - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); + evt.target = evt.srcElement; + evt.currentTarget = (sender || evt.srcElement); evt.layerX = evt.offsetX; evt.layerY = evt.offsetY; // FIXME: scroll position query is duped from dojo.html to @@ -5034,14 +5048,16 @@ dojo.provide("dojo._base.event"); var offset = dojo._getIeDocumentElementOffset(); evt.pageX = evt.clientX + dojo._fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; evt.pageY = evt.clientY + (docBody.scrollTop || 0) - offset.y; - if(evt.type == "mouseover"){ + if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; } - if(evt.type == "mouseout"){ + if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; } - evt.stopPropagation = del._stopPropagation; - evt.preventDefault = del._preventDefault; + if (dojo.isIE < 9 || dojo.isQuirks) { + evt.stopPropagation = del._stopPropagation; + evt.preventDefault = del._preventDefault; + } return del._fixKeys(evt); }, _fixKeys: function(evt){ @@ -5075,38 +5091,41 @@ dojo.provide("dojo._base.event"); var k=evt.keyCode; // These are Windows Virtual Key Codes // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp - var unprintable = k!=13 && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + var unprintable = (k!=13 || (dojo.isIE >= 9 && !dojo.isQuirks)) && k!=32 && k!=27 && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222); + // synthesize keypress for most unprintables and CTRL-keys if(unprintable||evt.ctrlKey){ var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ + }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } // simulate a keypress event var faux = del._synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); kp.call(evt.currentTarget, faux); - evt.cancelBubble = faux.cancelBubble; + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ + evt.cancelBubble = faux.cancelBubble; + } evt.returnValue = faux.returnValue; _trySetKeyCode(evt, faux.keyCode); } }, // Called in Event scope _stopPropagation: function(){ - this.cancelBubble = true; + this.cancelBubble = true; }, _preventDefault: function(){ // Setting keyCode to 0 is the only way to prevent certain keypresses (namely // ctrl-combinations that correspond to menu accelerator keys). // Otoh, it prevents upstream listeners from getting this information - // Try to split the difference here by clobbering keyCode only for ctrl + // Try to split the difference here by clobbering keyCode only for ctrl // combinations. If you still need to access the key upstream, bubbledKeyCode is // provided as a workaround. this.bubbledKeyCode = this.keyCode; @@ -5116,23 +5135,23 @@ dojo.provide("dojo._base.event"); }); // override stopEvent for IE - dojo.stopEvent = function(evt){ + dojo.stopEvent = (dojo.isIE < 9 || dojo.isQuirks) ? function(evt){ evt = evt || window.event; del._stopPropagation.call(evt); del._preventDefault.call(evt); - } + } : dojo.stopEvent; } del._synthesizeEvent = function(evt, props){ var faux = dojo.mixin({}, evt, props); del._setKeyChar(faux); - // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); + // FIXME: would prefer to use dojo.hitch: dojo.hitch(evt, evt.preventDefault); // but it throws an error when preventDefault is invoked on Safari // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; + faux.preventDefault = function(){ evt.preventDefault(); }; + faux.stopPropagation = function(){ evt.stopPropagation(); }; return faux; - } + }; // Opera event normalization if(dojo.isOpera){ @@ -5183,12 +5202,12 @@ dojo.provide("dojo._base.event"); var c = unprintable ? 0 : k; if(evt.ctrlKey){ if(k==3 || k==13){ - return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ + return; // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively + }else if(c>95 && c<106){ c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if(!evt.shiftKey && c>=65 && c<=90){ + }else if(!evt.shiftKey && c>=65 && c<=90){ c += 32; // map CTRL-[A-Z] to lowercase - }else{ + }else{ c = del._punctMap[c] || c; // map other problematic CTRL combinations to ASCII } } @@ -5245,25 +5264,26 @@ if(dojo.isIE){ } } return r; - } + }; dojo._getIeDispatcher = function(){ // ensure the returned function closes over nothing ("new Function" apparently doesn't close) return new Function(dojo._scopeName + "._ieDispatcher(arguments, this)"); // function - } + }; // keep this out of the closure to reduce RAM allocation dojo._event_listener._fixCallback = function(fp){ var f = dojo._event_listener._fixEvent; return function(e){ return fp.call(this, f(e, this)); }; - } + }; } } if(!dojo._hasResource["dojo._base.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.html"] = true; - dojo.provide("dojo._base.html"); + + // FIXME: need to add unit tests for all the semi-public methods try{ @@ -5307,13 +5327,13 @@ dojo.byId = function(id, doc){ // | } =====*/ -if(dojo.isIE || dojo.isOpera){ +if(dojo.isIE){ dojo.byId = function(id, doc){ if(typeof id != "string"){ return id; } var _d = doc || dojo.doc, te = _d.getElementById(id); - // attributes.id.value is better than just id in case the + // attributes.id.value is better than just id in case the // user has a name=id inside a form if(te && (te.attributes.id.value == id || te.id == id)){ return te; @@ -5334,8 +5354,9 @@ if(dojo.isIE || dojo.isOpera){ }; }else{ dojo.byId = function(id, doc){ - // inline'd type check - return (typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id; // DomNode + // inline'd type check. + // be sure to return null per documentation, to match IE branch. + return ((typeof id == "string") ? (doc || dojo.doc).getElementById(id) : id) || null; // DomNode }; } /*===== @@ -5418,16 +5439,16 @@ if(dojo.isIE || dojo.isOpera){ }; dojo.setSelectable = function(/*DomNode|String*/node, /*Boolean*/selectable){ - // summary: + // summary: // Enable or disable selection on a node // node: // id or reference to node // selectable: - // state to put the node in. false indicates unselectable, true + // state to put the node in. false indicates unselectable, true // allows selection. // example: // Make the node id="bar" unselectable - // | dojo.setSelectable("bar"); + // | dojo.setSelectable("bar"); // example: // Make the node id="bar" selectable // | dojo.setSelectable("bar", true); @@ -5510,7 +5531,7 @@ if(dojo.isIE || dojo.isOpera){ refNode = byId(refNode); if(typeof node == "string"){ // inline'd type check - node = node.charAt(0) == "<" ? d._toDom(node, refNode.ownerDocument) : byId(node); + node = /^\s*= 0){ s.width = w + u; } if(h >= 0){ s.height = h + u; } - } + }; dojo._isButtonTag = function(/*DomNode*/node) { // summary: // True if the node is BUTTON or INPUT.type="button". return node.tagName == "BUTTON" || node.tagName=="INPUT" && (node.getAttribute("type")||'').toUpperCase() == "BUTTON"; // boolean - } + }; dojo._usesBorderBox = function(/*DomNode*/node){ // summary: @@ -6152,7 +6187,7 @@ if(dojo.isIE || dojo.isOpera){ var n = node.tagName; return d.boxModel=="border-box" || n=="TABLE" || d._isButtonTag(node); // boolean - } + }; dojo._setContentSize = function(/*DomNode*/node, /*Number*/widthPx, /*Number*/heightPx, /*Object*/computedStyle){ // summary: @@ -6164,7 +6199,7 @@ if(dojo.isIE || dojo.isOpera){ if(heightPx >= 0){ heightPx += pb.h; } } d._setBox(node, NaN, NaN, widthPx, heightPx); - } + }; dojo._setMarginBox = function(/*DomNode*/node, /*Number?*/leftPx, /*Number?*/topPx, /*Number?*/widthPx, /*Number?*/heightPx, @@ -6196,7 +6231,7 @@ if(dojo.isIE || dojo.isOpera){ if(widthPx >= 0){ widthPx = Math.max(widthPx - pb.w - mb.w, 0); } if(heightPx >= 0){ heightPx = Math.max(heightPx - pb.h - mb.h, 0); } d._setBox(node, leftPx, topPx, widthPx, heightPx); - } + }; var _nilExtents = { l:0, t:0, w:0, h:0 }; @@ -6231,7 +6266,7 @@ if(dojo.isIE || dojo.isOpera){ var n = byId(node), s = gcs(n), b = box; return !b ? d._getMarginBox(n, s) : d._setMarginBox(n, b.l, b.t, b.w, b.h, s); // Object - } + }; dojo.contentBox = function(/*DomNode|String*/node, /*Object?*/box){ // summary: @@ -6256,14 +6291,14 @@ if(dojo.isIE || dojo.isOpera){ // All properties are optional if passed. var n = byId(node), s = gcs(n), b = box; return !b ? d._getContentBox(n, s) : d._setContentSize(n, b.w, b.h, s); // Object - } + }; // ============================= - // Positioning + // Positioning // ============================= var _sumAncestorProperties = function(node, prop){ - if(!(node = (node||0).parentNode)){return 0} + if(!(node = (node||0).parentNode)){return 0;} var val, retVal = 0, _b = d.body(); while(node && node.style){ if(gcs(node).position == "fixed"){ @@ -6279,19 +6314,19 @@ if(dojo.isIE || dojo.isOpera){ node = node.parentNode; } return retVal; // integer - } + }; dojo._docScroll = function(){ var n = d.global; - return "pageXOffset" in n? { x:n.pageXOffset, y:n.pageYOffset } : - (n=d.doc.documentElement, n.clientHeight? { x:d._fixIeBiDiScrollLeft(n.scrollLeft), y:n.scrollTop } : - (n=d.body(), { x:n.scrollLeft||0, y:n.scrollTop||0 })); + return "pageXOffset" in n + ? { x:n.pageXOffset, y:n.pageYOffset } + : (n = d.isQuirks? d.doc.body : d.doc.documentElement, { x:d._fixIeBiDiScrollLeft(n.scrollLeft || 0), y:n.scrollTop || 0 }); }; dojo._isBodyLtr = function(){ return "_bodyLtr" in d? d._bodyLtr : - d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean - } + d._bodyLtr = (d.body().dir || d.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean + }; dojo._getIeDocumentElementOffset = function(){ // summary: @@ -6312,7 +6347,7 @@ if(dojo.isIE || dojo.isOpera){ //NOTE: assumes we're being called in an IE browser - var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks + var de = d.doc.documentElement; // only deal with HTML element here, _abs handles body/quirks if(d.isIE < 8){ var r = de.getBoundingClientRect(); // works well for IE6+ @@ -6337,18 +6372,22 @@ if(dojo.isIE || dojo.isOpera){ }; dojo._fixIeBiDiScrollLeft = function(/*Integer*/ scrollLeft){ - // In RTL direction, scrollLeft should be a negative value, but IE < 8 + // In RTL direction, scrollLeft should be a negative value, but IE // returns a positive one. All codes using documentElement.scrollLeft // must call this function to fix this error, otherwise the position // will offset to right when there is a horizontal scrollbar. - var dd = d.doc; - if(d.isIE < 8 && !d._isBodyLtr()){ - var de = d.isQuirks ? dd.body : dd.documentElement; - return scrollLeft + de.clientWidth - de.scrollWidth; // Integer + var ie = d.isIE; + if(ie && !d._isBodyLtr()){ + var qk = d.isQuirks, + de = qk ? d.doc.body : d.doc.documentElement; + if(ie == 6 && !qk && d.global.frameElement && de.scrollHeight > de.clientHeight){ + scrollLeft += de.clientLeft; // workaround ie6+strict+rtl+iframe+vertical-scrollbar bug where clientWidth is too small by clientLeft pixels + } + return (ie < 8 || qk) ? (scrollLeft + de.clientWidth - de.scrollWidth) : -scrollLeft; // Integer } return scrollLeft; // Integer - } + }; // FIXME: need a setter for coords or a moveTo!! dojo._abs = dojo.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ @@ -6366,10 +6405,9 @@ if(dojo.isIE || dojo.isOpera){ // Uses the border-box model (inclusive of border and padding but // not margin). Does not act as a setter. - var db = d.body(), dh = db.parentNode, ret; node = byId(node); - if(node["getBoundingClientRect"]){ - // IE6+, FF3+, super-modern WebKit, and Opera 9.6+ all take this branch + var db = d.body(), + dh = db.parentNode, ret = node.getBoundingClientRect(); ret = { x: ret.left, y: ret.top, w: ret.right - ret.left, h: ret.bottom - ret.top }; if(d.isIE){ @@ -6386,60 +6424,7 @@ if(dojo.isIE || dojo.isOpera){ ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); } - }else{ - // FF2 and older WebKit - ret = { - x: 0, - y: 0, - w: node.offsetWidth, - h: node.offsetHeight - }; - if(node["offsetParent"]){ - ret.x -= _sumAncestorProperties(node, "scrollLeft"); - ret.y -= _sumAncestorProperties(node, "scrollTop"); - - var curnode = node; - do{ - var n = curnode.offsetLeft, - t = curnode.offsetTop; - ret.x += isNaN(n) ? 0 : n; - ret.y += isNaN(t) ? 0 : t; - - cs = gcs(curnode); - if(curnode != node){ - if(d.isMoz){ - // tried left+right with differently sized left/right borders - // it really is 2xleft border in FF, not left+right, even in RTL! - ret.x += 2 * px(curnode,cs.borderLeftWidth); - ret.y += 2 * px(curnode,cs.borderTopWidth); - }else{ - ret.x += px(curnode, cs.borderLeftWidth); - ret.y += px(curnode, cs.borderTopWidth); - } - } - // static children in a static div in FF2 are affected by the div's border as well - // but offsetParent will skip this div! - if(d.isMoz && cs.position=="static"){ - var parent=curnode.parentNode; - while(parent!=curnode.offsetParent){ - var pcs=gcs(parent); - if(pcs.position=="static"){ - ret.x += px(curnode,pcs.borderLeftWidth); - ret.y += px(curnode,pcs.borderTopWidth); - } - parent=parent.parentNode; - } - } - curnode = curnode.offsetParent; - }while((curnode != dh) && curnode); - }else if(node.x && node.y){ - ret.x += isNaN(node.x) ? 0 : node.x; - ret.y += isNaN(node.y) ? 0 : node.y; - } - } - // account for document scrolling - // if offsetParent is used, ret value already includes scroll position - // so we may have to actually remove that value if !includeScroll + // account for document scrolling if(includeScroll){ var scroll = d._docScroll(); ret.x += scroll.x; @@ -6447,7 +6432,7 @@ if(dojo.isIE || dojo.isOpera){ } return ret; // Object - } + }; dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ // summary: @@ -6469,7 +6454,7 @@ if(dojo.isIE || dojo.isOpera){ mb.x = abs.x; mb.y = abs.y; return mb; - } + }; // ============================= // Element attribute Functions @@ -6531,7 +6516,7 @@ if(dojo.isIE || dojo.isOpera){ // given element, and false otherwise var lc = name.toLowerCase(); return _forcePropNames[_propNames[lc] || name] || _hasAttr(byId(node), _attrNames[lc] || name); // Boolean - } + }; var _evtHdlrMap = {}, _ctr = 0, _attrId = dojo._scopeName + "attrid", @@ -6701,7 +6686,7 @@ if(dojo.isIE || dojo.isOpera){ // node's attribute // we need _hasAttr() here to guard against IE returning a default value return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything - } + }; dojo.removeAttr = function(/*DomNode|String*/ node, /*String*/ name){ // summary: @@ -6711,7 +6696,7 @@ if(dojo.isIE || dojo.isOpera){ // name: // the name of the attribute to remove byId(node).removeAttribute(_fixAttrName(name)); - } + }; dojo.getNodeProp = function(/*DomNode|String*/ node, /*String*/ name){ // summary: @@ -6730,7 +6715,7 @@ if(dojo.isIE || dojo.isOpera){ // node's attribute var attrName = _attrNames[lc] || name; return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything - } + }; dojo.create = function(tag, attrs, refNode, pos){ // summary: @@ -6745,7 +6730,7 @@ if(dojo.isIE || dojo.isOpera){ // Attributes are set by passing the optional object through `dojo.attr`. // See `dojo.attr` for noted caveats and nuances, and API if applicable. //| - // Placement is done via `dojo.place`, assuming the new node to be the action + // Placement is done via `dojo.place`, assuming the new node to be the action // node, passing along the optional reference node and position. // // tag: String|DomNode @@ -6783,7 +6768,7 @@ if(dojo.isIE || dojo.isOpera){ // | var n = dojo.create("div", null, dojo.body()); // // example: - // Create an UL, and populate it with LI's. Place the list as the first-child of a + // Create an UL, and populate it with LI's. Place the list as the first-child of a // node with id="someId": // | var ul = dojo.create("ul", null, "someId", "first"); // | var items = ["one", "two", "three", "four"]; @@ -6813,7 +6798,7 @@ if(dojo.isIE || dojo.isOpera){ if(attrs){ d.attr(tag, attrs); } if(refNode){ d.place(tag, refNode, pos); } return tag; // DomNode - } + }; /*===== dojo.empty = function(node){ @@ -6881,11 +6866,13 @@ if(dojo.isIE || dojo.isOpera){ // generate start/end tag strings to use // for the injection for each special tag wrap case. for(var param in tagWrap){ - var tw = tagWrap[param]; - tw.pre = param == "option" ? '' : "<" + tw.join("><") + ">"; + tw.post = ""; + // the last line is destructive: it reverses the array, + // but we don't care at this point + } } d._toDom = function(frag, doc){ @@ -6928,7 +6915,7 @@ if(dojo.isIE || dojo.isOpera){ df.appendChild(fc); } return df; // DOMNode - } + }; // ============================= // (CSS) Class Functions @@ -6954,6 +6941,7 @@ if(dojo.isIE || dojo.isOpera){ }; var spaces = /\s+/, a1 = [""], + fakeNode = {}, str2array = function(s){ if(typeof s == "string" || s instanceof String){ if(s.indexOf(" ") < 0){ @@ -7059,6 +7047,39 @@ if(dojo.isIE || dojo.isOpera){ if(node[_className] != cls){ node[_className] = cls; } }; + dojo.replaceClass = function(/*DomNode|String*/node, /*String|Array*/addClassStr, /*String|Array?*/removeClassStr){ + // summary: + // Replaces one or more classes on a node if not present. + // Operates more quickly than calling dojo.removeClass and dojo.addClass + // node: + // String ID or DomNode reference to remove the class from. + // addClassStr: + // A String class name to add, or several space-separated class names, + // or an array of class names. + // removeClassStr: + // A String class name to remove, or several space-separated class names, + // or an array of class names. + // + // example: + // | dojo.replaceClass("someNode", "add1 add2", "remove1 remove2"); + // + // example: + // Replace all classes with addMe + // | dojo.replaceClass("someNode", "addMe"); + // + // example: + // Available in `dojo.NodeList()` for multiple toggles + // | dojo.query(".findMe").replaceClass("addMe", "removeMe"); + + node = byId(node); + fakeNode.className = node.className; + dojo.removeClass(fakeNode, removeClassStr); + dojo.addClass(fakeNode, addClassStr); + if(node.className !== fakeNode.className){ + node.className = fakeNode.className; + } + }; + dojo.toggleClass = function(/*DomNode|String*/node, /*String|Array*/classStr, /*Boolean?*/condition){ // summary: // Adds a class to node if not present, or removes if present. @@ -7093,6 +7114,9 @@ dojo.provide("dojo._base.NodeList"); + + + (function(){ var d = dojo; @@ -7330,7 +7354,7 @@ dojo.provide("dojo._base.NodeList"); }); // add forEach actions - d.forEach(["connect", "addClass", "removeClass", "toggleClass", "empty", "removeAttr"], function(name){ + d.forEach(["connect", "addClass", "removeClass", "replaceClass", "toggleClass", "empty", "removeAttr"], function(name){ nlp[name] = adaptAsForEach(d[name]); }); @@ -7388,7 +7412,7 @@ dojo.provide("dojo._base.NodeList"); _cloneNode: function(/*DOMNode*/ node){ // summary: - // private utiltity to clone a node. Not very interesting in the vanilla + // private utility to clone a node. Not very interesting in the vanilla // dojo.NodeList case, but delegates could do interesting things like // clone event handlers if that is derivable from the node. return node.cloneNode(true); @@ -7482,7 +7506,7 @@ dojo.provide("dojo._base.NodeList"); if(this._parent){ return this._parent; }else{ - //Just return empy list. + //Just return empty list. return new this._NodeListCtor(); } }, @@ -7550,12 +7574,12 @@ dojo.provide("dojo._base.NodeList"); indexOf: function(value, fromIndex){ // summary: - // see dojo.indexOf(). The primary difference is that the acted-on + // see dojo.indexOf(). The primary difference is that the acted-on // array is implicitly this NodeList // value: Object: // The value to search for. // fromIndex: Integer?: - // The loction to start searching from. Optional. Defaults to 0. + // The location to start searching from. Optional. Defaults to 0. // description: // For more details on the behavior of indexOf, see Mozilla's // (indexOf @@ -7576,7 +7600,7 @@ dojo.provide("dojo._base.NodeList"); // value: Object // The value to search for. // fromIndex: Integer? - // The loction to start searching from. Optional. Defaults to 0. + // The location to start searching from. Optional. Defaults to 0. // returns: // Positive Integer or 0 for a match, -1 of not found. return d.lastIndexOf(this, value, fromIndex); // Integer @@ -7654,12 +7678,12 @@ dojo.provide("dojo._base.NodeList"); forEach: function(callback, thisObj){ // summary: - // see `dojo.forEach()`. The primary difference is that the acted-on + // see `dojo.forEach()`. The primary difference is that the acted-on // array is implicitly this NodeList. If you want the option to break out // of the forEach loop, use every() or some() instead. d.forEach(this, callback, thisObj); // non-standard return to allow easier chaining - return this; // dojo.NodeList + return this; // dojo.NodeList }, /*===== @@ -7676,7 +7700,7 @@ dojo.provide("dojo._base.NodeList"); // summary: // Returns border-box objects (x/y/w/h) of all elements in a node list // as an Array (*not* a NodeList). Acts like `dojo.position`, though - // assumes the node passed is each node in this list. + // assumes the node passed is each node in this list. return d.map(this, d.position); // Array }, @@ -7699,7 +7723,7 @@ dojo.provide("dojo._base.NodeList"); // Disable a group of buttons: // | dojo.query("button.group").attr("disabled", true); // example: - // innerHTML can be assigned or retreived as well: + // innerHTML can be assigned or retrieved as well: // | // get the innerHTML (as an array) for each list item // | var ih = dojo.query("li.replaceable").attr("innerHTML"); return; // dojo.NodeList @@ -7764,7 +7788,7 @@ dojo.provide("dojo._base.NodeList"); // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should // reference a function or be the name of the function in the global // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to + // (methodName, objOrFunc, funcName), objOrFunc must be the scope to // locate the bound function in // funcName: String? // optional. A string naming the function in objOrFunc to bind to the @@ -7810,7 +7834,7 @@ dojo.provide("dojo._base.NodeList"); // by queryOrNode. Returns the original NodeList. See: `dojo.place` // queryOrNode: // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used + // In the selector case, only the first matching element will be used // for relative positioning. // position: // can be one of: @@ -7825,18 +7849,15 @@ dojo.provide("dojo._base.NodeList"); return this.forEach(function(node){ d.place(node, item, position); }); // dojo.NodeList }, - orphan: function(/*String?*/ simpleFilter){ + orphan: function(/*String?*/ filter){ // summary: - // removes elements in this list that match the simple filter + // removes elements in this list that match the filter // from their parents and returns them as a new NodeList. - // simpleFilter: - // single-expression CSS rule. For example, ".thinger" or - // "#someId[attrName='value']" but not "div > span". In short, - // anything which does not invoke a descent to evaluate but - // can instead be used to test a single node is acceptable. + // filter: + // CSS selector like ".foo" or "div > span" // returns: - // `dojo.NodeList` containing the orpahned elements - return (simpleFilter ? d._filterQueryResult(this, simpleFilter) : this).forEach(orphan); // dojo.NodeList + // `dojo.NodeList` containing the orphaned elements + return (filter ? d._filterQueryResult(this, filter) : this).forEach(orphan); // dojo.NodeList }, adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){ @@ -7863,7 +7884,7 @@ dojo.provide("dojo._base.NodeList"); // FIXME: do we need this? query: function(/*String*/ queryStr){ // summary: - // Returns a new list whose memebers match the passed query, + // Returns a new list whose members match the passed query, // assuming elements of the current NodeList as the root for // each search. // example: @@ -7874,9 +7895,9 @@ dojo.provide("dojo._base.NodeList"); // |

    // | // |
    - // |

    great commedians may not be funny in person

    + // |

    great comedians may not be funny in person

    // |
    - // If we are presented with the following defintion for a NodeList: + // If we are presented with the following definition for a NodeList: // | var l = new dojo.NodeList(dojo.byId("foo"), dojo.byId("bar")); // it's possible to find all span elements under paragraphs // contained by these elements with this sub-query: @@ -7891,18 +7912,14 @@ dojo.provide("dojo._base.NodeList"); return this._wrap(apc.apply([], ret), this); // dojo.NodeList }, - filter: function(/*String|Function*/ simpleFilter){ + filter: function(/*String|Function*/ filter){ // summary: // "masks" the built-in javascript filter() method (supported // in Dojo via `dojo.filter`) to support passing a simple // string filter in addition to supporting filtering function // objects. - // simpleFilter: - // If a string, a single-expression CSS rule. For example, - // ".thinger" or "#someId[attrName='value']" but not "div > - // span". In short, anything which does not invoke a descent - // to evaluate but can instead be used to test a single node - // is acceptable. + // filter: + // If a string, a CSS rule like ".thinger" or "div > span". // example: // "regular" JS filter syntax as exposed in dojo.filter: // | dojo.query("*").filter(function(item){ @@ -7914,7 +7931,7 @@ dojo.provide("dojo._base.NodeList"); // | dojo.query("*").filter("p").styles("backgroundColor", "yellow"); var a = arguments, items = this, start = 0; - if(typeof simpleFilter == "string"){ // inline'd type check + if(typeof filter == "string"){ // inline'd type check items = d._filterQueryResult(this, a[0]); if(a.length == 1){ // if we only got a string query, pass back the filtered results @@ -7962,10 +7979,10 @@ dojo.provide("dojo._base.NodeList"); // | "before" // | "after" // | "replace" (replaces nodes in this NodeList with new content) - // | "only" (removes other children of the nodes so new content is hte only child) + // | "only" (removes other children of the nodes so new content is the only child) // or an offset in the childNodes property // example: - // appends content to the end if the position is ommitted + // appends content to the end if the position is omitted // | dojo.query("h3 > p").addContent("hey there!"); // example: // add something to the front of each element that has a @@ -7996,7 +8013,7 @@ dojo.provide("dojo._base.NodeList"); // text: "Send" // }); content = this._normalize(content, this[0]); - for(var i = 0, node; node = this[i]; i++){ + for(var i = 0, node; (node = this[i]); i++){ this._place(content, node, position, i > 0); } return this; //dojo.NodeList @@ -8025,11 +8042,11 @@ dojo.provide("dojo._base.NodeList"); // index: Integer... // One or more 0-based indices of items in the current // NodeList. A negative index will start at the end of the - // list and go backwards. + // list and go backwards. // // example: // Shorten the list to the first, second, and third elements - // | dojo.query("a").at(0, 1, 2).forEach(fn); + // | dojo.query("a").at(0, 1, 2).forEach(fn); // // example: // Retrieve the first and last elements of a unordered list: @@ -8039,13 +8056,13 @@ dojo.provide("dojo._base.NodeList"); // Do something for the first element only, but end() out back to // the original list and continue chaining: // | dojo.query("a").at(0).onclick(fn).end().forEach(function(n){ - // | console.log(n); // all anchors on the page. - // | }) + // | console.log(n); // all anchors on the page. + // | }) // // returns: // dojo.NodeList var t = new this._NodeListCtor(); - d.forEach(arguments, function(i){ + d.forEach(arguments, function(i){ if(i < 0){ i = this.length + i } if(this[i]){ t.push(this[i]); } }, this); @@ -8055,7 +8072,8 @@ dojo.provide("dojo._base.NodeList"); }); nl.events = [ - // summary: list of all DOM events used in NodeList + // summary: + // list of all DOM events used in NodeList "blur", "focus", "change", "click", "error", "keydown", "keypress", "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove", "mouseout", "mouseover", "mouseup", "submit" @@ -8068,7 +8086,7 @@ dojo.provide("dojo._base.NodeList"); var _oe = "on" + evt; nlp[_oe] = function(a, b){ return this.connect(_oe, a, b); - } + }; // FIXME: should these events trigger publishes? /* return (a ? this.connect(_oe, a, b) : @@ -8099,12 +8117,7 @@ dojo.provide("dojo._base.NodeList"); if(!dojo._hasResource["dojo._base.query"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo._base.query"] = true; -if(typeof dojo != "undefined"){ - dojo.provide("dojo._base.query"); - - - -} +(function(){ /* dojo.query() architectural overview: @@ -8138,7 +8151,7 @@ if(typeof dojo != "undefined"){ 5.) matched nodes are pruned to ensure they are unique (if necessary) */ -;(function(d){ +var defineQuery= function(d){ // define everything in a closure for compressability reasons. "d" is an // alias to "dojo" (or the toolkit alias object, e.g., "acme"). @@ -8146,7 +8159,7 @@ if(typeof dojo != "undefined"){ // Toolkit aliases //////////////////////////////////////////////////////////////////////// - // if you are extracing dojo.query for use in your own system, you will + // if you are extracting dojo.query for use in your own system, you will // need to provide these methods and properties. No other porting should be // necessary, save for configuring the system to use a class other than // dojo.NodeList as the return instance instantiator @@ -8157,7 +8170,7 @@ if(typeof dojo != "undefined"){ // d.isOpera; // float // d.isWebKit; // float // d.doc ; // document element - var qlc = d._NodeListCtor = d.NodeList; + var qlc = (d._NodeListCtor = d.NodeList); var getDoc = function(){ return d.doc; }; // NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo @@ -8188,7 +8201,7 @@ if(typeof dojo != "undefined"){ //////////////////////////////////////////////////////////////////////// var getQueryParts = function(query){ - // summary: + // summary: // state machine for query tokenization // description: // instead of using a brittle and slow regex-based CSS parser, @@ -8197,16 +8210,16 @@ if(typeof dojo != "undefined"){ // the same query run multiple times or under different root nodes // does not re-parse the selector expression but instead uses the // cached data structure. The state machine implemented here - // terminates on the last " " (space) charachter and returns an + // terminates on the last " " (space) character and returns an // ordered array of query component structures (or "parts"). Each // part represents an operator or a simple CSS filtering // expression. The structure for parts is documented in the code // below. - // NOTE: + // NOTE: // this code is designed to run fast and compress well. Sacrifices - // to readibility and maintainability have been made. Your best + // to readability and maintainability have been made. Your best // bet when hacking the tokenizer is to put The Donnas on *really* // loud (may we recommend their "Spend The Night" release?) and // just assume you're gonna make mistakes. Keep the unit tests @@ -8222,7 +8235,7 @@ if(typeof dojo != "undefined"){ } var ts = function(/*Integer*/ s, /*Integer*/ e){ - // trim and slice. + // trim and slice. // take an index to start a string slice from and an end position // and return a trimmed copy of that sub-string @@ -8230,12 +8243,12 @@ if(typeof dojo != "undefined"){ } // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; + var queryParts = []; // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, + var inBrackets = -1, inParens = -1, inMatchFor = -1, + inPseudo = -1, inClass = -1, inId = -1, inTag = -1, lc = "", cc = "", pStart; // iteration vars @@ -8244,7 +8257,7 @@ if(typeof dojo != "undefined"){ currentPart = null, // data structure representing the entire clause _cp = null; // the current pseudo or attr matcher - // several temporary variables are assigned to this structure durring a + // several temporary variables are assigned to this structure during a // potential sub-expression match: // attr: // a string representing the current full attribute match in a @@ -8299,9 +8312,9 @@ if(typeof dojo != "undefined"){ // needs to do any iteration. Many simple selectors don't, and // we can avoid significant construction-time work by advising // the system to skip them - currentPart.loops = ( - currentPart.pseudos.length || - currentPart.attrs.length || + currentPart.loops = ( + currentPart.pseudos.length || + currentPart.attrs.length || currentPart.classes.length ); currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string @@ -8331,9 +8344,9 @@ if(typeof dojo != "undefined"){ currentPart.infixOper = queryParts.pop(); currentPart.query = currentPart.infixOper.query + " " + currentPart.query; /* - console.debug( "swapping out the infix", - currentPart.infixOper, - "and attaching it to", + console.debug( "swapping out the infix", + currentPart.infixOper, + "and attaching it to", currentPart); */ } @@ -8342,15 +8355,15 @@ if(typeof dojo != "undefined"){ currentPart = null; } - // iterate over the query, charachter by charachter, building up a + // iterate over the query, character by character, building up a // list of query part objects for(; lc=cc, cc=query.charAt(x), x < ql; x++){ // cc: the current character in the match - // lc: the last charachter (if any) + // lc: the last character (if any) // someone is trying to escape something, so don't try to match any // fragments. We assume we're inside a literal. - if(lc == "\\"){ continue; } + if(lc == "\\"){ continue; } if(!currentPart){ // a part was just ended or none has yet been created // NOTE: I hate all this alloc, but it's shorter than writing tons of if's pStart = x; @@ -8393,7 +8406,7 @@ if(typeof dojo != "undefined"){ // the beginning of a match, which should be a tag name. This // might fault a little later on, but we detect that and this // iteration will still be fine. - inTag = x; + inTag = x; } if(inBrackets >= 0){ @@ -8401,7 +8414,7 @@ if(typeof dojo != "undefined"){ if(cc == "]"){ // if we're in a [...] clause and we end, do assignment if(!_cp.attr){ // no attribute match was previously begun, so we - // assume this is an attribute existance match in the + // assume this is an attribute existence match in the // form of [someAttributeName] _cp.attr = ts(inBrackets+1, x); }else{ @@ -8412,19 +8425,19 @@ if(typeof dojo != "undefined"){ var cmf = _cp.matchFor; if(cmf){ // try to strip quotes from the matchFor value. We want - // [attrName=howdy] to match the same + // [attrName=howdy] to match the same // as [attrName = 'howdy' ] if( (cmf.charAt(0) == '"') || (cmf.charAt(0) == "'") ){ _cp.matchFor = cmf.slice(1, -1); } } - // end the attribute by adding it to the list of attributes. + // end the attribute by adding it to the list of attributes. currentPart.attrs.push(_cp); _cp = null; // necessary? inBrackets = inMatchFor = -1; }else if(cc == "="){ // if the last char was an operator prefix, make sure we - // record it along with the "=" operator. + // record it along with the "=" operator. var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; _cp.type = addToCc+cc; _cp.attr = ts(inBrackets+1, x-addToCc.length); @@ -8433,7 +8446,7 @@ if(typeof dojo != "undefined"){ // now look for other clause parts }else if(inParens >= 0){ // if we're in a parenthetical expression, we need to figure - // out if it's attached to a pseduo-selector rule like + // out if it's attached to a pseudo-selector rule like // :nth-child(1) if(cc == ")"){ if(inPseudo >= 0){ @@ -8454,7 +8467,7 @@ if(typeof dojo != "undefined"){ endAll(); inPseudo = x; }else if(cc == "["){ - // start of an attribute match. + // start of an attribute match. endAll(); inBrackets = x; // provide a new structure for the attribute match to fill-in @@ -8468,15 +8481,15 @@ if(typeof dojo != "undefined"){ // expression if we're already inside a pseudo-selector match if(inPseudo >= 0){ // provide a new structure for the pseudo match to fill-in - _cp = { - name: ts(inPseudo+1, x), + _cp = { + name: ts(inPseudo+1, x), value: null } currentPart.pseudos.push(_cp); } inParens = x; }else if( - (cc == " ") && + (cc == " ") && // if it's a space char and the last char is too, consume the // current one without doing more work (lc != cc) @@ -8496,7 +8509,7 @@ if(typeof dojo != "undefined"){ // the basic building block of the yes/no chaining system. agree(f1, // f2) generates a new function which returns the boolean results of // both of the passed functions to a single logical-anded result. If - // either are not possed, the other is used exclusively. + // either are not passed, the other is used exclusively. if(!first){ return second; } if(!second){ return first; } @@ -8548,7 +8561,7 @@ if(typeof dojo != "undefined"){ } }, "$=": function(attr, value){ - // E[foo$="bar"] + // E[foo$="bar"] // an E element whose "foo" attribute value ends exactly // with the string "bar" var tval = " "+value; @@ -8558,7 +8571,7 @@ if(typeof dojo != "undefined"){ } }, "~=": function(attr, value){ - // E[foo~="bar"] + // E[foo~="bar"] // an E element whose "foo" attribute value is a list of // space-separated values, one of which is exactly equal // to "bar" @@ -8624,7 +8637,7 @@ if(typeof dojo != "undefined"){ if(!tret){ return -1; } var l = tret.length; - // we calcuate the parent length as a cheap way to invalidate the + // we calculate the parent length as a cheap way to invalidate the // cache. It's not 100% accurate, but it's much more honest than what // other libraries do if( cl == l && ci >= 0 && cl >= 0 ){ @@ -8636,11 +8649,11 @@ if(typeof dojo != "undefined"){ root["_l"] = l; ci = -1; for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ + if(_simpleNodeTest(te)){ te["_i"] = ++i; - if(node === te){ + if(node === te){ // NOTE: - // shortcuting the return at this step in indexing works + // shortcutting the return at this step in indexing works // very well for benchmarking but we avoid it here since // it leads to potential O(n^2) behavior in sequential // getNodexIndex operations on a previously un-indexed @@ -8671,7 +8684,7 @@ if(typeof dojo != "undefined"){ "first-child": function(){ return _lookLeft; }, "last-child": function(){ return _lookRight; }, "only-child": function(name, condition){ - return function(node){ + return function(node){ if(!_lookLeft(node)){ return false; } if(!_lookRight(node)){ return false; } return true; @@ -8702,7 +8715,7 @@ if(typeof dojo != "undefined"){ }, "not": function(name, condition){ var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; + var ignores = { el: 1 }; if(p.tag != "*"){ ignores.tag = 1; } @@ -8762,7 +8775,7 @@ if(typeof dojo != "undefined"){ } }; - var defaultGetter = (d.isIE) ? function(cond){ + var defaultGetter = (d.isIE < 9 || (dojo.isIE && dojo.isQuirks)) ? function(cond){ var clc = cond.toLowerCase(); if(clc == "class"){ cond = "className"; } return function(elem){ @@ -8776,7 +8789,7 @@ if(typeof dojo != "undefined"){ var getSimpleFilterFunc = function(query, ignores){ // generates a node tester function based on the passed query part. The - // query part is one of the structures generatd by the query parser + // query part is one of the structures generated by the query parser // when it creates the query AST. The "ignores" object specifies which // (if any) tests to skip, allowing the system to avoid duplicating // work where it may have already been taken into account by other @@ -8807,7 +8820,7 @@ if(typeof dojo != "undefined"){ if(isWildcard){ cname = cname.substr(0, cname.length-1); } - // I dislike the regex thing, even if memozied in a cache, but it's VERY short + // I dislike the regex thing, even if memoized in a cache, but it's VERY short var re = new RegExp("(?:^|\\s)" + cname + (isWildcard ? ".*" : "") + "(?:\\s|$)"); */ var re = new RegExp("(?:^|\\s)" + cname + "(?:\\s|$)"); @@ -8845,7 +8858,7 @@ if(typeof dojo != "undefined"){ if(!("id" in ignores)){ if(query.id){ - ff = agree(ff, function(elem){ + ff = agree(ff, function(elem){ return (!!elem && (elem.id == query.id)); }); } @@ -8853,7 +8866,7 @@ if(typeof dojo != "undefined"){ if(!ff){ if(!("default" in ignores)){ - ff = yesman; + ff = yesman; } } return ff; @@ -8904,7 +8917,7 @@ if(typeof dojo != "undefined"){ _simpleNodeTest(te) && (!bag || _isUnique(te, bag)) && (filterFunc(te, x)) - ){ + ){ ret.push(te); } } @@ -8946,7 +8959,7 @@ if(typeof dojo != "undefined"){ // filters them. The search may be specialized by infix operators // (">", "~", or "+") else it will default to searching all // descendants (the " " selector). Once a group of children is - // founde, a test function is applied to weed out the ones we + // found, a test function is applied to weed out the ones we // don't want. Many common cases can be fast-pathed. We spend a // lot of cycles to create a dispatcher that doesn't do more work // than necessary at any point since, unlike this function, the @@ -8999,7 +9012,7 @@ if(typeof dojo != "undefined"){ var filterFunc = getSimpleFilterFunc(query, { el: 1 }); var qt = query.tag; var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; + var ecs = getDoc()["getElementsByClassName"]; if(!oper){ // if there's no infix operator, then it's a descendant query. ID @@ -9009,8 +9022,8 @@ if(typeof dojo != "undefined"){ // testing shows that the overhead of yesman() is acceptable // and can save us some bytes vs. re-defining the function // everywhere. - filterFunc = (!query.loops && wildcardTag) ? - yesman : + filterFunc = (!query.loops && wildcardTag) ? + yesman : getSimpleFilterFunc(query, { el: 1, id: 1 }); retFunc = function(root, arr){ @@ -9025,9 +9038,9 @@ if(typeof dojo != "undefined"){ } } }else if( - ecs && + ecs && // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && + /\{\s*\[native code\]\s*\}/.test(String(ecs)) && query.classes.length && !cssCaseBug ){ @@ -9193,8 +9206,8 @@ if(typeof dojo != "undefined"){ // We need te detect the right "internal" webkit version to make this work. var wk = "WebKit/"; var is525 = ( - d.isWebKit && - (nua.indexOf(wk) > 0) && + d.isWebKit && + (nua.indexOf(wk) > 0) && (parseFloat(nua.split(wk)[1]) > 528) ); @@ -9205,7 +9218,7 @@ if(typeof dojo != "undefined"){ var qsa = "querySelectorAll"; var qsaAvail = ( - !!getDoc()[qsa] && + !!getDoc()[qsa] && // see #5832 (!d.isSafari || (d.isSafari > 3.1) || is525 ) ); @@ -9234,7 +9247,7 @@ if(typeof dojo != "undefined"){ var domCached = _queryFuncCacheDOM[query]; if(domCached){ return domCached; } - // TODO: + // TODO: // today we're caching DOM and QSA branches separately so we // recalc useQSA every time. If we had a way to tag root+query // efficiently, we'd be in good shape to do a global cache. @@ -9248,11 +9261,11 @@ if(typeof dojo != "undefined"){ forceDOM = true; } - var useQSA = ( + var useQSA = ( qsaAvail && (!forceDOM) && // as per CSS 3, we can't currently start w/ combinator: // http://www.w3.org/TR/css3-selectors/#w3cselgrammar - (specials.indexOf(qcz) == -1) && + (specials.indexOf(qcz) == -1) && // IE's QSA impl sucks on pseudos (!d.isIE || (query.indexOf(":") == -1)) && @@ -9265,11 +9278,11 @@ if(typeof dojo != "undefined"){ // elements, even though according to spec, selected options should // match :checked. So go nonQSA for it: // http://bugs.dojotoolkit.org/ticket/5179 - (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && + (query.indexOf(":contains") == -1) && (query.indexOf(":checked") == -1) && (query.indexOf("|=") == -1) // some browsers don't grok it ); - // TODO: + // TODO: // if we've got a descendant query (e.g., "> .thinger" instead of // just ".thinger") in a QSA-able doc, but are passed a child as a // root, it should be possible to give the item a synthetic ID and @@ -9278,7 +9291,7 @@ if(typeof dojo != "undefined"){ if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? + var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? (query + " *") : query; return _queryFuncCacheQSA[query] = function(root){ try{ @@ -9305,9 +9318,9 @@ if(typeof dojo != "undefined"){ }else{ // DOM branch var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? + return _queryFuncCacheDOM[query] = ((parts.length < 2) ? // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - getStepQueryFunc(query) : + getStepQueryFunc(query) : // if it *is* a complex query, break it up into its // constituent parts and return a dispatcher that will // merge the parts when run @@ -9337,7 +9350,7 @@ if(typeof dojo != "undefined"){ }else{ return node.uniqueID; } - } : + } : function(node){ return (node._uid || (node._uid = ++_zipIdx)); }; @@ -9346,7 +9359,7 @@ if(typeof dojo != "undefined"){ // to flatten a list of unique items, but rather just tell if the item in // question is already in the bag. Normally we'd just use hash lookup to do // this for us but IE's DOM is busted so we can't really count on that. On - // the upside, it gives us a built in unique ID function. + // the upside, it gives us a built in unique ID function. var _isUnique = function(node, bag){ if(!bag){ return 1; } var id = _nodeUID(node); @@ -9358,7 +9371,7 @@ if(typeof dojo != "undefined"){ // returning a list of "uniques", hopefully in doucment order var _zipIdxName = "_zipIdx"; var _zip = function(arr){ - if(arr && arr.nozip){ + if(arr && arr.nozip){ return (qlc._wrap) ? qlc._wrap(arr) : arr; } // var ret = new d._NodeListCtor(); @@ -9377,7 +9390,7 @@ if(typeof dojo != "undefined"){ var szidx = _zipIdx+""; arr[0].setAttribute(_zipIdxName, szidx); for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ + if(arr[x].getAttribute(_zipIdxName) != szidx){ ret.push(te); } te.setAttribute(_zipIdxName, szidx); @@ -9385,7 +9398,7 @@ if(typeof dojo != "undefined"){ }else if(d.isIE && arr.commentStrip){ try{ for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ + if(_isElement(te)){ ret.push(te); } } @@ -9393,7 +9406,7 @@ if(typeof dojo != "undefined"){ }else{ if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ + if(arr[x][_zipIdxName] != _zipIdx){ ret.push(te); } te[_zipIdxName] = _zipIdx; @@ -9423,11 +9436,11 @@ if(typeof dojo != "undefined"){ // * class selectors (e.g., `.foo`) // * node type selectors like `span` // * ` ` descendant selectors - // * `>` child element selectors + // * `>` child element selectors // * `#foo` style ID selectors // * `*` universal selector - // * `~`, the immediately preceeded-by sibling selector - // * `+`, the preceeded-by sibling selector + // * `~`, the preceded-by sibling selector + // * `+`, the immediately preceded-by sibling selector // * attribute queries: // | * `[foo]` attribute presence selector // | * `[foo='bar']` attribute value exact match @@ -9448,14 +9461,14 @@ if(typeof dojo != "undefined"){ // palette of selectors and when combined with functions for // manipulation presented by dojo.NodeList, many types of DOM // manipulation operations become very straightforward. - // + // // Unsupported Selectors: // ---------------------- // // While dojo.query handles many CSS3 selectors, some fall outside of - // what's resaonable for a programmatic node querying engine to + // what's reasonable for a programmatic node querying engine to // handle. Currently unsupported selectors include: - // + // // * namespace-differentiated selectors of any form // * all `::` pseduo-element selectors // * certain pseduo-selectors which don't get a lot of day-to-day use: @@ -9464,10 +9477,10 @@ if(typeof dojo != "undefined"){ // | * `:root`, `:active`, `:hover`, `:visisted`, `:link`, // `:enabled`, `:disabled` // * `:*-of-type` pseudo selectors - // + // // dojo.query and XML Documents: // ----------------------------- - // + // // `dojo.query` (as of dojo 1.2) supports searching XML documents // in a case-sensitive manner. If an HTML document is served with // a doctype that forces case-sensitivity (e.g., XHTML 1.1 @@ -9577,12 +9590,12 @@ if(typeof dojo != "undefined"){ // NOTE: // Opera in XHTML mode doesn't detect case-sensitivity correctly // and it's not clear that there's any way to test for it - caseSensitive = (root.contentType && root.contentType=="application/xml") || + caseSensitive = (root.contentType && root.contentType=="application/xml") || (d.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && + (!!od) && (d.isIE ? od.xml : (root.xmlVersion||od.xmlVersion)); - // NOTE: + // NOTE: // adding "true" as the 2nd argument to getQueryFunc is useful for // testing the DOM branch without worrying about the // behavior/performance of the QSA branch. @@ -9599,16 +9612,98 @@ if(typeof dojo != "undefined"){ // FIXME: need to add infrastructure for post-filtering pseudos, ala :last d.query.pseudos = pseudos; - // one-off function for filtering a NodeList based on a simple selector - d._filterQueryResult = function(nodeList, simpleFilter){ - var tmpNodeList = new d._NodeListCtor(); - var filterFunc = getSimpleFilterFunc(getQueryParts(simpleFilter)[0]); + // function for filtering a NodeList based on a selector, optimized for simple selectors + d._filterQueryResult = function(/*NodeList*/ nodeList, /*String*/ filter, /*String|DOMNode?*/ root){ + var tmpNodeList = new d._NodeListCtor(), + parts = getQueryParts(filter), + filterFunc = + (parts.length == 1 && !/[^\w#\.]/.test(filter)) ? + getSimpleFilterFunc(parts[0]) : + function(node) { + return dojo.query(filter, root).indexOf(node) != -1; + }; for(var x = 0, te; te = nodeList[x]; x++){ if(filterFunc(te)){ tmpNodeList.push(te); } } return tmpNodeList; } -})(this["queryPortability"]||this["acme"]||dojo); +};//end defineQuery + +var defineAcme= function(){ + // a self-sufficient query impl + acme = { + trim: function(/*String*/ str){ + // summary: + // trims whitespaces from both sides of the string + 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 + }, + forEach: function(/*String*/ arr, /*Function*/ callback, /*Object?*/ thisObject){ + // summary: + // an iterator function that passes items, indexes, + // and the array to a callback + if(!arr || !arr.length){ return; } + for(var i=0,l=arr.length; i= 0) ? tv: undefined; + acme.isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : undefined; + acme.isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; + acme.isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; + var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); + if(index && !acme.isChrome){ + acme.isSafari = parseFloat(dav.split("Version/")[1]); + if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ + acme.isSafari = 2; + } + } + if(document.all && !acme.isOpera){ + acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; + } + + Array._wrap = function(arr){ return arr; }; + return acme; +}; + + //prefers queryPortability, then acme, then dojo + if(this["dojo"]){ + dojo.provide("dojo._base.query"); + + + defineQuery(this["queryPortability"]||this["acme"]||dojo); + }else{ + defineQuery(this["queryPortability"]||this["acme"]||defineAcme()); + } + +})(); /* */ @@ -9623,6 +9718,7 @@ dojo.provide("dojo._base.xhr"); + (function(){ var _d = dojo, cfg = _d.config; @@ -9663,7 +9759,7 @@ dojo.provide("dojo._base.xhr"); var type = (item.type||"").toLowerCase(); if(_in && type && !item.disabled){ if(type == "radio" || type == "checkbox"){ - if(item.checked){ ret = item.value } + if(item.checked){ ret = item.value; } }else if(item.multiple){ ret = []; _d.query("option", item).forEach(function(opt){ @@ -9677,7 +9773,7 @@ dojo.provide("dojo._base.xhr"); } } return ret; // Object - } + }; dojo.formToObject = function(/*DOMNode||String*/ formNode){ // summary: @@ -9704,7 +9800,7 @@ dojo.provide("dojo._base.xhr"); // yields this object structure as the result of a call to // formToObject(): // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -9725,7 +9821,7 @@ dojo.provide("dojo._base.xhr"); } }); return ret; // Object - } + }; dojo.objectToQuery = function(/*Object*/ map){ // summary: @@ -9734,7 +9830,7 @@ dojo.provide("dojo._base.xhr"); // example: // this object: // - // | { + // | { // | blah: "blah", // | multi: [ // | "thud", @@ -9743,7 +9839,7 @@ dojo.provide("dojo._base.xhr"); // | }; // // yields the following query string: - // + // // | "blah=blah&multi=thud&multi=thonk" // FIXME: need to implement encodeAscii!! @@ -9764,21 +9860,21 @@ dojo.provide("dojo._base.xhr"); } } return pairs.join("&"); // String - } + }; dojo.formToQuery = function(/*DOMNode||String*/ formNode){ // summary: // Returns a URL-encoded string representing the form passed as either a // node or string ID identifying the form to serialize return _d.objectToQuery(_d.formToObject(formNode)); // String - } + }; dojo.formToJson = function(/*DOMNode||String*/ formNode, /*Boolean?*/prettyPrint){ // summary: // Create a serialized JSON string from a form node or string // ID identifying the form to serialize return _d.toJson(_d.formToObject(formNode), prettyPrint); // String - } + }; dojo.queryToObject = function(/*String*/ str){ // summary: @@ -9789,7 +9885,7 @@ dojo.provide("dojo._base.xhr"); // This string: // // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // + // // results in this object structure: // // | { @@ -9797,7 +9893,7 @@ dojo.provide("dojo._base.xhr"); // | thinger: " spaces =blah", // | zonk: "blarg" // | } - // + // // Note that spaces and other urlencoded entities are correctly // handled. @@ -9822,7 +9918,7 @@ dojo.provide("dojo._base.xhr"); } }); return ret; // Object - } + }; // need to block async callbacks from snatching this thread as the result // of an async callback might call another sync XHR, this hangs khtml forever @@ -9832,7 +9928,7 @@ dojo.provide("dojo._base.xhr"); // MOW: remove dojo._contentHandlers alias in 2.0 var handlers = _d._contentHandlers = dojo.contentHandlers = { - // summary: + // summary: // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. // @@ -9840,41 +9936,41 @@ dojo.provide("dojo._base.xhr"); // A map of availble XHR transport handle types. Name matches the // `handleAs` attribute passed to XHR calls. Each contentHandler is // called, passing the xhr object for manipulation. The return value - // from the contentHandler will be passed to the `load` or `handle` - // functions defined in the original xhr call. - // + // from the contentHandler will be passed to the `load` or `handle` + // functions defined in the original xhr call. + // // example: // Creating a custom content-handler: // | dojo.contentHandlers.makeCaps = function(xhr){ // | return xhr.responseText.toUpperCase(); // | } // | // and later: - // | dojo.xhrGet({ + // | dojo.xhrGet({ // | url:"foo.txt", // | handleAs:"makeCaps", // | load: function(data){ /* data is a toUpper version of foo.txt */ } // | }); - text: function(xhr){ + text: function(xhr){ // summary: A contentHandler which simply returns the plaintext response data - return xhr.responseText; + return xhr.responseText; }, json: function(xhr){ // summary: A contentHandler which returns a JavaScript object created from the response data return _d.fromJson(xhr.responseText || null); }, - "json-comment-filtered": function(xhr){ - // summary: A contentHandler which expects comment-filtered JSON. - // description: - // A contentHandler which expects comment-filtered JSON. + "json-comment-filtered": function(xhr){ + // summary: A contentHandler which expects comment-filtered JSON. + // description: + // A contentHandler which expects comment-filtered JSON. // the json-comment-filtered option was implemented to prevent // "JavaScript Hijacking", but it is less secure than standard JSON. Use // standard JSON instead. JSON prefixing can be used to subvert hijacking. - // + // // Will throw a notice suggesting to use application/json mimetype, as // json-commenting can introduce security issues. To decrease the chances of hijacking, - // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& - // + // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& + // // use djConfig.useCommentedJson = true to turn off the notice if(!dojo.config.useCommentedJson){ console.warn("Consider using the standard mimetype:application/json." @@ -9892,7 +9988,7 @@ dojo.provide("dojo._base.xhr"); } return _d.fromJson(value.substring(cStartIdx+2, cEndIdx)); }, - javascript: function(xhr){ + javascript: function(xhr){ // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript // FIXME: try Moz and IE specific eval variants? @@ -9904,7 +10000,7 @@ dojo.provide("dojo._base.xhr"); if(_d.isIE && (!result || !result.documentElement)){ //WARNING: this branch used by the xml handling in dojo.io.iframe, //so be sure to test dojo.io.iframe if making changes below. - var ms = function(n){ return "MSXML" + n + ".DOMDocument"; } + var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }; var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; _d.some(dp, function(p){ try{ @@ -9919,7 +10015,7 @@ dojo.provide("dojo._base.xhr"); return result; // DOMDocument }, "json-comment-optional": function(xhr){ - // summary: A contentHandler which checks the presence of comment-filtered JSON and + // summary: A contentHandler which checks the presence of comment-filtered JSON and // alternates between the `json` and `json-comment-filtered` contentHandlers. if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ return handlers["json-comment-filtered"](xhr); @@ -9951,7 +10047,7 @@ dojo.provide("dojo._base.xhr"); // handleAs: String? // Acceptable values depend on the type of IO // transport (see specific IO calls for more information). - // rawBody: String? + // rawBody: String? // Sets the raw body for an HTTP request. If this is used, then the content // property is ignored. This is mostly useful for HTTP methods that have // a body to their requests, like PUT or POST. This property can be used instead @@ -10096,7 +10192,7 @@ dojo.provide("dojo._base.xhr"); /*Function*/canceller, /*Function*/okHandler, /*Function*/errHandler){ - // summary: + // summary: // sets up the Deferred and ioArgs property on the Deferred so it // can be used in an io call. // args: @@ -10112,19 +10208,19 @@ dojo.provide("dojo._base.xhr"); // object returned from this function. // errHandler: // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the + // to do cleanup on an error. It will receive two arguments: error (the // Error object) and dfd, the Deferred object returned from this function. var ioArgs = {args: args, url: args.url}; //Get values from form if requestd. var formObject = null; - if(args.form){ + if(args.form){ var form = _d.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); + ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); formObject = _d.formToObject(form); } @@ -10197,7 +10293,7 @@ dojo.provide("dojo._base.xhr"); // FIXME: need to wire up the xhr object's abort method to something // analagous in the Deferred return d; - } + }; var _deferredCancel = function(/*Deferred*/dfd){ // summary: canceller function for dojo._ioSetArgs call. @@ -10214,13 +10310,13 @@ dojo.provide("dojo._base.xhr"); err.dojoType="cancel"; } return err; - } + }; var _deferredOk = function(/*Deferred*/dfd){ // summary: okHandler function for dojo._ioSetArgs call. var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); return ret === undefined ? null : ret; - } + }; var _deferError = function(/*Error*/error, /*Deferred*/dfd){ // summary: errHandler function for dojo._ioSetArgs call. @@ -10228,7 +10324,7 @@ dojo.provide("dojo._base.xhr"); console.error(error); } return error; - } + }; // avoid setting a timer per request. It degrades performance on IE // something fierece if we don't use unified loops. @@ -10252,7 +10348,7 @@ dojo.provide("dojo._base.xhr"); }; var _watchInFlight = function(){ - //summary: + //summary: // internal method that checks each inflight XMLHttpRequest to see // if it has completed or if the timeout situation applies. @@ -10267,7 +10363,7 @@ dojo.provide("dojo._base.xhr"); var dfd = tif.dfd; var func = function(){ if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); + _inFlight.splice(i--, 1); _pubCount -= 1; }else if(tif.ioCheck(dfd)){ _inFlight.splice(i--, 1); @@ -10305,7 +10401,7 @@ dojo.provide("dojo._base.xhr"); _inFlightIntvl = null; return; } - } + }; dojo._ioCancelAll = function(){ //summary: Cancels all pending IO requests, regardless of IO type @@ -10317,7 +10413,7 @@ dojo.provide("dojo._base.xhr"); }catch(e){/*squelch*/} }); }catch(e){/*squelch*/} - } + }; //Automatically call cancel all io calls on unload //in IE for trac issue #2357. @@ -10340,10 +10436,10 @@ dojo.provide("dojo._base.xhr"); _pubCount += 1; _d.publish("/dojo/io/send", [dfd]); } - } + }; _d._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ - // summary: + // summary: // Watches the io request represented by dfd to see if it completes. // dfd: Deferred // The Deferred object to watch. @@ -10373,16 +10469,16 @@ dojo.provide("dojo._base.xhr"); if(args.sync){ _watchInFlight(); } - } + }; var _defaultContentType = "application/x-www-form-urlencoded"; var _validCheck = function(/*Deferred*/dfd){ return dfd.ioArgs.xhr.readyState; //boolean - } + }; var _ioCheck = function(/*Deferred*/dfd){ return 4 == dfd.ioArgs.xhr.readyState; //boolean - } + }; var _resHandle = function(/*Deferred*/dfd){ var xhr = dfd.ioArgs.xhr; if(_d._isDocumentOk(xhr)){ @@ -10393,7 +10489,7 @@ dojo.provide("dojo._base.xhr"); err.responseText = xhr.responseText; dfd.errback(err); } - } + }; dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ //summary: Adds query params discovered by the io deferred construction to the URL. @@ -10401,8 +10497,8 @@ dojo.provide("dojo._base.xhr"); if(ioArgs.query.length){ ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; ioArgs.query = null; - } - } + } + }; /*===== dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { @@ -10503,13 +10599,13 @@ dojo.provide("dojo._base.xhr"); _d._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); xhr = null; return dfd; // dojo.Deferred - } + }; dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: + // summary: // Sends an HTTP GET request to the server. return _d.xhr("GET", args); // dojo.Deferred - } + }; dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ // summary: @@ -10518,7 +10614,7 @@ dojo.provide("dojo._base.xhr"); // postData: // String. Send raw data in the body of the POST request. return _d.xhr("POST", args, true); // dojo.Deferred - } + }; dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ // summary: @@ -10527,13 +10623,13 @@ dojo.provide("dojo._base.xhr"); // putData: // String. Send raw data in the body of the PUT request. return _d.xhr("PUT", args, true); // dojo.Deferred - } + }; dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ // summary: // Sends an HTTP DELETE request to the server. return _d.xhr("DELETE", args); //dojo.Deferred - } + }; /* dojo.wrapForm = function(formNode){ @@ -10558,6 +10654,7 @@ dojo.provide("dojo._base.fx"); + /* Animation loosely package based on Dan Pupius' work, contributed under CLA: http://pupius.co.uk/js/Toolkit.Drawing.js @@ -11225,14 +11322,29 @@ dojo.provide("dojo._base.browser"); + //Need this to be the last code segment in base, so do not place any + //dojo/requireIf calls in this file/ Otherwise, due to how the build system + //puts all requireIf dependencies after the current file, the require calls + //could be called before all of base is defined/ + dojo.forEach(dojo.config.require, function(i){ + dojo["require"](i); + }); + +} + +if(!dojo._hasResource["dojo._base"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base"] = true; +dojo.provide("dojo._base"); + + + + + + + + + -//Need this to be the last code segment in base, so do not place any -//dojo.requireIf calls in this file. Otherwise, due to how the build system -//puts all requireIf dependencies after the current file, the require calls -//could be called before all of base is defined. -dojo.forEach(dojo.config.require, function(i){ - dojo["require"](i); -}); } diff --git a/lib/dojo/fx.js b/lib/dojo/fx.js index 5c70d5b9e..60782accb 100644 --- a/lib/dojo/fx.js +++ b/lib/dojo/fx.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,7 +8,9 @@ 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.require("dojo.fx.Toggler"); // FIXME: remove this back-compat require in 2.0 +dojo.require("dojo.fx.Toggler"); + + /*===== dojo.fx = { // summary: Effects library on top of Base animations @@ -16,7 +18,7 @@ dojo.fx = { =====*/ (function(){ - var d = dojo, + var d = dojo, _baseObj = { _fire: function(evt, args){ if(this[evt]){ @@ -135,14 +137,14 @@ dojo.fx = { d.extend(_chain, _baseObj); dojo.fx.chain = function(/*dojo.Animation[]*/ animations){ - // summary: + // summary: // Chain a list of `dojo.Animation`s to run in sequence // // description: // Return a `dojo.Animation` which will play all passed // `dojo.Animation` instances in sequence, firing its own // synthesized events simulating a single animation. (eg: - // onEnd of this animation means the end of the chain, + // onEnd of this animation means the end of the chain, // not the individual animations within) // // example: @@ -170,7 +172,7 @@ dojo.fx = { this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration}); var self = this; - d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], + d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], function(evt){ self._connects.push(d.connect(self._pseudoAnimation, evt, function(){ self._fire(evt, arguments); } @@ -228,11 +230,11 @@ dojo.fx = { d.extend(_combine, _baseObj); dojo.fx.combine = function(/*dojo.Animation[]*/ animations){ - // summary: + // summary: // Combine a list of `dojo.Animation`s to run in parallel // // description: - // Combine an array of `dojo.Animation`s to run in parallel, + // Combine an array of `dojo.Animation`s to run in parallel, // providing a new `dojo.Animation` instance encompasing each // animation, firing standard animation events. // @@ -303,17 +305,17 @@ dojo.fx = { } }, args)); - d.connect(anim, "onEnd", function(){ + d.connect(anim, "onEnd", function(){ s.height = "auto"; s.overflow = o; }); return anim; // dojo.Animation - } + }; dojo.fx.wipeOut = function(/*Object*/ args){ // summary: - // Shrink a node to nothing and hide it. + // Shrink a node to nothing and hide it. // // description: // Returns an animation that will shrink node defined in "args" @@ -322,7 +324,7 @@ dojo.fx = { // args: Object // A hash-map of standard `dojo.Animation` constructor properties // (such as easing: node: duration: and so on) - // + // // example: // | dojo.fx.wipeOut({ node:"someId" }).play() @@ -348,14 +350,14 @@ dojo.fx = { }); return anim; // dojo.Animation - } + }; dojo.fx.slideTo = function(/*Object*/ args){ // summary: // Slide a node to a new top/left position // // description: - // Returns an animation that will slide "node" + // Returns an animation that will slide "node" // defined in args Object from its current position to // the position defined by (args.left, args.top). // @@ -367,7 +369,7 @@ dojo.fx = { // example: // | dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play() - var node = args.node = d.byId(args.node), + var node = args.node = d.byId(args.node), top = null, left = null; var init = (function(n){ @@ -397,7 +399,7 @@ dojo.fx = { d.connect(anim, "beforeBegin", anim, init); return anim; // dojo.Animation - } + }; })(); diff --git a/lib/dojo/fx/Toggler.js b/lib/dojo/fx/Toggler.js index ddc3e225d..dc4693d8e 100644 --- a/lib/dojo/fx/Toggler.js +++ b/lib/dojo/fx/Toggler.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.fx.Toggler"]){ //_hasResource checks added by build. dojo._hasResource["dojo.fx.Toggler"] = true; dojo.provide("dojo.fx.Toggler"); + dojo.declare("dojo.fx.Toggler", null, { // summary: // A simple `dojo.Animation` toggler API. @@ -16,16 +17,16 @@ dojo.declare("dojo.fx.Toggler", null, { // description: // 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. All available members are mixed into - // these animations from the constructor (for example, `node`, - // `showDuration`, `hideDuration`). + // direction, duration, etc. All available members are mixed into + // these animations from the constructor (for example, `node`, + // `showDuration`, `hideDuration`). // // example: // | var t = new dojo.fx.Toggler({ // | node: "nodeId", // | showDuration: 500, // | // hideDuration will default to "200" - // | showFunc: dojo.fx.wipeIn, + // | showFunc: dojo.fx.wipeIn, // | // hideFunc will default to "fadeOut" // | }); // | t.show(100); // delay showing for 100ms @@ -40,7 +41,7 @@ dojo.declare("dojo.fx.Toggler", null, { // The function that returns the `dojo.Animation` to show the node showFunc: dojo.fadeIn, - // hideFunc: Function + // hideFunc: Function // The function that returns the `dojo.Animation` to hide the node hideFunc: dojo.fadeOut, @@ -56,7 +57,7 @@ dojo.declare("dojo.fx.Toggler", null, { // time show/hide are called if we're stopped somewhere in the // middle. // FIXME: also would be nice to specify individual showArgs/hideArgs mixed into - // each animation individually. + // each animation individually. // FIXME: also would be nice to have events from the animations exposed/bridged /*===== diff --git a/lib/dojo/fx/easing.js b/lib/dojo/fx/easing.js index 0ce6efbff..c26af8971 100644 --- a/lib/dojo/fx/easing.js +++ b/lib/dojo/fx/easing.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,11 +9,13 @@ if(!dojo._hasResource["dojo.fx.easing"]){ //_hasResource checks added by build. dojo._hasResource["dojo.fx.easing"] = true; dojo.provide("dojo.fx.easing"); +dojo.getObject("fx.easing", true, dojo); + dojo.fx.easing = { - // summary: - // Collection of easing functions to use beyond the default + // summary: + // Collection of easing functions to use beyond the default // `dojo._defaultEasing` function. - // + // // description: // // Easing functions are used to manipulate the iteration through @@ -21,22 +23,22 @@ dojo.fx.easing = { // and the easing function progresses through that Line determing // how quickly (or slowly) it should go. Or more accurately: modify // the value of the _Line based on the percentage of animation completed. - // + // // All functions follow a simple naming convention of "ease type" + "when". // If the name of the function ends in Out, the easing described appears // towards the end of the animation. "In" means during the beginning, // and InOut means both ranges of the Animation will applied, both - // beginning and end. + // beginning and end. // - // One does not call the easing function directly, it must be passed to + // One does not call the easing function directly, it must be passed to // the `easing` property of an animation. // // example: // | dojo.require("dojo.fx.easing"); // | var anim = dojo.fadeOut({ - // | node: 'node', + // | node: 'node', // | duration: 2000, - // | // note there is no () + // | // note there is no () // | easing: dojo.fx.easing.quadIn // | }).play(); // @@ -151,24 +153,24 @@ dojo.fx.easing = { }, backIn: function(/* Decimal? */n){ - // summary: - // An easing function that starts away from the target, + // summary: + // An easing function that starts away from the target, // and quickly accelerates towards the end value. - // - // Use caution when the easing will cause values to become + // + // Use caution when the easing will cause values to become // negative as some properties cannot be set to negative values. var s = 1.70158; return Math.pow(n, 2) * ((s + 1) * n - s); }, backOut: function(/* Decimal? */n){ - // summary: - // An easing function that pops past the range briefly, and slowly comes back. + // summary: + // An easing function that pops past the range briefly, and slowly comes back. // // description: - // An easing function that pops past the range briefly, and slowly comes back. + // An easing function that pops past the range briefly, and slowly comes back. // - // Use caution when the easing will cause values to become negative as some + // Use caution when the easing will cause values to become negative as some // properties cannot be set to negative values. n = n - 1; @@ -177,12 +179,12 @@ dojo.fx.easing = { }, backInOut: function(/* Decimal? */n){ - // summary: + // summary: // An easing function combining the effects of `backIn` and `backOut` // // description: // An easing function combining the effects of `backIn` and `backOut`. - // Use caution when the easing will cause values to become negative + // Use caution when the easing will cause values to become negative // as some properties cannot be set to negative values. var s = 1.70158 * 1.525; n = n * 2; @@ -192,13 +194,13 @@ dojo.fx.easing = { }, elasticIn: function(/* Decimal? */n){ - // summary: + // summary: // An easing function the elastically snaps from the start value // // description: // An easing function the elastically snaps from the start value - // - // Use caution when the elasticity will cause values to become negative + // + // Use caution when the elasticity will cause values to become negative // as some properties cannot be set to negative values. if(n == 0 || n == 1){ return n; } var p = .3; @@ -208,7 +210,7 @@ dojo.fx.easing = { }, elasticOut: function(/* Decimal? */n){ - // summary: + // summary: // An easing function that elasticly snaps around the target value, // near the end of the Animation // @@ -216,7 +218,7 @@ dojo.fx.easing = { // An easing function that elasticly snaps around the target value, // near the end of the Animation // - // Use caution when the elasticity will cause values to become + // Use caution when the elasticity will cause values to become // negative as some properties cannot be set to negative values. if(n==0 || n == 1){ return n; } var p = .3; @@ -225,7 +227,7 @@ dojo.fx.easing = { }, elasticInOut: function(/* Decimal? */n){ - // summary: + // summary: // An easing function that elasticly snaps around the value, near // the beginning and end of the Animation. // @@ -233,7 +235,7 @@ dojo.fx.easing = { // An easing function that elasticly snaps around the value, near // the beginning and end of the Animation. // - // Use caution when the elasticity will cause values to become + // Use caution when the elasticity will cause values to become // negative as some properties cannot be set to negative values. if(n == 0) return 0; n = n * 2; @@ -249,7 +251,7 @@ dojo.fx.easing = { }, bounceIn: function(/* Decimal? */n){ - // summary: + // summary: // An easing function that 'bounces' near the beginning of an Animation return (1 - dojo.fx.easing.bounceOut(1 - n)); // Decimal }, @@ -259,7 +261,7 @@ dojo.fx.easing = { // An easing function that 'bounces' near the end of an Animation var s = 7.5625; var p = 2.75; - var l; + var l; if(n < (1 / p)){ l = s * Math.pow(n, 2); }else if(n < (2 / p)){ @@ -276,7 +278,7 @@ dojo.fx.easing = { }, bounceInOut: function(/* Decimal? */n){ - // summary: + // summary: // An easing function that 'bounces' at the beginning and end of the Animation if(n < 0.5){ return dojo.fx.easing.bounceIn(n * 2) / 2; } return (dojo.fx.easing.bounceOut(n * 2 - 1) / 2) + 0.5; // Decimal diff --git a/lib/dojo/gears.js b/lib/dojo/gears.js index aca6c5a4f..d5595b191 100644 --- a/lib/dojo/gears.js +++ b/lib/dojo/gears.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,8 +9,10 @@ if(!dojo._hasResource["dojo.gears"]){ //_hasResource checks added by build. Do n dojo._hasResource["dojo.gears"] = true; dojo.provide("dojo.gears"); +dojo.getObject("gears", true, dojo); + dojo.gears._gearsObject = function(){ - // summary: + // summary: // factory method to get a Google Gears plugin instance to // expose in the browser runtime environment, if present var factory; diff --git a/lib/dojo/hash.js b/lib/dojo/hash.js index 6ef74b521..e7f6a400f 100644 --- a/lib/dojo/hash.js +++ b/lib/dojo/hash.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,6 +8,8 @@ if(!dojo._hasResource["dojo.hash"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo.hash"] = true; dojo.provide("dojo.hash"); + + //TODOC: where does this go? // summary: // Methods for monitoring and updating the hash in the browser URL. @@ -27,11 +29,11 @@ dojo.provide("dojo.hash"); // Handles getting and setting of location.hash. // - If no arguments are passed, acts as a getter. // - If a string is passed, acts as a setter. - // hash: - // String: the hash is set - #string. + // hash: + // the hash is set - #string. // replace: - // Boolean: If true, updates the hash value in the current history - // state instead of creating a new history state. + // If true, updates the hash value in the current history + // state instead of creating a new history state. // returns: // when used as a getter, returns the current hash string. // when used as a setter, returns the new hash string. @@ -50,17 +52,16 @@ dojo.provide("dojo.hash"); location.href = "#" + hash; } return hash; // String - } + }; // Global vars - var _recentHash = null, - _ieUriMonitor = null, + var _recentHash, _ieUriMonitor, _connect, _pollFrequency = dojo.config.hashPollFrequency || 100; //Internal functions function _getSegment(str, delimiter){ var i = str.indexOf(delimiter); - return (i >= 0) ? str.substring(i+1) : ""; + return (i >= 0) ? str.substring(i+1) : ""; } function _getHash(){ @@ -92,12 +93,12 @@ dojo.provide("dojo.hash"); return; } location.replace("#"+hash); - _pollLocation(); + !_connect && _pollLocation(); } function IEUriMonitor(){ // summary: - // Determine if the browser's URI has changed or if the user has pressed the + // Determine if the browser's URI has changed or if the user has pressed the // back or forward button. If so, call _dispatchEvent. // // description: @@ -147,6 +148,13 @@ dojo.provide("dojo.hash"); var ifr = document.createElement("iframe"), IFRAME_ID = "dojo-hash-iframe", ifrSrc = dojo.config.dojoBlankHtmlUrl || dojo.moduleUrl("dojo", "resources/blank.html"); + + if(dojo.config.useXDomain && !dojo.config.dojoBlankHtmlUrl){ + console.warn("dojo.hash: When using cross-domain Dojo builds," + + " please save dojo/resources/blank.html to your domain and set djConfig.dojoBlankHtmlUrl" + + " to the path on your domain to blank.html"); + } + ifr.id = IFRAME_ID; ifr.src = ifrSrc + "?" + _getHash(); ifr.style.display = "none"; @@ -165,7 +173,7 @@ dojo.provide("dojo.hash"); this.isTransitioning = function(){ return transitioning; - } + }; this.pollLocation = function(){ if(!ifrOffline) { @@ -216,13 +224,13 @@ dojo.provide("dojo.hash"); } } setTimeout(dojo.hitch(this,this.pollLocation), _pollFrequency); - } + }; resetState(); // initialize state (transition to s1) setTimeout(dojo.hitch(this,this.pollLocation), _pollFrequency); } dojo.addOnLoad(function(){ if("onhashchange" in dojo.global && (!dojo.isIE || (dojo.isIE >= 8 && document.compatMode != "BackCompat"))){ //need this IE browser test because "onhashchange" exists in IE8 in IE7 mode - dojo.connect(dojo.global,"onhashchange",_dispatchEvent); + _connect = dojo.connect(dojo.global,"onhashchange",_dispatchEvent); }else{ if(document.addEventListener){ // Non-IE _recentHash = _getHash(); @@ -230,7 +238,7 @@ dojo.provide("dojo.hash"); }else if(document.attachEvent){ // IE7- //Use hidden iframe in versions of IE that don't have onhashchange event _ieUriMonitor = new IEUriMonitor(); - } + } // else non-supported browser, do nothing. } }); diff --git a/lib/dojo/html.js b/lib/dojo/html.js index ec5c4986e..f88f899cc 100644 --- a/lib/dojo/html.js +++ b/lib/dojo/html.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,25 +8,26 @@ if(!dojo._hasResource["dojo.html"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo.html"] = true; dojo.provide("dojo.html"); +dojo.require("dojo.parser"); -// the parser might be needed.. -dojo.require("dojo.parser"); +dojo.getObject("html", true, dojo); +// the parser might be needed.. (function(){ // private scope, sort of a namespace // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes - var idCounter = 0, + var idCounter = 0, d = dojo; dojo.html._secureForInnerHtml = function(/*String*/ cont){ // summary: // removes !DOCTYPE and title elements from the html string. - // + // // khtml is picky about dom faults, you can't attach a style or node as child of body // must go into head, so we need to cut out those tags // cont: // An html string for insertion into the dom - // + // return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); // String }; @@ -46,7 +47,7 @@ dojo.require("dojo.parser"); // node: // the parent element // content: - // the content to be set on the parent element. + // the content to be set on the parent element. // This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes // always empty @@ -72,7 +73,7 @@ dojo.require("dojo.parser"); }; // we wrap up the content-setting operation in a object - dojo.declare("dojo.html._ContentSetter", null, + dojo.declare("dojo.html._ContentSetter", null, { // node: DomNode|String // An node which will be the parent element that we set content into @@ -83,11 +84,11 @@ dojo.require("dojo.parser"); content: "", // id: String? - // Usually only used internally, and auto-generated with each instance + // Usually only used internally, and auto-generated with each instance id: "", // cleanContent: Boolean - // Should the content be treated as a full html document, + // Should the content be treated as a full html document, // and the real content stripped of <html>, <body> wrapper before injection cleanContent: false, @@ -98,6 +99,17 @@ dojo.require("dojo.parser"); // parseContent: Boolean // Should the node by passed to the parser after the new content is set parseContent: false, + + // parserScope: String + // Flag passed to parser. Root for attribute names to search for. If scopeName is dojo, + // will search for data-dojo-type (or dojoType). For backwards compatibility + // reasons defaults to dojo._scopeName (which is "dojo" except when + // multi-version support is used, when it will be something like dojo16, dojo20, etc.) + parserScope: dojo._scopeName, + + // startup: Boolean + // Start the child widgets after parsing them. Only obeyed if parseContent is true. + startup: true, // lifecyle methods constructor: function(/* Object */params, /* String|DomNode */node){ @@ -115,14 +127,14 @@ dojo.require("dojo.parser"); if(!this.id){ this.id = [ "Setter", - (node) ? node.id || node.tagName : "", + (node) ? node.id || node.tagName : "", idCounter++ ].join("_"); } }, set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){ // summary: - // front-end to the set-content sequence + // front-end to the set-content sequence // cont: // An html string, node or enumerable list of nodes for insertion into the dom // If not provided, the object's content property will be used @@ -142,9 +154,9 @@ dojo.require("dojo.parser"); }, setContent: function(){ // summary: - // sets the content on the node + // sets the content on the node - var node = this.node; + var node = this.node; if(!node) { // can't proceed throw new Error(this.declaredClass + ": setContent given no node"); @@ -156,7 +168,7 @@ dojo.require("dojo.parser"); // like for instance if domNode is a UL and we try append a DIV // FIXME: need to allow the user to provide a content error message string - var errMess = this.onContentError(e); + var errMess = this.onContentError(e); try{ node.innerHTML = errMess; }catch(e){ @@ -172,7 +184,7 @@ dojo.require("dojo.parser"); // cleanly empty out existing content // destroy any widgets from a previous run - // NOTE: if you dont want this you'll need to empty + // NOTE: if you dont want this you'll need to empty // the parseResults array property yourself to avoid bad things happenning if(this.parseResults && this.parseResults.length) { dojo.forEach(this.parseResults, function(w) { @@ -182,17 +194,17 @@ dojo.require("dojo.parser"); }); delete this.parseResults; } - // this is fast, but if you know its already empty or safe, you could + // this is fast, but if you know its already empty or safe, you could // override empty to skip this step dojo.html._emptyNode(this.node); }, onBegin: function(){ // summary - // Called after instantiation, but before set(); - // It allows modification of any of the object properties + // Called after instantiation, but before set(); + // It allows modification of any of the object properties // - including the node and content provided - before the set operation actually takes place - // This default implementation checks for cleanContent and extractContent flags to + // This default implementation checks for cleanContent and extractContent flags to // optionally pre-process html string content var cont = this.content; @@ -230,21 +242,21 @@ dojo.require("dojo.parser"); // summary // manually reset the Setter instance if its being re-used for example for another set() // description - // tearDown() is not called automatically. + // tearDown() is not called automatically. // In normal use, the Setter instance properties are simply allowed to fall out of scope // but the tearDown method can be called to explicitly reset this instance. - delete this.parseResults; - delete this.node; - delete this.content; + delete this.parseResults; + delete this.node; + delete this.content; }, onContentError: function(err){ - return "Error occured setting content: " + err; + return "Error occured setting content: " + err; }, _mixin: function(params){ // mix properties/methods into the instance - // TODO: the intention with tearDown is to put the Setter's state + // TODO: the intention with tearDown is to put the Setter's state // back to that of the original constructor (vs. deleting/resetting everything regardless of ctor params) // so we could do something here to move the original properties aside for later restoration var empty = {}, key; @@ -252,21 +264,28 @@ dojo.require("dojo.parser"); if(key in empty){ continue; } // TODO: here's our opportunity to mask the properties we dont consider configurable/overridable // .. but history shows we'll almost always guess wrong - this[key] = params[key]; + this[key] = params[key]; } }, _parse: function(){ - // summary: + // summary: // runs the dojo parser over the node contents, storing any results in this.parseResults // Any errors resulting from parsing are passed to _onError for handling var rootNode = this.node; try{ // store the results (widgets, whatever) for potential retrieval + var inherited = {}; + dojo.forEach(["dir", "lang", "textDir"], function(name){ + if(this[name]){ + inherited[name] = this[name]; + } + }, this); this.parseResults = dojo.parser.parse({ rootNode: rootNode, - dir: this.dir, - lang: this.lang + noStart: !this.startup, + inherited: inherited, + scope: this.parserScope }); }catch(e){ this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id); @@ -299,29 +318,29 @@ dojo.require("dojo.parser"); // node: // the parent element that will receive the content // cont: - // the content to be set on the parent element. + // the content to be set on the parent element. // This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes - // params: + // params: // Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter // example: // A safe string/node/nodelist content replacement/injection with hooks for extension - // Example Usage: - // dojo.html.set(node, "some string"); - // dojo.html.set(node, contentNode, {options}); - // dojo.html.set(node, myNode.childNodes, {options}); + // Example Usage: + // dojo.html.set(node, "some string"); + // dojo.html.set(node, contentNode, {options}); + // dojo.html.set(node, myNode.childNodes, {options}); if(undefined == cont){ console.warn("dojo.html.set: no cont argument provided, using empty string"); cont = ""; - } + } if(!params){ // simple and fast return dojo.html._setNodeContent(node, cont, true); - }else{ + }else{ // more options but slower // note the arguments are reversed in order, to match the convention for instantiation via the parser - var op = new dojo.html._ContentSetter(dojo.mixin( - params, - { content: cont, node: node } + var op = new dojo.html._ContentSetter(dojo.mixin( + params, + { content: cont, node: node } )); return op.set(); } diff --git a/lib/dojo/i18n.js b/lib/dojo/i18n.js index d06a8f25e..893490fe0 100644 --- a/lib/dojo/i18n.js +++ b/lib/dojo/i18n.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,13 +9,16 @@ if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do no dojo._hasResource["dojo.i18n"] = true; dojo.provide("dojo.i18n"); +dojo.getObject("i18n", true, dojo); + /*===== dojo.i18n = { // summary: Utility classes to enable loading of resources for internationalization (i18n) }; =====*/ -dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){ +// when using a real AMD loader, dojo.i18n.getLocalization is already defined by dojo/lib/backCompat +dojo.i18n.getLocalization = 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. @@ -43,7 +46,7 @@ dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName // look for nearest locale match var elements = locale.split('-'); var module = [packageName,"nls",bundleName].join('.'); - var bundle = dojo._loadedModules[module]; + var bundle = dojo._loadedModules[module]; if(bundle){ var localization; for(var i = elements.length; i > 0; i--){ @@ -93,7 +96,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle var targetLocale = dojo.i18n.normalizeLocale(locale); var bundlePackage = [moduleName, "nls", bundleName].join("."); - // NOTE: + // 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. @@ -103,7 +106,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle // 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){ @@ -120,7 +123,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle } if(!bestLocale){ bestLocale = "ROOT"; - } + } } //See if the desired locale is already loaded. @@ -152,6 +155,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle module.push(bundleName); var filespec = module.join("/") + '.js'; loaded = dojo._loadPath(filespec, null, function(hash){ + hash = hash.root || hash; // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath var clazz = function(){}; clazz.prototype = parent; @@ -166,7 +170,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle }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. @@ -184,8 +188,8 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle (function(){ // If other locales are used, dojo.requireLocalization should load them as - // well, by default. - // + // 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. diff --git a/lib/dojo/io/iframe.js b/lib/dojo/io/iframe.js index 5b2af45a1..aa8ddf290 100644 --- a/lib/dojo/io/iframe.js +++ b/lib/dojo/io/iframe.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.io.iframe"]){ //_hasResource checks added by build. dojo._hasResource["dojo.io.iframe"] = true; dojo.provide("dojo.io.iframe"); +dojo.getObject("io", true, dojo); + /*===== dojo.declare("dojo.io.iframe.__ioArgs", dojo.__IoArgs, { constructor: function(){ @@ -49,7 +51,7 @@ dojo.declare("dojo.io.iframe.__ioArgs", dojo.__IoArgs, { =====*/ dojo.io.iframe = { - // summary: + // summary: // Sends an Ajax I/O call using and Iframe (for instance, to upload files) create: function(/*String*/fname, /*String*/onloadstr, /*String?*/uri){ @@ -79,30 +81,12 @@ dojo.io.iframe = { } turi = (dojo.config["dojoBlankHtmlUrl"]||dojo.moduleUrl("dojo", "resources/blank.html")); } - var ifrstr = dojo.isIE ? '<iframe name="'+fname+'" src="'+turi+'" onload="'+onloadstr+'">' : 'iframe'; - cframe = dojo.doc.createElement(ifrstr); - with(cframe){ - name = fname; - setAttribute("name", fname); - id = fname; - } - dojo.body().appendChild(cframe); - window[fname] = cframe; - - with(cframe.style){ - if(!(dojo.isSafari < 3)){ - //We can't change the src in Safari 2.0.3 if absolute position. Bizarro. - position = "absolute"; - } - left = top = "1px"; - height = width = "1px"; - visibility = "hidden"; - } + var cframe = dojo.place( + '<iframe id="'+fname+'" name="'+fname+'" src="'+turi+'" onload="'+onloadstr+ + '" style="position: absolute; left: 1px; top: 1px; height: 1px; width: 1px; visibility: hidden">', + dojo.body()); - if(!dojo.isIE){ - this.setSrc(cframe, turi, true); - cframe.onload = new Function(onloadstr); - } + window[fname] = cframe; return cframe; }, @@ -122,11 +106,8 @@ dojo.io.iframe = { }else{ // Fun with DOM 0 incompatibilities! var idoc; - //WebKit > 521 corresponds with Safari 3, which started with 522 WebKit version. - if(dojo.isIE || dojo.isWebKit > 521){ + if(dojo.isIE || dojo.isWebKit){ idoc = iframe.contentWindow.document; - }else if(dojo.isSafari){ - idoc = iframe.document; }else{ // if(d.isMozilla){ idoc = iframe.contentWindow; } @@ -142,8 +123,8 @@ dojo.io.iframe = { idoc.location.replace(src); } } - }catch(e){ - console.log("dojo.io.iframe.setSrc: ", e); + }catch(e){ + console.log("dojo.io.iframe.setSrc: ", e); } }, @@ -152,7 +133,7 @@ dojo.io.iframe = { var doc = iframeNode.contentDocument || // W3 ( ( - (iframeNode.name) && (iframeNode.document) && + (iframeNode.name) && (iframeNode.document) && (dojo.doc.getElementsByTagName("iframe")[iframeNode.name].contentWindow) && (dojo.doc.getElementsByTagName("iframe")[iframeNode.name].contentWindow.document) ) @@ -165,7 +146,7 @@ dojo.io.iframe = { }, send: function(/*dojo.io.iframe.__ioArgs*/args){ - //summary: + //summary: // Function that sends the request to the server. // This transport can only process one send() request at a time, so if send() is called //multiple times, it will queue up the calls and only process one at a time. @@ -195,8 +176,8 @@ dojo.io.iframe = { if(handleAs != "html"){ if(handleAs == "xml"){ // FF, Saf 3+ and Opera all seem to be fine with ifd being xml. We have to - // do it manually for IE. Refs #6334. - if(dojo.isIE){ + // do it manually for IE6-8. Refs #6334. + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ dojo.query("a", dii._frame.contentWindow.document.documentElement).orphan(); var xmlText=(dii._frame.contentWindow.document).documentElement.innerText; xmlText=xmlText.replace(/>\s+</g, "><"); @@ -218,7 +199,7 @@ dojo.io.iframe = { }catch(e){ value = e; }finally{ - ioArgs._callNext(); + ioArgs._callNext(); } return value; }, @@ -238,7 +219,7 @@ dojo.io.iframe = { dojo.io.iframe._currentDfd = null; dojo.io.iframe._fireNextRequest(); } - } + }; this._dfdQueue.push(dfd); this._fireNextRequest(); @@ -297,16 +278,7 @@ dojo.io.iframe = { // if we have things in content, we need to add them to the form // before submission var pHandler = function(name, value) { - var tn; - if(dojo.isIE){ - tn = dojo.doc.createElement("<input type='hidden' name='"+name+"'>"); - }else{ - tn = dojo.doc.createElement("input"); - tn.type = "hidden"; - tn.name = name; - } - tn.value = value; - fn.appendChild(tn); + dojo.create("input", {type: "hidden", name: name, value: value}, fn); ioArgs._contentToClean.push(name); }; for(var x in content){ @@ -325,7 +297,7 @@ dojo.io.iframe = { } } } - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, + //IE requires going through getAttributeNode instead of just getAttribute in some form cases, //so use it for all. See #2844 var actnNode = fn.getAttributeNode("action"); var mthdNode = fn.getAttributeNode("method"); @@ -406,6 +378,6 @@ dojo.io.iframe = { ioArgs._finished = true; } -} +}; } diff --git a/lib/dojo/io/script.js b/lib/dojo/io/script.js index 9730c977d..a44e9f2ee 100644 --- a/lib/dojo/io/script.js +++ b/lib/dojo/io/script.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.io.script"]){ //_hasResource checks added by build. dojo._hasResource["dojo.io.script"] = true; dojo.provide("dojo.io.script"); +dojo.getObject("io", true, dojo); + /*===== dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { constructor: function(){ @@ -24,13 +26,13 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { // legacy code. See notes for jsonp property. // jsonp: String // The URL parameter name that indicates the JSONP callback string. - // For instance, when using Yahoo JSONP calls it is normally, - // jsonp: "callback". For AOL JSONP calls it is normally + // For instance, when using Yahoo JSONP calls it is normally, + // jsonp: "callback". For AOL JSONP calls it is normally // jsonp: "c". // checkString: String - // A string of JavaScript that when evaluated like so: + // A string of JavaScript that when evaluated like so: // "typeof(" + checkString + ") != 'undefined'" - // being true means that the script fetched has been loaded. + // being true means that the script fetched has been loaded. // Do not use this if doing a JSONP type of call (use callbackParamName instead). // frameDoc: Document // The Document object for a child iframe. If this is passed in, the script @@ -43,7 +45,7 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { } }); =====*/ -;(function(){ +(function(){ var loadEvent = dojo.isIE ? "onreadystatechange" : "load", readyRegExp = /complete|loaded/; @@ -105,7 +107,7 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { }, _makeScriptDeferred: function(/*Object*/args){ - //summary: + //summary: // sets up a Deferred object for an IO request. var dfd = dojo._ioSetArgs(args, this._deferredCancel, this._deferredOk, this._deferredError); @@ -152,7 +154,7 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { //DO NOT use "this" and expect it to be dojo.io.script. var ioArgs = dfd.ioArgs; - //Add script to list of things that can be removed. + //Add script to list of things that can be removed. if(ioArgs.canDelete){ dojo.io.script._addDeadScript(ioArgs); } @@ -247,14 +249,14 @@ dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { }, _jsonpCallback: function(/*JSON Object*/json){ - //summary: + //summary: // generic handler for jsonp callback. A pointer to this function // is used for all jsonp callbacks. NOTE: the "this" in this // function will be the Deferred object that represents the script // request. this.ioArgs.json = json; } - } + }; })(); } diff --git a/lib/dojo/jaxer.js b/lib/dojo/jaxer.js index fdc492f1c..2ac115e18 100644 --- a/lib/dojo/jaxer.js +++ b/lib/dojo/jaxer.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.jaxer"]){ //_hasResource checks added by build. Do n dojo._hasResource["dojo.jaxer"] = true; dojo.provide("dojo.jaxer"); + if(typeof print == "function"){ console.debug = Jaxer.Log.debug; console.warn = Jaxer.Log.warn; diff --git a/lib/dojo/lib/backCompat.js b/lib/dojo/lib/backCompat.js new file mode 100644 index 000000000..101f4e520 --- /dev/null +++ b/lib/dojo/lib/backCompat.js @@ -0,0 +1,283 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +// AMD module id = dojo/lib/backCompat +// +// This module defines those dojo properties/methods that are defined by +// dojo/_base/_loader/loader and are still needed when loading with and +// AMD loader (when loading with an AMD loader, dojo/_base/_loader/loader +// is never loaded). +// +// note: this module is relevant only when loading dojo with an AMD loader; +// it is never evaluated otherwise. + +define(["require", "dojo/_base/_loader/bootstrap"], function(require, dojo){ + // the following dojo properties do not exist in the AMD-loaded version of dojo 1.x: + var names= [ + "_moduleHasPrefix", + "_loadPath", + "_loadUri", + "_loadUriAndCheck", + "loaded", + "_callLoaded", + "_getModuleSymbols", + "_loadModule", + "require", + "provide", + "platformRequire", + "requireIf", + "requireAfterIf", + "registerModulePath" + ], i, name; + for(i = 0; i<names.length;){ + name = names[i++]; + dojo[name] = (function(name) { + return function(){ + console.warn("dojo." + name + " not available when using an AMD loader."); + }; + })(name); + } + + // define dojo.addOnLoad in terms of the DOMContentLoaded detection available from the AMD loaders + // (requirejs and bdBuild). Note that the behavior of this feature is slightly different compared to the dojo + // v1.x sync loader. There, the onload queue is fired upon detecting both DOMContentLoaded *and* all + // demanded modules have arrived. It is impossible to simulate this behavior with requirejs since it does + // not publish its internal status (it is possible with bdLoad). + // TODO: consider taking ownership of this API back from the loader. + // TODO: consider requesting requirejs publish more enough internal state to determine if all demanded + // modules have been defined. + var + argsToArray = function(args) { + var result = [], i; + for(i = 0; i<args.length;){ + result.push(args[i++]); + } + return result; + }, + + simpleHitch = function(context, callback){ + if(callback){ + return (typeof callback=="string") ? + function(){context[callback]();} : + function(){callback.call(context);}; + }else{ + return context; + } + }; + dojo.ready = dojo.addOnLoad = function(context, callback){ + require.ready(callback ? simpleHitch(context, callback) : context); + }; + dojo.addOnLoad(function() { + dojo.postLoad = dojo.config.afterOnLoad = true; + }); + var dca = dojo.config.addOnLoad; + if(dca){ + dojo.addOnLoad[(dca instanceof Array ? "apply" : "call")](dojo, dca); + } + + // TODO: in the dojo 1.x sync loader the array dojo._loaders holds the queue of callbacks to be executed + // upon DOMContentLoaded. This queue is manipulated directly by dojo/uacss, dojo/parser, dijit/_base/wia + // and others (at least in dojox). This is also impossible to simulate universally across all AMD loaders. + // The following will at least accept client code accessing dojo._loaders , dojo._loaders.unshift, and + // dojo._loaders.splice--which is all that exists in the current dojo/dijit code stacks. + var + loaders = dojo._loaders = [], + runLoaders = function(){ + var temp= loaders.slice(0); + Array.prototype.splice.apply(loaders, [0, loaders.length]); + while(temp.length){ + temp.shift().call(); + }; + }; + loaders.unshift = function() { + Array.prototype.unshift.apply(loaders, argsToArray(arguments)); + require.ready(runLoaders); + }; + loaders.splice = function() { + Array.prototype.splice.apply(loaders, argsToArray(arguments)); + require.ready(runLoaders); + }; + + //TODO: put unload handling in a separate module + var unloaders = dojo._unloaders = []; + dojo.unloaded = function(){ + while(unloaders.length){ + unloaders.pop().call(); + } + }; + + //TODO: kill this low-value function when it is exorcised from dojo + dojo._onto = function(arr, obj, fn){ + arr.push(fn ? simpleHitch(obj, fn) : obj); + }; + + //TODO: kill this when the bootstrap is rewritten to not include DOMContentLoaded detection + // (it should probably be just a module) for now, just sink the detection; leverage the + // AMD loaders to handle DOMContentLoaded detection + dojo._modulesLoaded = function(){}; + + //TODO: kill this when we understand its purpose relative to AMD + dojo.loadInit = function(init){ + init(); + }; + + var amdModuleName= function(moduleName){ + return moduleName.replace(/\./g, "/"); + }; + + dojo.getL10nName = function(moduleName, bundleName, locale){ + locale = locale ? locale.toLowerCase() : dojo.locale; + moduleName = "i18n!" + amdModuleName(moduleName); + return (/root/i.test(locale)) ? + (moduleName + "/nls/" + bundleName) : + (moduleName + "/nls/" + locale + "/" + bundleName); + }; + + dojo.requireLocalization = function(moduleName, bundleName, locale){ + // NOTE: locales other than the locale specified in dojo.locale need to be specifically + // declared as a module dependency when using AMD. + if(require.vendor!="altoviso.com"){ + locale = !locale || locale.toLowerCase() === dojo.locale ? "root" : locale; + } + return require(dojo.getL10nName(moduleName, bundleName, locale)); + }; + + dojo.i18n= { + getLocalization: dojo.requireLocalization, + normalizeLocale: function(locale){ + var result = locale ? locale.toLowerCase() : dojo.locale; + if(result == "root"){ + result = "ROOT"; + } + return result; + } + }; + + //TODO: dojo._Url seems rarely used and long to be part of the boostrap; consider moving + //note: this routine cut and paste from dojo/_base/_loader/loader + var + ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), + ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"); + dojo._Url = function(){ + var n = null, + _a = arguments, + uri = [_a[0]]; + // resolve uri components relative to each other + for(var i = 1; i<_a.length; i++){ + if(!_a[i]){ continue; } + + // Safari doesn't support this.constructor so we have to be explicit + // FIXME: Tracked (and fixed) in Webkit bug 3537. + // http://bugs.webkit.org/show_bug.cgi?id=3537 + var relobj = new dojo._Url(_a[i]+""), + uriobj = new dojo._Url(uri[0]+""); + + if( + relobj.path == "" && + !relobj.scheme && + !relobj.authority && + !relobj.query + ){ + if(relobj.fragment != n){ + uriobj.fragment = relobj.fragment; + } + relobj = uriobj; + }else if(!relobj.scheme){ + relobj.scheme = uriobj.scheme; + + if(!relobj.authority){ + relobj.authority = uriobj.authority; + + if(relobj.path.charAt(0) != "/"){ + var path = uriobj.path.substring(0, + uriobj.path.lastIndexOf("/") + 1) + relobj.path; + + var segs = path.split("/"); + for(var j = 0; j < segs.length; j++){ + if(segs[j] == "."){ + // flatten "./" references + if(j == segs.length - 1){ + segs[j] = ""; + }else{ + segs.splice(j, 1); + j--; + } + }else if(j > 0 && !(j == 1 && segs[0] == "") && + segs[j] == ".." && segs[j-1] != ".."){ + // flatten "../" references + if(j == (segs.length - 1)){ + segs.splice(j, 1); + segs[j - 1] = ""; + }else{ + segs.splice(j - 1, 2); + j -= 2; + } + } + } + relobj.path = segs.join("/"); + } + } + } + + uri = []; + if(relobj.scheme){ + uri.push(relobj.scheme, ":"); + } + if(relobj.authority){ + uri.push("//", relobj.authority); + } + uri.push(relobj.path); + if(relobj.query){ + uri.push("?", relobj.query); + } + if(relobj.fragment){ + uri.push("#", relobj.fragment); + } + } + + this.uri = uri.join(""); + + // break the uri into its main components + var r = this.uri.match(ore); + + this.scheme = r[2] || (r[1] ? "" : n); + this.authority = r[4] || (r[3] ? "" : n); + this.path = r[5]; // can never be undefined + this.query = r[7] || (r[6] ? "" : n); + this.fragment = r[9] || (r[8] ? "" : n); + + if(this.authority != n){ + // server based naming authority + r = this.authority.match(ire); + + this.user = r[3] || n; + this.password = r[4] || n; + this.host = r[6] || r[7]; // ipv6 || ipv4 + this.port = r[9] || n; + } + }; + + dojo._Url.prototype.toString = function(){ return this.uri; }; + + dojo.moduleUrl = function(module, url){ + if(!module){ + //TODO: don't understand why this would ever be so, but that's the logic in loader + return null; + } + module = amdModuleName(module) + (url ? ("/" + url) : ""); + var + type= "", + match= module.match(/(.+)(\.[^\/]*)$/); + if (match) { + module= match[1]; + type= match[2]; + } + return new dojo._Url(require.nameToUrl(module, type)); // dojo._Url + }; + + return dojo; +}); diff --git a/lib/dojo/lib/kernel.js b/lib/dojo/lib/kernel.js new file mode 100644 index 000000000..94a3fefae --- /dev/null +++ b/lib/dojo/lib/kernel.js @@ -0,0 +1,26 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +// AMD module id = dojo/lib/kernel +// +// This module ensures the dojo object is initialized by... +// +// * dojo/_base/_loader/bootstrap +// * dojo/lib/backCompat +// * dojo/_base/_loader/hostenv_browser +// +// This is roughly equivalent to the work that dojo.js does by injecting +// bootstrap, loader, and hostenv_browser. +// +// note: this module is relevant only when loading dojo with an AMD loader; +// it is never evaluated otherwise. + +// for now, we publish dojo into the global namespace because so many tests and apps expect it. +define(["dojo/_base/_loader/hostenv_browser"], function(dojo_){ + dojo= dojo_; + return dojo_; +}); diff --git a/lib/dojo/lib/main-browser.js b/lib/dojo/lib/main-browser.js new file mode 100644 index 000000000..cb5cc2a43 --- /dev/null +++ b/lib/dojo/lib/main-browser.js @@ -0,0 +1,61 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +// AMD module id = dojo +// +// This is a package main module for the dojo package implemented so that the *absolute minimal* +// changes are made to the dojo 1.x code. It is by no means optimal and should/will be replaced with +// a less naive design--particularly as dojo v2.0 evolves. +// +// There are a few key design weaknesses in this implementation: +// +// * generally, v1.x bootstrap, tests, and apps assume dojo is global +// +// * the v1.x dojo/_base modules assume dojo is defined before they are defined +// and their factory functions go about populating dojo--which is really part of defining +// dojo. This leads to the appearance of a circular dependency and is a somewhat obtuse +// design since the dojo object must be delivered to them under a different module +// name (dojo/lib/kernel). +// +// * bootstrap modules tend to incorporate unrelated features (e.g., hostenv_browser includes +// DOMContentLoad detection, thereby making it impossible to build out this feature if a +// particular app does not need it). +// +// * The back compatibility layer requires/contains some non-optimal code that needs to be improved. +// +// As 1.7 and 2.0 evolve, these items will be addressed with more robust implementation. +// +// The boot sequence is as follows: +// +// dojo (this module) depends on... +// dojo/lib/kernel which depends on... +// dojo/_base/_loader/hostenv_browser which depends on... +// dojo/lib/backCompat which depends on... +// dojo/_base/_loader/bootstrap which depends on nothing +// +// This module further depends on the fairly ordinary modules in dojo/_base; each of these +// modules depends on dojo/lib/kernel (at least) which provide the dojo object for them to augment. + +define("dojo", [ + "dojo/lib/kernel", + "dojo/_base/lang", + "dojo/_base/array", + "dojo/_base/declare", + "dojo/_base/connect", + "dojo/_base/Deferred", + "dojo/_base/json", + "dojo/_base/Color", + "dojo/_base/window", + "dojo/_base/event", + "dojo/_base/html", + "dojo/_base/NodeList", + "dojo/_base/query", + "dojo/_base/xhr", + "dojo/_base/fx" +], function(dojo){ + return dojo; +}); diff --git a/lib/dojo/lib/plugins/i18n.js b/lib/dojo/lib/plugins/i18n.js new file mode 100644 index 000000000..93a57f76b --- /dev/null +++ b/lib/dojo/lib/plugins/i18n.js @@ -0,0 +1,94 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +// +// dojo i18n! plugin +// +// We choose to include our own plugin in hopes of leveraging functionality already contained in dojo +// and thereby reducing the size of the plugin compared to various loader implementations. Naturally, this +// allows AMD loaders to be used without their plugins. + +// CAUTION, this module may return improper results if the AMD loader does not support toAbsMid and client +// code passes relative plugin resource module ids. In that case, you should consider using the i18n! plugin +// that comes with your loader. + +define(["dojo"], function(dojo) { + var + nlsRe= + // regexp for reconstructing the master bundle name from parts of the regexp match + // nlsRe.exec("foo/bar/baz/nls/en-ca/foo") gives: + // ["foo/bar/baz/nls/en-ca/foo", "foo/bar/baz/nls/", "/", "/", "en-ca", "foo"] + // nlsRe.exec("foo/bar/baz/nls/foo") gives: + // ["foo/bar/baz/nls/foo", "foo/bar/baz/nls/", "/", "/", "foo", ""] + // so, if match[5] is blank, it means this is the top bundle definition. + // courtesy of http://requirejs.org + /(^.*(^|\/)nls(\/|$))([^\/]*)\/?([^\/]*)/, + + getAvailableLocales= function( + root, + locale, + bundlePath, + bundleName + ){ + // return a vector of module ids containing all available locales with respect to the target locale + // For example, assuming: + // * the root bundle indicates specific bundles for "fr" and "fr-ca", + // * bundlePath is "myPackage/nls" + // * bundleName is "myBundle" + // Then a locale argument of "fr-ca" would return + // ["myPackage/nls/myBundle", "myPackage/nls/fr/myBundle", "myPackage/nls/fr-ca/myBundle"] + // Notice that bundles are returned least-specific to most-specific, starting with the root. + + for(var result= [bundlePath + bundleName], localeParts= locale.split("-"), current= "", i= 0; i<localeParts.length; i++){ + current+= localeParts[i]; + if(root[current]){ + result.push(bundlePath + current + "/" + bundleName); + } + } + return result; + }, + + cache= {}; + + return { + load: function(id, require, load){ + // note: id may be relative + var + match= nlsRe.exec(id), + bundlePath= (require.toAbsMid && require.toAbsMid(match[1])) || match[1], + bundleName= match[5] || match[4], + bundlePathAndName= bundlePath + bundleName, + locale= (match[5] && match[4]) || dojo.locale, + target= bundlePathAndName + "/" + locale; + + // if we've already resolved this request, just return it + if (cache[target]) { + load(cache[target]); + return; + } + + // get the root bundle which instructs which other bundles are required to contruct the localized bundle + require([bundlePathAndName], function(root){ + var + current= cache[bundlePathAndName + "/"]= dojo.clone(root.root), + availableLocales= getAvailableLocales(root, locale, bundlePath, bundleName); + require(availableLocales, function(){ + for (var i= 1; i<availableLocales.length; i++){ + cache[bundlePathAndName + "/" + availableLocales[i]]= current= dojo.mixin(dojo.clone(current), arguments[i]); + } + // target may not have been resolve (e.g., maybe only "fr" exists when "fr-ca" was requested) + cache[target]= current; + load(current); + }); + }); + }, + + cache: function(mid, value){ + cache[mid]= value; + } + }; +}); diff --git a/lib/dojo/lib/plugins/text.js b/lib/dojo/lib/plugins/text.js new file mode 100644 index 000000000..75894a32a --- /dev/null +++ b/lib/dojo/lib/plugins/text.js @@ -0,0 +1,70 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +// +// dojo text! plugin +// +// We choose to include our own plugin in hopes of leveraging functionality already contained in dojo +// and thereby reducing the size of the plugin compared to various loader implementations. Naturally, this +// allows AMD loaders to be used without their plugins. + +// CAUTION, this module may return improper results if the AMD loader does not support toAbsMid and client +// code passes relative plugin resource module ids. In that case, you should consider using the text! plugin +// that comes with your loader. + +define(["dojo", "dojo/cache"], function(dojo){ + var + cached= {}, + + cache= function(cacheId, url, value){ + cached[cacheId]= value; + dojo.cache({toString:function(){return url;}}, value); + }, + + strip= function(text){ + //note: this function courtesy of James Burke (https://github.com/jrburke/requirejs) + //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(text){ + text= text.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, ""); + var matches= text.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im); + if(matches){ + text= matches[1]; + } + }else{ + text = ""; + } + return text; + }; + + return { + load:function(id, require, load){ + var match, cacheId, url, parts= id.split("!"); + if(require.toAbsMid){ + match= parts[0].match(/(.+)(\.[^\/]*)$/); + cacheId= match ? require.toAbsMid(match[1]) + match[2] : require.toAbsMid(parts[0]); + if(cacheId in cached){ + load(parts[1]=="strip" ? strip(cached[cacheId]) : cached[cacheId]); + return; + } + } + url= require.toUrl(parts[0]); + dojo.xhrGet({ + url:url, + load:function(text){ + cacheId && cache(cacheId, url, text); + load(parts[1]=="strip" ? strip(text) : text); + } + }); + }, + + cache:function(cacheId, mid, type, value) { + cache(cacheId, require.nameToUrl(mid) + type, value); + } + }; +}); diff --git a/lib/dojo/nls/fi/colors.js b/lib/dojo/nls/fi/colors.js index 454e644e4..17cdf1684 100644 --- a/lib/dojo/nls/fi/colors.js +++ b/lib/dojo/nls/fi/colors.js @@ -1 +1 @@ -({"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"}) \ No newline at end of file +({"lightsteelblue":"vaalea teräksensininen","orangered":"oranssinpunainen","midnightblue":"yönsininen","cadetblue":"meren vihreä","seashell":"simpukankuori","slategrey":"savenharmaa","coral":"koralli","darkturquoise":"tumma turkoosi","antiquewhite":"antiikinvalkoinen","mediumspringgreen":"keskivaalea keväänvihreä","salmon":"lohenpunainen","darkgrey":"tummanharmaa","ivory":"norsunluu","greenyellow":"vihreänkeltainen","mistyrose":"utuinen ruusu","lightsalmon":"vaalea lohenpunainen","silver":"hopea","dimgrey":"himmeänharmaa","orange":"oranssi","white":"valkoinen","navajowhite":"navajonvalkoinen","royalblue":"syvänsininen","deeppink":"syvä vaaleanpunainen","lime":"vaaleanvihreä","oldlace":"vanha pitsi","chartreuse":"kellanvihreä","darkcyan":"tumma turkoosi","yellow":"keltainen","linen":"pellavanvaalea","olive":"oliivinvihreä","gold":"kulta","lawngreen":"ruohonvihreä","lightyellow":"vaaleankeltainen","tan":"kellanruskea","darkviolet":"tummanvioletti","lightslategrey":"vaaleanharmaa","grey":"harmaa","darkkhaki":"tumma khaki","green":"vihreä","deepskyblue":"tumma taivaansininen","aqua":"sinivihreä","sienna":"siena","mintcream":"minttukreemi","rosybrown":"punertavanruskea","mediumslateblue":"keskivaalea siniharmaa","magenta":"magenta","lightseagreen":"vaalea merenvihreä","cyan":"syaani","olivedrab":"oliivinruskea","darkgoldenrod":"tumma kultapiisku","slateblue":"savensininen","mediumaquamarine":"keskivaalea vedenvihreä","lavender":"laventeli","mediumseagreen":"keskivaalea merenvihreä","maroon":"kastanjanruskea","darkslategray":"tummanharmaa","mediumturquoise":"keskivaalea turkoosi","ghostwhite":"lakananvalkoinen","darkblue":"tummansininen","mediumvioletred":"keskivaalea lila","brown":"ruskea","lightgray":"vaaleanharmaa","sandybrown":"hiekanruskea","pink":"vaaleanpunainen","firebrick":"poltetun tiilen punainen","indigo":"indigo","snow":"lumivalkoinen","darkorchid":"tumma orkidea","turquoise":"turkoosi","chocolate":"suklaanruskea","springgreen":"keväänvihreä","moccasin":"nahanruskea","navy":"laivastonsininen","lemonchiffon":"sitruunankeltainen","teal":"sinivihreä","floralwhite":"kukanvalkoinen","cornflowerblue":"syvänsininen","paleturquoise":"haalea turkoosi","purple":"violetti","gainsboro":"gainsboro","plum":"luumunpunainen","red":"punainen","blue":"sininen","forestgreen":"metsänvihreä","darkgreen":"tummanvihreä","honeydew":"hunajameloninvihreä","darkseagreen":"tumma merenvihreä","lightcoral":"vaalea koralli","palevioletred":"haalea lila","mediumpurple":"keskivaalea violetti","saddlebrown":"satulanruskea","darkmagenta":"tumma magenta","thistle":"ohdake","whitesmoke":"savunvalkea","wheat":"vehnänkeltainen","violet":"violetti","lightskyblue":"vaalea taivaansininen","goldenrod":"kullanruskea","mediumblue":"keskisininen","skyblue":"taivaansininen","crimson":"karmiininpunainen","darksalmon":"tumma lohenpunainen","darkred":"tummanpunainen","darkslategrey":"tummanharmaa","peru":"peru","lightgrey":"vaaleanharmaa","lightgoldenrodyellow":"vaalea kultapiiskunkeltainen","blanchedalmond":"kuorittu manteli","aliceblue":"vaaleanharmaansininen","bisque":"vaaleanruskea","slategray":"savenharmaa","palegoldenrod":"haalea kultapiisku","darkorange":"tummanoranssi","aquamarine":"vedenvihreä","lightgreen":"vaaleanvihreä","burlywood":"puunruskea","dodgerblue":"Dodger-sininen","darkgray":"tummanharmaa","lightcyan":"vaalea syaani","powderblue":"harmaansininen","blueviolet":"sinivioletti","orchid":"orkidea","dimgray":"himmeänharmaa","beige":"vaaleanruskea","fuchsia":"purppura","lavenderblush":"laventelinpunainen","hotpink":"pinkki","steelblue":"teräksensininen","tomato":"tomaatinpunainen","lightpink":"vaaleanpunainen","limegreen":"limetinvihreä","indianred":"kirkkaanpunainen","papayawhip":"papaijavaahto","lightslategray":"vaaleanharmaa","gray":"harmaa","mediumorchid":"keskivaalea orkidea","cornsilk":"maissinkeltainen","black":"musta","seagreen":"merenvihreä","darkslateblue":"tumma siniharmaa","khaki":"khaki","lightblue":"vaaleansininen","palegreen":"haalea vihreä","azure":"taivaansininen","peachpuff":"persikka","darkolivegreen":"tummanoliivinvihreä","yellowgreen":"kellanvihreä"}) \ No newline at end of file diff --git a/lib/dojo/nls/kk/colors.js b/lib/dojo/nls/kk/colors.js new file mode 100644 index 000000000..19b90679d --- /dev/null +++ b/lib/dojo/nls/kk/colors.js @@ -0,0 +1 @@ +({"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":"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":"сарғыш жасыл"}) \ No newline at end of file diff --git a/lib/dojo/nls/pl/colors.js b/lib/dojo/nls/pl/colors.js index 852268c42..2fa71bd1b 100644 --- a/lib/dojo/nls/pl/colors.js +++ b/lib/dojo/nls/pl/colors.js @@ -1 +1 @@ -({"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"}) \ No newline at end of file +({"lightsteelblue":"jasnostalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"granatowoczarny","cadetblue":"niebieskoszary","seashell":"matowoliliowy","slategrey":"mysi","coral":"koralowy","darkturquoise":"mlecznoturkusowy","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":"przyciemniony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"królewski błękit","deeppink":"głęboki różowy","lime":"limonkowy","oldlace":"bladopomarańczowy","chartreuse":"żółtooliwkowy","darkcyan":"ciemnoniebieskozielony","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"śniady","darkviolet":"ciemnofiołkowy","lightslategrey":"jasny mysi","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"morski","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni gołębi","magenta":"amarantowy","lightseagreen":"jasna zieleń morska","cyan":"niebieskozielony","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemne stare złoto","slateblue":"gołębi","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia zieleń morska","maroon":"kasztanowy","darkslategray":"ciemny mysi","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fiołkowowoczerwony","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":"zielonomodry","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"fioletowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"miodowy","darkseagreen":"ciemna zieleń morska","lightcoral":"jasnokoralowy","palevioletred":"blady fiołkowoczerwony","mediumpurple":"średni fioletowy","saddlebrown":"brąz skórzany","darkmagenta":"ciemnoamarantowy","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fiołkowy","lightskyblue":"jasny błękit nieba","goldenrod":"stare złoto","mediumblue":"ciemnochabrowy","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny mysi","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnożółte stare złoto","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"mysi","palegoldenrod":"blade stare złoto","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasnoniebieskozielony","powderblue":"jasnobladobłękitny","blueviolet":"błękitnofiołkowy","orchid":"orchidea","dimgray":"przyciemniony szary","beige":"beżowy","fuchsia":"fuksjowy","lavenderblush":"lawendowocielisty","hotpink":"odblaskoworóżowy","steelblue":"stalowoniebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"zielony limonkowy","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny mysi","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"zieleń morska","darkslateblue":"ciemny gołębi","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazurowy","peachpuff":"brzoskwiniowy","darkolivegreen":"ciemnooliwkowy","yellowgreen":"żółtozielony"}) \ No newline at end of file diff --git a/lib/dojo/nls/pt-pt/colors.js b/lib/dojo/nls/pt-pt/colors.js index e01afd2c1..5038b537e 100644 --- a/lib/dojo/nls/pt-pt/colors.js +++ b/lib/dojo/nls/pt-pt/colors.js @@ -1 +1 @@ -({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento escuro","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento escuro","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"}) \ No newline at end of file +({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento esbatido","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento esbatido","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"}) \ No newline at end of file diff --git a/lib/dojo/nls/pt/colors.js b/lib/dojo/nls/pt/colors.js index 897efc3c1..0695a0ff6 100644 --- a/lib/dojo/nls/pt/colors.js +++ b/lib/dojo/nls/pt/colors.js @@ -1 +1 @@ -({"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"}) \ No newline at end of file +({"lightsteelblue":"azul aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul ardósia","mediumaquamarine":"água marinha médio","lavender":"lavanda","mediumseagreen":"verde marinho médio","maroon":"castanho","darkslategray":"cinza ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul talco","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"}) \ No newline at end of file diff --git a/lib/dojo/nls/sl/colors.js b/lib/dojo/nls/sl/colors.js index e009ce9f7..15d3ac7ba 100644 --- a/lib/dojo/nls/sl/colors.js +++ b/lib/dojo/nls/sl/colors.js @@ -1 +1 @@ -({"lightsteelblue":"svetlo jeklena modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"zelenkasto modra","seashell":"morska školjka","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"umazano siva","orange":"oranžna","white":"bela","navajowhite":"navajsko bela","royalblue":"kraljevsko modra","deeppink":"temno roza","lime":"rumeno zelena","oldlace":"stara čipka","chartreuse":"svetlo rumena zelena","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travnato zelena","lightyellow":"svetlo rumena","tan":"kožno rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno rumenkasto rjava","green":"zelena","deepskyblue":"temno nebesno modra","aqua":"akva","sienna":"siena","mintcream":"mentolno smetanasta","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"olivno sivo rjava","darkgoldenrod":"temno zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednje akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"prosojno bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično-rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"roza","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejna","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarsko modra","lemonchiffon":"limonina","teal":"zeleno modra","floralwhite":"cvetno bela","cornflowerblue":"plavično modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"pepelnato siva","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temno magenta","thistle":"osatna","whitesmoke":"umazano bela","wheat":"žitna","violet":"vijolična","lightskyblue":"svetlo nebesno modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebesno modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"mandljeva","aliceblue":"alice modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"grčav les","dodgerblue":"koruzno modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"smodniško modra","blueviolet":"modro vijolična","orchid":"orhidejna","dimgray":"umazano siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"bleščeča sivka","hotpink":"živo roza","steelblue":"jekleno modra","tomato":"paradižnikova","lightpink":"svetlo roza","limegreen":"citronsko zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejna","cornsilk":"koruzni laski","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"rumenkasto rjava","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurna","peachpuff":"breskova","darkolivegreen":"temno olivno zelena","yellowgreen":"rumeno zelena"}) \ No newline at end of file +({"lightsteelblue":"svetlo kovinsko modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"kadetsko modra","seashell":"morska lupina","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"pepelnato siva","orange":"oranžna","white":"bela","navajowhite":"navajo bela","royalblue":"kraljevsko modra","deeppink":"temno rožnata","lime":"limetasta","oldlace":"stara čipka","chartreuse":"chartreuse","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travniško zelena","lightyellow":"svetlo rumena","tan":"rumeno-rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno kaki","green":"zelena","deepskyblue":"temno nebeško modra","aqua":"akva","sienna":"sienna","mintcream":"metina krema","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"umazano olivna","darkgoldenrod":"temna zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednji akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"senčnato bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"rožnata","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejasta","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarska","lemonchiffon":"limonast šifon","teal":"modrozelena","floralwhite":"cvetno bela","cornflowerblue":"plavičasto modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"gainsboro","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temna magenta","thistle":"osatna","whitesmoke":"megleno bela","wheat":"pšenična","violet":"vijolična","lightskyblue":"svetlo nebeško modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebeško modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"obledelo mandljeva","aliceblue":"alice blue modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"peščeno sivo-rjava","dodgerblue":"dodgersko modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"kobaltovo modra","blueviolet":"modro vijolična","orchid":"orhidejasta","dimgray":"pepelnato siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"rožnato sivka","hotpink":"kričeče rožnata","steelblue":"kovinsko modra","tomato":"paradižnikova","lightpink":"svetlo rožnata","limegreen":"apneno zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejasta","cornsilk":"koruzna","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"kaki","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurno modra","peachpuff":"breskova","darkolivegreen":"temna olivno zelena","yellowgreen":"rumeno-zelena"}) \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_ROOT.js b/lib/dojo/nls/tt-rss-layer_ROOT.js index 1b351daf4..5cd71420f 100644 --- a/lib/dojo/nls/tt-rss-layer_ROOT.js +++ b/lib/dojo/nls/tt-rss-layer_ROOT.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.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("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.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:]","decimalFormat-short":"000T","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"}; diff --git a/lib/dojo/nls/tt-rss-layer_ar.js b/lib/dojo/nls/tt-rss-layer_ar.js index 6a19c6d6a..464e31646 100644 --- a/lib/dojo/nls/tt-rss-layer_ar.js +++ b/lib/dojo/nls/tt-rss-layer_ar.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_ar");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ar");dojo.nls.colors.ar={"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.ar");dijit.nls.loading.ar={"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ar");dijit.nls.common.ar={"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ar");dijit.form.nls.validate.ar={"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ar");dojo.cldr.nls.number.ar={"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":"٫","nan":"ليس رقم","nativeZeroDigit":"٠","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_ar");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ar");dojo.nls.colors.ar={"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.ar");dijit.nls.loading.ar={"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ar");dijit.nls.common.ar={"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ar");dijit.form.nls.validate.ar={"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ar");dijit.form.nls.ComboBox.ar={"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ar");dojo.cldr.nls.number.ar={"group":"٬","percentSign":"٪","exponential":"اس","list":"؛","infinity":"∞","minusSign":"-","decimal":"٫","nan":"ليس رقم","perMille":"؉","decimalFormat":"#,##0.###;#,##0.###-","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nativeZeroDigit":"0","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_ca.js b/lib/dojo/nls/tt-rss-layer_ca.js index 0f56ef882..4cc759041 100644 --- a/lib/dojo/nls/tt-rss-layer_ca.js +++ b/lib/dojo/nls/tt-rss-layer_ca.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_ca");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ca");dojo.nls.colors.ca={"lightsteelblue":"blau acer clar","orangered":"taronja vermellós","midnightblue":"blau mitjanit","cadetblue":"blau marí","seashell":"petxina marina","slategrey":"gris pissarra","coral":"corall","darkturquoise":"turquesa fosc","antiquewhite":"blanc antic","mediumspringgreen":"verd primavera mitjà","salmon":"salmó","darkgrey":"gris fosc","ivory":"marbre","greenyellow":"verd grogós","mistyrose":"rosa dens","lightsalmon":"salmó clar","silver":"argent","dimgrey":"gris fosc","orange":"taronja","white":"blanc","navajowhite":"blanc Navajo","royalblue":"blau marí intens","deeppink":"rosa profund","lime":"verd llimona","oldlace":"rosa cremós","chartreuse":"Llimona pàl·lid","darkcyan":"cian fosc","yellow":"groc","linen":"lli","olive":"oliva","gold":"daurat","lawngreen":"verd gespa","lightyellow":"groc clar","tan":"tan","darkviolet":"violeta fosc","lightslategrey":"gris pissarra clar","grey":"gris","darkkhaki":"caqui fosc","green":"verd","deepskyblue":"blau cel profund","aqua":"aigua","sienna":"siena","mintcream":"menta pàl·lid","rosybrown":"marró rosat","mediumslateblue":"blau pissarra mitjà","magenta":"magenta","lightseagreen":"verd marí clar","cyan":"cian","olivedrab":"gris oliva","darkgoldenrod":"ocre fosc","slateblue":"blau pissarra","mediumaquamarine":"aiguamarina mitjana","lavender":"lavanda","mediumseagreen":"verd marí mitjà","maroon":"marró vermellós","darkslategray":"gris pissarra fosc","mediumturquoise":"turquesa mitjana","ghostwhite":"blanc fantasma","darkblue":"blau fosc","mediumvioletred":"vermell violeta mitjà","brown":"marró","lightgray":"gris clar","sandybrown":"marró arenós","pink":"rosa","firebrick":"maó refractari","indigo":"índigo","snow":"neu","darkorchid":"orquídia fosc","turquoise":"turquesa","chocolate":"xocolata","springgreen":"verd de primavera","moccasin":"mocassí","navy":"blau marí","lemonchiffon":"groc brisa","teal":"verd blavós","floralwhite":"blanc floral","cornflowerblue":"blau blauet","paleturquoise":"turquesa pàl·lid","purple":"porpra","gainsboro":"gainsboro","plum":"pruna","red":"vermell","blue":"blau","forestgreen":"verd bosc","darkgreen":"verd fosc","honeydew":"rosada de mel","darkseagreen":"verd marí fosc","lightcoral":"corall clar","palevioletred":"vermell porpra pàl·lid","mediumpurple":"porpra mitjana","saddlebrown":"marró mitjà","darkmagenta":"magenta fosc","thistle":"card","whitesmoke":"blanc fumat","wheat":"blat","violet":"violeta","lightskyblue":"blau cel clar","goldenrod":"ocre","mediumblue":"blau mitjà","skyblue":"blau cel","crimson":"carmesí","darksalmon":"salmó fosc","darkred":"vermell fosc","darkslategrey":"gris pissarra fosc","peru":"Perú","lightgrey":"gris clar","lightgoldenrodyellow":"groc ocre clar","blanchedalmond":"ametlla pàl·lid","aliceblue":"blau cian clar","bisque":"crema","slategray":"gris pissarra","palegoldenrod":"ocre pàl·lid","darkorange":"taronja fosc","aquamarine":"aiguamarina","lightgreen":"verd clar","burlywood":"marró arenós","dodgerblue":"blau Dodger","darkgray":"gris fosc","lightcyan":"cian clar","powderblue":"blau grisós","blueviolet":"blau violeta","orchid":"orquídia","dimgray":"gris fosc","beige":"beix","fuchsia":"fúcsia","lavenderblush":"lavanda vermellosa","hotpink":"rosa fúcsia","steelblue":"blau acer","tomato":"tomàquet","lightpink":"rosa clar","limegreen":"verd llimona verda","indianred":"vermell indi","papayawhip":"préssec pastel","lightslategray":"gris pissarra clar","gray":"gris","mediumorchid":"orquídia mitjana","cornsilk":"cru","black":"negre","seagreen":"verd marí","darkslateblue":"blau pissarra fosc","khaki":"caqui","lightblue":"blau clar","palegreen":"verd pàl·lid","azure":"atzur","peachpuff":"préssec","darkolivegreen":"verd oliva fosc","yellowgreen":"verd grogós"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ca");dijit.nls.loading.ca={"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ca");dijit.nls.common.ca={"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ca");dijit.form.nls.validate.ca={"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ca");dijit.form.nls.ComboBox.ca={"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ca");dojo.cldr.nls.number.ca={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_ca");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ca");dojo.nls.colors.ca={"lightsteelblue":"blau acer clar","orangered":"taronja vermellós","midnightblue":"blau mitjanit","cadetblue":"blau marí","seashell":"petxina marina","slategrey":"gris pissarra","coral":"corall","darkturquoise":"turquesa fosc","antiquewhite":"blanc antic","mediumspringgreen":"verd primavera mitjà","salmon":"salmó","darkgrey":"gris fosc","ivory":"marbre","greenyellow":"verd grogós","mistyrose":"rosa dens","lightsalmon":"salmó clar","silver":"argent","dimgrey":"gris fosc","orange":"taronja","white":"blanc","navajowhite":"blanc Navajo","royalblue":"blau marí intens","deeppink":"rosa profund","lime":"verd llimona","oldlace":"rosa cremós","chartreuse":"Llimona pàl·lid","darkcyan":"cian fosc","yellow":"groc","linen":"lli","olive":"oliva","gold":"daurat","lawngreen":"verd gespa","lightyellow":"groc clar","tan":"tan","darkviolet":"violeta fosc","lightslategrey":"gris pissarra clar","grey":"gris","darkkhaki":"caqui fosc","green":"verd","deepskyblue":"blau cel profund","aqua":"aigua","sienna":"siena","mintcream":"menta pàl·lid","rosybrown":"marró rosat","mediumslateblue":"blau pissarra mitjà","magenta":"magenta","lightseagreen":"verd marí clar","cyan":"cian","olivedrab":"gris oliva","darkgoldenrod":"ocre fosc","slateblue":"blau pissarra","mediumaquamarine":"aiguamarina mitjana","lavender":"lavanda","mediumseagreen":"verd marí mitjà","maroon":"marró vermellós","darkslategray":"gris pissarra fosc","mediumturquoise":"turquesa mitjana","ghostwhite":"blanc fantasma","darkblue":"blau fosc","mediumvioletred":"vermell violeta mitjà","brown":"marró","lightgray":"gris clar","sandybrown":"marró arenós","pink":"rosa","firebrick":"maó refractari","indigo":"índigo","snow":"neu","darkorchid":"orquídia fosc","turquoise":"turquesa","chocolate":"xocolata","springgreen":"verd de primavera","moccasin":"mocassí","navy":"blau marí","lemonchiffon":"groc brisa","teal":"verd blavós","floralwhite":"blanc floral","cornflowerblue":"blau blauet","paleturquoise":"turquesa pàl·lid","purple":"porpra","gainsboro":"gainsboro","plum":"pruna","red":"vermell","blue":"blau","forestgreen":"verd bosc","darkgreen":"verd fosc","honeydew":"rosada de mel","darkseagreen":"verd marí fosc","lightcoral":"corall clar","palevioletred":"vermell porpra pàl·lid","mediumpurple":"porpra mitjana","saddlebrown":"marró mitjà","darkmagenta":"magenta fosc","thistle":"card","whitesmoke":"blanc fumat","wheat":"blat","violet":"violeta","lightskyblue":"blau cel clar","goldenrod":"ocre","mediumblue":"blau mitjà","skyblue":"blau cel","crimson":"carmesí","darksalmon":"salmó fosc","darkred":"vermell fosc","darkslategrey":"gris pissarra fosc","peru":"Perú","lightgrey":"gris clar","lightgoldenrodyellow":"groc ocre clar","blanchedalmond":"ametlla pàl·lid","aliceblue":"blau cian clar","bisque":"crema","slategray":"gris pissarra","palegoldenrod":"ocre pàl·lid","darkorange":"taronja fosc","aquamarine":"aiguamarina","lightgreen":"verd clar","burlywood":"marró arenós","dodgerblue":"blau Dodger","darkgray":"gris fosc","lightcyan":"cian clar","powderblue":"blau grisós","blueviolet":"blau violeta","orchid":"orquídia","dimgray":"gris fosc","beige":"beix","fuchsia":"fúcsia","lavenderblush":"lavanda vermellosa","hotpink":"rosa fúcsia","steelblue":"blau acer","tomato":"tomàquet","lightpink":"rosa clar","limegreen":"verd llimona verda","indianred":"vermell indi","papayawhip":"préssec pastel","lightslategray":"gris pissarra clar","gray":"gris","mediumorchid":"orquídia mitjana","cornsilk":"cru","black":"negre","seagreen":"verd marí","darkslateblue":"blau pissarra fosc","khaki":"caqui","lightblue":"blau clar","palegreen":"verd pàl·lid","azure":"atzur","peachpuff":"préssec","darkolivegreen":"verd oliva fosc","yellowgreen":"verd grogós"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ca");dijit.nls.loading.ca={"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ca");dijit.nls.common.ca={"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ca");dijit.form.nls.validate.ca={"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ca");dijit.form.nls.ComboBox.ca={"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ca");dojo.cldr.nls.number.ca={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_cs.js b/lib/dojo/nls/tt-rss-layer_cs.js index 93ed7c8f1..8c008a467 100644 --- a/lib/dojo/nls/tt-rss-layer_cs.js +++ b/lib/dojo/nls/tt-rss-layer_cs.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.cs");dijit.nls.common.cs={"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.cs");dojo.cldr.nls.number.cs={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_da.js b/lib/dojo/nls/tt-rss-layer_da.js index 7f8be8c68..365eb98da 100644 --- a/lib/dojo/nls/tt-rss-layer_da.js +++ b/lib/dojo/nls/tt-rss-layer_da.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_da");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.da");dojo.nls.colors.da={"lightsteelblue":"lys stålblå","orangered":"orangerød","midnightblue":"midnatsblå","cadetblue":"kadetblå","seashell":"muslingeskal","slategrey":"skifergrå","coral":"koralrød","darkturquoise":"mørk turkis","antiquewhite":"antikhvid","mediumspringgreen":"mellemforårsgrøn","salmon":"laksefarvet","darkgrey":"mørkegrå","ivory":"elfenben","greenyellow":"grøngul","mistyrose":"blegrosa","lightsalmon":"lys laksefarvet","silver":"sølv","dimgrey":"svag grå","orange":"orange","white":"hvid","navajowhite":"navajo-hvid","royalblue":"kongeblå","deeppink":"dyb pink","lime":"lime","oldlace":"kniplingshvid","chartreuse":"chartreuse","darkcyan":"mørk cyan","yellow":"gul","linen":"lærred","olive":"olivengrøn","gold":"guld","lawngreen":"græsgrøn","lightyellow":"lysegul","tan":"tan","darkviolet":"mørkelilla","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grøn","deepskyblue":"dyb himmelblå","aqua":"akvablå","sienna":"sienna","mintcream":"pebermyntecreme","rosybrown":"rosabrun","mediumslateblue":"mellemskiferblå","magenta":"magenta","lightseagreen":"lys havgrøn","cyan":"cyan","olivedrab":"brungrøn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"mellem akvamarin","lavender":"lysviolet","mediumseagreen":"mellemhavgrøn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"mellemturkis","ghostwhite":"spøgelseshvid","darkblue":"mørkeblå","mediumvioletred":"mellemviolet","brown":"brun","lightgray":"lysegrå","sandybrown":"sandbrun","pink":"pink","firebrick":"chamottesten","indigo":"indigo","snow":"sne","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"rust","springgreen":"forårsgrøn","moccasin":"fruesko","navy":"marineblå","lemonchiffon":"citronfromage","teal":"blågrøn","floralwhite":"blomsterhvid","cornflowerblue":"kornblomstblå","paleturquoise":"bleg turkis","purple":"lilla","gainsboro":"gainsboro","plum":"blomme","red":"rød","blue":"blå","forestgreen":"skovgrøn","darkgreen":"mørkegrøn","honeydew":"honningdug","darkseagreen":"mørk havgrøn","lightcoral":"lys koralrød","palevioletred":"blegviolet","mediumpurple":"mellemlilla","saddlebrown":"saddelbrun","darkmagenta":"mørk magenta","thistle":"tidsel","whitesmoke":"hvid røg","wheat":"korngul","violet":"lilla","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellemblå","skyblue":"himmelblå","crimson":"blodrød","darksalmon":"mørk laksefarvet","darkred":"mørkerød","darkslategrey":"mørk skifergrå","peru":"peru","lightgrey":"lysegrå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"blanceret mandel","aliceblue":"babyblå","bisque":"gulgrå","slategray":"skifergrå","palegoldenrod":"bleg gyldenris","darkorange":"mørk orange","aquamarine":"akvamarin","lightgreen":"lysegrøn","burlywood":"tobak","dodgerblue":"dodgerblå","darkgray":"mørkegrå","lightcyan":"lys cyan","powderblue":"pudderblå","blueviolet":"blåviolet","orchid":"orkide","dimgray":"svag grå","beige":"beige","fuchsia":"lyslilla","lavenderblush":"lavendelrød","hotpink":"mørk rosa","steelblue":"metalblå","tomato":"tomat","lightpink":"lys pink","limegreen":"limegrøn","indianred":"lys rødbrun","papayawhip":"papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"mellem orkide","cornsilk":"majs","black":"sort","seagreen":"havgrøn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lyseblå","palegreen":"bleggrøn","azure":"azurblå","peachpuff":"fersken","darkolivegreen":"mørk olivengrøn","yellowgreen":"gulgrøn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.da");dijit.nls.loading.da={"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.da");dijit.nls.common.da={"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.da");dijit.form.nls.validate.da={"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ugyldig.","missingMessage":"Værdien er påkrævet."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.da");dijit.form.nls.ComboBox.da={"previousMessage":"Forrige valg","nextMessage":"Flere valg"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.da");dojo.cldr.nls.number.da={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_da");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.da");dojo.nls.colors.da={"lightsteelblue":"lys stålblå","orangered":"orangerød","midnightblue":"midnatsblå","cadetblue":"kadetblå","seashell":"muslingeskal","slategrey":"skifergrå","coral":"koralrød","darkturquoise":"mørk turkis","antiquewhite":"antikhvid","mediumspringgreen":"mellemforårsgrøn","salmon":"laksefarvet","darkgrey":"mørkegrå","ivory":"elfenben","greenyellow":"grøngul","mistyrose":"blegrosa","lightsalmon":"lys laksefarvet","silver":"sølv","dimgrey":"svag grå","orange":"orange","white":"hvid","navajowhite":"navajo-hvid","royalblue":"kongeblå","deeppink":"dyb pink","lime":"lime","oldlace":"kniplingshvid","chartreuse":"chartreuse","darkcyan":"mørk cyan","yellow":"gul","linen":"lærred","olive":"olivengrøn","gold":"guld","lawngreen":"græsgrøn","lightyellow":"lysegul","tan":"tan","darkviolet":"mørkelilla","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grøn","deepskyblue":"dyb himmelblå","aqua":"akvablå","sienna":"sienna","mintcream":"pebermyntecreme","rosybrown":"rosabrun","mediumslateblue":"mellemskiferblå","magenta":"magenta","lightseagreen":"lys havgrøn","cyan":"cyan","olivedrab":"brungrøn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"mellem akvamarin","lavender":"lysviolet","mediumseagreen":"mellemhavgrøn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"mellemturkis","ghostwhite":"spøgelseshvid","darkblue":"mørkeblå","mediumvioletred":"mellemviolet","brown":"brun","lightgray":"lysegrå","sandybrown":"sandbrun","pink":"pink","firebrick":"chamottesten","indigo":"indigo","snow":"sne","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"rust","springgreen":"forårsgrøn","moccasin":"fruesko","navy":"marineblå","lemonchiffon":"citronfromage","teal":"blågrøn","floralwhite":"blomsterhvid","cornflowerblue":"kornblomstblå","paleturquoise":"bleg turkis","purple":"lilla","gainsboro":"gainsboro","plum":"blomme","red":"rød","blue":"blå","forestgreen":"skovgrøn","darkgreen":"mørkegrøn","honeydew":"honningdug","darkseagreen":"mørk havgrøn","lightcoral":"lys koralrød","palevioletred":"blegviolet","mediumpurple":"mellemlilla","saddlebrown":"saddelbrun","darkmagenta":"mørk magenta","thistle":"tidsel","whitesmoke":"hvid røg","wheat":"korngul","violet":"lilla","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellemblå","skyblue":"himmelblå","crimson":"blodrød","darksalmon":"mørk laksefarvet","darkred":"mørkerød","darkslategrey":"mørk skifergrå","peru":"peru","lightgrey":"lysegrå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"blanceret mandel","aliceblue":"babyblå","bisque":"gulgrå","slategray":"skifergrå","palegoldenrod":"bleg gyldenris","darkorange":"mørk orange","aquamarine":"akvamarin","lightgreen":"lysegrøn","burlywood":"tobak","dodgerblue":"dodgerblå","darkgray":"mørkegrå","lightcyan":"lys cyan","powderblue":"pudderblå","blueviolet":"blåviolet","orchid":"orkide","dimgray":"svag grå","beige":"beige","fuchsia":"lyslilla","lavenderblush":"lavendelrød","hotpink":"mørk rosa","steelblue":"metalblå","tomato":"tomat","lightpink":"lys pink","limegreen":"limegrøn","indianred":"lys rødbrun","papayawhip":"papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"mellem orkide","cornsilk":"majs","black":"sort","seagreen":"havgrøn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lyseblå","palegreen":"bleggrøn","azure":"azurblå","peachpuff":"fersken","darkolivegreen":"mørk olivengrøn","yellowgreen":"gulgrøn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.da");dijit.nls.loading.da={"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.da");dijit.nls.common.da={"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.da");dijit.form.nls.validate.da={"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ikke gyldig.","missingMessage":"Værdien er påkrævet."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.da");dijit.form.nls.ComboBox.da={"previousMessage":"Forrige valg","nextMessage":"Flere valg"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.da");dojo.cldr.nls.number.da={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_de-de.js b/lib/dojo/nls/tt-rss-layer_de-de.js index e5bb92237..f43af10d1 100644 --- a/lib/dojo/nls/tt-rss-layer_de-de.js +++ b/lib/dojo/nls/tt-rss-layer_de-de.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};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 liegt 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};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 liegt 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_de.js b/lib/dojo/nls/tt-rss-layer_de.js index 5500fc19b..9d0939e4a 100644 --- a/lib/dojo/nls/tt-rss-layer_de.js +++ b/lib/dojo/nls/tt-rss-layer_de.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};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 liegt 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"};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 liegt 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_el.js b/lib/dojo/nls/tt-rss-layer_el.js index 0a4594e3c..379759746 100644 --- a/lib/dojo/nls/tt-rss-layer_el.js +++ b/lib/dojo/nls/tt-rss-layer_el.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_el");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.el");dojo.nls.colors.el={"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.el");dijit.nls.loading.el={"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.el");dijit.nls.common.el={"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.el");dijit.form.nls.validate.el={"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.el");dojo.cldr.nls.number.el={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_el");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.el");dojo.nls.colors.el={"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.el");dijit.nls.loading.el={"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.el");dijit.nls.common.el={"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.el");dijit.form.nls.validate.el={"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.el");dijit.form.nls.ComboBox.el={"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.el");dojo.cldr.nls.number.el={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","list":",","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","currencyFormat":"#,##0.00 ¤","plusSign":"+","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","decimalFormat":"#,##0.###","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_en-gb.js b/lib/dojo/nls/tt-rss-layer_en-gb.js index 382f40413..729bd63b5 100644 --- a/lib/dojo/nls/tt-rss-layer_en-gb.js +++ b/lib/dojo/nls/tt-rss-layer_en-gb.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat":"¤#,##0.00","group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","decimalFormat-short":"000T","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_en-us.js b/lib/dojo/nls/tt-rss-layer_en-us.js index af4f269ee..d8be077fe 100644 --- a/lib/dojo/nls/tt-rss-layer_en-us.js +++ b/lib/dojo/nls/tt-rss-layer_en-us.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","decimalFormat-short":"000T","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_en.js b/lib/dojo/nls/tt-rss-layer_en.js index b1eac5b9d..2cb4b5732 100644 --- a/lib/dojo/nls/tt-rss-layer_en.js +++ b/lib/dojo/nls/tt-rss-layer_en.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","decimalFormat-short":"000T","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_es-es.js b/lib/dojo/nls/tt-rss-layer_es-es.js index 971c82e96..832d1fbba 100644 --- a/lib/dojo/nls/tt-rss-layer_es-es.js +++ b/lib/dojo/nls/tt-rss-layer_es-es.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_es.js b/lib/dojo/nls/tt-rss-layer_es.js index d9c37c058..daec5d53d 100644 --- a/lib/dojo/nls/tt-rss-layer_es.js +++ b/lib/dojo/nls/tt-rss-layer_es.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_fi-fi.js b/lib/dojo/nls/tt-rss-layer_fi-fi.js index 0a78dd3c9..29f0b1a40 100644 --- a/lib/dojo/nls/tt-rss-layer_fi-fi.js +++ b/lib/dojo/nls/tt-rss-layer_fi-fi.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_fi-fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi_fi");dojo.nls.colors.fi_fi={"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.fi_fi");dijit.nls.loading.fi_fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi_fi");dijit.nls.common.fi_fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi_fi");dijit.form.nls.validate.fi_fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi_fi");dijit.form.nls.ComboBox.fi_fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi_fi");dojo.cldr.nls.number.fi_fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_fi-fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi_fi");dojo.nls.colors.fi_fi={"lightsteelblue":"vaalea teräksensininen","orangered":"oranssinpunainen","midnightblue":"yönsininen","cadetblue":"meren vihreä","seashell":"simpukankuori","slategrey":"savenharmaa","coral":"koralli","darkturquoise":"tumma turkoosi","antiquewhite":"antiikinvalkoinen","mediumspringgreen":"keskivaalea keväänvihreä","salmon":"lohenpunainen","darkgrey":"tummanharmaa","ivory":"norsunluu","greenyellow":"vihreänkeltainen","mistyrose":"utuinen ruusu","lightsalmon":"vaalea lohenpunainen","silver":"hopea","dimgrey":"himmeänharmaa","orange":"oranssi","white":"valkoinen","navajowhite":"navajonvalkoinen","royalblue":"syvänsininen","deeppink":"syvä vaaleanpunainen","lime":"vaaleanvihreä","oldlace":"vanha pitsi","chartreuse":"kellanvihreä","darkcyan":"tumma turkoosi","yellow":"keltainen","linen":"pellavanvaalea","olive":"oliivinvihreä","gold":"kulta","lawngreen":"ruohonvihreä","lightyellow":"vaaleankeltainen","tan":"kellanruskea","darkviolet":"tummanvioletti","lightslategrey":"vaaleanharmaa","grey":"harmaa","darkkhaki":"tumma khaki","green":"vihreä","deepskyblue":"tumma taivaansininen","aqua":"sinivihreä","sienna":"siena","mintcream":"minttukreemi","rosybrown":"punertavanruskea","mediumslateblue":"keskivaalea siniharmaa","magenta":"magenta","lightseagreen":"vaalea merenvihreä","cyan":"syaani","olivedrab":"oliivinruskea","darkgoldenrod":"tumma kultapiisku","slateblue":"savensininen","mediumaquamarine":"keskivaalea vedenvihreä","lavender":"laventeli","mediumseagreen":"keskivaalea merenvihreä","maroon":"kastanjanruskea","darkslategray":"tummanharmaa","mediumturquoise":"keskivaalea turkoosi","ghostwhite":"lakananvalkoinen","darkblue":"tummansininen","mediumvioletred":"keskivaalea lila","brown":"ruskea","lightgray":"vaaleanharmaa","sandybrown":"hiekanruskea","pink":"vaaleanpunainen","firebrick":"poltetun tiilen punainen","indigo":"indigo","snow":"lumivalkoinen","darkorchid":"tumma orkidea","turquoise":"turkoosi","chocolate":"suklaanruskea","springgreen":"keväänvihreä","moccasin":"nahanruskea","navy":"laivastonsininen","lemonchiffon":"sitruunankeltainen","teal":"sinivihreä","floralwhite":"kukanvalkoinen","cornflowerblue":"syvänsininen","paleturquoise":"haalea turkoosi","purple":"violetti","gainsboro":"gainsboro","plum":"luumunpunainen","red":"punainen","blue":"sininen","forestgreen":"metsänvihreä","darkgreen":"tummanvihreä","honeydew":"hunajameloninvihreä","darkseagreen":"tumma merenvihreä","lightcoral":"vaalea koralli","palevioletred":"haalea lila","mediumpurple":"keskivaalea violetti","saddlebrown":"satulanruskea","darkmagenta":"tumma magenta","thistle":"ohdake","whitesmoke":"savunvalkea","wheat":"vehnänkeltainen","violet":"violetti","lightskyblue":"vaalea taivaansininen","goldenrod":"kullanruskea","mediumblue":"keskisininen","skyblue":"taivaansininen","crimson":"karmiininpunainen","darksalmon":"tumma lohenpunainen","darkred":"tummanpunainen","darkslategrey":"tummanharmaa","peru":"peru","lightgrey":"vaaleanharmaa","lightgoldenrodyellow":"vaalea kultapiiskunkeltainen","blanchedalmond":"kuorittu manteli","aliceblue":"vaaleanharmaansininen","bisque":"vaaleanruskea","slategray":"savenharmaa","palegoldenrod":"haalea kultapiisku","darkorange":"tummanoranssi","aquamarine":"vedenvihreä","lightgreen":"vaaleanvihreä","burlywood":"puunruskea","dodgerblue":"Dodger-sininen","darkgray":"tummanharmaa","lightcyan":"vaalea syaani","powderblue":"harmaansininen","blueviolet":"sinivioletti","orchid":"orkidea","dimgray":"himmeänharmaa","beige":"vaaleanruskea","fuchsia":"purppura","lavenderblush":"laventelinpunainen","hotpink":"pinkki","steelblue":"teräksensininen","tomato":"tomaatinpunainen","lightpink":"vaaleanpunainen","limegreen":"limetinvihreä","indianred":"kirkkaanpunainen","papayawhip":"papaijavaahto","lightslategray":"vaaleanharmaa","gray":"harmaa","mediumorchid":"keskivaalea orkidea","cornsilk":"maissinkeltainen","black":"musta","seagreen":"merenvihreä","darkslateblue":"tumma siniharmaa","khaki":"khaki","lightblue":"vaaleansininen","palegreen":"haalea vihreä","azure":"taivaansininen","peachpuff":"persikka","darkolivegreen":"tummanoliivinvihreä","yellowgreen":"kellanvihreä"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi_fi");dijit.nls.loading.fi_fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi_fi");dijit.nls.common.fi_fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi_fi");dijit.form.nls.validate.fi_fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi_fi");dijit.form.nls.ComboBox.fi_fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi_fi");dojo.cldr.nls.number.fi_fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_fi.js b/lib/dojo/nls/tt-rss-layer_fi.js index 3932b9873..86fc0bcb7 100644 --- a/lib/dojo/nls/tt-rss-layer_fi.js +++ b/lib/dojo/nls/tt-rss-layer_fi.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi");dojo.nls.colors.fi={"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.fi");dijit.nls.loading.fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi");dijit.nls.common.fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi");dijit.form.nls.validate.fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi");dijit.form.nls.ComboBox.fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi");dojo.cldr.nls.number.fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_fi");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fi");dojo.nls.colors.fi={"lightsteelblue":"vaalea teräksensininen","orangered":"oranssinpunainen","midnightblue":"yönsininen","cadetblue":"meren vihreä","seashell":"simpukankuori","slategrey":"savenharmaa","coral":"koralli","darkturquoise":"tumma turkoosi","antiquewhite":"antiikinvalkoinen","mediumspringgreen":"keskivaalea keväänvihreä","salmon":"lohenpunainen","darkgrey":"tummanharmaa","ivory":"norsunluu","greenyellow":"vihreänkeltainen","mistyrose":"utuinen ruusu","lightsalmon":"vaalea lohenpunainen","silver":"hopea","dimgrey":"himmeänharmaa","orange":"oranssi","white":"valkoinen","navajowhite":"navajonvalkoinen","royalblue":"syvänsininen","deeppink":"syvä vaaleanpunainen","lime":"vaaleanvihreä","oldlace":"vanha pitsi","chartreuse":"kellanvihreä","darkcyan":"tumma turkoosi","yellow":"keltainen","linen":"pellavanvaalea","olive":"oliivinvihreä","gold":"kulta","lawngreen":"ruohonvihreä","lightyellow":"vaaleankeltainen","tan":"kellanruskea","darkviolet":"tummanvioletti","lightslategrey":"vaaleanharmaa","grey":"harmaa","darkkhaki":"tumma khaki","green":"vihreä","deepskyblue":"tumma taivaansininen","aqua":"sinivihreä","sienna":"siena","mintcream":"minttukreemi","rosybrown":"punertavanruskea","mediumslateblue":"keskivaalea siniharmaa","magenta":"magenta","lightseagreen":"vaalea merenvihreä","cyan":"syaani","olivedrab":"oliivinruskea","darkgoldenrod":"tumma kultapiisku","slateblue":"savensininen","mediumaquamarine":"keskivaalea vedenvihreä","lavender":"laventeli","mediumseagreen":"keskivaalea merenvihreä","maroon":"kastanjanruskea","darkslategray":"tummanharmaa","mediumturquoise":"keskivaalea turkoosi","ghostwhite":"lakananvalkoinen","darkblue":"tummansininen","mediumvioletred":"keskivaalea lila","brown":"ruskea","lightgray":"vaaleanharmaa","sandybrown":"hiekanruskea","pink":"vaaleanpunainen","firebrick":"poltetun tiilen punainen","indigo":"indigo","snow":"lumivalkoinen","darkorchid":"tumma orkidea","turquoise":"turkoosi","chocolate":"suklaanruskea","springgreen":"keväänvihreä","moccasin":"nahanruskea","navy":"laivastonsininen","lemonchiffon":"sitruunankeltainen","teal":"sinivihreä","floralwhite":"kukanvalkoinen","cornflowerblue":"syvänsininen","paleturquoise":"haalea turkoosi","purple":"violetti","gainsboro":"gainsboro","plum":"luumunpunainen","red":"punainen","blue":"sininen","forestgreen":"metsänvihreä","darkgreen":"tummanvihreä","honeydew":"hunajameloninvihreä","darkseagreen":"tumma merenvihreä","lightcoral":"vaalea koralli","palevioletred":"haalea lila","mediumpurple":"keskivaalea violetti","saddlebrown":"satulanruskea","darkmagenta":"tumma magenta","thistle":"ohdake","whitesmoke":"savunvalkea","wheat":"vehnänkeltainen","violet":"violetti","lightskyblue":"vaalea taivaansininen","goldenrod":"kullanruskea","mediumblue":"keskisininen","skyblue":"taivaansininen","crimson":"karmiininpunainen","darksalmon":"tumma lohenpunainen","darkred":"tummanpunainen","darkslategrey":"tummanharmaa","peru":"peru","lightgrey":"vaaleanharmaa","lightgoldenrodyellow":"vaalea kultapiiskunkeltainen","blanchedalmond":"kuorittu manteli","aliceblue":"vaaleanharmaansininen","bisque":"vaaleanruskea","slategray":"savenharmaa","palegoldenrod":"haalea kultapiisku","darkorange":"tummanoranssi","aquamarine":"vedenvihreä","lightgreen":"vaaleanvihreä","burlywood":"puunruskea","dodgerblue":"Dodger-sininen","darkgray":"tummanharmaa","lightcyan":"vaalea syaani","powderblue":"harmaansininen","blueviolet":"sinivioletti","orchid":"orkidea","dimgray":"himmeänharmaa","beige":"vaaleanruskea","fuchsia":"purppura","lavenderblush":"laventelinpunainen","hotpink":"pinkki","steelblue":"teräksensininen","tomato":"tomaatinpunainen","lightpink":"vaaleanpunainen","limegreen":"limetinvihreä","indianred":"kirkkaanpunainen","papayawhip":"papaijavaahto","lightslategray":"vaaleanharmaa","gray":"harmaa","mediumorchid":"keskivaalea orkidea","cornsilk":"maissinkeltainen","black":"musta","seagreen":"merenvihreä","darkslateblue":"tumma siniharmaa","khaki":"khaki","lightblue":"vaaleansininen","palegreen":"haalea vihreä","azure":"taivaansininen","peachpuff":"persikka","darkolivegreen":"tummanoliivinvihreä","yellowgreen":"kellanvihreä"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fi");dijit.nls.loading.fi={"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fi");dijit.nls.common.fi={"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fi");dijit.form.nls.validate.fi={"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fi");dijit.form.nls.ComboBox.fi={"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fi");dojo.cldr.nls.number.fi={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"epäluku","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_fr-fr.js b/lib/dojo/nls/tt-rss-layer_fr-fr.js index e46a35a24..1fba0709c 100644 --- a/lib/dojo/nls/tt-rss-layer_fr-fr.js +++ b/lib/dojo/nls/tt-rss-layer_fr-fr.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_fr.js b/lib/dojo/nls/tt-rss-layer_fr.js index 8595a42d0..7d5f281e2 100644 --- a/lib/dojo/nls/tt-rss-layer_fr.js +++ b/lib/dojo/nls/tt-rss-layer_fr.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_he-il.js b/lib/dojo/nls/tt-rss-layer_he-il.js index 59bc21f1f..bc4572cc2 100644 --- a/lib/dojo/nls/tt-rss-layer_he-il.js +++ b/lib/dojo/nls/tt-rss-layer_he-il.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_he-il");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he_il");dojo.nls.colors.he_il={"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.he_il");dijit.nls.loading.he_il={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he_il");dijit.nls.common.he_il={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he_il");dijit.form.nls.validate.he_il={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he_il");dijit.form.nls.ComboBox.he_il={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he_il");dojo.cldr.nls.number.he_il={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_he-il");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he_il");dojo.nls.colors.he_il={"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.he_il");dijit.nls.loading.he_il={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he_il");dijit.nls.common.he_il={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he_il");dijit.form.nls.validate.he_il={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he_il");dijit.form.nls.ComboBox.he_il={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he_il");dojo.cldr.nls.number.he_il={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_he.js b/lib/dojo/nls/tt-rss-layer_he.js index a30b4434c..3efc22fc5 100644 --- a/lib/dojo/nls/tt-rss-layer_he.js +++ b/lib/dojo/nls/tt-rss-layer_he.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_he");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he");dojo.nls.colors.he={"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.he");dijit.nls.loading.he={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he");dijit.nls.common.he={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he");dijit.form.nls.validate.he={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he");dojo.cldr.nls.number.he={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_he");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.he");dojo.nls.colors.he={"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.he");dijit.nls.loading.he={"loadingState":"טעינה...‏","errorState":"אירעה שגיאה"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.he");dijit.nls.common.he={"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.he");dijit.form.nls.validate.he={"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.he");dijit.form.nls.ComboBox.he={"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.he");dojo.cldr.nls.number.he={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_hu.js b/lib/dojo/nls/tt-rss-layer_hu.js index 3e7728585..2567d6834 100644 --- a/lib/dojo/nls/tt-rss-layer_hu.js +++ b/lib/dojo/nls/tt-rss-layer_hu.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"group":" ","percentSign":"%","exponential":"E","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.hu");dijit.nls.common.hu={"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.hu");dojo.cldr.nls.number.hu={"group":" ","percentSign":"%","exponential":"E","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","percentFormat":"#,##0%","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_it-it.js b/lib/dojo/nls/tt-rss-layer_it-it.js index ad0d6549c..d2df8f60a 100644 --- a/lib/dojo/nls/tt-rss-layer_it-it.js +++ b/lib/dojo/nls/tt-rss-layer_it-it.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/tt-rss-layer_it.js b/lib/dojo/nls/tt-rss-layer_it.js index 640baacbc..e34368d15 100644 --- a/lib/dojo/nls/tt-rss-layer_it.js +++ b/lib/dojo/nls/tt-rss-layer_it.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"decimalFormat":"#,##0.###","group":".","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤ #,##0.00","decimal":",","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/tt-rss-layer_ja-jp.js b/lib/dojo/nls/tt-rss-layer_ja-jp.js index 84aa8786b..016cf5d5c 100644 --- a/lib/dojo/nls/tt-rss-layer_ja-jp.js +++ b/lib/dojo/nls/tt-rss-layer_ja-jp.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/tt-rss-layer_ja.js b/lib/dojo/nls/tt-rss-layer_ja.js index d71241d29..13da053da 100644 --- a/lib/dojo/nls/tt-rss-layer_ja.js +++ b/lib/dojo/nls/tt-rss-layer_ja.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/tt-rss-layer_ko-kr.js b/lib/dojo/nls/tt-rss-layer_ko-kr.js index a79a5e02d..36e6ab5bf 100644 --- a/lib/dojo/nls/tt-rss-layer_ko-kr.js +++ b/lib/dojo/nls/tt-rss-layer_ko-kr.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_ko.js b/lib/dojo/nls/tt-rss-layer_ko.js index da86270d5..a919765c0 100644 --- a/lib/dojo/nls/tt-rss-layer_ko.js +++ b/lib/dojo/nls/tt-rss-layer_ko.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_nb.js b/lib/dojo/nls/tt-rss-layer_nb.js index c6ca50890..d4c87d203 100644 --- a/lib/dojo/nls/tt-rss-layer_nb.js +++ b/lib/dojo/nls/tt-rss-layer_nb.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_nb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nb");dojo.nls.colors.nb={"lightsteelblue":"lys stålblå","orangered":"rødoransje","midnightblue":"midnattsblå","cadetblue":"mørk grønnblå","seashell":"skjellhvit","slategrey":"skifergrå","coral":"korall","darkturquoise":"mørk turkis","antiquewhite":"antikk hvit","mediumspringgreen":"middels vårgrønn","salmon":"lakserosa","darkgrey":"mørk grå","ivory":"elfenbenshvit","greenyellow":"gulgrønn","mistyrose":"lys rosenrød","lightsalmon":"lys lakserosa","silver":"sølvfarget","dimgrey":"mørk mørkegrå","orange":"oransje","white":"hvit","navajowhite":"gulbrun","royalblue":"kongeblå","deeppink":"dyp rosa","lime":"lime","oldlace":"kniplingshvit","chartreuse":"løvgrønn","darkcyan":"mørk cyan","yellow":"gul","linen":"lin","olive":"oliven","gold":"gull","lawngreen":"plengrønn","lightyellow":"lys gul","tan":"matt mellombrun","darkviolet":"mørk fiolett","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grønn","deepskyblue":"dyp himmelblå","aqua":"akva","sienna":"nøttebrun","mintcream":"mintkrem","rosybrown":"brunlilla","mediumslateblue":"middels skiferblå","magenta":"magenta","lightseagreen":"lys sjøgrønn","cyan":"cyan","olivedrab":"middels olivengrønn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"middels akvamarin","lavender":"lavendel","mediumseagreen":"middels sjøgrønn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"middels turkis","ghostwhite":"egghvit","darkblue":"mørk blå","mediumvioletred":"middels fiolettrød","brown":"brun","lightgray":"lys grå","sandybrown":"sandbrun","pink":"rosa","firebrick":"mursteinsrød","indigo":"indigo","snow":"snøhvit","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"sjokolade","springgreen":"vårgrønn","moccasin":"lys gulbrun","navy":"marineblå","lemonchiffon":"ferskenfarget","teal":"mørk grønnblå","floralwhite":"blomsterhvit","cornflowerblue":"kornblå","paleturquoise":"svak turkis","purple":"purpur","gainsboro":"lys lys grå","plum":"plommefarget","red":"rød","blue":"blå","forestgreen":"skoggrønn","darkgreen":"mørk grønn","honeydew":"grønnhvit","darkseagreen":"mørk sjøgrønn","lightcoral":"lys korall","palevioletred":"svak fiolettrød","mediumpurple":"middels purpur","saddlebrown":"mørk nøttebrun","darkmagenta":"mørk magenta","thistle":"lys grålilla","whitesmoke":"røykhvit","wheat":"varm sienna","violet":"fiolett","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellomblå","skyblue":"himmelblå","crimson":"karmosinrødt","darksalmon":"mørk lakserosa","darkred":"mørk rød","darkslategrey":"mørk skifergrå","peru":"lys nøttebrun","lightgrey":"lys grå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"lys mandel","aliceblue":"blåhvit","bisque":"gulrosa","slategray":"skifergrå","palegoldenrod":"svak gyldenris","darkorange":"mørk oransje","aquamarine":"akvamarin","lightgreen":"lys grønn","burlywood":"matt mellombrun","dodgerblue":"lys havblå","darkgray":"mørk grå","lightcyan":"lys cyan","powderblue":"lys grønnblå","blueviolet":"blåfiolett","orchid":"orkide","dimgray":"mørk mørkegrå","beige":"beige","fuchsia":"fuksia","lavenderblush":"lillahvit","hotpink":"halvmørk rosa","steelblue":"stålblå","tomato":"tomatrød","lightpink":"lys rosa","limegreen":"limegrønn","indianred":"rustrød","papayawhip":"lys papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"middels orkide","cornsilk":"cornsilk","black":"svart","seagreen":"sjøgrønn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lys blå","palegreen":"svak grønn","azure":"asur","peachpuff":"brunrosa","darkolivegreen":"mørk olivengrønn","yellowgreen":"gulgrønn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nb");dijit.nls.loading.nb={"loadingState":"Laster inn...","errorState":"Det oppsto en feil"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nb");dijit.nls.common.nb={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nb");dijit.form.nls.validate.nb={"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nb");dijit.form.nls.ComboBox.nb={"previousMessage":"Tidligere valg","nextMessage":"Flere valg"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nb");dojo.cldr.nls.number.nb={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_nb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nb");dojo.nls.colors.nb={"lightsteelblue":"lys stålblå","orangered":"rødoransje","midnightblue":"midnattsblå","cadetblue":"mørk grønnblå","seashell":"skjellhvit","slategrey":"skifergrå","coral":"korall","darkturquoise":"mørk turkis","antiquewhite":"antikk hvit","mediumspringgreen":"middels vårgrønn","salmon":"lakserosa","darkgrey":"mørk grå","ivory":"elfenbenshvit","greenyellow":"gulgrønn","mistyrose":"lys rosenrød","lightsalmon":"lys lakserosa","silver":"sølvfarget","dimgrey":"mørk mørkegrå","orange":"oransje","white":"hvit","navajowhite":"gulbrun","royalblue":"kongeblå","deeppink":"dyp rosa","lime":"lime","oldlace":"kniplingshvit","chartreuse":"løvgrønn","darkcyan":"mørk cyan","yellow":"gul","linen":"lin","olive":"oliven","gold":"gull","lawngreen":"plengrønn","lightyellow":"lys gul","tan":"matt mellombrun","darkviolet":"mørk fiolett","lightslategrey":"lys skifergrå","grey":"grå","darkkhaki":"mørk khaki","green":"grønn","deepskyblue":"dyp himmelblå","aqua":"akva","sienna":"nøttebrun","mintcream":"mintkrem","rosybrown":"brunlilla","mediumslateblue":"middels skiferblå","magenta":"magenta","lightseagreen":"lys sjøgrønn","cyan":"cyan","olivedrab":"middels olivengrønn","darkgoldenrod":"mørk gyldenris","slateblue":"skiferblå","mediumaquamarine":"middels akvamarin","lavender":"lavendel","mediumseagreen":"middels sjøgrønn","maroon":"rødbrun","darkslategray":"mørk skifergrå","mediumturquoise":"middels turkis","ghostwhite":"egghvit","darkblue":"mørk blå","mediumvioletred":"middels fiolettrød","brown":"brun","lightgray":"lys grå","sandybrown":"sandbrun","pink":"rosa","firebrick":"mursteinsrød","indigo":"indigo","snow":"snøhvit","darkorchid":"mørk orkide","turquoise":"turkis","chocolate":"sjokolade","springgreen":"vårgrønn","moccasin":"lys gulbrun","navy":"marineblå","lemonchiffon":"ferskenfarget","teal":"mørk grønnblå","floralwhite":"blomsterhvit","cornflowerblue":"kornblå","paleturquoise":"svak turkis","purple":"purpur","gainsboro":"lys lys grå","plum":"plommefarget","red":"rød","blue":"blå","forestgreen":"skoggrønn","darkgreen":"mørk grønn","honeydew":"grønnhvit","darkseagreen":"mørk sjøgrønn","lightcoral":"lys korall","palevioletred":"svak fiolettrød","mediumpurple":"middels purpur","saddlebrown":"mørk nøttebrun","darkmagenta":"mørk magenta","thistle":"lys grålilla","whitesmoke":"røykhvit","wheat":"varm sienna","violet":"fiolett","lightskyblue":"lys himmelblå","goldenrod":"gyldenris","mediumblue":"mellomblå","skyblue":"himmelblå","crimson":"karmosinrødt","darksalmon":"mørk lakserosa","darkred":"mørk rød","darkslategrey":"mørk skifergrå","peru":"lys nøttebrun","lightgrey":"lys grå","lightgoldenrodyellow":"lys gyldenrisgul","blanchedalmond":"lys mandel","aliceblue":"blåhvit","bisque":"gulrosa","slategray":"skifergrå","palegoldenrod":"svak gyldenris","darkorange":"mørk oransje","aquamarine":"akvamarin","lightgreen":"lys grønn","burlywood":"matt mellombrun","dodgerblue":"lys havblå","darkgray":"mørk grå","lightcyan":"lys cyan","powderblue":"lys grønnblå","blueviolet":"blåfiolett","orchid":"orkide","dimgray":"mørk mørkegrå","beige":"beige","fuchsia":"fuksia","lavenderblush":"lillahvit","hotpink":"halvmørk rosa","steelblue":"stålblå","tomato":"tomatrød","lightpink":"lys rosa","limegreen":"limegrønn","indianred":"rustrød","papayawhip":"lys papaya","lightslategray":"lys skifergrå","gray":"grå","mediumorchid":"middels orkide","cornsilk":"cornsilk","black":"svart","seagreen":"sjøgrønn","darkslateblue":"mørk skiferblå","khaki":"khaki","lightblue":"lys blå","palegreen":"svak grønn","azure":"asur","peachpuff":"brunrosa","darkolivegreen":"mørk olivengrønn","yellowgreen":"gulgrønn"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nb");dijit.nls.loading.nb={"loadingState":"Laster inn...","errorState":"Det oppsto en feil"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nb");dijit.nls.common.nb={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nb");dijit.form.nls.validate.nb={"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nb");dijit.form.nls.ComboBox.nb={"previousMessage":"Tidligere valg","nextMessage":"Flere valg"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nb");dojo.cldr.nls.number.nb={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_nl-nl.js b/lib/dojo/nls/tt-rss-layer_nl-nl.js index bbafa6a2f..6b5f10a11 100644 --- a/lib/dojo/nls/tt-rss-layer_nl-nl.js +++ b/lib/dojo/nls/tt-rss-layer_nl-nl.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_nl-nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl_nl");dojo.nls.colors.nl_nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl_nl");dijit.nls.loading.nl_nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl_nl");dijit.nls.common.nl_nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl_nl");dijit.form.nls.validate.nl_nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl_nl");dijit.form.nls.ComboBox.nl_nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl_nl");dojo.cldr.nls.number.nl_nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_nl-nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl_nl");dojo.nls.colors.nl_nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl_nl");dijit.nls.loading.nl_nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl_nl");dijit.nls.common.nl_nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl_nl");dijit.form.nls.validate.nl_nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl_nl");dijit.form.nls.ComboBox.nl_nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl_nl");dojo.cldr.nls.number.nl_nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_nl.js b/lib/dojo/nls/tt-rss-layer_nl.js index 4ba9f5ee4..78bfcfca6 100644 --- a/lib/dojo/nls/tt-rss-layer_nl.js +++ b/lib/dojo/nls/tt-rss-layer_nl.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl");dojo.nls.colors.nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl");dijit.nls.loading.nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl");dijit.nls.common.nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl");dijit.form.nls.validate.nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl");dijit.form.nls.ComboBox.nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl");dojo.cldr.nls.number.nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_nl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.nl");dojo.nls.colors.nl={"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","salmon":"zalm","darkgrey":"donkergrijs","ivory":"ivoorwit","greenyellow":"groengeel","mistyrose":"matroze","lightsalmon":"lichtzalm","silver":"zilvergrijs","dimgrey":"dofgrijs","orange":"oranje","white":"wit","navajowhite":"navajowit","royalblue":"koningsblauw","deeppink":"donkerroze","lime":"limoen","oldlace":"kant","chartreuse":"groengeel","darkcyan":"donkercyaan","yellow":"geel","linen":"linnen","olive":"olijfgroen","gold":"goud","lawngreen":"grasgroen","lightyellow":"lichtgeel","tan":"geelbruin","darkviolet":"donkerviolet","lightslategrey":"lichtblauwgrijs","grey":"grijs","darkkhaki":"donkerkaki","green":"groen","deepskyblue":"diephemelblauw","aqua":"aqua","sienna":"sienna","mintcream":"mintroomgeel","rosybrown":"roodbruin","mediumslateblue":"midgrijsblauw","magenta":"magenta","lightseagreen":"lichtzeegroen","cyan":"cyaan","olivedrab":"grijsbruin","darkgoldenrod":"donkergoud","slateblue":"leiblauw","mediumaquamarine":"midaquamarijn","lavender":"lavendelblauw","mediumseagreen":"midzeegroen","maroon":"kastanjebruin","darkslategray":"donkerblauwgrijs","mediumturquoise":"midturquoise","ghostwhite":"spierwit","darkblue":"donkerblauw","mediumvioletred":"midvioletrood","brown":"bruin","lightgray":"lichtgrijs","sandybrown":"zandbruin","pink":"roze","firebrick":"vuursteenrood","indigo":"indigo","snow":"sneeuwwit","darkorchid":"donkerorchidee","turquoise":"turquoise","chocolate":"chocoladebruin","springgreen":"lentegroen","moccasin":"moccasin","navy":"marineblauw","lemonchiffon":"citroengeel","teal":"grijsblauw","floralwhite":"rozewit","cornflowerblue":"korenbloemblauw","paleturquoise":"bleekturquoise","purple":"purper","gainsboro":"lichtblauwgrijs","plum":"pruim","red":"rood","blue":"blauw","forestgreen":"bosgroen","darkgreen":"donkergroen","honeydew":"meloen","darkseagreen":"donkerzeegroen","lightcoral":"lichtkoraal","palevioletred":"bleekvioletrood","mediumpurple":"midpurper","saddlebrown":"leerbruin","darkmagenta":"donkermagenta","thistle":"distel","whitesmoke":"rookwit","wheat":"tarwebruin","violet":"violet","lightskyblue":"lichthemelsblauw","goldenrod":"goudbruin","mediumblue":"midblauw","skyblue":"hemelsblauw","crimson":"karmozijnrood","darksalmon":"donkerzalm","darkred":"donkerrood","darkslategrey":"donkerblauwgrijs","peru":"bruin","lightgrey":"lichtgrijs","lightgoldenrodyellow":"lichtgoudgeel","blanchedalmond":"amandel","aliceblue":"lichtblauw","bisque":"oranjegeel","slategray":"leigrijs","palegoldenrod":"bleekgeel","darkorange":"donkeroranje","aquamarine":"aquamarijn","lightgreen":"lichtgroen","burlywood":"lichtbruin","dodgerblue":"helderblauw","darkgray":"donkergrijs","lightcyan":"lichtcyaan","powderblue":"lichtblauw-wit","blueviolet":"violet","orchid":"orchidee","dimgray":"dofgrijs","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelblos","hotpink":"acaciaroze","steelblue":"staalblauw","tomato":"tomaat","lightpink":"lichtroze","limegreen":"limoengroen","indianred":"indisch rood","papayawhip":"papajaroze","lightslategray":"lichtblauwgrijs","gray":"grijs","mediumorchid":"midorchidee","cornsilk":"maïsgeel","black":"zwart","seagreen":"zeegroen","darkslateblue":"donkergrijsblauw","khaki":"kaki","lightblue":"lichtblauw","palegreen":"bleekgroen","azure":"azuur","peachpuff":"perzikroze","darkolivegreen":"donkerolijfgroen","yellowgreen":"geelgroen"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.nl");dijit.nls.loading.nl={"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.nl");dijit.nls.common.nl={"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.nl");dijit.form.nls.validate.nl={"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.nl");dijit.form.nls.ComboBox.nl={"previousMessage":"Eerdere opties","nextMessage":"Meer opties"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.nl");dojo.cldr.nls.number.nl={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_pl.js b/lib/dojo/nls/tt-rss-layer_pl.js index d69dca84c..dd78bb0fb 100644 --- a/lib/dojo/nls/tt-rss-layer_pl.js +++ b/lib/dojo/nls/tt-rss-layer_pl.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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":"Ładowanie...","errorState":"Niestety, wystąpił błąd"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"};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ść jest niepoprawna.","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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_pl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pl");dojo.nls.colors.pl={"lightsteelblue":"jasnostalowoniebieski","orangered":"pomarańczowoczerwony","midnightblue":"granatowoczarny","cadetblue":"niebieskoszary","seashell":"matowoliliowy","slategrey":"mysi","coral":"koralowy","darkturquoise":"mlecznoturkusowy","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":"przyciemniony szary","orange":"pomarańczowy","white":"biały","navajowhite":"piaskowy","royalblue":"królewski błękit","deeppink":"głęboki różowy","lime":"limonkowy","oldlace":"bladopomarańczowy","chartreuse":"żółtooliwkowy","darkcyan":"ciemnoniebieskozielony","yellow":"żółty","linen":"lniany","olive":"oliwkowy","gold":"złoty","lawngreen":"trawiasty","lightyellow":"jasnożółty","tan":"śniady","darkviolet":"ciemnofiołkowy","lightslategrey":"jasny mysi","grey":"szary","darkkhaki":"ciemny khaki","green":"zielony","deepskyblue":"intensywny błękit nieba","aqua":"morski","sienna":"siena","mintcream":"jasnomiętowy","rosybrown":"różowobrązowy","mediumslateblue":"średni gołębi","magenta":"amarantowy","lightseagreen":"jasna zieleń morska","cyan":"niebieskozielony","olivedrab":"oliwkowa zieleń","darkgoldenrod":"ciemne stare złoto","slateblue":"gołębi","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia zieleń morska","maroon":"kasztanowy","darkslategray":"ciemny mysi","mediumturquoise":"średni turkusowy","ghostwhite":"bladobiały","darkblue":"ciemnoniebieski","mediumvioletred":"średni fiołkowowoczerwony","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":"zielonomodry","floralwhite":"kwiatowa biel","cornflowerblue":"chabrowy","paleturquoise":"bladoturkusowy","purple":"fioletowy","gainsboro":"bladoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"miodowy","darkseagreen":"ciemna zieleń morska","lightcoral":"jasnokoralowy","palevioletred":"blady fiołkowoczerwony","mediumpurple":"średni fioletowy","saddlebrown":"brąz skórzany","darkmagenta":"ciemnoamarantowy","thistle":"bladofioletowy","whitesmoke":"przydymiony biały","wheat":"pszeniczny","violet":"fiołkowy","lightskyblue":"jasny błękit nieba","goldenrod":"stare złoto","mediumblue":"ciemnochabrowy","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny mysi","peru":"jasnobrązowy","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasnożółte stare złoto","blanchedalmond":"migdałowy","aliceblue":"bladoniebieski","bisque":"biszkoptowy","slategray":"mysi","palegoldenrod":"blade stare złoto","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"kolor drewna","dodgerblue":"błękit Dodgers","darkgray":"ciemnoszary","lightcyan":"jasnoniebieskozielony","powderblue":"jasnobladobłękitny","blueviolet":"błękitnofiołkowy","orchid":"orchidea","dimgray":"przyciemniony szary","beige":"beżowy","fuchsia":"fuksjowy","lavenderblush":"lawendowocielisty","hotpink":"odblaskoworóżowy","steelblue":"stalowoniebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"zielony limonkowy","indianred":"kasztanowy","papayawhip":"papaja","lightslategray":"jasny mysi","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"kukurydziany","black":"czarny","seagreen":"zieleń morska","darkslateblue":"ciemny gołębi","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazurowy","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":"Ładowanie...","errorState":"Niestety, wystąpił błąd"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pl");dijit.nls.common.pl={"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"};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ść jest niepoprawna.","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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pl");dojo.cldr.nls.number.pl={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_pt-br.js b/lib/dojo/nls/tt-rss-layer_pt-br.js index a35c5bb52..c78390e9b 100644 --- a/lib/dojo/nls/tt-rss-layer_pt-br.js +++ b/lib/dojo/nls/tt-rss-layer_pt-br.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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":"Desculpe, ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};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":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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 aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul ardósia","mediumaquamarine":"água marinha médio","lavender":"lavanda","mediumseagreen":"verde marinho médio","maroon":"castanho","darkslategray":"cinza ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul talco","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};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":"Desculpe, ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};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":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_pt-pt.js b/lib/dojo/nls/tt-rss-layer_pt-pt.js index a54df6dbf..7e805cd00 100644 --- a/lib/dojo/nls/tt-rss-layer_pt-pt.js +++ b/lib/dojo/nls/tt-rss-layer_pt-pt.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_pt-pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_pt");dojo.nls.colors.pt_pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento escuro","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento escuro","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_pt");dijit.nls.loading.pt_pt={"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_pt");dijit.nls.common.pt_pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_pt");dijit.form.nls.validate.pt_pt={"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_pt");dijit.form.nls.ComboBox.pt_pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_pt");dojo.cldr.nls.number.pt_pt={"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_pt-pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_pt");dojo.nls.colors.pt_pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadete","seashell":"concha","slategrey":"cinzento ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinzento escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa pálido","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinzento esbatido","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul real","deeppink":"rosa profundo","lime":"lima","oldlace":"renda antiga","chartreuse":"amarelo esverdeado","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"azeitona","gold":"dourado","lawngreen":"verde relva","lightyellow":"amarelo claro","tan":"castanho claro","darkviolet":"violeta escuro","lightslategrey":"cinzento ardósia claro","grey":"cinzento","darkkhaki":"caqui escuro","green":"verde","deepskyblue":"azul céu profundo","aqua":"verde-água","sienna":"castanho-avermelhado","mintcream":"creme de menta","rosybrown":"castanho rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"azeitona claro","darkgoldenrod":"ouro velho escuro","slateblue":"azul ardósia","mediumaquamarine":"verde-azulado médio","lavender":"alfazema","mediumseagreen":"verde marinho médio","maroon":"bordeaux","darkslategray":"cinzento ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco sombreado","darkblue":"azul escuro","mediumvioletred":"violeta avermelhado médio","brown":"castanho","lightgray":"cinzento claro","sandybrown":"castanho areia","pink":"rosa","firebrick":"tijolo fogo","indigo":"índigo","snow":"branco-neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"mocassim","navy":"azul marinho","lemonchiffon":"limão chiffon","teal":"verde-azulado","floralwhite":"branco floral","cornflowerblue":"azul-violáceo","paleturquoise":"turquesa pálido","purple":"roxo","gainsboro":"cinzento azulado claro","plum":"cor-de-ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"mel","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"violeta avermelhado pálido","mediumpurple":"roxo médio","saddlebrown":"castanho sela","darkmagenta":"magenta escuro","thistle":"cardo","whitesmoke":"fumo branco","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"ouro velho","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinzento ardósia escuro","peru":"peru","lightgrey":"cinzento claro","lightgoldenrodyellow":"ouro velho amarelado claro","blanchedalmond":"amêndoa claro","aliceblue":"azul alice","bisque":"rosa-velho","slategray":"cinzento ardósia","palegoldenrod":"ouro velho pálido","darkorange":"laranja escuro","aquamarine":"verde-azulado","lightgreen":"verde claro","burlywood":"castanho pinho","dodgerblue":"azul furtivo","darkgray":"cinzento escuro","lightcyan":"ciano claro","powderblue":"azul de esmalte","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinzento esbatido","beige":"bege","fuchsia":"fúcsia","lavenderblush":"alfazema rosado","hotpink":"rosa forte","steelblue":"azul-aço","tomato":"vermelho tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"almagre","papayawhip":"creme de papaia","lightslategray":"cinzento ardósia claro","gray":"cinzento","mediumorchid":"orquídea médio","cornsilk":"branco seda","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"caqui","lightblue":"azul claro","palegreen":"verde pálido","azure":"azul-celeste","peachpuff":"pêssego","darkolivegreen":"verde-azeitona escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_pt");dijit.nls.loading.pt_pt={"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_pt");dijit.nls.common.pt_pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_pt");dijit.form.nls.validate.pt_pt={"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_pt");dijit.form.nls.ComboBox.pt_pt={"previousMessage":"Opções anteriores","nextMessage":"Mais opções"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_pt");dojo.cldr.nls.number.pt_pt={"currencyFormat":"#,##0.00 ¤","group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_pt.js b/lib/dojo/nls/tt-rss-layer_pt.js index 2e2d70bbb..8cc90f5cc 100644 --- a/lib/dojo/nls/tt-rss-layer_pt.js +++ b/lib/dojo/nls/tt-rss-layer_pt.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue":"azul-aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza-ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde-primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza-ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul-céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul-ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul-ardósia","mediumaquamarine":"água-marinha médio","lavender":"lavanda","mediumseagreen":"verde-marinho médio","maroon":"marrom","darkslategray":"cinza-ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho-violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho-violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul-céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul-céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza-ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza-ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água-marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul-talco","blueviolet":"azul-violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul-aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde-lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza-ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde-marinho","darkslateblue":"azul-ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul-celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};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":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue":"azul aço claro","orangered":"vermelho alaranjado","midnightblue":"azul meia-noite","cadetblue":"azul cadet","seashell":"seashell","slategrey":"cinza ardósia","coral":"coral","darkturquoise":"turquesa escuro","antiquewhite":"branco antigo","mediumspringgreen":"verde primavera médio","salmon":"salmão","darkgrey":"cinza escuro","ivory":"marfim","greenyellow":"amarelo esverdeado","mistyrose":"rosa enevoado","lightsalmon":"salmão claro","silver":"prateado","dimgrey":"cinza turvo","orange":"laranja","white":"branco","navajowhite":"branco navajo","royalblue":"azul royal","deeppink":"rosa profundo","lime":"lima","oldlace":"cadarço velho","chartreuse":"chartreuse","darkcyan":"ciano escuro","yellow":"amarelo","linen":"linho","olive":"oliva","gold":"dourado","lawngreen":"verde grama","lightyellow":"amarelo claro","tan":"tan","darkviolet":"violeta escuro","lightslategrey":"cinza ardósia claro","grey":"cinza","darkkhaki":"cáqui escuro","green":"verde","deepskyblue":"azul céu intenso","aqua":"aqua","sienna":"sienna","mintcream":"creme de menta","rosybrown":"marrom rosado","mediumslateblue":"azul ardósia médio","magenta":"magenta","lightseagreen":"verde marinho claro","cyan":"ciano","olivedrab":"verde oliva","darkgoldenrod":"goldenrod escuro","slateblue":"azul ardósia","mediumaquamarine":"água marinha médio","lavender":"lavanda","mediumseagreen":"verde marinho médio","maroon":"castanho","darkslategray":"cinza ardósia escuro","mediumturquoise":"turquesa médio","ghostwhite":"branco ghost","darkblue":"azul escuro","mediumvioletred":"vermelho violeta médio","brown":"marrom","lightgray":"cinza claro","sandybrown":"marrom cor de areia","pink":"rosa","firebrick":"firebrick","indigo":"índigo","snow":"branco neve","darkorchid":"orquídea escuro","turquoise":"turquesa","chocolate":"chocolate","springgreen":"verde primavera","moccasin":"moccasin","navy":"marinho","lemonchiffon":"limão chiffon","teal":"azul esverdeado","floralwhite":"branco floral","cornflowerblue":"azul centaurea","paleturquoise":"turquesa esbranquiçado","purple":"roxo","gainsboro":"gainsboro","plum":"ameixa","red":"vermelho","blue":"azul","forestgreen":"verde floresta","darkgreen":"verde escuro","honeydew":"honeydew","darkseagreen":"verde marinho escuro","lightcoral":"coral claro","palevioletred":"vermelho violeta esbranquiçado","mediumpurple":"roxo médio","saddlebrown":"marrom saddle","darkmagenta":"magenta escuro","thistle":"thistle","whitesmoke":"fumaça branca","wheat":"trigo","violet":"violeta","lightskyblue":"azul céu claro","goldenrod":"goldenrod","mediumblue":"azul médio","skyblue":"azul céu","crimson":"carmesim","darksalmon":"salmão escuro","darkred":"vermelho escuro","darkslategrey":"cinza ardósia escuro","peru":"peru","lightgrey":"cinza claro","lightgoldenrodyellow":"amarelo goldenrod claro","blanchedalmond":"amêndoa pelada","aliceblue":"azul alice","bisque":"bisque","slategray":"cinza ardósia","palegoldenrod":"goldenrod esbranquiçado","darkorange":"laranja escuro","aquamarine":"água marinha","lightgreen":"verde claro","burlywood":"burlywood","dodgerblue":"azul dodger","darkgray":"cinza escuro","lightcyan":"ciano claro","powderblue":"azul talco","blueviolet":"azul violeta","orchid":"orquídea","dimgray":"cinza turvo","beige":"bege","fuchsia":"fúcsia","lavenderblush":"lavanda avermelhada","hotpink":"rosa quente","steelblue":"azul aço","tomato":"tomate","lightpink":"rosa claro","limegreen":"verde lima","indianred":"vermelho indiano","papayawhip":"creme de papaya","lightslategray":"cinza ardósia claro","gray":"cinza","mediumorchid":"orquídea médio","cornsilk":"cornsilk","black":"preto","seagreen":"verde marinho","darkslateblue":"azul ardósia escuro","khaki":"cáqui","lightblue":"azul claro","palegreen":"verde esbranquiçado","azure":"azul celeste","peachpuff":"peach puff","darkolivegreen":"verde oliva escuro","yellowgreen":"verde amarelado"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"};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":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este 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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"group":".","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;(¤#,##0.00)","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_ru.js b/lib/dojo/nls/tt-rss-layer_ru.js index 19e4d548b..293429a4a 100644 --- a/lib/dojo/nls/tt-rss-layer_ru.js +++ b/lib/dojo/nls/tt-rss-layer_ru.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ru");dijit.nls.common.ru={"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ru");dojo.cldr.nls.number.ru={"group":" ","percentSign":"%","exponential":"E","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_sk.js b/lib/dojo/nls/tt-rss-layer_sk.js index 7b3b6d1a5..273f62030 100644 --- a/lib/dojo/nls/tt-rss-layer_sk.js +++ b/lib/dojo/nls/tt-rss-layer_sk.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_sk");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sk");dojo.nls.colors.sk={"lightsteelblue":"oceľovo modrá svetlá","orangered":"oranžovo červená","midnightblue":"nočná modrá","cadetblue":"sivomodrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tyrkysová tmavá","antiquewhite":"antická biela","mediumspringgreen":"jarná zelená stredná","salmon":"lososovo ružová","darkgrey":"tmavosivá","ivory":"slonovinová","greenyellow":"žltozelená","mistyrose":"zahmlená ruža","lightsalmon":"lososovo ružová svetlá","silver":"strieborná","dimgrey":"sivá matná","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"lipová","oldlace":"stará čipka","chartreuse":"kartúza","darkcyan":"tmavozelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivovo zelená","gold":"zlatá","lawngreen":"zelená tráva","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"bridlicová sivá svetlá","grey":"sivá","darkkhaki":"žltohnedá tmavá","green":"zelená","deepskyblue":"hlboká blankytná modrá","aqua":"svetlá zelenomodrá","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"bridlicová modrá stredná","magenta":"purpurová","lightseagreen":"morská zelená svetlá","cyan":"zelenomodrá","olivedrab":"olivovo zelená fádna","darkgoldenrod":"zlatobyľová tmavá","slateblue":"bridlicová modrá","mediumaquamarine":"akvamarínová stredná","lavender":"levanduľová","mediumseagreen":"morská zelená stredná","maroon":"gaštanovo hnedá","darkslategray":"bridlicová sivá tmavá","mediumturquoise":"tyrkysová stredná","ghostwhite":"biely tieň","darkblue":"tmavomodrá","mediumvioletred":"fialovočervená stredná","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"pieskovo hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"fialovo modrá","snow":"snehobiela","darkorchid":"orchideovo ružová tmavá","turquoise":"tyrkysová","chocolate":"čokoládovo hnedá","springgreen":"jarná zelená","moccasin":"črievičníková","navy":"vojenská zelená","lemonchiffon":"citrónový šifón","teal":"tyrkysová","floralwhite":"kvetinová biela","cornflowerblue":"nevädzovo modrá","paleturquoise":"bledo tyrkysová","purple":"purpurová","gainsboro":"sivomodrá svetlá","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"morská zelená tmavá","lightcoral":"koralová svetlá","palevioletred":"bledá fialovo červená","mediumpurple":"purpurová stredná","saddlebrown":"sedlová hnedá","darkmagenta":"tmavopurpurová","thistle":"bodliaková fialová","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"blankytná modrá svetlá","goldenrod":"zlatobyľ","mediumblue":"stredne modrá","skyblue":"blankytná modrá","crimson":"karmínová","darksalmon":"lososovo ružová tmavá","darkred":"tmavočervená","darkslategrey":"bridlicová sivá tmavá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"zlatobyľová svetlá","blanchedalmond":"lúpané mandle","aliceblue":"modrá alice","bisque":"biskvitová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavooranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"pieskovo hnedá","dodgerblue":"modrá dodger","darkgray":"tmavosivá","lightcyan":"zelenomodrá svetlá","powderblue":"prášková modrá","blueviolet":"modrofialová","orchid":"orchideovo ružová","dimgray":"sivá matná","beige":"béžová","fuchsia":"purpurová","lavenderblush":"levanduľový rumenec","hotpink":"teplá ružová","steelblue":"oceľovo modrá","tomato":"paradajková červená","lightpink":"svetloružová","limegreen":"lipová zelená","indianred":"indická červená","papayawhip":"papájový krém","lightslategray":"bridlicová sivá svetlá","gray":"sivá","mediumorchid":"orchideovo ružová stredná","cornsilk":"hodvábna žltá","black":"čierna","seagreen":"morská zelená","darkslateblue":"bridlicová modrá tmavá","khaki":"khaki","lightblue":"svetlomodrá","palegreen":"bledozelená","azure":"azúrová","peachpuff":"broskyňová pena","darkolivegreen":"olivovozelená tmavá","yellowgreen":"žltozelená"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sk");dijit.nls.loading.sk={"loadingState":"Zavádzanie...","errorState":"Nastala chyba"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sk");dijit.nls.common.sk={"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sk");dijit.form.nls.validate.sk={"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sk");dijit.form.nls.ComboBox.sk={"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sk");dojo.cldr.nls.number.sk={"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("dojo.nls.tt-rss-layer_sk");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sk");dojo.nls.colors.sk={"lightsteelblue":"oceľovo modrá svetlá","orangered":"oranžovo červená","midnightblue":"nočná modrá","cadetblue":"sivomodrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tyrkysová tmavá","antiquewhite":"antická biela","mediumspringgreen":"jarná zelená stredná","salmon":"lososovo ružová","darkgrey":"tmavosivá","ivory":"slonovinová","greenyellow":"žltozelená","mistyrose":"zahmlená ruža","lightsalmon":"lososovo ružová svetlá","silver":"strieborná","dimgrey":"sivá matná","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"lipová","oldlace":"stará čipka","chartreuse":"kartúza","darkcyan":"tmavozelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivovo zelená","gold":"zlatá","lawngreen":"zelená tráva","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"bridlicová sivá svetlá","grey":"sivá","darkkhaki":"žltohnedá tmavá","green":"zelená","deepskyblue":"hlboká blankytná modrá","aqua":"svetlá zelenomodrá","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"bridlicová modrá stredná","magenta":"purpurová","lightseagreen":"morská zelená svetlá","cyan":"zelenomodrá","olivedrab":"olivovo zelená fádna","darkgoldenrod":"zlatobyľová tmavá","slateblue":"bridlicová modrá","mediumaquamarine":"akvamarínová stredná","lavender":"levanduľová","mediumseagreen":"morská zelená stredná","maroon":"gaštanovo hnedá","darkslategray":"bridlicová sivá tmavá","mediumturquoise":"tyrkysová stredná","ghostwhite":"biely tieň","darkblue":"tmavomodrá","mediumvioletred":"fialovočervená stredná","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"pieskovo hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"fialovo modrá","snow":"snehobiela","darkorchid":"orchideovo ružová tmavá","turquoise":"tyrkysová","chocolate":"čokoládovo hnedá","springgreen":"jarná zelená","moccasin":"črievičníková","navy":"vojenská zelená","lemonchiffon":"citrónový šifón","teal":"tyrkysová","floralwhite":"kvetinová biela","cornflowerblue":"nevädzovo modrá","paleturquoise":"bledo tyrkysová","purple":"purpurová","gainsboro":"sivomodrá svetlá","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"morská zelená tmavá","lightcoral":"koralová svetlá","palevioletred":"bledá fialovo červená","mediumpurple":"purpurová stredná","saddlebrown":"sedlová hnedá","darkmagenta":"tmavopurpurová","thistle":"bodliaková fialová","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"blankytná modrá svetlá","goldenrod":"zlatobyľ","mediumblue":"stredne modrá","skyblue":"blankytná modrá","crimson":"karmínová","darksalmon":"lososovo ružová tmavá","darkred":"tmavočervená","darkslategrey":"bridlicová sivá tmavá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"zlatobyľová svetlá","blanchedalmond":"lúpané mandle","aliceblue":"modrá alice","bisque":"biskvitová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavooranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"pieskovo hnedá","dodgerblue":"modrá dodger","darkgray":"tmavosivá","lightcyan":"zelenomodrá svetlá","powderblue":"prášková modrá","blueviolet":"modrofialová","orchid":"orchideovo ružová","dimgray":"sivá matná","beige":"béžová","fuchsia":"purpurová","lavenderblush":"levanduľový rumenec","hotpink":"teplá ružová","steelblue":"oceľovo modrá","tomato":"paradajková červená","lightpink":"svetloružová","limegreen":"lipová zelená","indianred":"indická červená","papayawhip":"papájový krém","lightslategray":"bridlicová sivá svetlá","gray":"sivá","mediumorchid":"orchideovo ružová stredná","cornsilk":"hodvábna žltá","black":"čierna","seagreen":"morská zelená","darkslateblue":"bridlicová modrá tmavá","khaki":"khaki","lightblue":"svetlomodrá","palegreen":"bledozelená","azure":"azúrová","peachpuff":"broskyňová pena","darkolivegreen":"olivovozelená tmavá","yellowgreen":"žltozelená"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sk");dijit.nls.loading.sk={"loadingState":"Zavádzanie...","errorState":"Nastala chyba"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sk");dijit.nls.common.sk={"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sk");dijit.form.nls.validate.sk={"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sk");dijit.form.nls.ComboBox.sk={"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sk");dojo.cldr.nls.number.sk={"currencyFormat":"#,##0.00 ¤","group":" ","decimal":",","scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","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"}; diff --git a/lib/dojo/nls/tt-rss-layer_sl.js b/lib/dojo/nls/tt-rss-layer_sl.js index f76c70841..b9697650b 100644 --- a/lib/dojo/nls/tt-rss-layer_sl.js +++ b/lib/dojo/nls/tt-rss-layer_sl.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_sl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sl");dojo.nls.colors.sl={"lightsteelblue":"svetlo jeklena modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"zelenkasto modra","seashell":"morska školjka","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"umazano siva","orange":"oranžna","white":"bela","navajowhite":"navajsko bela","royalblue":"kraljevsko modra","deeppink":"temno roza","lime":"rumeno zelena","oldlace":"stara čipka","chartreuse":"svetlo rumena zelena","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travnato zelena","lightyellow":"svetlo rumena","tan":"kožno rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno rumenkasto rjava","green":"zelena","deepskyblue":"temno nebesno modra","aqua":"akva","sienna":"siena","mintcream":"mentolno smetanasta","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"olivno sivo rjava","darkgoldenrod":"temno zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednje akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"prosojno bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično-rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"roza","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejna","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarsko modra","lemonchiffon":"limonina","teal":"zeleno modra","floralwhite":"cvetno bela","cornflowerblue":"plavično modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"pepelnato siva","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temno magenta","thistle":"osatna","whitesmoke":"umazano bela","wheat":"žitna","violet":"vijolična","lightskyblue":"svetlo nebesno modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebesno modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"mandljeva","aliceblue":"alice modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"grčav les","dodgerblue":"koruzno modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"smodniško modra","blueviolet":"modro vijolična","orchid":"orhidejna","dimgray":"umazano siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"bleščeča sivka","hotpink":"živo roza","steelblue":"jekleno modra","tomato":"paradižnikova","lightpink":"svetlo roza","limegreen":"citronsko zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejna","cornsilk":"koruzni laski","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"rumenkasto rjava","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurna","peachpuff":"breskova","darkolivegreen":"temno olivno zelena","yellowgreen":"rumeno zelena"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sl");dijit.nls.loading.sl={"loadingState":"Nalaganje...","errorState":"Oprostite, prišlo je do napake."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sl");dijit.nls.common.sl={"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sl");dijit.form.nls.validate.sl={"rangeMessage":"Ta vrednost je zunaj obsega. ","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sl");dijit.form.nls.ComboBox.sl={"previousMessage":"Prejšnje možnosti","nextMessage":"Dodatne možnosti"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sl");dojo.cldr.nls.number.sl={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_sl");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sl");dojo.nls.colors.sl={"lightsteelblue":"svetlo kovinsko modra","orangered":"oranžno-rdeča","midnightblue":"polnočno modra","cadetblue":"kadetsko modra","seashell":"morska lupina","slategrey":"skrilasto siva","coral":"koralna","darkturquoise":"temno turkizna","antiquewhite":"antično bela","mediumspringgreen":"srednje pomladno zelena","salmon":"lososova","darkgrey":"temno siva","ivory":"slonokoščena","greenyellow":"zeleno-rumena","mistyrose":"megleno rožnata","lightsalmon":"svetlo lososova","silver":"srebrna","dimgrey":"pepelnato siva","orange":"oranžna","white":"bela","navajowhite":"navajo bela","royalblue":"kraljevsko modra","deeppink":"temno rožnata","lime":"limetasta","oldlace":"stara čipka","chartreuse":"chartreuse","darkcyan":"temno cijan","yellow":"rumena","linen":"lanena","olive":"olivna","gold":"zlata","lawngreen":"travniško zelena","lightyellow":"svetlo rumena","tan":"rumeno-rjava","darkviolet":"temno vijolična","lightslategrey":"svetlo skrilasto siva","grey":"siva","darkkhaki":"temno kaki","green":"zelena","deepskyblue":"temno nebeško modra","aqua":"akva","sienna":"sienna","mintcream":"metina krema","rosybrown":"rožnato rjava","mediumslateblue":"srednje skrilasto modra","magenta":"magenta","lightseagreen":"svetlo morsko zelena","cyan":"cijan","olivedrab":"umazano olivna","darkgoldenrod":"temna zlata rozga","slateblue":"skrilasto modra","mediumaquamarine":"srednji akvamarin","lavender":"sivka","mediumseagreen":"srednje morsko zelena","maroon":"kostanjeva","darkslategray":"temno skrilasto siva","mediumturquoise":"srednje turkizna","ghostwhite":"senčnato bela","darkblue":"temno modra","mediumvioletred":"srednje vijolično rdeča","brown":"rjava","lightgray":"svetlo siva","sandybrown":"peščeno rjava","pink":"rožnata","firebrick":"opečnata","indigo":"indigo","snow":"snežena","darkorchid":"temno orhidejasta","turquoise":"turkizna","chocolate":"čokoladna","springgreen":"pomladno zelena","moccasin":"mokasinasta","navy":"mornarska","lemonchiffon":"limonast šifon","teal":"modrozelena","floralwhite":"cvetno bela","cornflowerblue":"plavičasto modra","paleturquoise":"bledo turkizna","purple":"škrlatna","gainsboro":"gainsboro","plum":"slivova","red":"rdeča","blue":"modra","forestgreen":"gozdno zelena","darkgreen":"temno zelena","honeydew":"medena rosa","darkseagreen":"temno morsko zelena","lightcoral":"svetlo koralna","palevioletred":"bledo vijolično-rdeča","mediumpurple":"srednje škrlatna","saddlebrown":"sedlasto rjava","darkmagenta":"temna magenta","thistle":"osatna","whitesmoke":"megleno bela","wheat":"pšenična","violet":"vijolična","lightskyblue":"svetlo nebeško modra","goldenrod":"zlata rozga","mediumblue":"srednje modra","skyblue":"nebeško modra","crimson":"karminasta","darksalmon":"temno lososova","darkred":"temno rdeča","darkslategrey":"temno skrilasto siva","peru":"perujska","lightgrey":"svetlo siva","lightgoldenrodyellow":"svetlo rumena zlata rozga","blanchedalmond":"obledelo mandljeva","aliceblue":"alice blue modra","bisque":"porcelanasta","slategray":"skrilasto siva","palegoldenrod":"bleda zlata rozga","darkorange":"temno oranžna","aquamarine":"akvamarin","lightgreen":"svetlo zelena","burlywood":"peščeno sivo-rjava","dodgerblue":"dodgersko modra","darkgray":"temno siva","lightcyan":"svetlo cijan","powderblue":"kobaltovo modra","blueviolet":"modro vijolična","orchid":"orhidejasta","dimgray":"pepelnato siva","beige":"bež","fuchsia":"fuksija","lavenderblush":"rožnato sivka","hotpink":"kričeče rožnata","steelblue":"kovinsko modra","tomato":"paradižnikova","lightpink":"svetlo rožnata","limegreen":"apneno zelena","indianred":"indijansko rdeča","papayawhip":"papaja","lightslategray":"svetlo skrilasto siva","gray":"siva","mediumorchid":"srednje orhidejasta","cornsilk":"koruzna","black":"črna","seagreen":"morsko zelena","darkslateblue":"temno skrilasto modra","khaki":"kaki","lightblue":"svetlo modra","palegreen":"bledo zelena","azure":"azurno modra","peachpuff":"breskova","darkolivegreen":"temna olivno zelena","yellowgreen":"rumeno-zelena"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sl");dijit.nls.loading.sl={"loadingState":"Nalaganje ...","errorState":"Oprostite, prišlo je do napake."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sl");dijit.nls.common.sl={"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sl");dijit.form.nls.validate.sl={"rangeMessage":"Ta vrednost je izven območja.","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sl");dijit.form.nls.ComboBox.sl={"previousMessage":"Prejšnje izbire","nextMessage":"Dodatne izbire"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sl");dojo.cldr.nls.number.sl={"group":".","percentSign":"%","exponential":"e","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_sv.js b/lib/dojo/nls/tt-rss-layer_sv.js index b8ea0caf6..d52287cf1 100644 --- a/lib/dojo/nls/tt-rss-layer_sv.js +++ b/lib/dojo/nls/tt-rss-layer_sv.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_sv");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sv");dojo.nls.colors.sv={"lightsteelblue":"ljust stålblått","orangered":"orangerött","midnightblue":"midnattsblått","cadetblue":"kadettblått","seashell":"snäckskal","slategrey":"skiffergrått","coral":"korall","darkturquoise":"mörkturkost","antiquewhite":"antikvitt","mediumspringgreen":"mellanvårgrönt","salmon":"laxfärgat","darkgrey":"mörkgrått","ivory":"elfenbensvitt","greenyellow":"gröngult","mistyrose":"dunkelrosa","lightsalmon":"ljust laxfärgat","silver":"silver","dimgrey":"smutsgrått","orange":"orange","white":"vitt","navajowhite":"navajovitt","royalblue":"kungligt blått","deeppink":"djuprosa","lime":"lime","oldlace":"spetsvitt","chartreuse":"chartreuse","darkcyan":"mörkt cyan","yellow":"gult","linen":"linne","olive":"olivfärgat","gold":"guld","lawngreen":"gräsmattegrönt","lightyellow":"ljusgult","tan":"mellanbrunt","darkviolet":"mörkviolett","lightslategrey":"ljust skiffergrått","grey":"grått","darkkhaki":"mörkt kaki","green":"grönt","deepskyblue":"mörkt himmelsblått","aqua":"akvamarin","sienna":"sienna","mintcream":"mintgrädde","rosybrown":"rosenbrunt","mediumslateblue":"mellanskifferblått","magenta":"magenta","lightseagreen":"ljust havsgrönt","cyan":"cyan","olivedrab":"olivsmutsgult","darkgoldenrod":"mörkt gullris","slateblue":"skifferblått","mediumaquamarine":"mellanakvamarin","lavender":"lavendel","mediumseagreen":"mellanhavsgrönt","maroon":"rödbrunt","darkslategray":"mörkt skiffergrått","mediumturquoise":"mellanturkost","ghostwhite":"spökvitt","darkblue":"mörkblått","mediumvioletred":"mellanviolettrött","brown":"brunt","lightgray":"ljusgrått","sandybrown":"sandbrunt","pink":"rosa","firebrick":"tegelstensrött","indigo":"indigo","snow":"snö","darkorchid":"mörkt orkidé","turquoise":"turkost","chocolate":"choklad","springgreen":"vårgrönt","moccasin":"mockasin","navy":"marinblått","lemonchiffon":"citronchiffong","teal":"blågrönt","floralwhite":"blomvitt","cornflowerblue":"kornblått","paleturquoise":"blekturkost","purple":"lila","gainsboro":"gainsboro","plum":"plommon","red":"rött","blue":"blått","forestgreen":"skogsgrönt","darkgreen":"mörkgrönt","honeydew":"honungsdagg","darkseagreen":"mörkt havsgrönt","lightcoral":"ljuskorall","palevioletred":"blekviolettrött","mediumpurple":"mellanlila","saddlebrown":"sadelbrunt","darkmagenta":"mörk magenta","thistle":"tistel","whitesmoke":"vit rök","wheat":"vete","violet":"violett","lightskyblue":"ljust himmelsblått","goldenrod":"gullris","mediumblue":"mellanblått","skyblue":"himmelsblått","crimson":"karmosinrött","darksalmon":"mörkt laxfärgat","darkred":"mörkrött","darkslategrey":"mörkt skiffergrått","peru":"peru","lightgrey":"ljusgrått","lightgoldenrodyellow":"ljust gullrisgult","blanchedalmond":"skållad mandel","aliceblue":"aliceblå","bisque":"biskvi","slategray":"skiffergrått","palegoldenrod":"blekt gullris","darkorange":"mörkorange","aquamarine":"akvamarin","lightgreen":"ljusgrönt","burlywood":"träfärgat","dodgerblue":"dodgerblått","darkgray":"mörkgrått","lightcyan":"ljust cyan","powderblue":"pulverblått","blueviolet":"blåviolett","orchid":"orkidé","dimgray":"smutsgrått","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelskimrande","hotpink":"varmrosa","steelblue":"stålblått","tomato":"tomatrött","lightpink":"ljusrosa","limegreen":"limegrönt","indianred":"indianrött","papayawhip":"papayaröra","lightslategray":"ljust skiffergrått","gray":"grått","mediumorchid":"mellanorkidé","cornsilk":"gulvitt","black":"svart","seagreen":"havsgrönt","darkslateblue":"mörkt skifferblått","khaki":"kaki","lightblue":"ljusblått","palegreen":"blekgrönt","azure":"azurblått","peachpuff":"persika","darkolivegreen":"mörkt olivgrönt","yellowgreen":"gulgrönt"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sv");dijit.nls.loading.sv={"loadingState":"Läser in...","errorState":"Det uppstod ett fel."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sv");dijit.nls.common.sv={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sv");dijit.form.nls.validate.sv={"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sv");dijit.form.nls.ComboBox.sv={"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sv");dojo.cldr.nls.number.sv={"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_sv");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.sv");dojo.nls.colors.sv={"lightsteelblue":"ljust stålblått","orangered":"orangerött","midnightblue":"midnattsblått","cadetblue":"kadettblått","seashell":"snäckskal","slategrey":"skiffergrått","coral":"korall","darkturquoise":"mörkturkost","antiquewhite":"antikvitt","mediumspringgreen":"mellanvårgrönt","salmon":"laxfärgat","darkgrey":"mörkgrått","ivory":"elfenbensvitt","greenyellow":"gröngult","mistyrose":"dunkelrosa","lightsalmon":"ljust laxfärgat","silver":"silver","dimgrey":"smutsgrått","orange":"orange","white":"vitt","navajowhite":"navajovitt","royalblue":"kungligt blått","deeppink":"djuprosa","lime":"lime","oldlace":"spetsvitt","chartreuse":"chartreuse","darkcyan":"mörkt cyan","yellow":"gult","linen":"linne","olive":"olivfärgat","gold":"guld","lawngreen":"gräsmattegrönt","lightyellow":"ljusgult","tan":"mellanbrunt","darkviolet":"mörkviolett","lightslategrey":"ljust skiffergrått","grey":"grått","darkkhaki":"mörkt kaki","green":"grönt","deepskyblue":"mörkt himmelsblått","aqua":"akvamarin","sienna":"sienna","mintcream":"mintgrädde","rosybrown":"rosenbrunt","mediumslateblue":"mellanskifferblått","magenta":"magenta","lightseagreen":"ljust havsgrönt","cyan":"cyan","olivedrab":"olivsmutsgult","darkgoldenrod":"mörkt gullris","slateblue":"skifferblått","mediumaquamarine":"mellanakvamarin","lavender":"lavendel","mediumseagreen":"mellanhavsgrönt","maroon":"rödbrunt","darkslategray":"mörkt skiffergrått","mediumturquoise":"mellanturkost","ghostwhite":"spökvitt","darkblue":"mörkblått","mediumvioletred":"mellanviolettrött","brown":"brunt","lightgray":"ljusgrått","sandybrown":"sandbrunt","pink":"rosa","firebrick":"tegelstensrött","indigo":"indigo","snow":"snö","darkorchid":"mörkt orkidé","turquoise":"turkost","chocolate":"choklad","springgreen":"vårgrönt","moccasin":"mockasin","navy":"marinblått","lemonchiffon":"citronchiffong","teal":"blågrönt","floralwhite":"blomvitt","cornflowerblue":"kornblått","paleturquoise":"blekturkost","purple":"lila","gainsboro":"gainsboro","plum":"plommon","red":"rött","blue":"blått","forestgreen":"skogsgrönt","darkgreen":"mörkgrönt","honeydew":"honungsdagg","darkseagreen":"mörkt havsgrönt","lightcoral":"ljuskorall","palevioletred":"blekviolettrött","mediumpurple":"mellanlila","saddlebrown":"sadelbrunt","darkmagenta":"mörk magenta","thistle":"tistel","whitesmoke":"vit rök","wheat":"vete","violet":"violett","lightskyblue":"ljust himmelsblått","goldenrod":"gullris","mediumblue":"mellanblått","skyblue":"himmelsblått","crimson":"karmosinrött","darksalmon":"mörkt laxfärgat","darkred":"mörkrött","darkslategrey":"mörkt skiffergrått","peru":"peru","lightgrey":"ljusgrått","lightgoldenrodyellow":"ljust gullrisgult","blanchedalmond":"skållad mandel","aliceblue":"aliceblå","bisque":"biskvi","slategray":"skiffergrått","palegoldenrod":"blekt gullris","darkorange":"mörkorange","aquamarine":"akvamarin","lightgreen":"ljusgrönt","burlywood":"träfärgat","dodgerblue":"dodgerblått","darkgray":"mörkgrått","lightcyan":"ljust cyan","powderblue":"pulverblått","blueviolet":"blåviolett","orchid":"orkidé","dimgray":"smutsgrått","beige":"beige","fuchsia":"fuchsia","lavenderblush":"lavendelskimrande","hotpink":"varmrosa","steelblue":"stålblått","tomato":"tomatrött","lightpink":"ljusrosa","limegreen":"limegrönt","indianred":"indianrött","papayawhip":"papayaröra","lightslategray":"ljust skiffergrått","gray":"grått","mediumorchid":"mellanorkidé","cornsilk":"gulvitt","black":"svart","seagreen":"havsgrönt","darkslateblue":"mörkt skifferblått","khaki":"kaki","lightblue":"ljusblått","palegreen":"blekgrönt","azure":"azurblått","peachpuff":"persika","darkolivegreen":"mörkt olivgrönt","yellowgreen":"gulgrönt"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.sv");dijit.nls.loading.sv={"loadingState":"Läser in...","errorState":"Det uppstod ett fel."};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.sv");dijit.nls.common.sv={"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.sv");dijit.form.nls.validate.sv={"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.sv");dijit.form.nls.ComboBox.sv={"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.sv");dojo.cldr.nls.number.sv={"group":" ","percentSign":"%","exponential":"×10^","percentFormat":"#,##0 %","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"−","decimal":",","nan":"¤¤¤","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_th.js b/lib/dojo/nls/tt-rss-layer_th.js index 0189c3fb9..95820b7bb 100644 --- a/lib/dojo/nls/tt-rss-layer_th.js +++ b/lib/dojo/nls/tt-rss-layer_th.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_th");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.th");dojo.nls.colors.th={"lightsteelblue":"light steel blue","orangered":"ส้มแกมแดง","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":"เทาเข้ม","ivory":"งาช้าง","greenyellow":"เขียวแกมเหลือง","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"เงิน","dimgrey":"dim gray","orange":"ส้ม","white":"ขาว","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"ชมพูเข้ม","lime":"เหลืองมะนาว","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"เขียวแกมน้ำเงินเข้ม","yellow":"เหลือง","linen":"linen","olive":"โอลีฟ","gold":"ทอง","lawngreen":"lawn green","lightyellow":"เหลืองอ่อน","tan":"tan","darkviolet":"ม่วงเข้ม","lightslategrey":"light slate gray","grey":"เทา","darkkhaki":"dark khaki","green":"เขียว","deepskyblue":"deep sky blue","aqua":"ฟ้าน้ำทะเล","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"แดงแกมม่วง","lightseagreen":"light sea green","cyan":"เขียวแกมน้ำเงิน","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"ม่วงลาเวนเดอร์","mediumseagreen":"medium sea green","maroon":"น้ำตาลแดง","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"น้ำเงินเข้ม","mediumvioletred":"medium violet-red","brown":"น้ำตาล","lightgray":"เทาอ่อน","sandybrown":"sandy brown","pink":"ชมพู","firebrick":"สีอิฐ","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ช็อกโกแลต","springgreen":"spring green","moccasin":"ม็อคค่า","navy":"น้ำเงินเข้ม","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"ม่วง","gainsboro":"gainsboro","plum":"plum","red":"แดง","blue":"น้ำเงิน","forestgreen":"forest green","darkgreen":"เขียวเข้ม","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"แดงแกมม่วงเข้ม","thistle":"thistle","whitesmoke":"ขาวควัน","wheat":"wheat","violet":"ม่วง","lightskyblue":"ฟ้าอ่อน","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"แดงเลือดหมู","darksalmon":"dark salmon","darkred":"แดงเข้ม","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"เทาอ่อน","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"ส้มเข้ม","aquamarine":"aquamarine","lightgreen":"เขียวอ่อน","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"เทาเข้ม","lightcyan":"เขียวแกมน้ำเงินอ่อน","powderblue":"powder blue","blueviolet":"น้ำเงินม่วง","orchid":"orchid","dimgray":"dim gray","beige":"น้ำตาลเบจ","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"ชมพูอ่อน","limegreen":"เขียวมะนาว","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"เทา","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"ดำ","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"น้ำเงินอ่อน","palegreen":"pale green","azure":"น้ำเงินฟ้า","peachpuff":"peach puff","darkolivegreen":"เขียวโอลีฟเข้ม","yellowgreen":"เหลืองแกมเขียว"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.th");dijit.nls.loading.th={"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.th");dijit.nls.common.th={"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.th");dijit.form.nls.validate.th={"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.th");dojo.cldr.nls.number.th={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_th");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.th");dojo.nls.colors.th={"lightsteelblue":"light steel blue","orangered":"ส้มแกมแดง","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":"เทาเข้ม","ivory":"งาช้าง","greenyellow":"เขียวแกมเหลือง","mistyrose":"misty rose","lightsalmon":"light salmon","silver":"เงิน","dimgrey":"dim gray","orange":"ส้ม","white":"ขาว","navajowhite":"navajo white","royalblue":"royal blue","deeppink":"ชมพูเข้ม","lime":"เหลืองมะนาว","oldlace":"old lace","chartreuse":"chartreuse","darkcyan":"เขียวแกมน้ำเงินเข้ม","yellow":"เหลือง","linen":"linen","olive":"โอลีฟ","gold":"ทอง","lawngreen":"lawn green","lightyellow":"เหลืองอ่อน","tan":"tan","darkviolet":"ม่วงเข้ม","lightslategrey":"light slate gray","grey":"เทา","darkkhaki":"dark khaki","green":"เขียว","deepskyblue":"deep sky blue","aqua":"ฟ้าน้ำทะเล","sienna":"sienna","mintcream":"mint cream","rosybrown":"rosy brown","mediumslateblue":"medium slate blue","magenta":"แดงแกมม่วง","lightseagreen":"light sea green","cyan":"เขียวแกมน้ำเงิน","olivedrab":"olive drab","darkgoldenrod":"dark goldenrod","slateblue":"slate blue","mediumaquamarine":"medium aquamarine","lavender":"ม่วงลาเวนเดอร์","mediumseagreen":"medium sea green","maroon":"น้ำตาลแดง","darkslategray":"dark slate gray","mediumturquoise":"medium turquoise","ghostwhite":"ghost white","darkblue":"น้ำเงินเข้ม","mediumvioletred":"medium violet-red","brown":"น้ำตาล","lightgray":"เทาอ่อน","sandybrown":"sandy brown","pink":"ชมพู","firebrick":"สีอิฐ","indigo":"indigo","snow":"snow","darkorchid":"dark orchid","turquoise":"turquoise","chocolate":"ช็อกโกแลต","springgreen":"spring green","moccasin":"ม็อคค่า","navy":"น้ำเงินเข้ม","lemonchiffon":"lemon chiffon","teal":"teal","floralwhite":"floral white","cornflowerblue":"cornflower blue","paleturquoise":"pale turquoise","purple":"ม่วง","gainsboro":"gainsboro","plum":"plum","red":"แดง","blue":"น้ำเงิน","forestgreen":"forest green","darkgreen":"เขียวเข้ม","honeydew":"honeydew","darkseagreen":"dark sea green","lightcoral":"light coral","palevioletred":"pale violet-red","mediumpurple":"medium purple","saddlebrown":"saddle brown","darkmagenta":"แดงแกมม่วงเข้ม","thistle":"thistle","whitesmoke":"ขาวควัน","wheat":"wheat","violet":"ม่วง","lightskyblue":"ฟ้าอ่อน","goldenrod":"goldenrod","mediumblue":"medium blue","skyblue":"sky blue","crimson":"แดงเลือดหมู","darksalmon":"dark salmon","darkred":"แดงเข้ม","darkslategrey":"dark slate gray","peru":"peru","lightgrey":"เทาอ่อน","lightgoldenrodyellow":"light goldenrod yellow","blanchedalmond":"blanched almond","aliceblue":"alice blue","bisque":"bisque","slategray":"slate gray","palegoldenrod":"pale goldenrod","darkorange":"ส้มเข้ม","aquamarine":"aquamarine","lightgreen":"เขียวอ่อน","burlywood":"burlywood","dodgerblue":"dodger blue","darkgray":"เทาเข้ม","lightcyan":"เขียวแกมน้ำเงินอ่อน","powderblue":"powder blue","blueviolet":"น้ำเงินม่วง","orchid":"orchid","dimgray":"dim gray","beige":"น้ำตาลเบจ","fuchsia":"fuchsia","lavenderblush":"lavender blush","hotpink":"hot pink","steelblue":"steel blue","tomato":"tomato","lightpink":"ชมพูอ่อน","limegreen":"เขียวมะนาว","indianred":"indian red","papayawhip":"papaya whip","lightslategray":"light slate gray","gray":"เทา","mediumorchid":"medium orchid","cornsilk":"cornsilk","black":"ดำ","seagreen":"sea green","darkslateblue":"dark slate blue","khaki":"khaki","lightblue":"น้ำเงินอ่อน","palegreen":"pale green","azure":"น้ำเงินฟ้า","peachpuff":"peach puff","darkolivegreen":"เขียวโอลีฟเข้ม","yellowgreen":"เหลืองแกมเขียว"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.th");dijit.nls.loading.th={"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.th");dijit.nls.common.th={"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.th");dijit.form.nls.validate.th={"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.th");dijit.form.nls.ComboBox.th={"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.th");dojo.cldr.nls.number.th={"group":",","percentSign":"%","exponential":"E","percentFormat":"#,##0%","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":".","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"¤#,##0.00;¤-#,##0.00","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_tr.js b/lib/dojo/nls/tt-rss-layer_tr.js index 73e5d8126..163130bf4 100644 --- a/lib/dojo/nls/tt-rss-layer_tr.js +++ b/lib/dojo/nls/tt-rss-layer_tr.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_tr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.tr");dojo.nls.colors.tr={"lightsteelblue":"açık metalik mavi","orangered":"turuncu kırmızı","midnightblue":"gece mavisi","cadetblue":"denizci mavisi","seashell":"deniz kabuğu","slategrey":"arduvaz grisi","coral":"mercan","darkturquoise":"koyu turkuaz","antiquewhite":"antik beyaz","mediumspringgreen":"orta bahar yeşili","salmon":"somon","darkgrey":"koyu gri","ivory":"fildişi","greenyellow":"yeşil-sarı","mistyrose":"gülkurusu","lightsalmon":"açık somon","silver":"gümüş","dimgrey":"soluk gri","orange":"turuncu","white":"beyaz","navajowhite":"navajo beyazı","royalblue":"parlak koyu mavi","deeppink":"koyu pembe","lime":"limon yeşili","oldlace":"eski dantel","chartreuse":"chartreuse","darkcyan":"koyu camgöbeği","yellow":"sarı","linen":"keten","olive":"zeytin","gold":"altın","lawngreen":"çimen yeşili","lightyellow":"açık sarı","tan":"güneş yanığı","darkviolet":"koyu eflatun","lightslategrey":"açık arduvaz grisi","grey":"gri","darkkhaki":"koyu haki","green":"yeşil","deepskyblue":"koyu gök mavisi","aqua":"deniz mavisi","sienna":"koyu kahve","mintcream":"naneli krem","rosybrown":"pembemsi kahverengi","mediumslateblue":"orta arduvaz mavisi","magenta":"macenta","lightseagreen":"açık deniz yeşili","cyan":"camgöbeği","olivedrab":"asker yeşili","darkgoldenrod":"koyu sarı","slateblue":"arduvaz mavisi","mediumaquamarine":"orta akuamarin","lavender":"lavanta","mediumseagreen":"orta deniz yeşili","maroon":"kestane","darkslategray":"koyu arduvaz grisi","mediumturquoise":"orta turkuaz","ghostwhite":"silik beyaz","darkblue":"koyu mavi","mediumvioletred":"orta menekşe kırmızısı","brown":"kahverengi","lightgray":"açık gri","sandybrown":"kum rengi","pink":"pembe","firebrick":"canlı kiremit","indigo":"çivit mavisi","snow":"kar","darkorchid":"koyu orkide","turquoise":"turkuaz","chocolate":"çikolata","springgreen":"bahar yeşili","moccasin":"mokosen","navy":"lacivert","lemonchiffon":"limoni","teal":"Teal mavi","floralwhite":"çiçek beyazı","cornflowerblue":"peygamber çiçeği mavisi","paleturquoise":"soluk turkuaz","purple":"mor","gainsboro":"gainsboro","plum":"erik","red":"kırmızı","blue":"mavi","forestgreen":"koyu deniz yeşili","darkgreen":"koyu yeşil","honeydew":"çam sakızı","darkseagreen":"koyu deniz yeşili","lightcoral":"açık mercan","palevioletred":"soluk menekşe kırmızısı","mediumpurple":"orta mor","saddlebrown":"açık kahve","darkmagenta":"koyu mor","thistle":"devedikeni","whitesmoke":"beyaz duman","wheat":"buğday","violet":"eflatun","lightskyblue":"açık gök mavisi","goldenrod":"sarısabır","mediumblue":"orta mavi","skyblue":"gök mavisi","crimson":"crimson","darksalmon":"koyu somon","darkred":"koyu kırmızı","darkslategrey":"koyu arduvaz grisi","peru":"peru","lightgrey":"açık gri","lightgoldenrodyellow":"açık sarısabır","blanchedalmond":"soluk badem","aliceblue":"alice mavisi","bisque":"bisküvi","slategray":"arduvaz grisi","palegoldenrod":"soluk sarısabır","darkorange":"koyu turuncu","aquamarine":"akuamarin","lightgreen":"açık yeşil","burlywood":"sarımsı kahverengi","dodgerblue":"toz mavisi","darkgray":"koyu gri","lightcyan":"açık camgöbeği","powderblue":"pudra mavisi","blueviolet":"mavi-mor","orchid":"orkide","dimgray":"soluk gri","beige":"bej","fuchsia":"fuşya","lavenderblush":"lavanta pembesi","hotpink":"sıcak pembe","steelblue":"metalik mavi","tomato":"domates","lightpink":"açık pembe","limegreen":"küf yeşili","indianred":"kızılderili kırmızısı","papayawhip":"papaya sapı","lightslategray":"açık arduvaz grisi","gray":"gri","mediumorchid":"orta orkide","cornsilk":"mısır rengi","black":"siyah","seagreen":"deniz yeşili","darkslateblue":"koyu arduvaz mavisi","khaki":"haki","lightblue":"açık mavi","palegreen":"soluk yeşil","azure":"azur mavisi","peachpuff":"açık şeftali","darkolivegreen":"koyu zeytin yeşili","yellowgreen":"sarı yeşil"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.tr");dijit.nls.loading.tr={"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.tr");dijit.nls.common.tr={"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.tr");dijit.form.nls.validate.tr={"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.tr");dijit.form.nls.ComboBox.tr={"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.tr");dojo.cldr.nls.number.tr={"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; +dojo.provide("dojo.nls.tt-rss-layer_tr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.tr");dojo.nls.colors.tr={"lightsteelblue":"açık metalik mavi","orangered":"turuncu kırmızı","midnightblue":"gece mavisi","cadetblue":"denizci mavisi","seashell":"deniz kabuğu","slategrey":"arduvaz grisi","coral":"mercan","darkturquoise":"koyu turkuaz","antiquewhite":"antik beyaz","mediumspringgreen":"orta bahar yeşili","salmon":"somon","darkgrey":"koyu gri","ivory":"fildişi","greenyellow":"yeşil-sarı","mistyrose":"gülkurusu","lightsalmon":"açık somon","silver":"gümüş","dimgrey":"soluk gri","orange":"turuncu","white":"beyaz","navajowhite":"navajo beyazı","royalblue":"parlak koyu mavi","deeppink":"koyu pembe","lime":"limon yeşili","oldlace":"eski dantel","chartreuse":"chartreuse","darkcyan":"koyu camgöbeği","yellow":"sarı","linen":"keten","olive":"zeytin","gold":"altın","lawngreen":"çimen yeşili","lightyellow":"açık sarı","tan":"güneş yanığı","darkviolet":"koyu eflatun","lightslategrey":"açık arduvaz grisi","grey":"gri","darkkhaki":"koyu haki","green":"yeşil","deepskyblue":"koyu gök mavisi","aqua":"deniz mavisi","sienna":"koyu kahve","mintcream":"naneli krem","rosybrown":"pembemsi kahverengi","mediumslateblue":"orta arduvaz mavisi","magenta":"macenta","lightseagreen":"açık deniz yeşili","cyan":"camgöbeği","olivedrab":"asker yeşili","darkgoldenrod":"koyu sarı","slateblue":"arduvaz mavisi","mediumaquamarine":"orta akuamarin","lavender":"lavanta","mediumseagreen":"orta deniz yeşili","maroon":"kestane","darkslategray":"koyu arduvaz grisi","mediumturquoise":"orta turkuaz","ghostwhite":"silik beyaz","darkblue":"koyu mavi","mediumvioletred":"orta menekşe kırmızısı","brown":"kahverengi","lightgray":"açık gri","sandybrown":"kum rengi","pink":"pembe","firebrick":"canlı kiremit","indigo":"çivit mavisi","snow":"kar","darkorchid":"koyu orkide","turquoise":"turkuaz","chocolate":"çikolata","springgreen":"bahar yeşili","moccasin":"mokosen","navy":"lacivert","lemonchiffon":"limoni","teal":"Teal mavi","floralwhite":"çiçek beyazı","cornflowerblue":"peygamber çiçeği mavisi","paleturquoise":"soluk turkuaz","purple":"mor","gainsboro":"gainsboro","plum":"erik","red":"kırmızı","blue":"mavi","forestgreen":"koyu deniz yeşili","darkgreen":"koyu yeşil","honeydew":"çam sakızı","darkseagreen":"koyu deniz yeşili","lightcoral":"açık mercan","palevioletred":"soluk menekşe kırmızısı","mediumpurple":"orta mor","saddlebrown":"açık kahve","darkmagenta":"koyu mor","thistle":"devedikeni","whitesmoke":"beyaz duman","wheat":"buğday","violet":"eflatun","lightskyblue":"açık gök mavisi","goldenrod":"sarısabır","mediumblue":"orta mavi","skyblue":"gök mavisi","crimson":"crimson","darksalmon":"koyu somon","darkred":"koyu kırmızı","darkslategrey":"koyu arduvaz grisi","peru":"peru","lightgrey":"açık gri","lightgoldenrodyellow":"açık sarısabır","blanchedalmond":"soluk badem","aliceblue":"alice mavisi","bisque":"bisküvi","slategray":"arduvaz grisi","palegoldenrod":"soluk sarısabır","darkorange":"koyu turuncu","aquamarine":"akuamarin","lightgreen":"açık yeşil","burlywood":"sarımsı kahverengi","dodgerblue":"toz mavisi","darkgray":"koyu gri","lightcyan":"açık camgöbeği","powderblue":"pudra mavisi","blueviolet":"mavi-mor","orchid":"orkide","dimgray":"soluk gri","beige":"bej","fuchsia":"fuşya","lavenderblush":"lavanta pembesi","hotpink":"sıcak pembe","steelblue":"metalik mavi","tomato":"domates","lightpink":"açık pembe","limegreen":"küf yeşili","indianred":"kızılderili kırmızısı","papayawhip":"papaya sapı","lightslategray":"açık arduvaz grisi","gray":"gri","mediumorchid":"orta orkide","cornsilk":"mısır rengi","black":"siyah","seagreen":"deniz yeşili","darkslateblue":"koyu arduvaz mavisi","khaki":"haki","lightblue":"açık mavi","palegreen":"soluk yeşil","azure":"azur mavisi","peachpuff":"açık şeftali","darkolivegreen":"koyu zeytin yeşili","yellowgreen":"sarı yeşil"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.tr");dijit.nls.loading.tr={"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.tr");dijit.nls.common.tr={"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.tr");dijit.form.nls.validate.tr={"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.tr");dijit.form.nls.ComboBox.tr={"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.tr");dojo.cldr.nls.number.tr={"group":".","percentSign":"%","exponential":"E","percentFormat":"% #,##0","scientificFormat":"#E0","list":";","infinity":"∞","patternDigit":"#","minusSign":"-","decimal":",","nan":"NaN","nativeZeroDigit":"0","perMille":"‰","decimalFormat":"#,##0.###","currencyFormat":"#,##0.00 ¤","plusSign":"+","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","currencySpacing-beforeCurrency-insertBetween":" "}; diff --git a/lib/dojo/nls/tt-rss-layer_xx.js b/lib/dojo/nls/tt-rss-layer_xx.js index c54e6ea35..a4f0b8535 100644 --- a/lib/dojo/nls/tt-rss-layer_xx.js +++ b/lib/dojo/nls/tt-rss-layer_xx.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.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("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"};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.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:]","decimalFormat-short":"000T","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"}; diff --git a/lib/dojo/nls/tt-rss-layer_zh-cn.js b/lib/dojo/nls/tt-rss-layer_zh-cn.js index 05243b8ac..e16eeb4be 100644 --- a/lib/dojo/nls/tt-rss-layer_zh-cn.js +++ b/lib/dojo/nls/tt-rss-layer_zh-cn.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/tt-rss-layer_zh-tw.js b/lib/dojo/nls/tt-rss-layer_zh-tw.js index 4925db23c..9ac816dd9 100644 --- a/lib/dojo/nls/tt-rss-layer_zh-tw.js +++ b/lib/dojo/nls/tt-rss-layer_zh-tw.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/tt-rss-layer_zh.js b/lib/dojo/nls/tt-rss-layer_zh.js index ed7ddffdf..0b391dbbb 100644 --- a/lib/dojo/nls/tt-rss-layer_zh.js +++ b/lib/dojo/nls/tt-rss-layer_zh.js @@ -1 +1 @@ -dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","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":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; +dojo.provide("dojo.nls.tt-rss-layer_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.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"};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.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"decimalFormat":"#,##0.###","group":",","scientificFormat":"#E0","percentFormat":"#,##0%","currencyFormat":"¤#,##0.00","decimal":".","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"NaN","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"}; diff --git a/lib/dojo/nls/zh/colors.js b/lib/dojo/nls/zh/colors.js index 35368f394..0ffb2d8f9 100644 --- a/lib/dojo/nls/zh/colors.js +++ b/lib/dojo/nls/zh/colors.js @@ -1 +1 @@ -({"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":"黄绿色"}) \ No newline at end of file +({"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":"黄绿色"}) \ No newline at end of file diff --git a/lib/dojo/number.js b/lib/dojo/number.js index 33aa6dd52..30fcb6142 100644 --- a/lib/dojo/number.js +++ b/lib/dojo/number.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,12 +8,12 @@ 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.require("dojo.i18n"); -dojo.requireLocalization("dojo.cldr", "number", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ru,sk,sl,sv,th,tr,zh"); +dojo.requireLocalization("dojo.cldr", "number", null, "ROOT,ar,ca,cs,da,de,el,en,en-au,en-gb,es,fi,fr,fr-ch,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-hant,zh-hk"); dojo.require("dojo.string"); dojo.require("dojo.regexp"); +dojo.getObject("number", true, dojo); /*===== dojo.number = { @@ -118,7 +118,7 @@ dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo. if(options.fractional === false){ options.places = 0; } return pattern.replace(numberPatternRE, dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round})); -} +}; dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){ // summary: @@ -144,7 +144,7 @@ dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/incr // 10.75 var factor = 10 / (increment || 10); return (factor * +value).toFixed(places) / factor; // Number -} +}; if((0.9).toFixed() == 0){ // (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit @@ -157,7 +157,7 @@ if((0.9).toFixed() == 0){ d = 0; } return round(v, p, m) + (v > 0 ? d : -d); - } + }; })(); } @@ -180,7 +180,7 @@ dojo.number.__FormatAbsoluteOptions = function(){ =====*/ dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){ - // summary: + // summary: // Apply numeric pattern to absolute value using options. Gives no // consideration to local customs. // value: @@ -295,7 +295,7 @@ dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){ // 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 || {}; @@ -383,7 +383,7 @@ dojo.number._parseInfo = function(/*Object?*/options){ // normalize whitespace and return return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object -} +}; /*===== dojo.number.__ParseOptions = function(){ @@ -494,10 +494,10 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?* var re = ""; if(q && (flags.places!==0)){ re = "\\" + flags.decimal; - if(flags.places == Infinity){ - re = "(?:" + re + "\\d+)?"; + if(flags.places == Infinity){ + re = "(?:" + re + "\\d+)?"; }else{ - re += "\\d{" + flags.places + "}"; + re += "\\d{" + flags.places + "}"; } } return re; @@ -506,9 +506,9 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?* ); var exponentRE = dojo.regexp.buildGroupRE(flags.exponent, - function(q){ + function(q){ if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; } - return ""; + return ""; } ); @@ -540,7 +540,7 @@ dojo.number.__IntegerRegexpFlags = function(){ =====*/ dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){ - // summary: + // summary: // Builds a regular expression that matches an integer // assign default values to missing parameters @@ -579,6 +579,6 @@ dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags ); return signRE + numberRE; // String -} +}; } diff --git a/lib/dojo/package.json b/lib/dojo/package.json new file mode 100644 index 000000000..5855be51f --- /dev/null +++ b/lib/dojo/package.json @@ -0,0 +1,21 @@ +{ + "name": "dojo", + "directories": { + "lib": "." + }, + "main":"./lib/main-browser", + "description": "Dojo core is a powerful, lightweight library that makes common tasks quicker and easier. Animate elements, manipulate the DOM, and query with easy CSS syntax, all without sacrificing performance.", + "licenses": [ + { + "type": "AFLv2.1", + "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L43" + }, + { + "type": "BSD", + "url": "http://trac.dojotoolkit.org/browser/dojo/trunk/LICENSE#L13" + } + ], + "bugs": "http://bugs.dojotoolkit.org/", + "keywords": ["JavaScript", "Dojo", "Toolkit"], + "homepage": "http://dojotoolkit.org/" +} \ No newline at end of file diff --git a/lib/dojo/parser.js b/lib/dojo/parser.js index 7ae035691..bd52030e0 100644 --- a/lib/dojo/parser.js +++ b/lib/dojo/parser.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,14 +10,14 @@ dojo._hasResource["dojo.parser"] = true; dojo.provide("dojo.parser"); dojo.require("dojo.date.stamp"); + new Date("X"); // workaround for #11279, new Date("") == NaN dojo.parser = new function(){ - // summary: The Dom/Widget parsing package + // summary: + // The Dom/Widget parsing package var d = dojo; - this._attrName = d._scopeName + "Type"; - this._query = "[" + this._attrName + "]"; function val2type(/*Object*/ value){ // summary: @@ -42,13 +42,13 @@ dojo.parser = new function(){ case "number": return value.length ? Number(value) : NaN; case "boolean": - // for checked/disabled value might be "" or "checked". interpret as true. + // 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 + // (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)); } @@ -77,7 +77,7 @@ dojo.parser = new function(){ } } - var instanceClasses = { + var dummyClass = {}, instanceClasses = { // map from fully qualified name (like "dijit.Button") to structure like // { cls: dijit.Button, params: {label: "string", disabled: "boolean"} } }; @@ -85,45 +85,70 @@ dojo.parser = new function(){ // Widgets like BorderContainer add properties to _Widget via dojo.extend(). // If BorderContainer is loaded after _Widget's parameter list has been cached, // we need to refresh that parameter list (for _Widget and all widgets that extend _Widget). - dojo.connect(dojo, "extend", function(){ + // TODO: remove this in 2.0, when we stop caching parameters. + d.connect(d, "extend", function(){ instanceClasses = {}; }); - function getClassInfo(/*String*/ className){ + function getProtoInfo(cls, params){ + // cls: A prototype + // The prototype of the class to check props on + // params: Object + // The parameters object to mix found parameters onto. + for(var name in cls){ + if(name.charAt(0)=="_"){ continue; } // skip internal properties + if(name in dummyClass){ continue; } // skip "constructor" and "toString" + params[name] = val2type(cls[name]); + } + return params; + } + + function getClassInfo(/*String*/ className, /*Boolean*/ skipParamsLookup){ + // summary: + // Maps a widget name string like "dijit.form.Button" to the widget constructor itself, + // and a list of that widget's parameters and their types // className: // fully qualified name (like "dijit.form.Button") // returns: // structure like - // { - // cls: dijit.Button, + // { + // cls: dijit.Button, // params: { label: "string", disabled: "boolean"} // } - if(!instanceClasses[className]){ + var c = instanceClasses[className]; + if(!c){ // get pointer to widget class - var cls = d.getObject(className); + var cls = d.getObject(className), params = null; if(!cls){ return null; } // class not defined [yet] - - var proto = cls.prototype; - - // get table of parameter names & types - var params = {}, dummyClass = {}; - for(var name in proto){ - if(name.charAt(0)=="_"){ continue; } // skip internal properties - if(name in dummyClass){ continue; } // skip "constructor" and "toString" - var defVal = proto[name]; - params[name]=val2type(defVal); + if(!skipParamsLookup){ // from fastpath, we don't need to lookup the attrs on the proto because they are explicit + params = getProtoInfo(cls.prototype, {}) } - - instanceClasses[className] = { cls: cls, params: params }; + c = { cls: cls, params: params }; + + }else if(!skipParamsLookup && !c.params){ + // if we're calling getClassInfo and have a cls proto, but no params info, scan that cls for params now + // and update the pointer in instanceClasses[className]. This happens when a widget appears in another + // widget's template which still uses dojoType, but an instance of the widget appears prior with a data-dojo-type, + // skipping this lookup the first time. + c.params = getProtoInfo(c.cls.prototype, {}); } - return instanceClasses[className]; + + return c; } - this._functionFromScript = function(script){ + this._functionFromScript = function(script, attrData){ + // summary: + // Convert a <script type="dojo/method" args="a, b, c"> ... </script> + // into a function + // script: DOMNode + // The <script> DOMNode + // attrData: String + // For HTML5 compliance, searches for attrData + "args" (typically + // "data-dojo-args") instead of "args" var preamble = ""; var suffix = ""; - var argsStr = script.getAttribute("args"); + var argsStr = (script.getAttribute(attrData + "args") || script.getAttribute("args")); if(argsStr){ d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){ preamble += "var "+part+" = arguments["+idx+"]; "; @@ -137,7 +162,7 @@ dojo.parser = new function(){ }); } return new Function(preamble+script.innerHTML+suffix); - } + }; this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){ // summary: @@ -158,69 +183,106 @@ dojo.parser = new function(){ // exist. // args: Object? // An object used to hold kwArgs for instantiation. - // Supports 'noStart' and inherited. - var thelist = [], dp = dojo.parser; + // See parse.args argument for details. + + var thelist = [], mixin = mixin||{}; args = args||{}; - + + // TODO: for 2.0 default to data-dojo- regardless of scopeName (or maybe scopeName won't exist in 2.0) + var attrName = (args.scope || d._scopeName) + "Type", // typically "dojoType" + attrData = "data-" + (args.scope || d._scopeName) + "-"; // typically "data-dojo-" + d.forEach(nodes, function(obj){ if(!obj){ return; } - // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s - var node, type, clsInfo, clazz, scripts; + // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc. + var node, type, clsInfo, clazz, scripts, fastpath; if(obj.node){ // new format of nodes[] array, object w/lots of properties pre-computed for me node = obj.node; type = obj.type; - clsInfo = obj.clsInfo || (type && getClassInfo(type)); + fastpath = obj.fastpath; + clsInfo = obj.clsInfo || (type && getClassInfo(type, fastpath)); clazz = clsInfo && clsInfo.cls; scripts = obj.scripts; }else{ - // old (backwards compatible) format of nodes[] array, simple array of DOMNodes + // old (backwards compatible) format of nodes[] array, simple array of DOMNodes. no fastpath/data-dojo-type support here. node = obj; - type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName); + type = attrName in mixin ? mixin[attrName] : node.getAttribute(attrName); clsInfo = type && getClassInfo(type); clazz = clsInfo && clsInfo.cls; - scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : + scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : d.query("> script[type^='dojo/']", node)); } if(!clsInfo){ throw new Error("Could not load class '" + type); } - // Setup hash to hold parameter settings for this widget. Start with the parameter + // Setup hash to hold parameter settings for this widget. Start with the parameter // settings inherited from ancestors ("dir" and "lang"). // Inherited setting may later be overridden by explicit settings on node itself. - var params = {}, - attributes = node.attributes; + var params = {}; + if(args.defaults){ // settings for the document itself (or whatever subtree is being parsed) - dojo.mixin(params, args.defaults); + d._mixin(params, args.defaults); } if(obj.inherited){ // settings from dir=rtl or lang=... on a node above this node - dojo.mixin(params, obj.inherited); + d._mixin(params, obj.inherited); } + + // mix things found in data-dojo-props into the params + if(fastpath){ + var extra = node.getAttribute(attrData + "props"); + if(extra && extra.length){ + try{ + extra = d.fromJson.call(args.propsThis, "{" + extra + "}"); + d._mixin(params, extra); + }catch(e){ + // give the user a pointer to their invalid parameters. FIXME: can we kill this in production? + throw new Error(e.toString() + " in data-dojo-props='" + extra + "'"); + } + } - // read parameters (ie, attributes) specified on DOMNode - // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"} - for(var name in clsInfo.params){ - var item = name in mixin?{value:mixin[name],specified:true}: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 = "className" in mixin?mixin.className:node.className; - break; - case "style": - value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera? + // For the benefit of _Templated, check if node has data-dojo-attach-point/data-dojo-attach-event + // and mix those in as though they were parameters + var attachPoint = node.getAttribute(attrData + "attach-point"); + if(attachPoint){ + params.dojoAttachPoint = attachPoint; } - var _type = clsInfo.params[name]; - if(typeof value == "string"){ - params[name] = str2obj(value, _type); - }else{ - params[name] = value; + var attachEvent = node.getAttribute(attrData + "attach-event"); + if(attachEvent){ + params.dojoAttachEvent = attachEvent; + } + dojo.mixin(params, mixin); + }else{ + // FIXME: we need something like "deprecateOnce()" to throw dojo.deprecation for something. + // remove this logic in 2.0 + // read parameters (ie, attributes) specified on DOMNode + + var attributes = node.attributes; + + // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"} + for(var name in clsInfo.params){ + var item = name in mixin ? { value:mixin[name], specified:true } : 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 = "className" in mixin ? mixin.className : node.className; + break; + case "style": + value = "style" in mixin ? mixin.style : (node.style && node.style.cssText); // FIXME: Opera? + } + var _type = clsInfo.params[name]; + if(typeof value == "string"){ + params[name] = str2obj(value, _type); + }else{ + params[name] = value; + } } } @@ -235,9 +297,10 @@ dojo.parser = new function(){ d.forEach(scripts, function(script){ node.removeChild(script); - var event = script.getAttribute("event"), + // FIXME: drop event="" support in 2.0. use data-dojo-event="" instead + var event = (script.getAttribute(attrData + "event") || script.getAttribute("event")), type = script.getAttribute("type"), - nf = d.parser._functionFromScript(script); + nf = d.parser._functionFromScript(script, attrData); if(event){ if(type == "dojo/connect"){ connects.push({event: event, func: nf}); @@ -255,7 +318,8 @@ dojo.parser = new function(){ thelist.push(instance); // map it to the JS namespace if that makes sense - var jsname = node.getAttribute("jsId"); + // FIXME: in 2.0, drop jsId support. use data-dojo-id instead + var jsname = (node.getAttribute(attrData + "id") || node.getAttribute("jsId")); if(jsname){ d.setObject(jsname, instance); } @@ -279,9 +343,9 @@ dojo.parser = new function(){ // ContentPane is the parent widget (so that the parse doesn't call startup() on the // ContentPane's children) d.forEach(thelist, function(instance){ - if( !args.noStart && instance && - instance.startup && - !instance._started && + if( !args.noStart && instance && + dojo.isFunction(instance.startup) && + !instance._started && (!instance.getParent || !instance.getParent()) ){ instance.startup(); @@ -291,34 +355,57 @@ dojo.parser = new function(){ return thelist; }; - this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){ + this.parse = function(rootNode, args){ // summary: // Scan the DOM for class instances, and instantiate them. // // description: // Search specified node (or root node) recursively for class instances, - // and instantiate them Searches for - // dojoType="qualified.class.name" + // and instantiate them. Searches for either data-dojo-type="Class" or + // dojoType="Class" where "Class" is a a fully qualified class name, + // like `dijit.form.Button` + // + // Using `data-dojo-type`: + // Attributes using can be mixed into the parameters used to instantitate the + // Class by using a `data-dojo-props` attribute on the node being converted. + // `data-dojo-props` should be a string attribute to be converted from JSON. + // + // Using `dojoType`: + // Attributes are read from the original domNode and converted to appropriate + // types by looking up the Class prototype values. This is the default behavior + // from Dojo 1.0 to Dojo 1.5. `dojoType` support is deprecated, and will + // go away in Dojo 2.0. // // rootNode: DomNode? // A default starting root node from which to start the parsing. Can be // omitted, defaulting to the entire document. If omitted, the `args` - // object can be passed in this place. If the `args` object has a + // object can be passed in this place. If the `args` object has a // `rootNode` member, that is used. // - // args: + // args: Object // a kwArgs object passed along to instantiate() - // + // // * noStart: Boolean? // when set will prevent the parser from calling .startup() - // when locating the nodes. + // when locating the nodes. // * rootNode: DomNode? // identical to the function's `rootNode` argument, though - // allowed to be passed in via this `args object. + // allowed to be passed in via this `args object. + // * template: Boolean + // If true, ignores ContentPane's stopParser flag and parses contents inside of + // a ContentPane inside of a template. This allows dojoAttachPoint on widgets/nodes + // nested inside the ContentPane to work. // * inherited: Object // Hash possibly containing dir and lang settings to be applied to // parsed widgets, unless there's another setting on a sub-node that overrides - // + // * scope: String + // Root for attribute names to search for. If scopeName is dojo, + // will search for data-dojo-type (or dojoType). For backwards compatibility + // reasons defaults to dojo._scopeName (which is "dojo" except when + // multi-version support is used, when it will be something like dojo16, dojo20, etc.) + // * propsThis: Object + // If specified, "this" referenced from data-dojo-props will refer to propsThis. + // Intended for use from the widgets-in-template feature of `dijit._Templated` // // example: // Parse all widgets on a page: @@ -326,10 +413,10 @@ dojo.parser = new function(){ // // example: // Parse all classes within the node with id="foo" - // | dojo.parser.parse(dojo.byId(foo)); + // | dojo.parser.parse(dojo.byId('foo')); // // example: - // Parse all classes in a page, but do not call .startup() on any + // Parse all classes in a page, but do not call .startup() on any // child // | dojo.parser.parse({ noStart: true }) // @@ -337,7 +424,7 @@ dojo.parser = new function(){ // Parse all classes in a node, but do not call .startup() // | dojo.parser.parse(someNode, { noStart:true }); // | // or - // | dojo.parser.parse({ noStart:true, rootNode: someNode }); + // | dojo.parser.parse({ noStart:true, rootNode: someNode }); // determine the root node based on the passed arguments. var root; @@ -347,8 +434,12 @@ dojo.parser = new function(){ }else{ root = rootNode; } + root = root ? dojo.byId(root) : dojo.body(); + args = args || {}; + + var attrName = (args.scope || d._scopeName) + "Type", // typically "dojoType" + attrData = "data-" + (args.scope || d._scopeName) + "-"; // typically "data-dojo-" - var attrName = this._attrName; function scan(parent, list){ // summary: // Parent is an Object representing a DOMNode, with or without a dojoType specified. @@ -357,7 +448,7 @@ dojo.parser = new function(){ // parent: Object // Object representing the parent node, like // | { - // | node: DomNode, // scan children of this node + // | node: DomNode, // scan children of this node // | inherited: {dir: "rtl"}, // dir/lang setting inherited from above node // | // | // attributes only set if node has dojoType specified @@ -370,6 +461,7 @@ dojo.parser = new function(){ // Effective dir and lang settings on parent node, either set directly or inherited from grandparent var inherited = dojo.clone(parent.inherited); dojo.forEach(["dir", "lang"], function(name){ + // TODO: what if this is a widget and dir/lang are declared in data-dojo-props? var val = parent.node.getAttribute(name); if(val){ inherited[name] = val; @@ -377,20 +469,31 @@ dojo.parser = new function(){ }); // if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[]. - var scripts = parent.scripts; + var scripts = parent.clsInfo && !parent.clsInfo.cls.prototype._noScript ? parent.scripts : null; // unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively - var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser; + var recurse = (!parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser) || (args && args.template); // scan parent's children looking for dojoType and <script type=dojo/*> for(var child = parent.node.firstChild; child; child = child.nextSibling){ if(child.nodeType == 1){ - var type = recurse && child.getAttribute(attrName); + // FIXME: desupport dojoType in 2.0. use data-dojo-type instead + var type, html5 = recurse && child.getAttribute(attrData + "type"); + if(html5){ + type = html5; + }else{ + // fallback to backward compatible mode, using dojoType. remove in 2.0 + type = recurse && child.getAttribute(attrName); + } + + var fastpath = html5 == type; + if(type){ - // if dojoType specified, add to output array of nodes to instantiate + // if dojoType/data-dojo-type specified, add to output array of nodes to instantiate var params = { "type": type, - clsInfo: getClassInfo(type), // note: won't find classes declared via dojo.Declaration + fastpath: fastpath, + clsInfo: getClassInfo(type, fastpath), // note: won't find classes declared via dojo.Declaration node: child, scripts: [], // <script> nodes that are parent's children inherited: inherited // dir & lang attributes inherited from parent @@ -403,7 +506,7 @@ dojo.parser = new function(){ }else if(scripts && child.nodeName.toLowerCase() == "script"){ // if <script type="dojo/...">, save in scripts[] type = child.getAttribute("type"); - if (type && /^dojo\//i.test(type)) { + if (type && /^dojo\/\w/i.test(type)) { scripts.push(child); } }else if(recurse){ @@ -417,17 +520,24 @@ dojo.parser = new function(){ } } + // Ignore bogus entries in inherited hash like {dir: ""} + var inherited = {}; + if(args && args.inherited){ + for(var key in args.inherited){ + if(args.inherited[key]){ inherited[key] = args.inherited[key]; } + } + } + // Make list of all nodes on page w/dojoType specified var list = []; scan({ - node: root ? dojo.byId(root) : dojo.body(), - inherited: (args && args.inherited) || { - dir: dojo._isBodyLtr() ? "ltr" : "rtl" - } + node: root, + inherited: inherited }, list); // go build the object instances - return this.instantiate(list, null, args); // Array + var mixin = args && args.template ? {template: true} : null; + return this.instantiate(list, mixin, args); // Array }; }(); @@ -435,14 +545,14 @@ dojo.parser = new function(){ //after the a11y test. (function(){ - var parseRunner = function(){ + var parseRunner = function(){ if(dojo.config.parseOnLoad){ - dojo.parser.parse(); + dojo.parser.parse(); } }; // FIXME: need to clobber cross-dependency!! - if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){ + if(dojo.getObject("dijit.wai.onload") === dojo._loaders[0]){ dojo._loaders.splice(1, 0, parseRunner); }else{ dojo._loaders.unshift(parseRunner); diff --git a/lib/dojo/regexp.js b/lib/dojo/regexp.js index 1da68f452..947ecf1d5 100644 --- a/lib/dojo/regexp.js +++ b/lib/dojo/regexp.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.regexp"]){ //_hasResource checks added by build. Do dojo._hasResource["dojo.regexp"] = true; dojo.provide("dojo.regexp"); +dojo.getObject("regexp", true, dojo); + /*===== dojo.regexp = { // summary: Regular expressions and Builder resources @@ -27,7 +29,7 @@ dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){ } return "\\" + ch; }); // String -} +}; dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){ // summary: @@ -42,7 +44,7 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole // A single value or an array of values. // re: // A function. Takes one parameter and converts it to a regular - // expression. + // expression. // nonCapture: // If true, uses non-capturing match, otherwise matches are retained // by regular expression. Defaults to false @@ -61,15 +63,15 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole // 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. + // by regular expression. return "(" + (nonCapture ? "?:":"") + expression + ")"; // String -} +}; } diff --git a/lib/dojo/resources/_modules.js b/lib/dojo/resources/_modules.js index ecfd266c4..2afef9a6c 100644 --- a/lib/dojo/resources/_modules.js +++ b/lib/dojo/resources/_modules.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -36,7 +36,7 @@ dojo.rpc = { dojo.baseUrl = { // summary: The root relative path to dojo.js (as a string) - // example: + // example: // if(typeof dojo != "undefined"){ console.log(dojo.baseUrl); } }; diff --git a/lib/dojo/robot.js b/lib/dojo/robot.js index 6cbe0bebc..40bc746ee 100644 --- a/lib/dojo/robot.js +++ b/lib/dojo/robot.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -8,10 +8,12 @@ if(!dojo._hasResource["dojo.robot"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo.robot"] = true; dojo.provide("dojo.robot"); -dojo.experimental("dojo.robot"); dojo.require("doh.robot"); dojo.require("dojo.window"); + +dojo.experimental("dojo.robot"); + (function(){ // users who use doh+dojo get the added convenience of dojo.mouseMoveAt, // instead of computing the absolute coordinates of their elements themselves diff --git a/lib/dojo/robotx.js b/lib/dojo/robotx.js index 7f49b64a0..3a07c6903 100644 --- a/lib/dojo/robotx.js +++ b/lib/dojo/robotx.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.robotx"]){ //_hasResource checks added by build. Do dojo._hasResource["dojo.robotx"] = true; dojo.provide("dojo.robotx"); dojo.require("dojo.robot"); + + dojo.experimental("dojo.robotx"); // loads an external app into an iframe and points dojo.doc to the iframe document, allowing the robot to control it @@ -16,18 +18,48 @@ dojo.experimental("dojo.robotx"); // dojo.require this file (function(){ -// have to wait for test page to load before testing! -doh.robot._runsemaphore.lock.push("dojo.robotx.lock"); -var iframe = document.getElementById('robotapplication'); +var iframe = null; var groupStarted=dojo.connect(doh, '_groupStarted', function(){ dojo.disconnect(groupStarted); iframe.style.visibility="visible"; }); +var attachIframe = function(){ + dojo.addOnLoad(function(){ + var emptyStyle = { + overflow: dojo.isWebKit? 'hidden' : 'visible', + margin: '0px', + borderWidth: '0px', + height: '100%', + width: '100%' + }; + dojo.style(document.documentElement, emptyStyle); + dojo.style(document.body, emptyStyle); + document.body.appendChild(iframe); + var base=document.createElement('base'); + base.href=iframe.src; + document.getElementsByTagName("head")[0].appendChild(base); + }); +}; + +// Prevent race conditions between iframe loading and robot init. +// If iframe is allowed to load while the robot is typing, sync XHRs can prevent the robot from completing its initialization. +var robotReady=false; +var robotFrame=null; +var _run=doh.robot._run; +doh.robot._run=function(frame){ + // Called from robot when the robot completed its initialization. + robotReady = true; + robotFrame = frame; + doh.robot._run=_run; + // If initRobot was already called, then attach the iframe. + if(iframe.src){ attachIframe(); } +} + var onIframeLoad=function(){ - //iframe = document.getElementById('robotapplication'); + // initial load handler: update the document and start the tests doh.robot._updateDocument(); onIframeLoad = null; var scrollRoot = (document.compatMode == 'BackCompat')? document.body : document.documentElement; @@ -35,7 +67,15 @@ var onIframeLoad=function(){ if(consoleHeight){ iframe.style.height = (scrollRoot.clientHeight - consoleHeight)+"px"; } - doh.run(); + // If dojo is present in the test case, then at least make a best effort to wait for it to load. + // The test must handle other race conditions like initial data queries by itself. + if(iframe.contentWindow.dojo){ + iframe.contentWindow.dojo.addOnLoad(function(){ + doh.robot._run(robotFrame); + }); + }else{ + doh.robot._run(robotFrame); + } }; var iframeLoad=function(){ @@ -66,6 +106,9 @@ if(iframe['attachEvent'] !== undefined){ dojo.connect(iframe, 'onload', iframeLoad); } + + + dojo.mixin(doh.robot,{ _updateDocument: function(){ dojo.setContext(iframe.contentWindow, iframe.contentWindow.document); @@ -84,22 +127,13 @@ dojo.mixin(doh.robot,{ // url: // URL to open. Any of the test's dojo.doc calls (e.g. dojo.byId()), and any dijit.registry calls (e.g. dijit.byId()) will point to elements and widgets inside this application. // + iframe.src=url; - dojo.addOnLoad(function(){ - var emptyStyle = { - overflow: dojo.isWebKit? 'hidden' : 'visible', - margin: '0px', - borderWidth: '0px', - height: '100%', - width: '100%' - }; - dojo.style(document.documentElement, emptyStyle); - dojo.style(document.body, emptyStyle); - document.body.appendChild(iframe); - var base=document.createElement('base'); - base.href=url; - document.getElementsByTagName("head")[0].appendChild(base); - }); + // see above note about race conditions + if(robotReady){ + attachIframe(); + + } }, waitForPageToLoad: function(/*Function*/ submitActions){ @@ -134,7 +168,6 @@ dojo.mixin(doh.robot,{ } }); - })(); } diff --git a/lib/dojo/rpc/JsonService.js b/lib/dojo/rpc/JsonService.js index 757e328be..064fd0fee 100644 --- a/lib/dojo/rpc/JsonService.js +++ b/lib/dojo/rpc/JsonService.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -10,6 +10,7 @@ dojo._hasResource["dojo.rpc.JsonService"] = true; dojo.provide("dojo.rpc.JsonService"); dojo.require("dojo.rpc.RpcService"); + dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, { bustCache: false, contentType: "application/json-rpc", @@ -45,7 +46,7 @@ dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, { url: url||this.serviceUrl, postData: this.createRequest(method, parameters), contentType: this.contentType, - timeout: this.timeout, + timeout: this.timeout, handleAs: "json-comment-optional" }); def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler)); diff --git a/lib/dojo/rpc/JsonpService.js b/lib/dojo/rpc/JsonpService.js index 31e95077b..ecdadc7fc 100644 --- a/lib/dojo/rpc/JsonpService.js +++ b/lib/dojo/rpc/JsonpService.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -11,9 +11,10 @@ dojo.provide("dojo.rpc.JsonpService"); dojo.require("dojo.rpc.RpcService"); dojo.require("dojo.io.script"); + dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, { // summary: - // Generic JSONP service. Minimally extends RpcService to allow + // Generic JSONP service. Minimally extends RpcService to allow // easy definition of nearly any JSONP style service. Example // SMD files exist in dojox.data @@ -25,10 +26,10 @@ dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, { dojo.forEach(this.required, function(req){ if(req=="" || req==undefined){ - throw new Error("Required Service Argument not found: "+req); + throw new Error("Required Service Argument not found: "+req); } }); - } + } }, strictArgChecks: false, @@ -50,7 +51,7 @@ dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, { callbackParamName: this.callbackParamName||"callback", content: this.createRequest(parameters), timeout: this.timeout, - handleAs: "json", + handleAs: "json", preventCache: true }); def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler)); diff --git a/lib/dojo/rpc/RpcService.js b/lib/dojo/rpc/RpcService.js index 7ff71415e..5ef5dae7f 100644 --- a/lib/dojo/rpc/RpcService.js +++ b/lib/dojo/rpc/RpcService.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.rpc.RpcService"]){ //_hasResource checks added by bu dojo._hasResource["dojo.rpc.RpcService"] = true; dojo.provide("dojo.rpc.RpcService"); + dojo.declare("dojo.rpc.RpcService", null, { constructor: function(args){ //summary: @@ -25,7 +26,7 @@ dojo.declare("dojo.rpc.RpcService", null, { // matches those defined in the smd. smdString allows a developer to pass // a jsonString directly, which will be converted into an object or alternatively // smdObject is accepts an smdObject directly. - // + // if(args){ //if the arg is a string, we assume it is a url to retrieve an smd definition from if( (dojo.isString(args)) || (args instanceof dojo._Url)){ @@ -99,7 +100,7 @@ dojo.declare("dojo.rpc.RpcService", null, { // deferredRequestHandler: Deferred // The deferred object handling a request. - var tf = dojo.hitch(this, + var tf = dojo.hitch(this, function(obj){ if(obj.error!=null){ var err; @@ -114,7 +115,7 @@ dojo.declare("dojo.rpc.RpcService", null, { err.errorObject = obj; deferredRequestHandler.errback(err); }else{ - deferredRequestHandler.callback(this.parseResults(obj)); + deferredRequestHandler.callback(this.parseResults(obj)); } } ); @@ -160,7 +161,7 @@ dojo.declare("dojo.rpc.RpcService", null, { dojo.forEach(object.methods, function(m){ if(m && m.name){ this[m.name] = this.generateMethod( m.name, - m.parameters, + m.parameters, m.url||m.serviceUrl||m.serviceURL); if(!dojo.isFunction(this[m.name])){ throw new Error("RpcService: Failed to create" + m.name + "()"); diff --git a/lib/dojo/store/Cache.js b/lib/dojo/store/Cache.js new file mode 100644 index 000000000..d08d17099 --- /dev/null +++ b/lib/dojo/store/Cache.js @@ -0,0 +1,152 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.Cache"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.Cache"] = true; +dojo.provide("dojo.store.Cache"); + +dojo.getObject("store", true, dojo); + +/*===== +dojo.declare("dojo.store.__CacheArgs", null, { + constructor: function(){ + // summary: + // These are additional options for how caching is handled. + // isLoaded: Function? + // This is a function that will be called for each item in a query response to determine + // if it is cacheable. If isLoaded returns true, the item will be cached, otherwise it + // will not be cached. If isLoaded is not provided, all items will be cached. + this.isLoaded = isLoaded; + } +}); +=====*/ +dojo.store.Cache = function(masterStore, cachingStore, /*dojo.store.__CacheArgs*/ options){ + // summary: + // The Cache store wrapper takes a master store and a caching store, + // caches data from the master into the caching store for faster + // lookup. Normally one would use a memory store for the caching + // store and a server store like JsonRest for the master store. + // masterStore: + // This is the authoritative store, all uncached requests or non-safe requests will + // be made against this store. + // cachingStore: + // This is the caching store that will be used to store responses for quick access. + // Typically this should be a local store. + // options: + // These are additional options for how caching is handled. + options = options || {}; + return dojo.delegate(masterStore, { + query: function(query, directives){ + var results = masterStore.query(query, directives); + results.forEach(function(object){ + if(!options.isLoaded || options.isLoaded(object)){ + cachingStore.put(object); + } + }); + return results; + }, + // look for a queryEngine in either store + queryEngine: masterStore.queryEngine || cachingStore.queryEngine, + get: function(id, directives){ + return dojo.when(cachingStore.get(id), function(result){ + return result || dojo.when(masterStore.get(id, directives), function(result){ + if(result){ + cachingStore.put(result, {id: id}); + } + return result; + }); + }); + }, + add: function(object, directives){ + return dojo.when(masterStore.add(object, directives), function(result){ + // now put result in cache + return cachingStore.add(typeof result == "object" ? result : object, directives); + }); + }, + put: function(object, directives){ + // first remove from the cache, so it is empty until we get a response from the master store + cachingStore.remove((directives && directives.id) || this.getIdentity(object)); + return dojo.when(masterStore.put(object, directives), function(result){ + // now put result in cache + return cachingStore.put(typeof result == "object" ? result : object, directives); + }); + }, + remove: function(id, directives){ + return dojo.when(masterStore.remove(id, directives), function(result){ + return cachingStore.remove(id, directives); + }); + }, + evict: function(id){ + return cachingStore.remove(id); + } + }); +}; +/*===== +dojo.declare("dojo.store.Cache", null, { + // example: + // | var master = new dojo.store.Memory(data); + // | var cacher = new dojo.store.Memory(); + // | var store = new dojo.store.Cache(master, cacher); + // + query: function(query, directives){ + // summary: + // Query the underlying master store and cache any results. + // query: Object|String + // The object or string containing query information. Dependent on the query engine used. + // directives: dojo.store.util.SimpleQueryEngine.__queryOptions? + // An optional keyword arguments object with additional parameters describing the query. + // returns: dojo.store.util.QueryResults + // A QueryResults object that can be used to iterate over. + }, + get: function(id, directives){ + // summary: + // Get the object with the specific id. + // id: Number + // The identifier for the object in question. + // directives: dojo.store.__GetOptions? + // Any additional parameters needed to describe how the get should be performed. + // returns: dojo.store.util.QueryResults + // A QueryResults object. + }, + add: function(object, directives){ + // summary: + // Add the given object to the store. + // object: Object + // The object to add to the store. + // directives: dojo.store.__AddOptions? + // Any additional parameters needed to describe how the add should be performed. + // returns: Number + // The new id for the object. + }, + put: function(object, directives){ + // summary: + // Put the object into the store (similar to an HTTP PUT). + // object: Object + // The object to put to the store. + // directives: dojo.store.__PutOptions? + // Any additional parameters needed to describe how the put should be performed. + // returns: Number + // The new id for the object. + }, + remove: function(id, directives){ + // summary: + // Remove the object with the specific id. + // id: Number + // The identifier for the object in question. + // directives: dojo.store.__RemoveOptions? + // Any additional parameters needed to describe how the remove should be performed. + }, + evict: function(id){ + // summary: + // Remove the object with the given id from the underlying caching store. + // id: Number + // The identifier for the object in question. + } +}); +=====*/ + +} diff --git a/lib/dojo/store/DataStore.js b/lib/dojo/store/DataStore.js new file mode 100644 index 000000000..99c81fd5d --- /dev/null +++ b/lib/dojo/store/DataStore.js @@ -0,0 +1,142 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.DataStore"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.DataStore"] = true; +dojo.provide("dojo.store.DataStore"); +dojo.require("dojo.store.util.QueryResults"); + + +dojo.declare("dojo.store.DataStore", null, { + target: "", + constructor: function(options){ + // summary: + // This is an adapter for using Dojo Data stores with an object store consumer. + // You can provide a Dojo data store and use this adapter to interact with it through + // the Dojo object store API + // options: Object? + // This provides any configuration information that will be mixed into the store, + // including a reference to the Dojo data store under the property "store". + dojo.mixin(this, options); + }, + _objectConverter: function(callback){ + var store = this.store; + return function(item){ + var object = {}; + var attributes = store.getAttributes(item); + for(var i = 0; i < attributes.length; i++){ + object[attributes[i]] = store.getValue(item, attributes[i]); + } + return callback(object); + }; + }, + get: function(id, options){ + // summary: + // Retrieves an object by it's identity. This will trigger a fetchItemByIdentity + // id: Object? + // The identity to use to lookup the object + var returnedObject, returnedError; + var deferred = new dojo.Deferred(); + this.store.fetchItemByIdentity({ + identity: id, + onItem: this._objectConverter(function(object){ + deferred.resolve(returnedObject = object); + }), + onError: function(error){ + deferred.reject(returnedError = error); + } + }); + if(returnedObject){ + // if it was returned synchronously + return returnedObject; + } + if(returnedError){ + throw returnedError; + } + return deferred.promise; + }, + put: function(object, options){ + // summary: + // Stores an object by its identity. + // object: Object + // The object to store. + // options: Object? + // Additional metadata for storing the data. Includes a reference to an id + // that the object may be stored with (i.e. { id: "foo" }). + var id = options && typeof options.id != "undefined" || this.getIdentity(object); + var store = this.store; + if(typeof id == "undefined"){ + store.newItem(object); + }else{ + store.fetchItemByIdentity({ + identity: id, + onItem: function(item){ + if(item){ + for(var i in object){ + if(store.getValue(item, i) != object[i]){ + store.setValue(item, i, object[i]); + } + } + }else{ + store.newItem(object); + } + } + }); + } + }, + remove: function(id){ + // summary: + // Deletes an object by its identity. + // id: Object + // The identity to use to delete the object + var store = this.store; + this.store.fetchItemByIdentity({ + identity: id, + onItem: function(item){ + store.deleteItem(item); + } + }); + }, + query: function(query, options){ + // summary: + // Queries the store for objects. + // query: Object + // The query to use for retrieving objects from the store + // options: Object? + // Optional options object as used by the underlying dojo.data Store. + // returns: dojo.store.util.QueryResults + // A query results object that can be used to iterate over results. + var returnedObject, returnedError; + var deferred = new dojo.Deferred(); + deferred.total = new dojo.Deferred(); + var converter = this._objectConverter(function(object){return object;}); + this.store.fetch(dojo.mixin({ + query: query, + onBegin: function(count){ + deferred.total.resolve(count); + }, + onComplete: function(results){ + deferred.resolve(dojo.map(results, converter)); + }, + onError: function(error){ + deferred.reject(error); + } + }, options)); + return dojo.store.util.QueryResults(deferred); + }, + getIdentity: function(object){ + // summary: + // Fetch the identity for the given object. + // object: Object + // The data object to get the identity from. + // returns: Number + // The id of the given object. + return object[this.idProperty || this.store.getIdentityAttributes()[0]]; + } +}); + +} diff --git a/lib/dojo/store/JsonRest.js b/lib/dojo/store/JsonRest.js new file mode 100644 index 000000000..5f9254c3e --- /dev/null +++ b/lib/dojo/store/JsonRest.js @@ -0,0 +1,146 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.JsonRest"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.JsonRest"] = true; +dojo.provide("dojo.store.JsonRest"); +dojo.require("dojo.store.util.QueryResults"); + + +dojo.declare("dojo.store.JsonRest", null, { + constructor: function(/*dojo.store.JsonRest*/ options){ + // summary: + // This is a basic store for RESTful communicating with a server through JSON + // formatted data. + // options: + // This provides any configuration information that will be mixed into the store + dojo.mixin(this, options); + }, + // target: String + // The target base URL to use for all requests to the server. This string will be + // prepended to the id to generate the URL (relative or absolute) for requests + // sent to the server + target: "", + // idProperty: String + // Indicates the property to use as the identity property. The values of this + // property should be unique. + idProperty: "id", + + get: function(id, options){ + // summary: + // Retrieves an object by its identity. This will trigger a GET request to the server using + // the url `this.target + id`. + // id: Number + // The identity to use to lookup the object + // returns: Object + // The object in the store that matches the given id. + var headers = options || {}; + headers.Accept = "application/javascript, application/json"; + return dojo.xhrGet({ + url:this.target + id, + handleAs: "json", + headers: headers + }); + }, + getIdentity: function(object){ + // summary: + // Returns an object's identity + // object: Object + // The object to get the identity from + // returns: Number + return object[this.idProperty]; + }, + put: function(object, options){ + // summary: + // Stores an object. This will trigger a PUT request to the server + // if the object has an id, otherwise it will trigger a POST request. + // object: Object + // The object to store. + // options: dojo.store.api.Store.PutDirectives? + // Additional metadata for storing the data. Includes an "id" + // property if a specific id is to be used. + // returns: Number + options = options || {}; + var id = ("id" in options) ? options.id : this.getIdentity(object); + var hasId = typeof id != "undefined"; + return dojo.xhr(hasId && !options.incremental ? "PUT" : "POST", { + url: hasId ? this.target + id : this.target, + postData: dojo.toJson(object), + handleAs: "json", + headers:{ + "Content-Type": "application/json", + "If-Match": options.overwrite === true ? "*" : null, + "If-None-Match": options.overwrite === false ? "*" : null + } + }); + }, + add: function(object, options){ + // summary: + // Adds an object. This will trigger a PUT request to the server + // if the object has an id, otherwise it will trigger a POST request. + // object: Object + // The object to store. + // options: dojo.store.api.Store.PutDirectives? + // Additional metadata for storing the data. Includes an "id" + // property if a specific id is to be used. + options = options || {}; + options.overwrite = false; + return this.put(object, options); + }, + remove: function(id){ + // summary: + // Deletes an object by its identity. This will trigger a DELETE request to the server. + // id: Number + // The identity to use to delete the object + return dojo.xhrDelete({ + url:this.target + id + }); + }, + query: function(query, options){ + // summary: + // Queries the store for objects. This will trigger a GET request to the server, with the + // query added as a query string. + // query: Object + // The query to use for retrieving objects from the store. + // options: dojo.store.api.Store.QueryOptions? + // The optional arguments to apply to the resultset. + // returns: dojo.store.api.Store.QueryResults + // The results of the query, extended with iterative methods. + var headers = {Accept: "application/javascript, application/json"}; + options = options || {}; + + if(options.start >= 0 || options.count >= 0){ + headers.Range = "items=" + (options.start || '0') + '-' + + (("count" in options && options.count != Infinity) ? + (options.count + (options.start || 0) - 1) : ''); + } + if(dojo.isObject(query)){ + query = dojo.objectToQuery(query); + query = query ? "?" + query: ""; + } + if(options && options.sort){ + query += (query ? "&" : "?") + "sort("; + for(var i = 0; i<options.sort.length; i++){ + var sort = options.sort[i]; + query += (i > 0 ? "," : "") + (sort.descending ? '-' : '+') + encodeURIComponent(sort.attribute); + } + query += ")"; + } + var results = dojo.xhrGet({ + url: this.target + (query || ""), + handleAs: "json", + headers: headers + }); + results.total = results.then(function(){ + var range = results.ioArgs.xhr.getResponseHeader("Content-Range"); + return range && (range=range.match(/\/(.*)/)) && +range[1]; + }); + return dojo.store.util.QueryResults(results); + } +}); + +} diff --git a/lib/dojo/store/Memory.js b/lib/dojo/store/Memory.js new file mode 100644 index 000000000..b9001cdaf --- /dev/null +++ b/lib/dojo/store/Memory.js @@ -0,0 +1,164 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.Memory"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.Memory"] = true; +dojo.provide("dojo.store.Memory"); +dojo.require("dojo.store.util.QueryResults"); +dojo.require("dojo.store.util.SimpleQueryEngine"); + + +dojo.declare("dojo.store.Memory", null, { + // summary: + // This is a basic in-memory object store. It implements dojo.store.api.Store. + constructor: function(/*dojo.store.Memory*/ options){ + // summary: + // Creates a memory object store. + // options: + // This provides any configuration information that will be mixed into the store. + // This should generally include the data property to provide the starting set of data. + this.index = {}; + dojo.mixin(this, options); + this.setData(this.data || []); + }, + // data: Array + // The array of all the objects in the memory store + data:null, + + // idProperty: String + // Indicates the property to use as the identity property. The values of this + // property should be unique. + idProperty: "id", + + // index: Object + // An index of data by id + index:null, + + // queryEngine: Function + // Defines the query engine to use for querying the data store + queryEngine: dojo.store.util.SimpleQueryEngine, + get: function(id){ + // summary: + // Retrieves an object by its identity + // id: Number + // The identity to use to lookup the object + // returns: Object + // The object in the store that matches the given id. + return this.index[id]; + }, + getIdentity: function(object){ + // summary: + // Returns an object's identity + // object: Object + // The object to get the identity from + // returns: Number + return object[this.idProperty]; + }, + put: function(object, options){ + // summary: + // Stores an object + // object: Object + // The object to store. + // options: dojo.store.api.Store.PutDirectives?? + // Additional metadata for storing the data. Includes an "id" + // property if a specific id is to be used. + // returns: Number + var id = options && options.id || object[this.idProperty] || Math.random(); + this.index[id] = object; + var data = this.data, + idProperty = this.idProperty; + for(var i = 0, l = data.length; i < l; i++){ + if(data[i][idProperty] == id){ + data[i] = object; + return id; + } + } + this.data.push(object); + return id; + }, + add: function(object, options){ + // summary: + // Creates an object, throws an error if the object already exists + // object: Object + // The object to store. + // options: dojo.store.api.Store.PutDirectives?? + // Additional metadata for storing the data. Includes an "id" + // property if a specific id is to be used. + // returns: Number + if(this.index[options && options.id || object[this.idProperty]]){ + throw new Error("Object already exists"); + } + return this.put(object, options); + }, + remove: function(id){ + // summary: + // Deletes an object by its identity + // id: Number + // The identity to use to delete the object + delete this.index[id]; + var data = this.data, + idProperty = this.idProperty; + for(var i = 0, l = data.length; i < l; i++){ + if(data[i][idProperty] == id){ + data.splice(i, 1); + return; + } + } + }, + query: function(query, options){ + // summary: + // Queries the store for objects. + // query: Object + // The query to use for retrieving objects from the store. + // options: dojo.store.api.Store.QueryOptions? + // The optional arguments to apply to the resultset. + // returns: dojo.store.api.Store.QueryResults + // The results of the query, extended with iterative methods. + // + // example: + // Given the following store: + // + // | var store = new dojo.store.Memory({ + // | data: [ + // | {id: 1, name: "one", prime: false }, + // | {id: 2, name: "two", even: true, prime: true}, + // | {id: 3, name: "three", prime: true}, + // | {id: 4, name: "four", even: true, prime: false}, + // | {id: 5, name: "five", prime: true} + // | ] + // | }); + // + // ...find all items where "prime" is true: + // + // | var results = store.query({ prime: true }); + // + // ...or find all items where "even" is true: + // + // | var results = store.query({ even: true }); + return dojo.store.util.QueryResults(this.queryEngine(query, options)(this.data)); + }, + setData: function(data){ + // summary: + // Sets the given data as the source for this store, and indexes it + // data: Object[] + // An array of objects to use as the source of data. + if(data.items){ + // just for convenience with the data format IFRS expects + this.idProperty = data.identifier; + data = this.data = data.items; + }else{ + this.data = data; + } + + for(var i = 0, l = data.length; i < l; i++){ + var object = data[i]; + this.index[object[this.idProperty]] = object; + } + } +}); + +} diff --git a/lib/dojo/store/Observable.js b/lib/dojo/store/Observable.js new file mode 100644 index 000000000..f231e0321 --- /dev/null +++ b/lib/dojo/store/Observable.js @@ -0,0 +1,173 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.Observable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.Observable"] = true; +dojo.provide("dojo.store.Observable"); + +dojo.getObject("store", true, dojo); + +dojo.store.Observable = function(store){ + // summary: + // The Observable store wrapper takes a store and sets an observe method on query() + // results that can be used to monitor results for changes. + // + // description: + // Observable wraps an existing store so that notifications can be made when a query + // is performed. + // + // example: + // Create a Memory store that returns an observable query, and then log some + // information about that query. + // + // | var store = dojo.store.Observable(new dojo.store.Memory({ + // | data: [ + // | {id: 1, name: "one", prime: false}, + // | {id: 2, name: "two", even: true, prime: true}, + // | {id: 3, name: "three", prime: true}, + // | {id: 4, name: "four", even: true, prime: false}, + // | {id: 5, name: "five", prime: true} + // | ] + // | })); + // | var changes = [], results = store.query({ prime: true }); + // | var observer = results.observe(function(object, previousIndex, newIndex){ + // | changes.push({previousIndex:previousIndex, newIndex:newIndex, object:object}); + // | }); + // + // See the Observable tests for more information. + + var queryUpdaters = [], revision = 0; + // a Comet driven store could directly call notify to notify observers when data has + // changed on the backend + store.notify = function(object, existingId){ + revision++; + var updaters = queryUpdaters.slice(); + for(var i = 0, l = updaters.length; i < l; i++){ + updaters[i](object, existingId); + } + }; + var originalQuery = store.query; + store.query = function(query, options){ + options = options || {}; + var results = originalQuery.apply(this, arguments); + if(results && results.forEach){ + var nonPagedOptions = dojo.mixin({}, options); + delete nonPagedOptions.start; + delete nonPagedOptions.count; + + var queryExecutor = store.queryEngine && store.queryEngine(query, nonPagedOptions); + var queryRevision = revision; + var listeners = [], queryUpdater; + results.observe = function(listener, includeObjectUpdates){ + if(listeners.push(listener) == 1){ + // first listener was added, create the query checker and updater + queryUpdaters.push(queryUpdater = function(changed, existingId){ + dojo.when(results, function(resultsArray){ + var atEnd = resultsArray.length != options.count; + var i; + if(++queryRevision != revision){ + throw new Error("Query is out of date, you must observe() the query prior to any data modifications"); + } + var removedObject, removedFrom = -1, insertedInto = -1; + if(existingId){ + // remove the old one + for(i = 0, l = resultsArray.length; i < l; i++){ + var object = resultsArray[i]; + if(store.getIdentity(object) == existingId){ + removedObject = object; + removedFrom = i; + if(queryExecutor || !changed){// if it was changed and we don't have a queryExecutor, we shouldn't remove it because updated objects would be eliminated + resultsArray.splice(i, 1); + } + break; + } + } + } + if(queryExecutor){ + // add the new one + if(changed && + // if a matches function exists, use that (probably more efficient) + (queryExecutor.matches ? queryExecutor.matches(changed) : queryExecutor([changed]).length)){ + + if(removedFrom > -1){ + // put back in the original slot so it doesn't move unless it needs to (relying on a stable sort below) + resultsArray.splice(removedFrom, 0, changed); + }else{ + resultsArray.push(changed); + } + insertedInto = dojo.indexOf(queryExecutor(resultsArray), changed); + if((options.start && insertedInto == 0) || + (!atEnd && insertedInto == resultsArray.length -1)){ + // if it is at the end of the page, assume it goes into the prev or next page + insertedInto = -1; + } + } + }else if(changed){ + // we don't have a queryEngine, so we can't provide any information + // about where it was inserted, but we can at least indicate a new object + insertedInto = removedFrom >= 0 ? removedFrom : (store.defaultIndex || 0); + } + if((removedFrom > -1 || insertedInto > -1) && + (includeObjectUpdates || !queryExecutor || (removedFrom != insertedInto))){ + var copyListeners = listeners.slice(); + for(i = 0;listener = copyListeners[i]; i++){ + listener(changed || removedObject, removedFrom, insertedInto); + } + } + }); + }); + } + return { + cancel: function(){ + // remove this listener + listeners.splice(dojo.indexOf(listeners, listener), 1); + if(!listeners.length){ + // no more listeners, remove the query updater too + queryUpdaters.splice(dojo.indexOf(queryUpdaters, queryUpdater), 1); + } + } + }; + }; + } + return results; + }; + var inMethod; + function whenFinished(method, action){ + var original = store[method]; + if(original){ + store[method] = function(value){ + if(inMethod){ + // if one method calls another (like add() calling put()) we don't want two events + return original.apply(this, arguments); + } + inMethod = true; + try{ + return dojo.when(original.apply(this, arguments), function(results){ + action((typeof results == "object" && results) || value); + return results; + }); + }finally{ + inMethod = false; + } + }; + } + } + // monitor for updates by listening to these methods + whenFinished("put", function(object){ + store.notify(object, store.getIdentity(object)); + }); + whenFinished("add", function(object){ + store.notify(object); + }); + whenFinished("remove", function(id){ + store.notify(undefined, id); + }); + + return store; +}; + +} diff --git a/lib/dojo/store/README b/lib/dojo/store/README new file mode 100644 index 000000000..cb33da077 --- /dev/null +++ b/lib/dojo/store/README @@ -0,0 +1,10 @@ +This folder contains the stores and utilities implementing the proposed new Dojo Object Store API, +a successor and unifier to Dojo Data, Dojo Storage, and potentially Dojo Model. These +stores are brand new, and designed to provide simple lightweight implementations +providing core functionality for typical applications. These modules are under active +development, and exist here at this time to provide maximum visibility to the +efforts to design and develop this new API and set of base stores. The goal is +to have these stores ready for Dojo 1.6. In the meantime, these stores are likely to +have API changes, may be missing some functionality, tests, and/or documentation. +If these modules are not deemed suitably stable by the 1.6 release, this directory (or +individual modules) will be removed and be given a later release target. \ No newline at end of file diff --git a/lib/dojo/store/api/Store.js b/lib/dojo/store/api/Store.js new file mode 100644 index 000000000..ca26226d3 --- /dev/null +++ b/lib/dojo/store/api/Store.js @@ -0,0 +1,304 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +define([], function() { + // module: + // dojo/store/api/Store + // summary: + // The module defines the Dojo object store interface. + +dojo.declare("dojo.store.api.Store", null, { + // summary: + // This is an abstract API that data provider implementations conform to. + // This file defines methods signatures and intentionally leaves all the + // methods unimplemented. For more information on the dojo.store APIs, + // please visit: http://dojotoolkit.org/reference-guide/dojo/store.html + // Every method and property is optional, and is only needed if the functionality + // it provides is required. + // Every method may return a promise for the specified return value if the + // execution of the operation is asynchronous (except + // for query() which already defines an async return value). + + // idProperty: String + // If the store has a single primary key, this tndicates the property to use as the + // identity property. The values of this property should be unique. + idProperty: "id", + + // queryEngine: Function + // If the store can be queried locally (on the client side in JS), this defines + // the query engine to use for querying the data store. + // This takes a query and query options and returns a function that can execute + // the provided query on a JavaScript array. The queryEngine may be replace to + // provide more sophisticated querying capabilities. For example: + // | var query = store.queryEngine({foo:"bar"}, {count:10}); + // | query(someArray) -> filtered array + // The returned query function may have a "matches" property that can be + // used to determine if an object matches the query. For example: + // | query.matches({id:"some-object", foo:"bar"}) -> true + // | query.matches({id:"some-object", foo:"something else"}) -> false + queryEngine: null, + + get: function(id){ + // summary: + // Retrieves an object by its identity + // id: Number + // The identity to use to lookup the object + // returns: Object + // The object in the store that matches the given id. + }, + getIdentity: function(object){ + // summary: + // Returns an object's identity + // object: Object + // The object to get the identity from + // returns: String|Number + }, + put: function(object, directives){ + // summary: + // Stores an object + // object: Object + // The object to store. + // directives: dojo.store.api.Store.PutDirectives? + // Additional directives for storing objects. + // returns: Number|String + }, + add: function(object, directives){ + // summary: + // Creates an object, throws an error if the object already exists + // object: Object + // The object to store. + // directives: dojo.store.api.Store.PutDirectives? + // Additional directives for creating objects. + // returns: Number|String + }, + remove: function(id){ + // summary: + // Deletes an object by its identity + // id: Number + // The identity to use to delete the object + delete this.index[id]; + var data = this.data, + idProperty = this.idProperty; + for(var i = 0, l = data.length; i < l; i++){ + if(data[i][idProperty] == id){ + data.splice(i, 1); + return; + } + } + }, + query: function(query, options){ + // summary: + // Queries the store for objects. This does not alter the store, but returns a + // set of data from the store. + // query: String|Object|Function + // The query to use for retrieving objects from the store. + // options: dojo.store.api.Store.QueryOptions + // The optional arguments to apply to the resultset. + // returns: dojo.store.api.Store.QueryResults + // The results of the query, extended with iterative methods. + // + // example: + // Given the following store: + // + // ...find all items where "prime" is true: + // + // | store.query({ prime: true }).forEach(function(object){ + // | // handle each object + // | }); + }, + transaction: function(){ + // summary: + // Starts a new transaction. + // Note that a store user might not call transaction() prior to using put, + // delete, etc. in which case these operations effectively could be thought of + // as "auto-commit" style actions. + // returns: dojo.store.api.Store.Transaction + // This represents the new current transaction. + }, + getChildren: function(parent, options){ + // summary: + // Retrieves the children of an object. + // parent: Object + // The object to find the children of. + // options: dojo.store.api.Store.QueryOptions? + // Additional options to apply to the retrieval of the children. + // returns: dojo.store.api.Store.QueryResults + // A result set of the children of the parent object. + }, + getMetadata: function(object){ + // summary: + // Returns any metadata about the object. This may include attribution, + // cache directives, history, or version information. + // object: Object + // The object to return metadata for. + // returns: Object + // An object containing metadata. + } +}); + +dojo.store.api.Store.PutDirectives = function(id, before, parent, overwrite){ + // summary: + // Directives passed to put() and add() handlers for guiding the update and + // creation of stored objects. + // id: String|Number? + // Indicates the identity of the object if a new object is created + // before: Object? + // If the collection of objects in the store has a natural ordering, + // this indicates that the created or updated object should be placed before the + // object specified by the value of this property. A value of null indicates that the + // object should be last. + // parent: Object?, + // If the store is hierarchical (with single parenting) this property indicates the + // new parent of the created or updated object. + // overwrite: Boolean? + // If this is provided as a boolean it indicates that the object should or should not + // overwrite an existing object. A value of true indicates that a new object + // should not be created, the operation should update an existing object. A + // value of false indicates that an existing object should not be updated, a new + // object should be created (which is the same as an add() operation). When + // this property is not provided, either an update or creation is acceptable. + this.id = id; + this.before = before; + this.parent = parent; + this.overwrite = overwrite; +}; + +dojo.store.api.Store.SortInformation = function(attribute, descending){ + // summary: + // An object describing what attribute to sort on, and the direction of the sort. + // attribute: String + // The name of the attribute to sort on. + // descending: Boolean + // The direction of the sort. Default is false. + this.attribute = attribute; + this.descending = descending; +}; + +dojo.store.api.Store.QueryOptions = function(sort, start, count){ + // summary: + // Optional object with additional parameters for query results. + // sort: dojo.store.api.Store.SortInformation[]? + // A list of attributes to sort on, as well as direction + // For example: + // | [{attribute:"price, descending: true}]. + // If the sort parameter is omitted, then the natural order of the store may be + // applied if there is a natural order. + // start: Number? + // The first result to begin iteration on + // count: Number? + // The number of how many results should be returned. + this.sort = sort; + this.start = start; + this.count = count; +}; + +dojo.declare("dojo.store.api.Store.QueryResults", null, { + // summary: + // This is an object returned from query() calls that provides access to the results + // of a query. Queries may be executed asynchronously. + + forEach: function(callback, thisObject){ + // summary: + // Iterates over the query results, based on + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach. + // Note that this may executed asynchronously. The callback may be called + // after this function returns. + // callback: + // Function that is called for each object in the query results + // thisObject: + // The object to use as |this| in the callback. + + }, + filter: function(callback, thisObject){ + // summary: + // Filters the query results, based on + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter. + // Note that this may executed asynchronously. The callback may be called + // after this function returns. + // callback: + // Function that is called for each object in the query results + // thisObject: + // The object to use as |this| in the callback. + // returns: dojo.store.api.Store.QueryResults + }, + map: function(callback, thisObject){ + // summary: + // Maps the query results, based on + // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map. + // Note that this may executed asynchronously. The callback may be called + // after this function returns. + // callback: + // Function that is called for each object in the query results + // thisObject: + // The object to use as |this| in the callback. + // returns: dojo.store.api.Store.QueryResults + }, + then: function(callback, errorHandler){ + // summary: + // This registers a callback for when the query is complete, if the query is asynchronous. + // This is an optional method, and may not be present for synchronous queries. + // callback: + // This is called when the query is completed successfully, and is passed a single argument + // that is an array representing the query results. + // errorHandler: + // This is called if the query failed, and is passed a single argument that is the error + // for the failure. + }, + observe: function(listener, includeAllUpdates){ + // summary: + // This registers a callback for notification of when data is modified in the query results. + // This is an optional method, and is usually provided by dojo.store.Observable. + // listener: Function + // The listener function is called when objects in the query results are modified + // to affect the query result. The listener function is called with the following + // arguments: + // | listener(object, removedFrom, insertedInto); + // * The object parameter indicates the object that was create, modified, or deleted. + // * The removedFrom parameter indicates the index in the result array where + // the object used to be. If the value is -1, then the object is an addition to + // this result set (due to a new object being created, or changed such that it + // is a part of the result set). + // * The insertedInto parameter indicates the index in the result array where + // the object should be now. If the value is -1, then the object is a removal + // from this result set (due to an object being deleted, or changed such that it + // is not a part of the result set). + // includeAllUpdates: + // This indicates whether or not to include object updates that do not affect + // the inclusion or order of the object in the query results. By default this is false, + // which means that if any object is updated in such a way that it remains + // in the result set and it's position in result sets is not affected, then the listener + // will not be fired. + + }, + // total: Number|Promise? + // This property should be included in if the query options included the "count" + // property limiting the result set. This property indicates the total number of objects + // matching the query (as if "start" and "count" weren't present). This may be + // a promise if the query is asynchronous. + total: 0 +}); + +dojo.declare("dojo.store.api.Store.Transaction", null, { + // summary: + // This is an object returned from transaction() calls that represents the current + // transaction. + + commit: function(){ + // summary: + // Commits the transaction. This may throw an error if it fails. Of if the operation + // is asynchronous, it may return a promise that represents the eventual success + // or failure of the commit. + }, + abort: function(callback, thisObject){ + // summary: + // Aborts the transaction. This may throw an error if it fails. Of if the operation + // is asynchronous, it may return a promise that represents the eventual success + // or failure of the abort. + } +}); + +}); diff --git a/lib/dojo/store/util/QueryResults.js b/lib/dojo/store/util/QueryResults.js new file mode 100644 index 000000000..a237d1dce --- /dev/null +++ b/lib/dojo/store/util/QueryResults.js @@ -0,0 +1,67 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.util.QueryResults"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.util.QueryResults"] = true; +dojo.provide("dojo.store.util.QueryResults"); + +dojo.getObject("store.util", true, dojo); + +dojo.store.util.QueryResults = function(results){ + // summary: + // A function that wraps the results of a store query with additional + // methods. + // + // description: + // QueryResults is a basic wrapper that allows for array-like iteration + // over any kind of returned data from a query. While the simplest store + // will return a plain array of data, other stores may return deferreds or + // promises; this wrapper makes sure that *all* results can be treated + // the same. + // + // Additional methods include `forEach`, `filter` and `map`. + // + // returns: Object + // An array-like object that can be used for iterating over. + // + // example: + // Query a store and iterate over the results. + // + // | store.query({ prime: true }).forEach(function(item){ + // | // do something + // | }); + + if(!results){ + return results; + } + // if it is a promise it may be frozen + if(results.then){ + results = dojo.delegate(results); + } + function addIterativeMethod(method){ + if(!results[method]){ + results[method] = function(){ + var args = arguments; + return dojo.when(results, function(results){ + Array.prototype.unshift.call(args, results); + return dojo.store.util.QueryResults(dojo[method].apply(dojo, args)); + }); + }; + } + } + addIterativeMethod("forEach"); + addIterativeMethod("filter"); + addIterativeMethod("map"); + if(!results.total){ + results.total = dojo.when(results, function(results){ + return results.length; + }); + } + return results; +}; + +} diff --git a/lib/dojo/store/util/SimpleQueryEngine.js b/lib/dojo/store/util/SimpleQueryEngine.js new file mode 100644 index 000000000..4b29f20cb --- /dev/null +++ b/lib/dojo/store/util/SimpleQueryEngine.js @@ -0,0 +1,116 @@ +/* + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo.store.util.SimpleQueryEngine"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.store.util.SimpleQueryEngine"] = true; +dojo.provide("dojo.store.util.SimpleQueryEngine"); + +dojo.getObject("store.util", true, dojo); + +dojo.store.util.SimpleQueryEngine = function(query, options){ + // summary: + // Simple query engine that matches using filter functions, named filter + // functions or objects by name-value on a query object hash + // + // description: + // The SimpleQueryEngine provides a way of getting a QueryResults through + // the use of a simple object hash as a filter. The hash will be used to + // match properties on data objects with the corresponding value given. In + // other words, only exact matches will be returned. + // + // This function can be used as a template for more complex query engines; + // for example, an engine can be created that accepts an object hash that + // contains filtering functions, or a string that gets evaluated, etc. + // + // When creating a new dojo.store, simply set the store's queryEngine + // field as a reference to this function. + // + // query: Object + // An object hash with fields that may match fields of items in the store. + // Values in the hash will be compared by normal == operator, but regular expressions + // or any object that provides a test() method are also supported and can be + // used to match strings by more complex expressions + // (and then the regex's or object's test() method will be used to match values). + // + // options: dojo.store.util.SimpleQueryEngine.__queryOptions? + // An object that contains optional information such as sort, start, and count. + // + // returns: Function + // A function that caches the passed query under the field "matches". See any + // of the "query" methods on dojo.stores. + // + // example: + // Define a store with a reference to this engine, and set up a query method. + // + // | var myStore = function(options){ + // | // ...more properties here + // | this.queryEngine = dojo.store.util.SimpleQueryEngine; + // | // define our query method + // | this.query = function(query, options){ + // | return dojo.store.util.QueryResults(this.queryEngine(query, options)(this.data)); + // | }; + // | }; + + // create our matching query function + switch(typeof query){ + default: + throw new Error("Can not query with a " + typeof query); + case "object": case "undefined": + var queryObject = query; + query = function(object){ + for(var key in queryObject){ + var required = queryObject[key]; + if(required && required.test){ + if(!required.test(object[key])){ + return false; + } + }else if(required != object[key]){ + return false; + } + } + return true; + }; + break; + case "string": + // named query + if(!this[query]){ + throw new Error("No filter function " + query + " was found in store"); + } + query = this[query]; + // fall through + case "function": + // fall through + } + function execute(array){ + // execute the whole query, first we filter + var results = dojo.filter(array, query); + // next we sort + if(options && options.sort){ + results.sort(function(a, b){ + for(var sort, i=0; sort = options.sort[i]; i++){ + var aValue = a[sort.attribute]; + var bValue = b[sort.attribute]; + if (aValue != bValue) { + return !!sort.descending == aValue > bValue ? -1 : 1; + } + } + return 0; + }); + } + // now we paginate + if(options && (options.start || options.count)){ + var total = results.length; + results = results.slice(options.start || 0, (options.start || 0) + (options.count || Infinity)); + results.total = total; + } + return results; + } + execute.matches = query; + return execute; +}; + +} diff --git a/lib/dojo/string.js b/lib/dojo/string.js index 1eba34043..2e1cc5015 100644 --- a/lib/dojo/string.js +++ b/lib/dojo/string.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,8 +9,10 @@ if(!dojo._hasResource["dojo.string"]){ //_hasResource checks added by build. Do dojo._hasResource["dojo.string"] = true; dojo.provide("dojo.string"); +dojo.getObject("string", true, dojo); + /*===== -dojo.string = { +dojo.string = { // summary: String utilities for Dojo }; =====*/ @@ -61,22 +63,22 @@ dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boo return end ? out + pad : pad + out; // String }; -dojo.string.substitute = function( /*String*/ template, - /*Object|Array*/map, - /*Function?*/ transform, +dojo.string.substitute = function( /*String*/ template, + /*Object|Array*/map, + /*Function?*/ transform, /*Object?*/ thisObject){ // summary: // Performs parameterized substitutions on a string. Throws an // exception if any parameter is unmatched. - // template: + // template: // a string with expressions in the form `${key}` to be replaced or - // `${key:format}` which specifies a format function. keys are case-sensitive. + // `${key:format}` which specifies a format function. keys are case-sensitive. // map: // hash to search for substitutions - // transform: + // transform: // a function to process all parameters before substitution takes // place, e.g. mylib.encodeXML - // thisObject: + // thisObject: // where to look for optional format function; default to the global // namespace // example: @@ -119,7 +121,7 @@ dojo.string.substitute = function( /*String*/ template, // | ); thisObject = thisObject || dojo.global; - transform = transform ? + transform = transform ? dojo.hitch(thisObject, transform) : function(v){ return v; }; return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, diff --git a/lib/dojo/tt-rss-layer.js b/lib/dojo/tt-rss-layer.js index 295fd957a..2c0f3489d 100644 --- a/lib/dojo/tt-rss-layer.js +++ b/lib/dojo/tt-rss-layer.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -11,4 +11,4 @@ http://dojotoolkit.org */ -dojo.provide("tt-rss-layer");if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_1,_2){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 _3=dojo.date.stamp._isoRegExp.exec(_1),_4=null;if(_3){_3.shift();if(_3[1]){_3[1]--;}if(_3[6]){_3[6]*=1000;}if(_2){_2=new Date(_2);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_5){return _2["get"+_5]();}),function(_6,_7){_3[_7]=_3[_7]||_6;});}_4=new Date(_3[0]||1970,_3[1]||0,_3[2]||1,_3[3]||0,_3[4]||0,_3[5]||0,_3[6]||0);if(_3[0]<100){_4.setFullYear(_3[0]||1970);}var _8=0,_9=_3[7]&&_3[7].charAt(0);if(_9!="Z"){_8=((_3[8]||0)*60)+(Number(_3[9])||0);if(_9!="-"){_8*=-1;}}if(_9){_8-=_4.getTimezoneOffset();}if(_8){_4.setTime(_4.getTime()+_8*60000);}}return _4;};dojo.date.stamp.toISOString=function(_a,_b){var _c=function(n){return (n<10)?"0"+n:n;};_b=_b||{};var _d=[],_e=_b.zulu?"getUTC":"get",_f="";if(_b.selector!="time"){var _10=_a[_e+"FullYear"]();_f=["0000".substr((_10+"").length)+_10,_c(_a[_e+"Month"]()+1),_c(_a[_e+"Date"]())].join("-");}_d.push(_f);if(_b.selector!="date"){var _11=[_c(_a[_e+"Hours"]()),_c(_a[_e+"Minutes"]()),_c(_a[_e+"Seconds"]())].join(":");var _12=_a[_e+"Milliseconds"]();if(_b.milliseconds){_11+="."+(_12<100?"0":"")+_c(_12);}if(_b.zulu){_11+="Z";}else{if(_b.selector!="time"){var _13=_a.getTimezoneOffset();var _14=Math.abs(_13);_11+=(_13>0?"-":"+")+_c(Math.floor(_14/60))+":"+_c(_14%60);}}_d.push(_11);}return _d.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;this._attrName=d._scopeName+"Type";this._query="["+this._attrName+"]";function _15(_16){if(d.isString(_16)){return "string";}if(typeof _16=="number"){return "number";}if(typeof _16=="boolean"){return "boolean";}if(d.isFunction(_16)){return "function";}if(d.isArray(_16)){return "array";}if(_16 instanceof Date){return "date";}if(_16 instanceof d._Url){return "url";}return "object";};function _17(_18,_19){switch(_19){case "string":return _18;case "number":return _18.length?Number(_18):NaN;case "boolean":return typeof _18=="boolean"?_18:!(_18.toLowerCase()=="false");case "function":if(d.isFunction(_18)){_18=_18.toString();_18=d.trim(_18.substring(_18.indexOf("{")+1,_18.length-1));}try{if(_18===""||_18.search(/[^\w\.]+/i)!=-1){return new Function(_18);}else{return d.getObject(_18,false)||new Function(_18);}}catch(e){return new Function();}case "array":return _18?_18.split(/\s*,\s*/):[];case "date":switch(_18){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_18);}case "url":return d.baseUrl+_18;default:return d.fromJson(_18);}};var _1a={};dojo.connect(dojo,"extend",function(){_1a={};});function _1b(_1c){if(!_1a[_1c]){var cls=d.getObject(_1c);if(!cls){return null;}var _1d=cls.prototype;var _1e={},_1f={};for(var _20 in _1d){if(_20.charAt(0)=="_"){continue;}if(_20 in _1f){continue;}var _21=_1d[_20];_1e[_20]=_15(_21);}_1a[_1c]={cls:cls,params:_1e};}return _1a[_1c];};this._functionFromScript=function(_22){var _23="";var _24="";var _25=_22.getAttribute("args");if(_25){d.forEach(_25.split(/\s*,\s*/),function(_26,idx){_23+="var "+_26+" = arguments["+idx+"]; ";});}var _27=_22.getAttribute("with");if(_27&&_27.length){d.forEach(_27.split(/\s*,\s*/),function(_28){_23+="with("+_28+"){";_24+="}";});}return new Function(_23+_22.innerHTML+_24);};this.instantiate=function(_29,_2a,_2b){var _2c=[],dp=dojo.parser;_2a=_2a||{};_2b=_2b||{};d.forEach(_29,function(obj){if(!obj){return;}var _2d,_2e,_2f,_30,_31;if(obj.node){_2d=obj.node;_2e=obj.type;_2f=obj.clsInfo||(_2e&&_1b(_2e));_30=_2f&&_2f.cls;_31=obj.scripts;}else{_2d=obj;_2e=dp._attrName in _2a?_2a[dp._attrName]:_2d.getAttribute(dp._attrName);_2f=_2e&&_1b(_2e);_30=_2f&&_2f.cls;_31=(_30&&(_30._noScript||_30.prototype._noScript)?[]:d.query("> script[type^='dojo/']",_2d));}if(!_2f){throw new Error("Could not load class '"+_2e);}var _32={},_33=_2d.attributes;if(_2b.defaults){dojo.mixin(_32,_2b.defaults);}if(obj.inherited){dojo.mixin(_32,obj.inherited);}for(var _34 in _2f.params){var _35=_34 in _2a?{value:_2a[_34],specified:true}:_33.getNamedItem(_34);if(!_35||(!_35.specified&&(!dojo.isIE||_34.toLowerCase()!="value"))){continue;}var _36=_35.value;switch(_34){case "class":_36="className" in _2a?_2a.className:_2d.className;break;case "style":_36="style" in _2a?_2a.style:(_2d.style&&_2d.style.cssText);}var _37=_2f.params[_34];if(typeof _36=="string"){_32[_34]=_17(_36,_37);}else{_32[_34]=_36;}}var _38=[],_39=[];d.forEach(_31,function(_3a){_2d.removeChild(_3a);var _3b=_3a.getAttribute("event"),_2e=_3a.getAttribute("type"),nf=d.parser._functionFromScript(_3a);if(_3b){if(_2e=="dojo/connect"){_38.push({event:_3b,func:nf});}else{_32[_3b]=nf;}}else{_39.push(nf);}});var _3c=_30.markupFactory||_30.prototype&&_30.prototype.markupFactory;var _3d=_3c?_3c(_32,_2d,_30):new _30(_32,_2d);_2c.push(_3d);var _3e=_2d.getAttribute("jsId");if(_3e){d.setObject(_3e,_3d);}d.forEach(_38,function(_3f){d.connect(_3d,_3f.event,null,_3f.func);});d.forEach(_39,function(_40){_40.call(_3d);});});if(!_2a._started){d.forEach(_2c,function(_41){if(!_2b.noStart&&_41&&_41.startup&&!_41._started&&(!_41.getParent||!_41.getParent())){_41.startup();}});}return _2c;};this.parse=function(_42,_43){var _44;if(!_43&&_42&&_42.rootNode){_43=_42;_44=_43.rootNode;}else{_44=_42;}var _45=this._attrName;function _46(_47,_48){var _49=dojo.clone(_47.inherited);dojo.forEach(["dir","lang"],function(_4a){var val=_47.node.getAttribute(_4a);if(val){_49[_4a]=val;}});var _4b=_47.scripts;var _4c=!_47.clsInfo||!_47.clsInfo.cls.prototype.stopParser;for(var _4d=_47.node.firstChild;_4d;_4d=_4d.nextSibling){if(_4d.nodeType==1){var _4e=_4c&&_4d.getAttribute(_45);if(_4e){var _4f={"type":_4e,clsInfo:_1b(_4e),node:_4d,scripts:[],inherited:_49};_48.push(_4f);_46(_4f,_48);}else{if(_4b&&_4d.nodeName.toLowerCase()=="script"){_4e=_4d.getAttribute("type");if(_4e&&/^dojo\//i.test(_4e)){_4b.push(_4d);}}else{if(_4c){_46({node:_4d,inherited:_49},_48);}}}}}};var _50=[];_46({node:_44?dojo.byId(_44):dojo.body(),inherited:(_43&&_43.inherited)||{dir:dojo._isBodyLtr()?"ltr":"rtl"}},_50);return this.instantiate(_50,null,_43);};}();(function(){var _51=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_51);}else{dojo._loaders.unshift(_51);}})();}if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.window.getBox=function(){var _52=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _53=dojo._docScroll();return {w:_52.clientWidth,h:_52.clientHeight,l:_53.x,t:_53.y};};dojo.window.get=function(doc){if(dojo.isIE&&window!==document.parentWindow){doc.parentWindow.execScript("document._parentWindow = window;","Javascript");var win=doc._parentWindow;doc._parentWindow=null;return win;}return doc.parentWindow||doc.defaultView;};dojo.window.scrollIntoView=function(_54,pos){try{_54=dojo.byId(_54);var doc=_54.ownerDocument||dojo.doc,_55=doc.body||dojo.body(),_56=doc.documentElement||_55.parentNode,_57=dojo.isIE,_58=dojo.isWebKit;if((!(dojo.isMoz||_57||_58||dojo.isOpera)||_54==_55||_54==_56)&&(typeof _54.scrollIntoView!="undefined")){_54.scrollIntoView(false);return;}var _59=doc.compatMode=="BackCompat",_5a=_59?_55:_56,_5b=_58?_55:_5a,_5c=_5a.clientWidth,_5d=_5a.clientHeight,rtl=!dojo._isBodyLtr(),_5e=pos||dojo.position(_54),el=_54.parentNode,_5f=function(el){return ((_57<=6||(_57&&_59))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_5f(_54)){return;}while(el){if(el==_55){el=_5b;}var _60=dojo.position(el),_61=_5f(el);if(el==_5b){_60.w=_5c;_60.h=_5d;if(_5b==_56&&_57&&rtl){_60.x+=_5b.offsetWidth-_60.w;}if(_60.x<0||!_57){_60.x=0;}if(_60.y<0||!_57){_60.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_60.w-=pb.w;_60.h-=pb.h;_60.x+=pb.l;_60.y+=pb.t;}if(el!=_5b){var _62=el.clientWidth,_63=_60.w-_62;if(_62>0&&_63>0){_60.w=_62;if(_57&&rtl){_60.x+=_63;}}_62=el.clientHeight;_63=_60.h-_62;if(_62>0&&_63>0){_60.h=_62;}}if(_61){if(_60.y<0){_60.h+=_60.y;_60.y=0;}if(_60.x<0){_60.w+=_60.x;_60.x=0;}if(_60.y+_60.h>_5d){_60.h=_5d-_60.y;}if(_60.x+_60.w>_5c){_60.w=_5c-_60.x;}}var l=_5e.x-_60.x,t=_5e.y-Math.max(_60.y,0),r=l+_5e.w-_60.w,bot=t+_5e.h-_60.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);_5e.x+=el.scrollLeft;el.scrollLeft+=(_57>=8&&!_59&&rtl)?-s:s;_5e.x-=el.scrollLeft;}if(bot*t>0){_5e.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_5e.y-=el.scrollTop;}el=(el!=_5b)&&!_61&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_54.scrollIntoView(false);}};}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={};this.length=0;},add:function(_64){if(this._hash[_64.id]){throw new Error("Tried to register widget with id=="+_64.id+" but that id is already registered");}this._hash[_64.id]=_64;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_65,_66){_66=_66||dojo.global;var i=0,id;for(id in this._hash){_65.call(_66,this._hash[id],i++,this._hash);}return this;},filter:function(_67,_68){_68=_68||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_67.call(_68,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_69;for(id in this._hash){_69=this._hash[id];if(_69.declaredClass==cls){res.add(_69);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_6a,_6b){return dojo.map(this.toArray(),_6a,_6b);},every:function(_6c,_6d){_6d=_6d||dojo.global;var x=0,i;for(i in this._hash){if(!_6c.call(_6d,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_6e,_6f){_6f=_6f||dojo.global;var x=0,i;for(i in this._hash){if(_6e.call(_6f,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _70=dijit.registry._hash,_71=dojo.attr,_72=dojo.hasAttr,_73=dojo.style;dijit.byId=function(id){return typeof id=="string"?_70[id]:id;};var _74={};dijit.getUniqueId=function(_75){var id;do{id=_75+"_"+(_75 in _74?++_74[_75]:_74[_75]=0);}while(_70[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_76){var _77=[];function _78(_79){for(var _7a=_79.firstChild;_7a;_7a=_7a.nextSibling){if(_7a.nodeType==1){var _7b=_7a.getAttribute("widgetId");if(_7b){_77.push(_70[_7b]);}else{_78(_7a);}}}};_78(_76);return _77;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_7c){if(!_7c._destroyed){if(_7c.destroyRecursive){_7c.destroyRecursive();}else{if(_7c.destroy){_7c.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_7d){return _70[_7d.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_7e){while(_7e){var id=_7e.getAttribute&&_7e.getAttribute("widgetId");if(id){return _70[id];}_7e=_7e.parentNode;}return null;};var _7f=(dijit._isElementShown=function(_80){var s=_73(_80);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_71(_80,"type")!="hidden");});dijit.hasDefaultTabStop=function(_81){switch(_81.nodeName.toLowerCase()){case "a":return _72(_81,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":if(dojo.isMoz){try{return _81.contentDocument.designMode=="on";}catch(err){return false;}}else{if(dojo.isWebKit){var doc=_81.contentDocument,_82=doc&&doc.body;return _82&&_82.contentEditable=="true";}else{try{doc=_81.contentWindow.document;_82=doc&&doc.body;return _82&&_82.firstChild&&_82.firstChild.contentEditable=="true";}catch(e){return false;}}}default:return _81.contentEditable=="true";}};var _83=(dijit.isTabNavigable=function(_84){if(_71(_84,"disabled")){return false;}else{if(_72(_84,"tabIndex")){return _71(_84,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_84);}}});dijit._getTabNavigable=function(_85){var _86,_87,_88,_89,_8a,_8b;var _8c=function(_8d){dojo.query("> *",_8d).forEach(function(_8e){if((dojo.isIE&&_8e.scopeName!=="HTML")||!_7f(_8e)){return;}if(_83(_8e)){var _8f=_71(_8e,"tabIndex");if(!_72(_8e,"tabIndex")||_8f==0){if(!_86){_86=_8e;}_87=_8e;}else{if(_8f>0){if(!_88||_8f<_89){_89=_8f;_88=_8e;}if(!_8a||_8f>=_8b){_8b=_8f;_8a=_8e;}}}}if(_8e.nodeName.toUpperCase()!="SELECT"){_8c(_8e);}});};if(_7f(_85)){_8c(_85);}return {first:_86,last:_87,lowest:_88,highest:_8a};};dijit.getFirstInTabbingOrder=function(_90){var _91=dijit._getTabNavigable(dojo.byId(_90));return _91.lowest?_91.lowest:_91.first;};dijit.getLastInTabbingOrder=function(_92){var _93=dijit._getTabNavigable(dojo.byId(_92));return _93.last?_93.last:_93.highest;};dijit.defaultDuration=dojo.config["defaultDuration"]||200;})();}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(){return dijit.getBookmark().isCollapsed;},getBookmark:function(){var bm,rg,tg,sel=dojo.doc.selection,cf=dijit._curFocus;if(dojo.global.getSelection){sel=dojo.global.getSelection();if(sel){if(sel.isCollapsed){tg=cf?cf.tagName:"";if(tg){tg=tg.toLowerCase();if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){sel={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};return {isCollapsed:(sel.end<=sel.start),mark:sel};}}bm={isCollapsed:true};}else{rg=sel.getRangeAt(0);bm={isCollapsed:false,mark:rg.cloneRange()};}}}else{if(sel){tg=cf?cf.tagName:"";tg=tg.toLowerCase();if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){if(sel.type&&sel.type.toLowerCase()=="none"){return {isCollapsed:true,mark:null};}else{rg=sel.createRange();return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};}}bm={};try{rg=sel.createRange();bm.isCollapsed=!(sel.type=="Text"?rg.htmlText.length:rg.length);}catch(e){bm.isCollapsed=true;return bm;}if(sel.type.toUpperCase()=="CONTROL"){if(rg.length){bm.mark=[];var i=0,len=rg.length;while(i<len){bm.mark.push(rg.item(i++));}}else{bm.isCollapsed=true;bm.mark=null;}}else{bm.mark=rg.getBookmark();}}else{console.warn("No idea how to store the current selection for this browser!");}}return bm;},moveToBookmark:function(_94){var _95=dojo.doc,_96=_94.mark;if(_96){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_96.pRange){var r=_96;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_96);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_95.selection&&_96){var rg;if(_96.pRange){rg=_96.range;}else{if(dojo.isArray(_96)){rg=_95.body.createControlRange();dojo.forEach(_96,function(n){rg.addElement(n);});}else{rg=_95.body.createTextRange();rg.moveToBookmark(_96);}}rg.select();}}}},getFocus:function(_97,_98){var _99=!dijit._curFocus||(_97&&dojo.isDescendant(dijit._curFocus,_97.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_99,bookmark:(_99==dijit._curFocus)&&dojo.withGlobal(_98||dojo.global,dijit.getBookmark),openedForWindow:_98};},focus:function(_9a){if(!_9a){return;}var _9b="node" in _9a?_9a.node:_9a,_9c=_9a.bookmark,_9d=_9a.openedForWindow,_9e=_9c?_9c.isCollapsed:false;if(_9b){var _9f=(_9b.tagName.toLowerCase()=="iframe")?_9b.contentWindow:_9b;if(_9f&&_9f.focus){try{_9f.focus();}catch(e){}}dijit._onFocusNode(_9b);}if(_9c&&dojo.withGlobal(_9d||dojo.global,dijit.isCollapsed)&&!_9e){if(_9d){_9d.focus();}try{dojo.withGlobal(_9d||dojo.global,dijit.moveToBookmark,null,[_9c]);}catch(e2){}}},_activeStack:[],registerIframe:function(_a0){return dijit.registerWin(_a0.contentWindow,_a0);},unregisterIframe:function(_a1){dijit.unregisterWin(_a1);},registerWin:function(_a2,_a3){var _a4=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_a3||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_a2.document.documentElement:_a2.document;if(doc){if(dojo.isIE){doc.attachEvent("onmousedown",_a4);var _a5=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_a3||evt.srcElement);}else{dijit._onTouchNode(_a3||evt.srcElement);}};doc.attachEvent("onactivate",_a5);var _a6=function(evt){dijit._onBlurNode(_a3||evt.srcElement);};doc.attachEvent("ondeactivate",_a6);return function(){doc.detachEvent("onmousedown",_a4);doc.detachEvent("onactivate",_a5);doc.detachEvent("ondeactivate",_a6);doc=null;};}else{doc.addEventListener("mousedown",_a4,true);var _a7=function(evt){dijit._onFocusNode(_a3||evt.target);};doc.addEventListener("focus",_a7,true);var _a8=function(evt){dijit._onBlurNode(_a3||evt.target);};doc.addEventListener("blur",_a8,true);return function(){doc.removeEventListener("mousedown",_a4,true);doc.removeEventListener("focus",_a7,true);doc.removeEventListener("blur",_a8,true);doc=null;};}}},unregisterWin:function(_a9){_a9&&_a9();},_onBlurNode:function(_aa){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);dijit._prevFocus=null;},100);},_onTouchNode:function(_ab,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _ac=[];try{while(_ab){var _ad=dojo.attr(_ab,"dijitPopupParent");if(_ad){_ab=dijit.byId(_ad).domNode;}else{if(_ab.tagName&&_ab.tagName.toLowerCase()=="body"){if(_ab===dojo.body()){break;}_ab=dojo.window.get(_ab.ownerDocument).frameElement;}else{var id=_ab.getAttribute&&_ab.getAttribute("widgetId"),_ae=id&&dijit.byId(id);if(_ae&&!(by=="mouse"&&_ae.get("disabled"))){_ac.unshift(id);}_ab=_ab.parentNode;}}}}catch(e){}dijit._setStack(_ac,by);},_onFocusNode:function(_af){if(!_af){return;}if(_af.nodeType==9){return;}dijit._onTouchNode(_af);if(_af==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_af;dojo.publish("focusNode",[_af]);},_setStack:function(_b0,by){var _b1=dijit._activeStack;dijit._activeStack=_b0;for(var _b2=0;_b2<Math.min(_b1.length,_b0.length);_b2++){if(_b1[_b2]!=_b0[_b2]){break;}}var _b3;for(var i=_b1.length-1;i>=_b2;i--){_b3=dijit.byId(_b1[i]);if(_b3){_b3._focused=false;_b3._hasBeenBlurred=true;if(_b3._onBlur){_b3._onBlur(by);}dojo.publish("widgetBlur",[_b3,by]);}}for(i=_b2;i<_b0.length;i++){_b3=dijit.byId(_b0[i]);if(_b3){_b3._focused=true;if(_b3._onFocus){_b3._onFocus(by);}dojo.publish("widgetFocus",[_b3,by]);}}}});dojo.addOnLoad(function(){var _b4=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_b4);_b4=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_b5){this.pairs=[];this.returnWrappers=_b5||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_b6,_b7,_b8,_b9,_ba){this.pairs[((_ba)?"unshift":"push")]([_b6,_b7,_b8,_b9]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _bb=this.pairs[i];if(_bb[1].apply(this,arguments)){if((_bb[3])||(this.returnWrappers)){return _bb[2];}else{return _bb[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_bc){for(var i=0;i<this.pairs.length;i++){var _bd=this.pairs[i];if(_bd[0]==_bc){this.pairs.splice(i,1);return true;}}return false;}});}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){return dojo.window.getBox();};dijit.placeOnScreen=function(_be,pos,_bf,_c0){var _c1=dojo.map(_bf,function(_c2){var c={corner:_c2,pos:{x:pos.x,y:pos.y}};if(_c0){c.pos.x+=_c2.charAt(1)=="L"?_c0.x:-_c0.x;c.pos.y+=_c2.charAt(0)=="T"?_c0.y:-_c0.y;}return c;});return dijit._place(_be,_c1);};dijit._place=function(_c3,_c4,_c5){var _c6=dojo.window.getBox();if(!_c3.parentNode||String(_c3.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_c3);}var _c7=null;dojo.some(_c4,function(_c8){var _c9=_c8.corner;var pos=_c8.pos;if(_c5){_c5(_c3,_c8.aroundCorner,_c9);}var _ca=_c3.style;var _cb=_ca.display;var _cc=_ca.visibility;_ca.visibility="hidden";_ca.display="";var mb=dojo.marginBox(_c3);_ca.display=_cb;_ca.visibility=_cc;var _cd=Math.max(_c6.l,_c9.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_ce=Math.max(_c6.t,_c9.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_cf=Math.min(_c6.l+_c6.w,_c9.charAt(1)=="L"?(_cd+mb.w):pos.x),_d0=Math.min(_c6.t+_c6.h,_c9.charAt(0)=="T"?(_ce+mb.h):pos.y),_d1=_cf-_cd,_d2=_d0-_ce,_d3=(mb.w-_d1)+(mb.h-_d2);if(_c7==null||_d3<_c7.overflow){_c7={corner:_c9,aroundCorner:_c8.aroundCorner,x:_cd,y:_ce,w:_d1,h:_d2,overflow:_d3};}return !_d3;});_c3.style.left=_c7.x+"px";_c3.style.top=_c7.y+"px";if(_c7.overflow&&_c5){_c5(_c3,_c7.aroundCorner,_c7.corner);}return _c7;};dijit.placeOnScreenAroundNode=function(_d4,_d5,_d6,_d7){_d5=dojo.byId(_d5);var _d8=_d5.style.display;_d5.style.display="";var _d9=dojo.position(_d5,true);_d5.style.display=_d8;return dijit._placeOnScreenAroundRect(_d4,_d9.x,_d9.y,_d9.w,_d9.h,_d6,_d7);};dijit.placeOnScreenAroundRectangle=function(_da,_db,_dc,_dd){return dijit._placeOnScreenAroundRect(_da,_db.x,_db.y,_db.width,_db.height,_dc,_dd);};dijit._placeOnScreenAroundRect=function(_de,x,y,_df,_e0,_e1,_e2){var _e3=[];for(var _e4 in _e1){_e3.push({aroundCorner:_e4,corner:_e1[_e4],pos:{x:x+(_e4.charAt(1)=="L"?0:_df),y:y+(_e4.charAt(0)=="T"?0:_e0)}});}return dijit._place(_de,_e3,_e2);};dijit.placementRegistry=new dojo.AdapterRegistry();dijit.placementRegistry.register("node",function(n,x){return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";},dijit.placeOnScreenAroundNode);dijit.placementRegistry.register("rect",function(n,x){return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;},dijit.placeOnScreenAroundRectangle);dijit.placeOnScreenAroundElement=function(_e5,_e6,_e7,_e8){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_e9,_ea){var _eb={};dojo.forEach(_e9,function(pos){switch(pos){case "after":_eb[_ea?"BR":"BL"]=_ea?"BL":"BR";break;case "before":_eb[_ea?"BL":"BR"]=_ea?"BR":"BL";break;case "below":_eb[_ea?"BL":"BR"]=_ea?"TL":"TR";_eb[_ea?"BR":"BL"]=_ea?"TR":"TL";break;case "above":default:_eb[_ea?"TL":"TR"]=_ea?"BL":"BR";_eb[_ea?"TR":"TL"]=_ea?"BR":"BL";break;}});return _eb;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,moveOffScreen:function(_ec){var _ed=_ec.parentNode;if(!_ed||!dojo.hasClass(_ed,"dijitPopup")){_ed=dojo.create("div",{"class":"dijitPopup",style:{visibility:"hidden",top:"-9999px"}},dojo.body());dijit.setWaiRole(_ed,"presentation");_ed.appendChild(_ec);}var s=_ec.style;s.display="";s.visibility="";s.position="";s.top="0px";dojo.style(_ed,{visibility:"hidden",top:"-9999px"});},getTopPopup:function(){var _ee=this._stack;for(var pi=_ee.length-1;pi>0&&_ee[pi].parent===_ee[pi-1].widget;pi--){}return _ee[pi];},open:function(_ef){var _f0=this._stack,_f1=_ef.popup,_f2=_ef.orient||((_ef.parent?_ef.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_f3=_ef.around,id=(_ef.around&&_ef.around.id)?(_ef.around.id+"_dropdown"):("popup_"+this._idGen++);var _f4=_f1.domNode.parentNode;if(!_f4||!dojo.hasClass(_f4,"dijitPopup")){this.moveOffScreen(_f1.domNode);_f4=_f1.domNode.parentNode;}dojo.attr(_f4,{id:id,style:{zIndex:this._beginZIndex+_f0.length},"class":"dijitPopup "+(_f1.baseClass||_f1["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:_ef.parent?_ef.parent.id:""});if(dojo.isIE||dojo.isMoz){var _f5=_f4.childNodes[1];if(!_f5){_f5=new dijit.BackgroundIframe(_f4);}}var _f6=_f3?dijit.placeOnScreenAroundElement(_f4,_f3,_f2,_f1.orient?dojo.hitch(_f1,"orient"):null):dijit.placeOnScreen(_f4,_ef,_f2=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],_ef.padding);_f4.style.visibility="visible";_f1.domNode.style.visibility="visible";var _f7=[];_f7.push(dojo.connect(_f4,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&_ef.onCancel){dojo.stopEvent(evt);_ef.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _f8=this.getTopPopup();if(_f8&&_f8.onCancel){_f8.onCancel();}}}}));if(_f1.onCancel){_f7.push(dojo.connect(_f1,"onCancel",_ef.onCancel));}_f7.push(dojo.connect(_f1,_f1.onExecute?"onExecute":"onChange",this,function(){var _f9=this.getTopPopup();if(_f9&&_f9.onExecute){_f9.onExecute();}}));_f0.push({wrapper:_f4,iframe:_f5,widget:_f1,parent:_ef.parent,onExecute:_ef.onExecute,onCancel:_ef.onCancel,onClose:_ef.onClose,handlers:_f7});if(_f1.onOpen){_f1.onOpen(_f6);}return _f6;},close:function(_fa){var _fb=this._stack;while(dojo.some(_fb,function(_fc){return _fc.widget==_fa;})){var top=_fb.pop(),_fd=top.wrapper,_fe=top.iframe,_ff=top.widget,_100=top.onClose;if(_ff.onClose){_ff.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_ff&&_ff.domNode){this.moveOffScreen(_ff.domNode);}else{dojo.destroy(_fd);}if(_100){_100();}}}};dijit._frames=new function(){var _101=[];this.pop=function(){var _102;if(_101.length){_102=_101.pop();_102.style.display="";}else{if(dojo.isIE){var burl=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var html="<iframe src='"+burl+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_102=dojo.doc.createElement(html);}else{_102=dojo.create("iframe");_102.src="javascript:\"\"";_102.className="dijitBackgroundIframe";dojo.style(_102,"opacity",0.1);}_102.tabIndex=-1;dijit.setWaiRole(_102,"presentation");}return _102;};this.push=function(_103){_103.style.display="none";_101.push(_103);};}();dijit.BackgroundIframe=function(node){if(!node.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _104=dijit._frames.pop();node.appendChild(_104);if(dojo.isIE<7){this.resize(node);this._conn=dojo.connect(node,"onresize",this,function(){this.resize(node);});}else{dojo.style(_104,{width:"100%",height:"100%"});}this.iframe=_104;}};dojo.extend(dijit.BackgroundIframe,{resize:function(node){if(this.iframe&&dojo.isIE<7){dojo.style(this.iframe,{width:node.offsetWidth+"px",height:node.offsetHeight+"px"});}},destroy:function(){if(this._conn){dojo.disconnect(this._conn);this._conn=null;}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(node,pos){dojo.window.scrollIntoView(node,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,html=d.doc.documentElement,ie=d.isIE,_105=d.isOpera,maj=Math.floor,ff=d.isFF,_106=d.boxModel.replace(/-/,""),_107={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_105,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:maj(ff)==3};_107["dj_"+_106]=true;var _108="";for(var clz in _107){if(_107[clz]){_108+=clz+" ";}}html.className=d.trim(html.className+" "+_108);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _109="dj_rtl dijitRtl "+_108.replace(/ /g,"-rtl ");html.className=d.trim(html.className+" "+_109);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}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=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_10a,node,_10b,obj,_10c,_10d,_10e){if(obj!=this._obj){this.stop();this._initialDelay=_10d||500;this._subsequentDelay=_10c||0.9;this._minDelay=_10e||10;this._obj=obj;this._evt=evt;this._node=node;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_10a,_10b);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},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(node,_10f,_110,_111,_112,_113,_114){if(_10f.keyCode){_10f.charOrCode=_10f.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_10f.charCode){_10f.charOrCode=String.fromCharCode(_10f.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(node,"onkeypress",this,function(evt){if(evt.charOrCode==_10f.charOrCode&&(_10f.ctrlKey===undefined||_10f.ctrlKey==evt.ctrlKey)&&(_10f.altKey===undefined||_10f.altKey==evt.altKey)&&(_10f.metaKey===undefined||_10f.metaKey==(evt.metaKey||false))&&(_10f.shiftKey===undefined||_10f.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_110,node,_111,_10f,_112,_113,_114);}else{if(dijit.typematic._obj==_10f){dijit.typematic.stop();}}}),dojo.connect(node,"onkeyup",this,function(evt){if(dijit.typematic._obj==_10f){dijit.typematic.stop();}})];},addMouseListener:function(node,_115,_116,_117,_118,_119){var dc=dojo.connect;return [dc(node,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_115,node,_116,node,_117,_118,_119);}),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){evt.preventDefault();}),dc(node,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_115,node,_116,node,_117,_118,_119);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_11a,_11b,_11c,_11d,_11e,_11f,_120,_121){return this.addKeyListener(_11b,_11c,_11d,_11e,_11f,_120,_121).concat(this.addMouseListener(_11a,_11d,_11e,_11f,_120,_121));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());var cs=dojo.getComputedStyle(div);if(cs){var _122=cs.backgroundImage;var _123=(cs.borderTopColor==cs.borderRightColor)||(_122!=null&&(_122=="none"||_122=="url(invalid-url:)"));dojo[_123?"addClass":"removeClass"](dojo.body(),"dijit_a11y");if(dojo.isIE){div.outerHTML="";}else{dojo.body().removeChild(div);}}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{_XhtmlRoles:/banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/,hasWaiRole:function(elem,role){var _124=this.getWaiRole(elem);return role?(_124.indexOf(role)>-1):(_124.length>0);},getWaiRole:function(elem){return dojo.trim((dojo.attr(elem,"role")||"").replace(this._XhtmlRoles,"").replace("wairole:",""));},setWaiRole:function(elem,role){var _125=dojo.attr(elem,"role")||"";if(!this._XhtmlRoles.test(_125)){dojo.attr(elem,"role",role);}else{if((" "+_125+" ").indexOf(" "+role+" ")<0){var _126=dojo.trim(_125.replace(this._XhtmlRoles,""));var _127=dojo.trim(_125.replace(_126,""));dojo.attr(elem,"role",_127+(_127?" ":"")+role);}}},removeWaiRole:function(elem,role){var _128=dojo.attr(elem,"role");if(!_128){return;}if(role){var t=dojo.trim((" "+_128+" ").replace(" "+role+" "," "));dojo.attr(elem,"role",t);}else{elem.removeAttribute("role");}},hasWaiState:function(elem,_129){return elem.hasAttribute?elem.hasAttribute("aria-"+_129):!!elem.getAttribute("aria-"+_129);},getWaiState:function(elem,_12a){return elem.getAttribute("aria-"+_12a)||"";},setWaiState:function(elem,_12b,_12c){elem.setAttribute("aria-"+_12b,_12c);},removeWaiState:function(elem,_12d){elem.removeAttribute("aria-"+_12d);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.require("dijit._base");dojo.connect(dojo,"_connect",function(_12e,_12f){if(_12e&&dojo.isFunction(_12e._onConnect)){_12e._onConnect(_12f);}});dijit._connectOnUseEventHandler=function(_130){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _131=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_131);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_131);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){var _132={},_133=function(_134){var dc=_134.declaredClass;if(!_132[dc]){var r=[],_135,_136=_134.constructor.prototype;for(var _137 in _136){if(dojo.isFunction(_136[_137])&&(_135=_137.match(/^_set([a-zA-Z]*)Attr$/))&&_135[1]){r.push(_135[1].charAt(0).toLowerCase()+_135[1].substr(1));}}_132[dc]=r;}return _132[dc]||[];};dojo.declare("dijit._Widget",null,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_138,_139){this.create(_138,_139);},create:function(_13a,_13b){this.srcNodeRef=dojo.byId(_13b);this._connects=[];this._subscribes=[];this._deferredConnects=dojo.clone(this._deferredConnects);for(var attr in this.attributeMap){delete this._deferredConnects[attr];}for(attr in this._deferredConnects){if(this[attr]!==dijit._connectOnUseEventHandler){delete this._deferredConnects[attr];}}if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_13a){this.params=_13a;dojo.mixin(this,_13a);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this._applyAttributes();var _13c=this.srcNodeRef;if(_13c&&_13c.parentNode){_13c.parentNode.replaceChild(this.domNode,_13c);}for(attr in this.params){this._onConnect(attr);}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}this._created=true;},_applyAttributes:function(){var _13d=function(attr,_13e){if((_13e.params&&attr in _13e.params)||_13e[attr]){_13e.set(attr,_13e[attr]);}};for(var attr in this.attributeMap){_13d(attr,this);}dojo.forEach(_133(this),function(a){if(!(a in this.attributeMap)){_13d(a,this);}},this);},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef||dojo.create("div");},postCreate:function(){if(this.baseClass){var _13f=this.baseClass.split(" ");if(!this.isLeftToRight()){_13f=_13f.concat(dojo.map(_13f,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_13f);}},startup:function(){this._started=true;},destroyRecursive:function(_140){this._beingDestroyed=true;this.destroyDescendants(_140);this.destroy(_140);},destroy:function(_141){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_142){dfe(_142,d.disconnect);});dfe(this._subscribes,function(_143){dun(_143);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_141);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_144){if(this.bgIframe){this.bgIframe.destroy(_144);delete this.bgIframe;}if(this.domNode){if(_144){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_144){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_145){dojo.forEach(this.getChildren(),function(_146){if(_146.destroyRecursive){_146.destroyRecursive(_145);}});},uninitialize:function(){return false;},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},_onConnect:function(_147){if(_147 in this._deferredConnects){var _148=this[this._deferredConnects[_147]||"domNode"];this.connect(_148,_147.toLowerCase(),_147);delete this._deferredConnects[_147];}},_setClassAttr:function(_149){var _14a=this[this.attributeMap["class"]||"domNode"];dojo.removeClass(_14a,this["class"]);this["class"]=_149;dojo.addClass(_14a,_149);},_setStyleAttr:function(_14b){var _14c=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_14b)){dojo.style(_14c,_14b);}else{if(_14c.style.cssText){_14c.style.cssText+="; "+_14b;}else{_14c.style.cssText=_14b;}}this.style=_14b;},setAttribute:function(attr,_14d){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_14d);},_attrToDom:function(attr,_14e){var _14f=this.attributeMap[attr];dojo.forEach(dojo.isArray(_14f)?_14f:[_14f],function(_150){var _151=this[_150.node||_150||"domNode"];var type=_150.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_14e)){_14e=dojo.hitch(this,_14e);}var _152=_150.attribute?_150.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_151,_152,_14e);break;case "innerText":_151.innerHTML="";_151.appendChild(dojo.doc.createTextNode(_14e));break;case "innerHTML":_151.innerHTML=_14e;break;case "class":dojo.removeClass(_151,this[attr]);dojo.addClass(_151,_14e);break;}},this);this[attr]=_14e;},attr:function(name,_153){if(dojo.config.isDebug){var _154=arguments.callee._ach||(arguments.callee._ach={}),_155=(arguments.callee.caller||"unknown caller").toString();if(!_154[_155]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_155,"","2.0");_154[_155]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},get:function(name){var _156=this._getAttrNames(name);return this[_156.g]?this[_156.g]():this[name];},set:function(name,_157){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _158=this._getAttrNames(name);if(this[_158.s]){var _159=this[_158.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_157);}var _15a=this[name];this[name]=_157;}return _159||this;},_attrPairNames:{},_getAttrNames:function(name){var apn=this._attrPairNames;if(apn[name]){return apn[name];}var uc=name.charAt(0).toUpperCase()+name.substr(1);return (apn[name]={n:name+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];},getChildren:function(){return this.containerNode?dijit.findWidgets(this.containerNode):[];},nodesWithKeyClick:["input","button"],connect:function(obj,_15b,_15c){var d=dojo,dc=d._connect,_15d=[];if(_15b=="ondijitclick"){if(dojo.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_15c);_15d.push(dc(obj,"onkeydown",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=e.target;e.preventDefault();}}),dc(obj,"onkeyup",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target===dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=null;return m(e);}}));}_15b="onclick";}_15d.push(dc(obj,_15b,this,_15c));this._connects.push(_15d);return _15d;},disconnect:function(_15e){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_15e){dojo.forEach(_15e,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_15f,_160){var d=dojo,_161=d.subscribe(_15f,this,_160);this._subscribes.push(_161);return _161;},unsubscribe:function(_162){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_162){dojo.unsubscribe(_162);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},placeAt:function(_163,_164){if(_163.declaredClass&&_163.addChild){_163.addChild(this,_164);}else{dojo.place(this.domNode,_163,_164);}return this;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.string.rep=function(str,num){if(num<=0||!str){return "";}var buf=[];for(;;){if(num&1){buf.push(str);}if(!(num>>=1)){break;}str+=str;}return buf.join("");};dojo.string.pad=function(text,size,ch,end){if(!ch){ch="0";}var out=String(text),pad=dojo.string.rep(ch,Math.ceil((size-out.length)/ch.length));return end?out+pad:pad+out;};dojo.string.substitute=function(_165,map,_166,_167){_167=_167||dojo.global;_166=_166?dojo.hitch(_167,_166):function(v){return v;};return _165.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_168,key,_169){var _16a=dojo.getObject(key,false,map);if(_169){_16a=dojo.getObject(_169,false,_167).call(_167,_16a,key);}return _166(_16a,key).toString();});};dojo.string.trim=String.prototype.trim?dojo.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["dojo.cache"]){dojo._hasResource["dojo.cache"]=true;dojo.provide("dojo.cache");(function(){var _16b={};dojo.cache=function(_16c,url,_16d){if(typeof _16c=="string"){var _16e=dojo.moduleUrl(_16c,url);}else{_16e=_16c;_16d=url;}var key=_16e.toString();var val=_16d;if(_16d!=undefined&&!dojo.isString(_16d)){val=("value" in _16d?_16d.value:undefined);}var _16f=_16d&&_16d.sanitize?true:false;if(typeof val=="string"){val=_16b[key]=_16f?dojo.cache._sanitize(val):val;}else{if(val===null){delete _16b[key];}else{if(!(key in _16b)){val=dojo._getText(key);_16b[key]=_16f?dojo.cache._sanitize(val):val;}val=_16b[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _170=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_170){val=_170[1];}}else{val="";}return val;};})();}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){this._attachPoints=[];},_stringRepl:function(tmpl){var _171=this.declaredClass,_172=this;return dojo.string.substitute(tmpl,this,function(_173,key){if(key.charAt(0)=="!"){_173=dojo.getObject(key.substr(1),false,_172);}if(typeof _173=="undefined"){throw new Error(_171+" template:"+key);}if(_173==null){return "";}return key.charAt(0)=="!"?_173:_173.toString().replace(/"/g,""");},this);},buildRendering:function(){var _174=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_174)){node=dojo._toDom(this._stringRepl(_174));if(node.nodeType!=1){throw new Error("Invalid template: "+_174);}}else{node=_174.cloneNode(true);}this.domNode=node;this._attachTemplateNodes(node);if(this.widgetsInTemplate){var _175=dojo.parser,qry,attr;if(_175._query!="[dojoType]"){qry=_175._query;attr=_175._attrName;_175._query="[dojoType]";_175._attrName="dojoType";}var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,inherited:{dir:this.dir,lang:this.lang}}));if(qry){_175._query=qry;_175._attrName=attr;}this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_176){var dest=this.containerNode;if(_176&&dest){while(_176.hasChildNodes()){dest.appendChild(_176.firstChild);}}},_attachTemplateNodes:function(_177,_178){_178=_178||function(n,p){return n.getAttribute(p);};var _179=dojo.isArray(_177)?_177:(_177.all||_177.getElementsByTagName("*"));var x=dojo.isArray(_177)?0:-1;for(;x<_179.length;x++){var _17a=(x==-1)?_177:_179[x];if(this.widgetsInTemplate&&_178(_17a,"dojoType")){continue;}var _17b=_178(_17a,"dojoAttachPoint");if(_17b){var _17c,_17d=_17b.split(/\s*,\s*/);while((_17c=_17d.shift())){if(dojo.isArray(this[_17c])){this[_17c].push(_17a);}else{this[_17c]=_17a;}this._attachPoints.push(_17c);}}var _17e=_178(_17a,"dojoAttachEvent");if(_17e){var _17f,_180=_17e.split(/\s*,\s*/);var trim=dojo.trim;while((_17f=_180.shift())){if(_17f){var _181=null;if(_17f.indexOf(":")!=-1){var _182=_17f.split(":");_17f=trim(_182[0]);_181=trim(_182[1]);}else{_17f=trim(_17f);}if(!_181){_181=_17f;}this.connect(_17a,_17f,_181);}}}var role=_178(_17a,"waiRole");if(role){dijit.setWaiRole(_17a,role);}var _183=_178(_17a,"waiState");if(_183){dojo.forEach(_183.split(/\s*,\s*/),function(_184){if(_184.indexOf("-")!=-1){var pair=_184.split("-");dijit.setWaiState(_17a,pair[0],pair[1]);}});}}},startup:function(){dojo.forEach(this._startupWidgets,function(w){if(w&&!w._started&&w.startup){w.startup();}});this.inherited(arguments);},destroyRendering:function(){dojo.forEach(this._attachPoints,function(_185){delete this[_185];},this);this._attachPoints=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_186,_187,_188){var _189=dijit._Templated._templateCache;var key=_187||_186;var _18a=_189[key];if(_18a){try{if(!_18a.ownerDocument||_18a.ownerDocument==dojo.doc){return _18a;}}catch(e){}dojo.destroy(_18a);}if(!_187){_187=dojo.cache(_186,{sanitize:true});}_187=dojo.string.trim(_187);if(_188||_187.match(/\$\{([^\}]+)\}/g)){return (_189[key]=_187);}else{var node=dojo._toDom(_187);if(node.nodeType!=1){throw new Error("Invalid template: "+_187);}return (_189[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _18b=dijit._Templated._templateCache;for(var key in _18b){var _18c=_18b[key];if(typeof _18c=="object"){dojo.destroy(_18c);}delete _18b[key];}});}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._Container",null,{isContainer:true,buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},addChild:function(_18d,_18e){var _18f=this.containerNode;if(_18e&&typeof _18e=="number"){var _190=this.getChildren();if(_190&&_190.length>=_18e){_18f=_190[_18e-1].domNode;_18e="after";}}dojo.place(_18d.domNode,_18f,_18e);if(this._started&&!_18d._started){_18d.startup();}},removeChild:function(_191){if(typeof _191=="number"&&_191>0){_191=this.getChildren()[_191];}if(_191){var node=_191.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_192){dojo.forEach(this.getChildren(),function(_193){_193.destroyRecursive(_192);});},_getSiblingOfChild:function(_194,dir){var node=_194.domNode,_195=(dir>0?"nextSibling":"previousSibling");do{node=node[_195];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_196){return dojo.indexOf(this.getChildren(),_196);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_197){_197.startup();});this.inherited(arguments);}});}if(!dojo._hasResource["dijit._Contained"]){dojo._hasResource["dijit._Contained"]=true;dojo.provide("dijit._Contained");dojo.declare("dijit._Contained",null,{getParent:function(){var _198=dijit.getEnclosingWidget(this.domNode.parentNode);return _198&&_198.isContainer?_198:null;},_getSibling:function(_199){var node=this.domNode;do{node=node[_199+"Sibling"];}while(node&&node.nodeType!=1);return node&&dijit.byNode(node);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");},getIndexInParent:function(){var p=this.getParent();if(!p||!p.getIndexOfChild){return -1;}return p.getIndexOfChild(this);}});}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],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");this.inherited(arguments);},startup:function(){if(this._started){return;}this.inherited(arguments);var _19a=this.getParent&&this.getParent();if(!(_19a&&_19a.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_19b,_19c){var node=this.domNode;if(_19b){dojo.marginBox(node,_19b);if(_19b.t){node.style.top=_19b.t+"px";}if(_19b.l){node.style.left=_19b.l+"px";}}var mb=_19c||{};dojo.mixin(mb,_19b||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(node),mb);}var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var be=dojo._getBorderExtents(node,cs);var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});var pe=dojo._getPadExtents(node,cs);this._contentBox={l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};this.layout();},layout:function(){},_setupChild:function(_19d){dojo.addClass(_19d.domNode,this.baseClass+"-child");if(_19d.baseClass){dojo.addClass(_19d.domNode,this.baseClass+"-"+_19d.baseClass);}},addChild:function(_19e,_19f){this.inherited(arguments);if(this._started){this._setupChild(_19e);}},removeChild:function(_1a0){dojo.removeClass(_1a0.domNode,this.baseClass+"-child");if(_1a0.baseClass){dojo.removeClass(_1a0.domNode,this.baseClass+"-"+_1a0.baseClass);}this.inherited(arguments);}});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 _1a1=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(_1a3,dim,_1a4){dim=dojo.mixin({},dim);dojo.addClass(_1a3,"dijitLayoutContainer");_1a4=dojo.filter(_1a4,function(item){return item.layoutAlign!="client";}).concat(dojo.filter(_1a4,function(item){return item.layoutAlign=="client";}));dojo.forEach(_1a4,function(_1a5){var elm=_1a5.domNode,pos=_1a5.layoutAlign;var _1a6=elm.style;_1a6.left=dim.l+"px";_1a6.top=dim.t+"px";_1a6.bottom=_1a6.right="auto";dojo.addClass(elm,"dijitAlign"+_1a1(pos));if(pos=="top"||pos=="bottom"){size(_1a5,{w:dim.w});dim.h-=_1a5.h;if(pos=="top"){dim.t+=_1a5.h;}else{_1a6.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_1a5,{h:dim.h});dim.w-=_1a5.w;if(pos=="left"){dim.l+=_1a5.w;}else{_1a6.left=dim.l+dim.w+"px";}}else{if(pos=="client"){size(_1a5,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},postCreate:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);this.connect(this,"set",function(name,_1a7){if(arguments.length>=2&&{disabled:true,readOnly:true,checked:true,selected:true}[name]){this._setStateClass();}});dojo.forEach(["_onFocus","_onBlur"],function(ap){this.connect(this,ap,"_setStateClass");},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1a8){if(!this.disabled){switch(_1a8.type){case "mouseenter":case "mouseover":this._hovering=true;this._active=this._mouseDown;break;case "mouseleave":case "mouseout":this._hovering=false;this._active=false;break;case "mousedown":this._active=true;this._mouseDown=true;var _1a9=this.connect(dojo.body(),"onmouseup",function(){this._active=false;this._mouseDown=false;this._setStateClass();this.disconnect(_1a9);});break;}this._setStateClass();}},_setStateClass:function(){var _1aa=this.baseClass.split(" ");function _1ab(_1ac){_1aa=_1aa.concat(dojo.map(_1aa,function(c){return c+_1ac;}),"dijit"+_1ac);};if(!this.isLeftToRight()){_1ab("Rtl");}if(this.checked){_1ab("Checked");}if(this.state){_1ab(this.state);}if(this.selected){_1ab("Selected");}if(this.disabled){_1ab("Disabled");}else{if(this.readOnly){_1ab("ReadOnly");}else{if(this._active){_1ab("Active");}else{if(this._hovering){_1ab("Hover");}}}}if(this._focused){_1ab("Focused");}var tn=this.stateNode||this.domNode,_1ad={};dojo.forEach(tn.className.split(" "),function(c){_1ad[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1ad[c];});}dojo.forEach(_1aa,function(c){_1ad[c]=true;});var _1ae=[];for(var c in _1ad){_1ae.push(c);}tn.className=_1ae.join(" ");this._stateClasses=_1aa;},_trackMouseState:function(node,_1af){var _1b0=false,_1b1=false,_1b2=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1b3(){var _1b4=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1af+"Hover",_1b0&&!_1b1&&!_1b4);dojo.toggleClass(node,_1af+"Active",_1b1&&!_1b4);dojo.toggleClass(node,_1af+"Focused",_1b2&&!_1b4);};cn("onmouseenter",function(){_1b0=true;_1b3();});cn("onmouseleave",function(){_1b0=false;_1b1=false;_1b3();});cn("onmousedown",function(){_1b1=true;_1b3();});cn("onmouseup",function(){_1b1=false;_1b3();});cn("onfocus",function(){_1b2=true;_1b3();});cn("onblur",function(){_1b2=false;_1b3();});this.connect(this,"set",function(name,_1b5){if(name=="disabled"||name=="readOnly"){_1b3();}});}});}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,dijit._CssStateMixin],{name:"",alt:"",value:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,scrollOnFocus:true,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",tabIndex:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name=\""+this.name.replace(/'/g,""")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1b6){this.disabled=_1b6;dojo.attr(this.focusNode,"disabled",_1b6);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1b6);}dijit.setWaiState(this.focusNode,"disabled",_1b6);if(_1b6){this._hovering=false;this._active=false;var _1b7="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1b7)?_1b7:[_1b7],function(_1b8){var node=this[_1b8];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{this.focusNode.setAttribute("tabIndex",this.tabIndex);}},setDisabled:function(_1b9){dojo.deprecated("setDisabled("+_1b9+") is deprecated. Use set('disabled',"+_1b9+") instead.","","2.0");this.set("disabled",_1b9);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&!this.readOnly&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){dijit.focus(this.focusNode);},compare:function(val1,val2){if(typeof val1=="number"&&typeof val2=="number"){return (isNaN(val1)&&isNaN(val2))?0:val1-val2;}else{if(val1>val2){return 1;}else{if(val1<val2){return -1;}else{return 0;}}}},onChange:function(_1ba){},_onChangeActive:false,_handleOnChange:function(_1bb,_1bc){this._lastValue=_1bb;if(this._lastValueReported==undefined&&(_1bc===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1bb;}if((this.intermediateChanges||_1bc||_1bc===undefined)&&((typeof _1bb!=typeof this._lastValueReported)||this.compare(_1bb,this._lastValueReported)!=0)){this._lastValueReported=_1bb;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1bb);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1bd){dojo.deprecated("dijit.form._FormWidget:setValue("+_1bd+") is deprecated. Use set('value',"+_1bd+") instead.","","2.0");this.set("value",_1bd);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&this.isFocusable()){var _1be=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1be);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1bf){this.readOnly=_1bf;dojo.attr(this.focusNode,"readOnly",_1bf);dijit.setWaiState(this.focusNode,"readonly",_1bf);},postCreate:function(){this.inherited(arguments);if(dojo.isIE){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._resetValue=this.value;}},_setValueAttr:function(_1c0,_1c1){this.value=_1c0;this._handleOnChange(_1c0,_1c1);},_getValueAttr:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},reset:function(){this._hasBeenBlurred=false;this._setValueAttr(this._resetValue,true);},_onKeyDown:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!(e.ctrlKey||e.altKey||e.metaKey)){var te;if(dojo.isIE){e.preventDefault();te=document.createEventObject();te.keyCode=dojo.keys.ESCAPE;te.shiftKey=e.shiftKey;e.srcElement.fireEvent("onkeypress",te);}}},_layoutHackIE7:function(){if(dojo.isIE==7){var _1c2=this.domNode;var _1c3=_1c2.parentNode;var _1c4=_1c2.firstChild||_1c2;var _1c5=_1c4.style.filter;var _1c6=this;while(_1c3&&_1c3.clientHeight==0){(function ping(){var _1c7=_1c6.connect(_1c3,"onscroll",function(e){_1c6.disconnect(_1c7);_1c4.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1c4.style.filter=_1c5;},0);});})();_1c3=_1c3.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}if(!dojo._hasResource["dojo.fx.Toggler"]){dojo._hasResource["dojo.fx.Toggler"]=true;dojo.provide("dojo.fx.Toggler");dojo.declare("dojo.fx.Toggler",null,{node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,constructor:function(args){var _1c8=this;dojo.mixin(_1c8,args);_1c8.node=args.node;_1c8._showArgs=dojo.mixin({},args);_1c8._showArgs.node=_1c8.node;_1c8._showArgs.duration=_1c8.showDuration;_1c8.showAnim=_1c8.showFunc(_1c8._showArgs);_1c8._hideArgs=dojo.mixin({},args);_1c8._hideArgs.node=_1c8.node;_1c8._hideArgs.duration=_1c8.hideDuration;_1c8.hideAnim=_1c8.hideFunc(_1c8._hideArgs);dojo.connect(_1c8.showAnim,"beforeBegin",dojo.hitch(_1c8.hideAnim,"stop",true));dojo.connect(_1c8.hideAnim,"beforeBegin",dojo.hitch(_1c8.showAnim,"stop",true));},show:function(_1c9){return this.showAnim.play(_1c9||0);},hide:function(_1ca){return this.hideAnim.play(_1ca||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_1cb={_fire:function(evt,args){if(this[evt]){this[evt].apply(this,args||[]);}return this;}};var _1cc=function(_1cd){this._index=-1;this._animations=_1cd||[];this._current=this._onAnimateCtx=this._onEndCtx=null;this.duration=0;d.forEach(this._animations,function(a){this.duration+=a.duration;if(a.delay){this.duration+=a.delay;}},this);};d.extend(_1cc,{_onAnimate:function(){this._fire("onAnimate",arguments);},_onEnd:function(){d.disconnect(this._onAnimateCtx);d.disconnect(this._onEndCtx);this._onAnimateCtx=this._onEndCtx=null;if(this._index+1==this._animations.length){this._fire("onEnd");}else{this._current=this._animations[++this._index];this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play(0,true);}},play:function(_1ce,_1cf){if(!this._current){this._current=this._animations[this._index=0];}if(!_1cf&&this._current.status()=="playing"){return this;}var _1d0=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_1d1=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_1d2=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_1d0);d.disconnect(_1d1);d.disconnect(_1d2);});if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");if(this._onEndCtx){d.disconnect(this._onEndCtx);}this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play.apply(this._current,arguments);return this;},pause:function(){if(this._current){var e=d.connect(this._current,"onPause",this,function(arg){this._fire("onPause",arguments);d.disconnect(e);});this._current.pause();}return this;},gotoPercent:function(_1d3,_1d4){this.pause();var _1d5=this.duration*_1d3;this._current=null;d.some(this._animations,function(a){if(a.duration<=_1d5){this._current=a;return true;}_1d5-=a.duration;return false;});if(this._current){this._current.gotoPercent(_1d5/this._current.duration,_1d4);}return this;},stop:function(_1d6){if(this._current){if(_1d6){for(;this._index+1<this._animations.length;++this._index){this._animations[this._index].stop(true);}this._current=this._animations[this._index];}var e=d.connect(this._current,"onStop",this,function(arg){this._fire("onStop",arguments);d.disconnect(e);});this._current.stop();}return this;},status:function(){return this._current?this._current.status():"stopped";},destroy:function(){if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}if(this._onEndCtx){d.disconnect(this._onEndCtx);}}});d.extend(_1cc,_1cb);dojo.fx.chain=function(_1d7){return new _1cc(_1d7);};var _1d8=function(_1d9){this._animations=_1d9||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_1d9,function(a){var _1da=a.duration;if(a.delay){_1da+=a.delay;}if(this.duration<_1da){this.duration=_1da;}this._connects.push(d.connect(a,"onEnd",this,"_onEnd"));},this);this._pseudoAnimation=new d.Animation({curve:[0,1],duration:this.duration});var self=this;d.forEach(["beforeBegin","onBegin","onPlay","onAnimate","onPause","onStop","onEnd"],function(evt){self._connects.push(d.connect(self._pseudoAnimation,evt,function(){self._fire(evt,arguments);}));});};d.extend(_1d8,{_doAction:function(_1db,args){d.forEach(this._animations,function(a){a[_1db].apply(a,args);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_1dc,args){var t=this._pseudoAnimation;t[_1dc].apply(t,args);},play:function(_1dd,_1de){this._finished=0;this._doAction("play",arguments);this._call("play",arguments);return this;},pause:function(){this._doAction("pause",arguments);this._call("pause",arguments);return this;},gotoPercent:function(_1df,_1e0){var ms=this.duration*_1df;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_1e0);});this._call("gotoPercent",arguments);return this;},stop:function(_1e1){this._doAction("stop",arguments);this._call("stop",arguments);return this;},status:function(){return this._pseudoAnimation.status();},destroy:function(){d.forEach(this._connects,dojo.disconnect);}});d.extend(_1d8,_1cb);dojo.fx.combine=function(_1e2){return new _1d8(_1e2);};dojo.fx.wipeIn=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _1e3=d.style(node,"height");return Math.max(_1e3,1);}},end:function(){return node.scrollHeight;}}}},args));d.connect(anim,"onEnd",function(){s.height="auto";s.overflow=o;});return anim;};dojo.fx.wipeOut=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{end:1}}},args));d.connect(anim,"beforeBegin",function(){o=s.overflow;s.overflow="hidden";s.display="";});d.connect(anim,"onEnd",function(){s.overflow=o;s.height="auto";s.display="none";});return anim;};dojo.fx.slideTo=function(args){var node=args.node=d.byId(args.node),top=null,left=null;var init=(function(n){return function(){var cs=d.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=d.position(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=d.animateProperty(d.mixin({properties:{top:args.top||0,left:args.left||0}},args));d.connect(anim,"beforeBegin",anim,init);return anim;};})();}if(!dojo._hasResource["dojo.NodeList-fx"]){dojo._hasResource["dojo.NodeList-fx"]=true;dojo.provide("dojo.NodeList-fx");dojo.extend(dojo.NodeList,{_anim:function(obj,_1e4,args){args=args||{};var a=dojo.fx.combine(this.map(function(item){var _1e5={node:item};dojo.mixin(_1e5,args);return obj[_1e4](_1e5);}));return args.auto?a.play()&&this:a;},wipeIn:function(args){return this._anim(dojo.fx,"wipeIn",args);},wipeOut:function(args){return this._anim(dojo.fx,"wipeOut",args);},slideTo:function(args){return this._anim(dojo.fx,"slideTo",args);},fadeIn:function(args){return this._anim(dojo,"fadeIn",args);},fadeOut:function(args){return this._anim(dojo,"fadeOut",args);},animateProperty:function(args){return this._anim(dojo,"animateProperty",args);},anim:function(_1e6,_1e7,_1e8,_1e9,_1ea){var _1eb=dojo.fx.combine(this.map(function(item){return dojo.animateProperty({node:item,properties:_1e6,duration:_1e7||350,easing:_1e8});}));if(_1e9){dojo.connect(_1eb,"onEnd",_1e9);}return _1eb.play(_1ea||0);}});}if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");(function(){var _1ec=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(_1ed,obj){var m=_1ed.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);if(m){var c=m[2].split(/\s*,\s*/),l=c.length,t=m[1],a;if((t=="rgb"&&l==3)||(t=="rgba"&&l==4)){var r=c[0];if(r.charAt(r.length-1)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}return dojo.colorFromArray(c,obj);}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=[_1ec(m1,m2,H+1/3)*256,_1ec(m1,m2,H)*256,_1ec(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}}return null;};var _1ee=function(c,low,high){c=Number(c);return isNaN(c)?high:c<low?low:c>high?high:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_1ee(t.r,0,255));t.g=Math.round(_1ee(t.g,0,255));t.b=Math.round(_1ee(t.b,0,255));t.a=_1ee(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};dojo.mixin(dojo.Color.named,{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]});}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.i18n.getLocalization=function(_1ef,_1f0,_1f1){_1f1=dojo.i18n.normalizeLocale(_1f1);var _1f2=_1f1.split("-");var _1f3=[_1ef,"nls",_1f0].join(".");var _1f4=dojo._loadedModules[_1f3];if(_1f4){var _1f5;for(var i=_1f2.length;i>0;i--){var loc=_1f2.slice(0,i).join("_");if(_1f4[loc]){_1f5=_1f4[loc];break;}}if(!_1f5){_1f5=_1f4.ROOT;}if(_1f5){var _1f6=function(){};_1f6.prototype=_1f5;return new _1f6();}}throw new Error("Bundle not found: "+_1f0+" in "+_1ef+" , locale="+_1f1);};dojo.i18n.normalizeLocale=function(_1f7){var _1f8=_1f7?_1f7.toLowerCase():dojo.locale;if(_1f8=="root"){_1f8="ROOT";}return _1f8;};dojo.i18n._requireLocalization=function(_1f9,_1fa,_1fb,_1fc){var _1fd=dojo.i18n.normalizeLocale(_1fb);var _1fe=[_1f9,"nls",_1fa].join(".");var _1ff="";if(_1fc){var _200=_1fc.split(",");for(var i=0;i<_200.length;i++){if(_1fd["indexOf"](_200[i])==0){if(_200[i].length>_1ff.length){_1ff=_200[i];}}}if(!_1ff){_1ff="ROOT";}}var _201=_1fc?_1ff:_1fd;var _202=dojo._loadedModules[_1fe];var _203=null;if(_202){if(dojo.config.localizationComplete&&_202._built){return;}var _204=_201.replace(/-/g,"_");var _205=_1fe+"."+_204;_203=dojo._loadedModules[_205];}if(!_203){_202=dojo["provide"](_1fe);var syms=dojo._getModuleSymbols(_1f9);var _206=syms.concat("nls").join("/");var _207;dojo.i18n._searchLocalePath(_201,_1fc,function(loc){var _208=loc.replace(/-/g,"_");var _209=_1fe+"."+_208;var _20a=false;if(!dojo._loadedModules[_209]){dojo["provide"](_209);var _20b=[_206];if(loc!="ROOT"){_20b.push(loc);}_20b.push(_1fa);var _20c=_20b.join("/")+".js";_20a=dojo._loadPath(_20c,null,function(hash){var _20d=function(){};_20d.prototype=_207;_202[_208]=new _20d();for(var j in hash){_202[_208][j]=hash[j];}});}else{_20a=true;}if(_20a&&_202[_208]){_207=_202[_208];}else{_202[_208]=_207;}if(_1fc){return true;}});}if(_1fc&&_1fd!=_1ff){_202[_1fd.replace(/-/g,"_")]=_202[_1ff.replace(/-/g,"_")];}};(function(){var _20e=dojo.config.extraLocale;if(_20e){if(!_20e instanceof Array){_20e=[_20e];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_20f,_210){req(m,b,_20f,_210);if(_20f){return;}for(var i=0;i<_20e.length;i++){req(m,b,_20e[i],_210);}};}})();dojo.i18n._searchLocalePath=function(_211,down,_212){_211=dojo.i18n.normalizeLocale(_211);var _213=_211.split("-");var _214=[];for(var i=_213.length;i>0;i--){_214.push(_213.slice(0,i).join("-"));}_214.push(false);if(down){_214.reverse();}for(var j=_214.length-1;j>=0;j--){var loc=_214[j]||"ROOT";var stop=_212(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_215,_216){function _217(_218){_218=dojo.i18n.normalizeLocale(_218);dojo.i18n._searchLocalePath(_218,true,function(loc){for(var i=0;i<_216.length;i++){if(_216[i]==loc){dojo["require"](_215+"_"+loc);return true;}}return false;});};_217();var _219=dojo.config.extraLocale||[];for(var i=0;i<_219.length;i++){_217(_219[i]);}};}if(!dojo._hasResource["dijit._PaletteMixin"]){dojo._hasResource["dijit._PaletteMixin"]=true;dojo.provide("dijit._PaletteMixin");dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_21a,_21b){this._cells=[];var url=this._blankGif;var _21c=dojo.getObject(this.dyeClass);for(var row=0;row<_21a.length;row++){var _21d=dojo.create("tr",{tabIndex:"-1"},this.gridNode);for(var col=0;col<_21a[row].length;col++){var _21e=_21a[row][col];if(_21e){var _21f=new _21c(_21e);var _220=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_21b[_21e]});_21f.fillCell(_220,url);this.connect(_220,"ondijitclick","_onCellClick");this._trackMouseState(_220,this.cellClass);dojo.place(_220,_21d);_220.index=this._cells.length;this._cells.push({node:_220,dye:_21f});}}}this._xDim=_21a[0].length;this._yDim=_21a.length;var _221={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};for(var key in _221){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _222=_221[key];return function(_223){this._navigateByKey(_222,_223);};}(),this.timeoutChangeRate,this.defaultTimeout));}},postCreate:function(){this.inherited(arguments);this._setCurrent(this._cells[0].node);},focus:function(){dijit.focus(this._currentFocus);},_onCellClick:function(evt){var _224=evt.currentTarget,_225=this._getDye(_224).getValue();this._setCurrent(_224);setTimeout(dojo.hitch(this,function(){dijit.focus(_224);this._setValueAttr(_225,true);}));dojo.removeClass(_224,"dijitPaletteCellHover");dojo.stopEvent(evt);},_setCurrent:function(node){if("_currentFocus" in this){dojo.attr(this._currentFocus,"tabIndex","-1");}this._currentFocus=node;if(node){dojo.attr(node,"tabIndex",this.tabIndex);}},_setValueAttr:function(_226,_227){this.value=null;if(this._selectedCell>=0){dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");}this._selectedCell=-1;if(_226){for(var i=0;i<this._cells.length;i++){if(_226==this._cells[i].dye.getValue()){this._selectedCell=i;this.value=_226;dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");if(_227||_227===undefined){this.onChange(_226);}break;}}}},onChange:function(_228){},_navigateByKey:function(_229,_22a){if(_22a==-1){return;}var _22b=this._currentFocus.index+_229;if(_22b<this._cells.length&&_22b>-1){var _22c=this._cells[_22b].node;this._setCurrent(_22c);setTimeout(dojo.hitch(dijit,"focus",_22c),0);}},_getDye:function(cell){return this._cells[cell.index].dye;}});}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_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.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png"),"7x10-rtl":dojo.moduleUrl("dijit.themes","a11y/colors7x10-rtl.png"),"3x4-rtl":dojo.moduleUrl("dijit.themes","a11y/colors3x4-rtl.png")},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",dyeClass:"dijit._Color",buildRendering:function(){this.inherited(arguments);this.imageNode.setAttribute("src",this._imagePaths[this.palette+(this.isLeftToRight()?"":"-rtl")].toString());var _22d=dojo.i18n.getLocalization("dojo","colors",this.lang);this._preparePalette(this._palettes[this.palette],_22d);}});dojo.declare("dijit._Color",dojo.Color,{constructor:function(_22e){this._alias=_22e;this.setColor(dojo.Color.named[_22e]);},getValue:function(){return this.toHex();},fillCell:function(cell,_22f){dojo.create("img",{src:_22f,"class":"dijitPaletteImg",alt:this._alias},cell);}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.dnd.getCopyKeyState=dojo.isCopyKey;dojo.dnd._uniqueId=0;dojo.dnd.getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++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.position(n,true);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-t.x,ry=e.pageY-t.y,dx=0,dy=0;if(dojo.isWebKit||dojo.isOpera){rx+=dojo.body().scrollLeft,ry+=dojo.body().scrollTop;}if(rx>0&&rx<b.w){if(rx<w){dx=-w;}else{if(rx>b.w-w){dx=w;}}}if(ry>0&&ry<b.h){if(ry<h){dy=-h;}else{if(ry>b.h-h){dy=h;}}}var _230=n.scrollLeft,_231=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_230!=n.scrollLeft||_231!=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(node,e,host){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,_232=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.body,"onselectstart",dojo.stopEvent),_232];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},e);dojo.stopEvent(e);},onMouseUp:function(e){if(dojo.isWebKit&&dojo.isMac&&this.mouseButton==2?e.button==0:this.mouseButton==e.button){this.destroy();}dojo.stopEvent(e);},onFirstMove:function(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;break;default:s.position="absolute";var m=dojo.marginBox(this.node);var b=dojo.doc.body;var bs=dojo.getComputedStyle(b);var bm=dojo._getMarginBox(b,bs);var bc=dojo._getContentBox(b,bs);l=m.l-(bc.l-bm.l);t=m.t-(bc.t-bm.t);break;}this.marginBox.l=l-this.marginBox.l;this.marginBox.t=t-this.marginBox.t;if(h&&h.onFirstMove){h.onFirstMove(this,e);}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=this.host=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(node,_233){this.node=dojo.byId(node);if(!_233){_233={};}this.handle=_233.handle?dojo.byId(_233.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_233.delay>0?_233.delay:0;this.skip=_233.skip;this.mover=_233.mover?_233.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(_234,node){return new dojo.dnd.Moveable(node,_234);},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"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"));this._lastX=e.pageX;this._lastY=e.pageY;}else{this.onDragDetected(e);}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);this.onDragDetected(e);}dojo.stopEvent(e);},onMouseUp:function(e){for(var i=0;i<2;++i){dojo.disconnect(this.events.pop());}dojo.stopEvent(e);},onSelectStart:function(e){if(!this.skip||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onDragDetected:function(e){new this.mover(this.node,e,this);},onMoveStart:function(_235){dojo.publish("/dnd/move/start",[_235]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_236){dojo.publish("/dnd/move/stop",[_236]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_237,e){},onMove:function(_238,_239,e){this.onMoving(_238,_239);var s=_238.node.style;s.left=_239.l+"px";s.top=_239.t+"px";this.onMoved(_238,_239);},onMoving:function(_23a,_23b){},onMoved:function(_23c,_23d){}});}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(_23e,node){return new dojo.dnd.move.constrainedMoveable(node,_23e);},constructor:function(node,_23f){if(!_23f){_23f={};}this.constraints=_23f.constraints;this.within=_23f.within;},onFirstMove:function(_240){var c=this.constraintBox=this.constraints.call(this,_240);c.r=c.l+c.w;c.b=c.t+c.h;if(this.within){var mb=dojo.marginBox(_240.node);c.r-=mb.w;c.b-=mb.h;}},onMove:function(_241,_242){var c=this.constraintBox,s=_241.node.style;s.left=(_242.l<c.l?c.l:c.r<_242.l?c.r:_242.l)+"px";s.top=(_242.t<c.t?c.t:c.b<_242.t?c.b:_242.t)+"px";}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_243,node){return new dojo.dnd.move.boxConstrainedMoveable(node,_243);},constructor:function(node,_244){var box=_244&&_244.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_245,node){return new dojo.dnd.move.parentConstrainedMoveable(node,_245);},constructor:function(node,_246){var area=_246&&_246.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(area=="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(area=="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(area=="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,_247){dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead");var _248=function(node,e,_249){dojo.dnd.Mover.call(this,node,e,_249);};dojo.extend(_248,dojo.dnd.Mover.prototype);dojo.extend(_248,{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);c.r=c.l+c.w;c.b=c.t+c.h;if(_247){var mb=dojo.marginBox(this.node);c.r-=mb.w;c.b-=mb.h;}}});return _248;};dojo.dnd.move.boxConstrainedMover=function(box,_24a){dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead");return dojo.dnd.move.constrainedMover(function(){return box;},_24a);};dojo.dnd.move.parentConstrainedMover=function(area,_24b){dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead");var fun=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(area=="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(area=="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(area=="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,_24b);};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.dnd.TimedMoveable"]){dojo._hasResource["dojo.dnd.TimedMoveable"]=true;dojo.provide("dojo.dnd.TimedMoveable");(function(){var _24c=dojo.dnd.Moveable.prototype.onMove;dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(node,_24d){if(!_24d){_24d={};}if(_24d.timeout&&typeof _24d.timeout=="number"&&_24d.timeout>=0){this.timeout=_24d.timeout;}},markupFactory:function(_24e,node){return new dojo.dnd.TimedMoveable(node,_24e);},onMoveStop:function(_24f){if(_24f._timer){clearTimeout(_24f._timer);_24c.call(this,_24f,_24f._leftTop);}dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);},onMove:function(_250,_251){_250._leftTop=_251;if(!_250._timer){var _252=this;_250._timer=setTimeout(function(){_250._timer=null;_24c.call(_252,_250,_250._leftTop);},this.timeout);}}});})();}if(!dojo._hasResource["dijit.form._FormMixin"]){dojo._hasResource["dijit.form._FormMixin"]=true;dojo.provide("dijit.form._FormMixin");dojo.declare("dijit.form._FormMixin",null,{reset:function(){dojo.forEach(this.getDescendants(),function(_253){if(_253.reset){_253.reset();}});},validate:function(){var _254=false;return dojo.every(dojo.map(this.getDescendants(),function(_255){_255._hasBeenBlurred=true;var _256=_255.disabled||!_255.validate||_255.validate();if(!_256&&!_254){dojo.window.scrollIntoView(_255.containerNode||_255.domNode);_255.focus();_254=true;}return _256;}),function(item){return item;});},setValues:function(val){dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_257){if(!_257.name){return;}var _258=map[_257.name]||(map[_257.name]=[]);_258.push(_257);});for(var name in map){if(!map.hasOwnProperty(name)){continue;}var _259=map[name],_25a=dojo.getObject(name,false,obj);if(_25a===undefined){continue;}if(!dojo.isArray(_25a)){_25a=[_25a];}if(typeof _259[0].checked=="boolean"){dojo.forEach(_259,function(w,i){w.set("value",dojo.indexOf(_25a,w.value)!=-1);});}else{if(_259[0].multiple){_259[0].set("value",_25a);}else{dojo.forEach(_259,function(w,i){w.set("value",_25a[i]);});}}}},getValues:function(){dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_getValueAttr:function(){var obj={};dojo.forEach(this.getDescendants(),function(_25b){var name=_25b.name;if(!name||_25b.disabled){return;}var _25c=_25b.get("value");if(typeof _25b.checked=="boolean"){if(/Radio/.test(_25b.declaredClass)){if(_25c!==false){dojo.setObject(name,_25c,obj);}else{_25c=dojo.getObject(name,false,obj);if(_25c===undefined){dojo.setObject(name,null,obj);}}}else{var ary=dojo.getObject(name,false,obj);if(!ary){ary=[];dojo.setObject(name,ary,obj);}if(_25c!==false){ary.push(_25c);}}}else{var prev=dojo.getObject(name,false,obj);if(typeof prev!="undefined"){if(dojo.isArray(prev)){prev.push(_25c);}else{dojo.setObject(name,[prev,_25c],obj);}}else{dojo.setObject(name,_25c,obj);}}});return obj;},isValid:function(){this._invalidWidgets=dojo.filter(this.getDescendants(),function(_25d){return !_25d.disabled&&_25d.isValid&&!_25d.isValid();});return !this._invalidWidgets.length;},onValidStateChange:function(_25e){},_widgetChange:function(_25f){var _260=this._lastValidState;if(!_25f||this._lastValidState===undefined){_260=this.isValid();if(this._lastValidState===undefined){this._lastValidState=_260;}}else{if(_25f.isValid){this._invalidWidgets=dojo.filter(this._invalidWidgets||[],function(w){return (w!=_25f);},this);if(!_25f.isValid()&&!_25f.get("disabled")){this._invalidWidgets.push(_25f);}_260=(this._invalidWidgets.length===0);}}if(_260!==this._lastValidState){this._lastValidState=_260;this.onValidStateChange(_260);}},connectChildren:function(){dojo.forEach(this._changeConnections,dojo.hitch(this,"disconnect"));var _261=this;var _262=(this._changeConnections=[]);dojo.forEach(dojo.filter(this.getDescendants(),function(item){return item.validate;}),function(_263){_262.push(_261.connect(_263,"validate",dojo.hitch(_261,"_widgetChange",_263)));_262.push(_261.connect(_263,"_setDisabledAttr",dojo.hitch(_261,"_widgetChange",_263)));});this._widgetChange(null);},startup:function(){this.inherited(arguments);this._changeConnections=[];this.connectChildren();}});}if(!dojo._hasResource["dijit._DialogMixin"]){dojo._hasResource["dijit._DialogMixin"]=true;dojo.provide("dijit._DialogMixin");dojo.declare("dijit._DialogMixin",null,{attributeMap:dijit._Widget.prototype.attributeMap,execute:function(_264){},onCancel:function(){},onExecute:function(){},_onSubmit:function(){this.onExecute();this.execute(this.get("value"));},_getFocusItems:function(_265){var _266=dijit._getTabNavigable(dojo.byId(_265));this._firstFocusItem=_266.lowest||_266.first||_265;this._lastFocusItem=_266.last||_266.highest||this._firstFocusItem;if(dojo.isMoz&&this._firstFocusItem.tagName.toLowerCase()=="input"&&dojo.getNodeProp(this._firstFocusItem,"type").toLowerCase()=="file"){dojo.attr(_265,"tabIndex","0");this._firstFocusItem=_265;}}});}if(!dojo._hasResource["dijit.DialogUnderlay"]){dojo._hasResource["dijit.DialogUnderlay"]=true;dojo.provide("dijit.DialogUnderlay");dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",dialogId:"","class":"",attributeMap:{id:"domNode"},_setDialogIdAttr:function(id){dojo.attr(this.node,"id",id+"_underlay");},_setClassAttr:function(_267){this.node.className="dijitDialogUnderlay "+_267;},postCreate:function(){dojo.body().appendChild(this.domNode);},layout:function(){var is=this.node.style,os=this.domNode.style;os.display="none";var _268=dojo.window.getBox();os.top=_268.t+"px";os.left=_268.l+"px";is.width=_268.w+"px";is.height=_268.h+"px";os.display="block";},show:function(){this.domNode.style.display="block";this.layout();this.bgIframe=new dijit.BackgroundIframe(this.domNode);},hide:function(){this.bgIframe.destroy();this.domNode.style.display="none";},uninitialize:function(){if(this.bgIframe){this.bgIframe.destroy();}this.inherited(arguments);}});}if(!dojo._hasResource["dojo.html"]){dojo._hasResource["dojo.html"]=true;dojo.provide("dojo.html");(function(){var _269=0,d=dojo;dojo.html._secureForInnerHtml=function(cont){return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");};dojo.html._emptyNode=dojo.empty;dojo.html._setNodeContent=function(node,cont){d.empty(node);if(cont){if(typeof cont=="string"){cont=d._toDom(cont,node.ownerDocument);}if(!cont.nodeType&&d.isArrayLike(cont)){for(var _26a=cont.length,i=0;i<cont.length;i=_26a==cont.length?i+1:0){d.place(cont[i],node,"last");}}else{d.place(cont,node,"last");}}return node;};dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,constructor:function(_26b,node){dojo.mixin(this,_26b||{});node=this.node=dojo.byId(this.node||node);if(!this.id){this.id=["Setter",(node)?node.id||node.tagName:"",_269++].join("_");}},set:function(cont,_26c){if(undefined!==cont){this.content=cont;}if(_26c){this._mixin(_26c);}this.onBegin();this.setContent();this.onEnd();return this.node;},setContent:function(){var node=this.node;if(!node){throw new Error(this.declaredClass+": setContent given no node");}try{node=dojo.html._setNodeContent(node,this.content);}catch(e){var _26d=this.onContentError(e);try{node.innerHTML=_26d;}catch(e){console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);}}this.node=node;},empty:function(){if(this.parseResults&&this.parseResults.length){dojo.forEach(this.parseResults,function(w){if(w.destroy){w.destroy();}});delete this.parseResults;}dojo.html._emptyNode(this.node);},onBegin:function(){var cont=this.content;if(dojo.isString(cont)){if(this.cleanContent){cont=dojo.html._secureForInnerHtml(cont);}if(this.extractContent){var _26e=cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_26e){cont=_26e[1];}}}this.empty();this.content=cont;return this.node;},onEnd:function(){if(this.parseContent){this._parse();}return this.node;},tearDown:function(){delete this.parseResults;delete this.node;delete this.content;},onContentError:function(err){return "Error occured setting content: "+err;},_mixin:function(_26f){var _270={},key;for(key in _26f){if(key in _270){continue;}this[key]=_26f[key];}},_parse:function(){var _271=this.node;try{this.parseResults=dojo.parser.parse({rootNode:_271,dir:this.dir,lang:this.lang});}catch(e){this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);}},_onError:function(type,err,_272){var _273=this["on"+type+"Error"].call(this,err);if(_272){console.error(_272,err);}else{if(_273){dojo.html._setNodeContent(this.node,_273,true);}}}});dojo.html.set=function(node,cont,_274){if(undefined==cont){console.warn("dojo.html.set: no cont argument provided, using empty string");cont="";}if(!_274){return dojo.html._setNodeContent(node,cont,true);}else{var op=new dojo.html._ContentSetter(dojo.mixin(_274,{content:cont,node:node}));return op.set();}};})();}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,baseClass:"dijitContentPane",doLayout:true,ioArgs:{},isContainer:true,isLayoutContainer:true,onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),postMixInProperties:function(){this.inherited(arguments);var _275=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_275);this.errorMessage=dojo.string.substitute(this.errorMessage,_275);if(!this.href&&this.srcNodeRef&&this.srcNodeRef.innerHTML){this.isLoaded=true;}},buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},postCreate:function(){this.domNode.title="";if(!dojo.attr(this.domNode,"role")){dijit.setWaiRole(this.domNode,"group");}dojo.addClass(this.domNode,this.baseClass);},startup:function(){if(this._started){return;}var _276=dijit._Contained.prototype.getParent.call(this);this._childOfLayoutWidget=_276&&_276.isLayoutContainer;this._needLayout=!this._childOfLayoutWidget;if(this.isLoaded){dojo.forEach(this.getChildren(),function(_277){_277.startup();});}if(this._isShown()||this.preload){this._onShow();}this.inherited(arguments);},_checkIfSingleChild:function(){var _278=dojo.query("> *",this.containerNode).filter(function(node){return node.tagName!=="SCRIPT";}),_279=_278.filter(function(node){return dojo.hasAttr(node,"dojoType")||dojo.hasAttr(node,"widgetId");}),_27a=dojo.filter(_279.map(dijit.byNode),function(_27b){return _27b&&_27b.domNode&&_27b.resize;});if(_278.length==_279.length&&_27a.length==1){this._singleChild=_27a[0];}else{delete this._singleChild;}dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);},setHref:function(href){dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");return this.set("href",href);},_setHrefAttr:function(href){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.href=href;if(this._created&&(this.preload||this._isShown())){this._load();}else{this._hrefChanged=true;}return this.onLoadDeferred;},setContent:function(data){dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated. Use set('content', ...) instead.","","2.0");this.set("content",data);},_setContentAttr:function(data){this.href="";this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._setContent(data||"");this._isDownloaded=false;return this.onLoadDeferred;},_getContentAttr:function(){return this.containerNode.innerHTML;},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;this.onLoadDeferred=null;},uninitialize:function(){if(this._beingDestroyed){this.cancel();}this.inherited(arguments);},destroyRecursive:function(_27c){if(this._beingDestroyed){return;}this.inherited(arguments);},resize:function(_27d,_27e){if(!this._wasShown){this._onShow();}this._resizeCalled=true;if(_27d){dojo.marginBox(this.domNode,_27d);}var cn=this.containerNode;if(cn===this.domNode){var mb=_27e||{};dojo.mixin(mb,_27d||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(cn),mb);}this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);}else{this._contentBox=dojo.contentBox(cn);}this._layoutChildren();},_isShown:function(){if(this._childOfLayoutWidget){if(this._resizeCalled&&"open" in this){return this.open;}return this._resizeCalled;}else{if("open" in this){return this.open;}else{var node=this.domNode;return (node.style.display!="none")&&(node.style.visibility!="hidden")&&!dojo.hasClass(node,"dijitHidden");}}},_onShow:function(){if(this.href){if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){this.refresh();}}else{if(!this._childOfLayoutWidget&&this._needLayout){this._layoutChildren();}}this.inherited(arguments);this._wasShown=true;},refresh:function(){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this._load();return this.onLoadDeferred;},_load:function(){this._setContent(this.onDownloadStart(),true);var self=this;var _27f={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_27f,this.ioArgs);}var hand=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_27f));hand.addCallback(function(html){try{self._isDownloaded=true;self._setContent(html,false);self.onDownloadEnd();}catch(err){self._onError("Content",err);}delete self._xhrDfd;return html;});hand.addErrback(function(err){if(!hand.canceled){self._onError("Download",err);}delete self._xhrDfd;return err;});delete this._hrefChanged;},_onLoadHandler:function(data){this.isLoaded=true;try{this.onLoadDeferred.callback(data);this.onLoad(data);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);}},_onUnloadHandler:function(){this.isLoaded=false;try{this.onUnload();}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);}},destroyDescendants:function(){if(this.isLoaded){this._onUnloadHandler();}var _280=this._contentSetter;dojo.forEach(this.getChildren(),function(_281){if(_281.destroyRecursive){_281.destroyRecursive();}});if(_280){dojo.forEach(_280.parseResults,function(_282){if(_282.destroyRecursive&&_282.domNode&&_282.domNode.parentNode==dojo.body()){_282.destroyRecursive();}});delete _280.parseResults;}dojo.html._emptyNode(this.containerNode);delete this._singleChild;},_setContent:function(cont,_283){this.destroyDescendants();var _284=this._contentSetter;if(!(_284&&_284 instanceof dojo.html._ContentSetter)){_284=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){var _285=this.onContentError(e);try{this.containerNode.innerHTML=_285;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}})});}var _286=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,dir:this.dir,lang:this.lang},this._contentSetterParams||{});dojo.mixin(_284,_286);_284.set((dojo.isObject(cont)&&cont.domNode)?cont.domNode:cont);delete this._contentSetterParams;if(!_283){dojo.forEach(this.getChildren(),function(_287){if(!this.parseOnLoad||_287.getParent){_287.startup();}},this);this._scheduleLayout();this._onLoadHandler(cont);}},_onError:function(type,err,_288){this.onLoadDeferred.errback(err);var _289=this["on"+type+"Error"].call(this,err);if(_288){console.error(_288,err);}else{if(_289){this._setContent(_289,true);}}},_scheduleLayout:function(){if(this._isShown()){this._layoutChildren();}else{this._needLayout=true;}},_layoutChildren:function(){if(this.doLayout){this._checkIfSingleChild();}if(this._singleChild&&this._singleChild.resize){var cb=this._contentBox||dojo.contentBox(this.containerNode);this._singleChild.resize({w:cb.w,h:cb.h});}else{dojo.forEach(this.getChildren(),function(_28a){if(_28a.resize){_28a.resize();}});}delete this._needLayout;},onLoad:function(data){},onUnload:function(){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_28b){},onDownloadError:function(_28c){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.TooltipDialog"]){dojo._hasResource["dijit.TooltipDialog"]=true;dojo.provide("dijit.TooltipDialog");dojo.declare("dijit.TooltipDialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin],{title:"",doLayout:false,autofocus:true,baseClass:"dijitTooltipDialog",_firstFocusItem:null,_lastFocusItem:null,templateString:dojo.cache("dijit","templates/TooltipDialog.html","<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"),postCreate:function(){this.inherited(arguments);this.connect(this.containerNode,"onkeypress","_onKey");this.containerNode.title=this.title;},orient:function(node,_28d,_28e){var c=this._currentOrientClass;if(c){dojo.removeClass(this.domNode,c);}c="dijitTooltipAB"+(_28e.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_28e.charAt(0)=="T"?"Below":"Above");dojo.addClass(this.domNode,c);this._currentOrientClass=c;},onOpen:function(pos){this.orient(this.domNode,pos.aroundCorner,pos.corner);this._onShow();if(this.autofocus){this._getFocusItems(this.containerNode);dijit.focus(this._firstFocusItem);}},onClose:function(){this.onHide();},_onKey:function(evt){var node=evt.target;var dk=dojo.keys;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.containerNode);}var _28f=(this._firstFocusItem==this._lastFocusItem);if(evt.charOrCode==dk.ESCAPE){setTimeout(dojo.hitch(this,"onCancel"),0);dojo.stopEvent(evt);}else{if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_28f){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_28f){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{if(evt.charOrCode===dk.TAB){evt.stopPropagation();}}}}}});}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.html","<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){var _290=dojo.i18n.getLocalization("dijit","common");dojo.mixin(this,_290);this.inherited(arguments);},postCreate:function(){dojo.style(this.domNode,{display:"none",position:"absolute"});dojo.body().appendChild(this.domNode);this.inherited(arguments);this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");this._modalconnects=[];},onLoad:function(){this._position();if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this.inherited(arguments);},_endDrag:function(e){if(e&&e.node&&e.node===this.domNode){this._relativePosition=dojo.position(e.node);}},_setup:function(){var node=this.domNode;if(this.titleBar&&this.draggable){this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(node,{handle:this.titleBar}):new dojo.dnd.Moveable(node,{handle:this.titleBar,timeout:0});dojo.subscribe("/dnd/move/stop",this,"_endDrag");}else{dojo.addClass(node,"dijitDialogFixed");}this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){return s+"_underlay";}).join(" ")};this._fadeIn=dojo.fadeIn({node:node,duration:this.duration,beforeBegin:dojo.hitch(this,function(){var _291=dijit._underlay;if(!_291){_291=dijit._underlay=new dijit.DialogUnderlay(this.underlayAttrs);}else{_291.set(this.underlayAttrs);}var ds=dijit._dialogStack,_292=948+ds.length*2;if(ds.length==1){_291.show();}dojo.style(dijit._underlay.domNode,"zIndex",_292);dojo.style(this.domNode,"zIndex",_292+1);}),onEnd:dojo.hitch(this,function(){if(this.autofocus){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}})});this._fadeOut=dojo.fadeOut({node:node,duration:this.duration,onEnd:dojo.hitch(this,function(){node.style.display="none";var ds=dijit._dialogStack;if(ds.length==0){dijit._underlay.hide();}else{dojo.style(dijit._underlay.domNode,"zIndex",948+ds.length*2);dijit._underlay.set(ds[ds.length-1].underlayAttrs);}if(this.refocus){var _293=this._savedFocus;if(ds.length>0){var pd=ds[ds.length-1];if(!dojo.isDescendant(_293.node,pd.domNode)){pd._getFocusItems(pd.domNode);_293=pd._firstFocusItem;}}dijit.focus(_293);}})});},uninitialize:function(){var _294=false;if(this._fadeIn&&this._fadeIn.status()=="playing"){_294=true;this._fadeIn.stop();}if(this._fadeOut&&this._fadeOut.status()=="playing"){_294=true;this._fadeOut.stop();}if((this.open||_294)&&!dijit._underlay._destroyed){dijit._underlay.hide();}if(this._moveable){this._moveable.destroy();}this.inherited(arguments);},_size:function(){this._checkIfSingleChild();if(this._singleChild){if(this._singleChildOriginalStyle){this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;}delete this._singleChildOriginalStyle;}else{dojo.style(this.containerNode,{width:"auto",height:"auto"});}var mb=dojo.marginBox(this.domNode);var _295=dojo.window.getBox();if(mb.w>=_295.w||mb.h>=_295.h){var w=Math.min(mb.w,Math.floor(_295.w*0.75)),h=Math.min(mb.h,Math.floor(_295.h*0.75));if(this._singleChild&&this._singleChild.resize){this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;this._singleChild.resize({w:w,h:h});}else{dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});}}else{if(this._singleChild&&this._singleChild.resize){this._singleChild.resize();}}},_position:function(){if(!dojo.hasClass(dojo.body(),"dojoMove")){var node=this.domNode,_296=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(node),l=Math.floor(_296.l+(p?p.x:(_296.w-bb.w)/2)),t=Math.floor(_296.t+(p?p.y:(_296.h-bb.h)/2));dojo.style(node,{left:l+"px",top:t+"px"});}},_onKey:function(evt){var ds=dijit._dialogStack;if(ds[ds.length-1]!=this){return;}if(evt.charOrCode){var dk=dojo.keys;var node=evt.target;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.domNode);}var _297=(this._firstFocusItem==this._lastFocusItem);if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_297){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_297){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode||dojo.hasClass(node,"dijitPopup")){if(evt.charOrCode==dk.ESCAPE){this.onCancel();}else{return;}}node=node.parentNode;}if(evt.charOrCode!==dk.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this._firstFocusItem.focus();}catch(e){}}}}}}},show:function(){if(this.open){return;}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(window,"onresize",this,function(){var _298=dojo.window.getBox();if(!this._oldViewport||_298.h!=this._oldViewport.h||_298.w!=this._oldViewport.w){this.layout();this._oldViewport=_298;}}));this._modalconnects.push(dojo.connect(dojo.doc.documentElement,"onkeypress",this,"_onKey"));dojo.style(this.domNode,{opacity:0,display:""});this.open=true;this._onShow();this._size();this._position();dijit._dialogStack.push(this);this._fadeIn.play();this._savedFocus=dijit.getFocus(this);},hide:function(){var ds=dijit._dialogStack;if(!this._alreadyInitialized||this!=ds[ds.length-1]){return;}if(this._fadeIn.status()=="playing"){this._fadeIn.stop();}ds.pop();this._fadeOut.play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];if(this._relativePosition){delete this._relativePosition;}this.open=false;this.onHide();},layout:function(){if(this.domNode.style.display!="none"){if(dijit._underlay){dijit._underlay.layout();}this._position();}},destroy:function(){dojo.forEach(this._modalconnects,dojo.disconnect);if(this.refocus&&this.open){setTimeout(dojo.hitch(dijit,"focus",this._savedFocus),25);}this.inherited(arguments);}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});dijit._dialogStack=[];}if(!dojo._hasResource["dijit._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");dojo.declare("dijit._HasDropDown",null,{_buttonNode:null,_arrowWrapperNode:null,_popupStateNode:null,_aroundNode:null,dropDown:null,autoWidth:true,forceWidth:false,maxHeight:0,dropDownPosition:["below","above"],_stopClickEvents:true,_onDropDownMouseDown:function(e){if(this.disabled||this.readOnly){return;}this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");this.toggleDropDown();},_onDropDownMouseUp:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _299=this.dropDown,_29a=false;if(e&&this._opened){var c=dojo.position(this._buttonNode,true);if(!(e.pageX>=c.x&&e.pageX<=c.x+c.w)||!(e.pageY>=c.y&&e.pageY<=c.y+c.h)){var t=e.target;while(t&&!_29a){if(dojo.hasClass(t,"dijitPopup")){_29a=true;}else{t=t.parentNode;}}if(_29a){t=e.target;if(_299.onItemClick){var _29b;while(t&&!(_29b=dijit.byNode(t))){t=t.parentNode;}if(_29b&&_29b.onClick&&_29b.getParent){_29b.getParent().onItemClick(_29b,e);}}return;}}}if(this._opened&&_299.focus){window.setTimeout(dojo.hitch(_299,"focus"),1);}},_onDropDownClick:function(e){if(this._stopClickEvents){dojo.stopEvent(e);}},_setupDropdown:function(){this._buttonNode=this._buttonNode||this.focusNode||this.domNode;this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;this._aroundNode=this._aroundNode||this.domNode;this.connect(this._buttonNode,"onmousedown","_onDropDownMouseDown");this.connect(this._buttonNode,"onclick","_onDropDownClick");this.connect(this._buttonNode,"onkeydown","_onDropDownKeydown");this.connect(this._buttonNode,"onkeyup","_onKey");if(this._setStateClass){this.connect(this,"openDropDown","_setStateClass");this.connect(this,"closeDropDown","_setStateClass");}var _29c={"after":this.isLeftToRight()?"Right":"Left","before":this.isLeftToRight()?"Left":"Right","above":"Up","below":"Down","left":"Left","right":"Right"}[this.dropDownPosition[0]]||this.dropDownPosition[0]||"Down";dojo.addClass(this._arrowWrapperNode||this._buttonNode,"dijit"+_29c+"ArrowButton");},postCreate:function(){this._setupDropdown();this.inherited(arguments);},destroyDescendants:function(){if(this.dropDown){if(!this.dropDown._destroyed){this.dropDown.destroyRecursive();}delete this.dropDown;}this.inherited(arguments);},_onDropDownKeydown:function(e){if(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE){e.preventDefault();}},_onKey:function(e){if(this.disabled||this.readOnly){return;}var d=this.dropDown;if(d&&this._opened&&d.handleKey){if(d.handleKey(e)===false){return;}}if(d&&this._opened&&e.keyCode==dojo.keys.ESCAPE){this.toggleDropDown();}else{if(d&&!this._opened&&(e.keyCode==dojo.keys.DOWN_ARROW||e.keyCode==dojo.keys.ENTER||e.keyCode==dojo.keys.SPACE)){this.toggleDropDown();if(d.focus){setTimeout(dojo.hitch(d,"focus"),1);}}}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_29d){_29d();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}this.focus();var _29e=this.dropDown;if(!_29e){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _29f=this.dropDown;var _2a0=_29f.domNode;var self=this;if(!this._preparedNode){dijit.popup.moveOffScreen(_2a0);this._preparedNode=true;if(_2a0.style.width){this._explicitDDWidth=true;}if(_2a0.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _2a1={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_2a1.width="";}if(!this._explicitDDHeight){_2a1.height="";}dojo.style(_2a0,_2a1);var mb=dojo.marginBox(_2a0);var _2a2=(this.maxHeight&&mb.h>this.maxHeight);dojo.style(_2a0,{overflowX:"hidden",overflowY:_2a2?"auto":"hidden"});if(_2a2){mb.h=this.maxHeight;if("w" in mb){mb.w+=16;}}else{delete mb.h;}delete mb.t;delete mb.l;if(this.forceWidth){mb.w=this.domNode.offsetWidth;}else{if(this.autoWidth){mb.w=Math.max(mb.w,this.domNode.offsetWidth);}else{delete mb.w;}}if(dojo.isFunction(_29f.resize)){_29f.resize(mb);}else{dojo.marginBox(_2a0,mb);}}var _2a3=dijit.popup.open({parent:this,popup:_29f,around:this._aroundNode,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){self.closeDropDown(true);},onCancel:function(){self.closeDropDown(true);},onClose:function(){dojo.attr(self._popupStateNode,"popupActive",false);dojo.removeClass(self._popupStateNode,"dijitHasDropDownOpen");self._opened=false;self.state="";}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(self._popupStateNode,"dijitHasDropDownOpen");this._opened=true;this.state="Opened";return _2a3;},closeDropDown:function(_2a4){if(this._opened){if(_2a4){this.focus();}dijit.popup.close(this.dropDown);this._opened=false;this.state="";}}});}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:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">●</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode",iconClass:{node:"iconNode",type:"class"}}),_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){if(this._onClick(e)===false){e.preventDefault();}else{if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){for(var node=this.domNode;node.parentNode;node=node.parentNode){var _2a5=dijit.byNode(node);if(_2a5&&typeof _2a5._onSubmit=="function"){_2a5._onSubmit(e);break;}}}else{if(this.valueNode){this.valueNode.click();e.preventDefault();}}}},_fillContent:function(_2a6){if(_2a6&&(!this.params||!("label" in this.params))){this.set("label",_2a6.innerHTML);}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);},_setShowLabelAttr:function(val){if(this.containerNode){dojo.toggleClass(this.containerNode,"dijitDisplayNone",!val);}this.showLabel=val;},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_2a7){dojo.deprecated("dijit.form.Button.setLabel() is deprecated. Use set('label', ...) instead.","","2.0");this.set("label",_2a7);},_setLabelAttr:function(_2a8){this.containerNode.innerHTML=this.label=_2a8;if(this.showLabel==false&&!this.params.title){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">▼</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){if(this.srcNodeRef){var _2a9=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_2a9[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}if(!this.dropDown){var _2aa=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_2aa);delete this.dropDownContainer;}dijit.popup.moveOffScreen(this.dropDown.domNode);this.inherited(arguments);},isLoaded:function(){var _2ab=this.dropDown;return (!_2ab.href||_2ab.isLoaded);},loadDropDown:function(){var _2ac=this.dropDown;if(!_2ac){return;}if(!this.isLoaded()){var _2ad=dojo.connect(_2ac,"onLoad",this,function(){dojo.disconnect(_2ad);this.openDropDown();});_2ac.refresh();}else{this.openDropDown();}},isFocusable:function(){return this.inherited(arguments)&&!this._mouseDown;}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">▼</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){dijit.focus(this._popupStateNode);dojo.stopEvent(evt);}},_onArrowKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){dijit.focus(this.titleNode);dojo.stopEvent(evt);}},focus:function(_2ae){dijit.focus(_2ae=="start"?this.titleNode:this._popupStateNode);}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(evt){this.set("checked",!this.checked);},_setCheckedAttr:function(_2af,_2b0){this.checked=_2af;dojo.attr(this.focusNode||this.domNode,"checked",_2af);dijit.setWaiState(this.focusNode||this.domNode,"pressed",_2af);this._handleOnChange(_2af,_2b0);},setChecked:function(_2b1){dojo.deprecated("setChecked("+_2b1+") is deprecated. Use set('checked',"+_2b1+") instead.","","2.0");this.set("checked",_2b1);},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);}});}if(!dojo._hasResource["dijit.form.ToggleButton"]){dojo._hasResource["dijit.form.ToggleButton"]=true;dojo.provide("dijit.form.ToggleButton");}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:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_2b2){this.readOnly=_2b2;dojo.attr(this.focusNode,"readOnly",_2b2);dijit.setWaiState(this.focusNode,"readonly",_2b2);},_setValueAttr:function(_2b3,_2b4){if(typeof _2b3=="string"){this.value=_2b3;dojo.attr(this.focusNode,"value",_2b3);_2b3=true;}if(this._created){this.set("checked",_2b3,_2b4);}},_getValueAttr:function(){return (this.checked?this.value:false);},_setLabelAttr:undefined,postMixInProperties:function(){if(this.value==""){this.value="on";}this.checkedAttrSetting=this.checked?"checked":"";this.inherited(arguments);},_fillContent:function(_2b5){},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);this.value=this.params.value||"on";dojo.attr(this.focusNode,"value",this.value);},_onFocus:function(){if(this.id){dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");}this.inherited(arguments);},_onBlur:function(){if(this.id){dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");}this.inherited(arguments);},_onClick:function(e){if(this.readOnly){return false;}return this.inherited(arguments);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_2b6){this.inherited(arguments);if(!this._created){return;}if(_2b6){var _2b7=this;dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_2b8){if(_2b8.name==_2b7.name&&_2b8!=_2b7.focusNode&&_2b8.form==_2b7.focusNode.form){var _2b9=dijit.getEnclosingWidget(_2b8);if(_2b9&&_2b9.checked){_2b9.set("checked",false);}}});}},_clicked:function(e){if(!this.checked){this.set("checked",true);}}});}if(!dojo._hasResource["dijit.form.DropDownButton"]){dojo._hasResource["dijit.form.DropDownButton"]=true;dojo.provide("dijit.form.DropDownButton");}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.regexp.escapeString=function(str,_2ba){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_2ba&&_2ba.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_2bb){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("|"),_2bb);};dojo.regexp.group=function(_2bc,_2bd){return "("+(_2bd?"?:":"")+_2bc+")";};}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 r=-1;if(a===null){a=undefined;}if(b===null){b=undefined;}if(a==b){r=0;}else{if(a>b||a==null){r=1;}}return r;};dojo.data.util.sorter.createSortFunction=function(_2be,_2bf){var _2c0=[];function _2c1(attr,dir,comp,s){return function(_2c2,_2c3){var a=s.getValue(_2c2,attr);var b=s.getValue(_2c3,attr);return dir*comp(a,b);};};var _2c4;var map=_2bf.comparatorMap;var bc=dojo.data.util.sorter.basicComparator;for(var i=0;i<_2be.length;i++){_2c4=_2be[i];var attr=_2c4.attribute;if(attr){var dir=(_2c4.descending)?-1:1;var comp=bc;if(map){if(typeof attr!=="string"&&("toString" in attr)){attr=attr.toString();}comp=map[attr]||bc;}_2c0.push(_2c1(attr,dir,comp,_2bf));}}return function(rowA,rowB){var i=0;while(i<_2c0.length){var ret=_2c0[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(_2c5){_2c5=_2c5||{};if(!_2c5.store){_2c5.store=this;}var self=this;var _2c6=function(_2c7,_2c8){if(_2c8.onError){var _2c9=_2c8.scope||dojo.global;_2c8.onError.call(_2c9,_2c7,_2c8);}};var _2ca=function(_2cb,_2cc){var _2cd=_2cc.abort||null;var _2ce=false;var _2cf=_2cc.start?_2cc.start:0;var _2d0=(_2cc.count&&(_2cc.count!==Infinity))?(_2cf+_2cc.count):_2cb.length;_2cc.abort=function(){_2ce=true;if(_2cd){_2cd.call(_2cc);}};var _2d1=_2cc.scope||dojo.global;if(!_2cc.store){_2cc.store=self;}if(_2cc.onBegin){_2cc.onBegin.call(_2d1,_2cb.length,_2cc);}if(_2cc.sort){_2cb.sort(dojo.data.util.sorter.createSortFunction(_2cc.sort,self));}if(_2cc.onItem){for(var i=_2cf;(i<_2cb.length)&&(i<_2d0);++i){var item=_2cb[i];if(!_2ce){_2cc.onItem.call(_2d1,item,_2cc);}}}if(_2cc.onComplete&&!_2ce){var _2d2=null;if(!_2cc.onItem){_2d2=_2cb.slice(_2cf,_2d0);}_2cc.onComplete.call(_2d1,_2d2,_2cc);}};this._fetchItems(_2c5,_2ca,_2c6);return _2c5;};}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(_2d3,_2d4){var rxp="^";var c=null;for(var i=0;i<_2d3.length;i++){c=_2d3.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_2d3.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(_2d4){return new RegExp(rxp,"mi");}else{return new RegExp(rxp,"m");}};}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){var type=this.type.toLowerCase();if(this.templateString.toLowerCase()=="input"||((type=="hidden"||type=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){this.templateString=this._singleNodeTemplate;}this.inherited(arguments);},_setPlaceHolderAttr:function(v){this.placeHolder=v;if(!this._phspan){this._attachPoints.push("_phspan");this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");}this._phspan.innerHTML="";this._phspan.appendChild(document.createTextNode(v));this._updatePlaceHolder();},_updatePlaceHolder:function(){if(this._phspan){this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";}},_getValueAttr:function(){return this.parse(this.get("displayedValue"),this.constraints);},_setValueAttr:function(_2d5,_2d6,_2d7){var _2d8;if(_2d5!==undefined){_2d8=this.filter(_2d5);if(typeof _2d7!="string"){if(_2d8!==null&&((typeof _2d8!="number")||!isNaN(_2d8))){_2d7=this.filter(this.format(_2d8,this.constraints));}else{_2d7="";}}}if(_2d7!=null&&_2d7!=undefined&&((typeof _2d7)!="number"||!isNaN(_2d7))&&this.textbox.value!=_2d7){this.textbox.value=_2d7;}this._updatePlaceHolder();this.inherited(arguments,[_2d8,_2d6]);},displayedValue:"",getDisplayedValue:function(){dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");return this.get("displayedValue");},_getDisplayedValueAttr:function(){return this.filter(this.textbox.value);},setDisplayedValue:function(_2d9){dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");this.set("displayedValue",_2d9);},_setDisplayedValueAttr:function(_2da){if(_2da===null||_2da===undefined){_2da="";}else{if(typeof _2da!="string"){_2da=String(_2da);}}this.textbox.value=_2da;this._setValueAttr(this.get("value"),undefined,_2da);},format:function(_2db,_2dc){return ((_2db==null||_2db==undefined)?"":(_2db.toString?_2db.toString():_2db));},parse:function(_2dd,_2de){return _2dd;},_refreshState:function(){},_onInput:function(e){if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){switch(e.keyCode){case dojo.keys.SHIFT:case dojo.keys.ALT:case dojo.keys.CTRL:case dojo.keys.TAB:return;}}if(this.intermediateChanges){var _2df=this;setTimeout(function(){_2df._handleOnChange(_2df.get("value"),false);},0);}this._refreshState();},postCreate:function(){if(dojo.isIE){var s=dojo.getComputedStyle(this.domNode);if(s){var ff=s.fontFamily;if(ff){var _2e0=this.domNode.getElementsByTagName("INPUT");if(_2e0){for(var i=0;i<_2e0.length;i++){_2e0[i].style.fontFamily=ff;}}}}}this.textbox.setAttribute("value",this.textbox.value);this.inherited(arguments);if(dojo.isMoz||dojo.isOpera){this.connect(this.textbox,"oninput",this._onInput);}else{this.connect(this.textbox,"onkeydown",this._onInput);this.connect(this.textbox,"onkeyup",this._onInput);this.connect(this.textbox,"onpaste",this._onInput);this.connect(this.textbox,"oncut",this._onInput);}},_blankValue:"",filter:function(val){if(val===null){return this._blankValue;}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;},_setBlurValue:function(){this._setValueAttr(this.get("value"),true);},_onBlur:function(e){if(this.disabled){return;}this._setBlurValue();this.inherited(arguments);if(this._selectOnClickHandle){this.disconnect(this._selectOnClickHandle);}if(this.selectOnClick&&dojo.isMoz){this.textbox.selectionStart=this.textbox.selectionEnd=undefined;}this._updatePlaceHolder();},_onFocus:function(by){if(this.disabled||this.readOnly){return;}if(this.selectOnClick&&by=="mouse"){this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){this.disconnect(this._selectOnClickHandle);var _2e1;if(dojo.isIE){var _2e2=dojo.doc.selection.createRange();var _2e3=_2e2.parentElement();_2e1=_2e3==this.textbox&&_2e2.text.length==0;}else{_2e1=this.textbox.selectionStart==this.textbox.selectionEnd;}if(_2e1){dijit.selectInputText(this.textbox);}});}this._updatePlaceHolder();this._refreshState();this.inherited(arguments);},reset:function(){this.textbox.value="";this.inherited(arguments);}});dijit.selectInputText=function(_2e4,_2e5,stop){var _2e6=dojo.global;var _2e7=dojo.doc;_2e4=dojo.byId(_2e4);if(isNaN(_2e5)){_2e5=0;}if(isNaN(stop)){stop=_2e4.value?_2e4.value.length:0;}dijit.focus(_2e4);if(_2e7["selection"]&&dojo.body()["createTextRange"]){if(_2e4.createTextRange){var _2e8=_2e4.createTextRange();with(_2e8){collapse(true);moveStart("character",-99999);moveStart("character",_2e5);moveEnd("character",stop-_2e5);select();}}}else{if(_2e6["getSelection"]){if(_2e4.setSelectionRange){_2e4.setSelectionRange(_2e5,stop);}}}};}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:dijit.defaultDuration,templateString:dojo.cache("dijit","templates/Tooltip.html","<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(_2e9,_2ea,_2eb,rtl){if(this.aroundNode&&this.aroundNode===_2ea){return;}if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_2e9;var pos=dijit.placeOnScreenAroundElement(this.domNode,_2ea,dijit.getPopupAroundAlignment((_2eb&&_2eb.length)?_2eb:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_2ea;},orient:function(node,_2ec,_2ed){node.className="dijitTooltip "+{"BL-TL":"dijitTooltipBelow dijitTooltipABLeft","TL-BL":"dijitTooltipAbove dijitTooltipABLeft","BR-TR":"dijitTooltipBelow dijitTooltipABRight","TR-BR":"dijitTooltipAbove dijitTooltipABRight","BR-BL":"dijitTooltipRight","BL-BR":"dijitTooltipLeft"}[_2ec+"-"+_2ed];},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_2ee){if(this._onDeck&&this._onDeck[1]==_2ee){this._onDeck=null;}else{if(this.aroundNode===_2ee){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_2ef,_2f0,_2f1,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_2ef,_2f0,_2f1,rtl);};dijit.hideTooltip=function(_2f2){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_2f2);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],constructor:function(){this._nodeConnectionsById={};},_setConnectIdAttr:function(_2f3){for(var _2f4 in this._nodeConnectionsById){this.removeTarget(_2f4);}dojo.forEach(dojo.isArrayLike(_2f3)?_2f3:[_2f3],this.addTarget,this);},_getConnectIdAttr:function(){var ary=[];for(var id in this._nodeConnectionsById){ary.push(id);}return ary;},addTarget:function(id){var node=dojo.byId(id);if(!node){return;}if(node.id in this._nodeConnectionsById){return;}this._nodeConnectionsById[node.id]=[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")];},removeTarget:function(node){var id=node.id||node;if(id in this._nodeConnectionsById){dojo.forEach(this._nodeConnectionsById[id],this.disconnect,this);delete this._nodeConnectionsById[id];}},postCreate:function(){dojo.addClass(this.domNode,"dijitTooltipData");},startup:function(){this.inherited(arguments);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _2f5=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_2f5);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_2f6){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_2f6,this.position,!this.isLeftToRight());this._connectNode=_2f6;this.onShow(_2f6,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_2f7,_2f8){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}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:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",constraints:{},regExp:".*",regExpGen:function(_2f9){return this.regExp;},state:"",tooltipPosition:[],_setValueAttr:function(){this.inherited(arguments);this.validate(this._focused);},validator:function(_2fa,_2fb){return (new RegExp("^(?:"+this.regExpGen(_2fb)+")"+(this.required?"":"?")+"$")).test(_2fa)&&(!this.required||!this._isEmpty(_2fa))&&(this._isEmpty(_2fa)||this.parse(_2fa,_2fb)!==undefined);},_isValidSubset:function(){return this.textbox.value.search(this._partialre)==0;},isValid:function(_2fc){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_2fd){return /^\s*$/.test(_2fd);},getErrorMessage:function(_2fe){return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;},getPromptMessage:function(_2ff){return this.promptMessage;},_maskValidSubsetError:true,validate:function(_300){var _301="";var _302=this.disabled||this.isValid(_300);if(_302){this._maskValidSubsetError=true;}var _303=this._isEmpty(this.textbox.value);var _304=!_302&&!_303&&_300&&this._isValidSubset();this.state=((_302||((!this._hasBeenBlurred||_300)&&_303)||_304)&&this._maskValidSubsetError)?"":"Error";if(this.state=="Error"){this._maskValidSubsetError=_300;}this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_302?"false":"true");if(_300){if(this.state=="Error"){_301=this.getErrorMessage(true);}else{_301=this.getPromptMessage(true);}this._maskValidSubsetError=true;}this.displayMessage(_301);return _302;},_message:"",displayMessage:function(_305){if(this._message==_305){return;}this._message=_305;dijit.hideTooltip(this.domNode);if(_305){dijit.showTooltip(_305,this.domNode,this.tooltipPosition,!this.isLeftToRight());}},_refreshState:function(){this.validate(this._focused);this.inherited(arguments);},constructor:function(){this.constraints={};},_setConstraintsAttr:function(_306){if(!_306.locale&&this.lang){_306.locale=this.lang;}this.constraints=_306;this._computePartialRE();},_computePartialRE:function(){var p=this.regExpGen(this.constraints);this.regExp=p;var _307="";if(p!=".*"){this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){switch(re.charAt(0)){case "{":case "+":case "?":case "*":case "^":case "$":case "|":case "(":_307+=re;break;case ")":_307+="|$)";break;default:_307+="(?:"+re+"|$)";break;}});}try{"".search(_307);}catch(e){_307=this.regExp;console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);}this._partialre="^(?:"+_307+")$";},postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}if(!this.invalidMessage){this.invalidMessage=this.promptMessage;}if(this.missingMessage=="$_unset_$"){this.missingMessage=this.messages.missingMessage;}if(!this.missingMessage){this.missingMessage=this.invalidMessage;}this._setConstraintsAttr(this.constraints);},_setDisabledAttr:function(_308){this.inherited(arguments);this._refreshState();},_setRequiredAttr:function(_309){this.required=_309;dijit.setWaiState(this.focusNode,"required",_309);this._refreshState();},reset:function(){this._maskValidSubsetError=true;this.inherited(arguments);},_onBlur:function(){this.displayMessage("");this.inherited(arguments);}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){this.inherited(arguments);this.nameAttrSetting="";},serialize:function(val,_30a){return val.toString?val.toString():"";},toString:function(){var val=this.filter(this.get("value"));return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();return this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name+"'":"")+">",this.textbox,"after");},reset:function(){this.valueNode.value="";this.inherited(arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_30b,_30c){return ("min" in _30c?(this.compare(_30b,_30c.min)>=0):true)&&("max" in _30c?(this.compare(_30b,_30c.max)<=0):true);},isInRange:function(_30d){return this.rangeCheck(this.get("value"),this.constraints);},_isDefinitelyOutOfRange:function(){var val=this.get("value");var _30e=false;var _30f=false;if("min" in this.constraints){var min=this.constraints.min;min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);_30e=(typeof min=="number")&&min<0;}if("max" in this.constraints){var max=this.constraints.max;max=this.compare(val,((typeof max!="number")||max>0)?max:0);_30f=(typeof max=="number")&&max>0;}return _30e||_30f;},_isValidSubset:function(){return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();},isValid:function(_310){return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_310));},getErrorMessage:function(_311){var v=this.get("value");if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_311)){return this.rangeMessage;}return this.inherited(arguments);},postMixInProperties:function(){this.inherited(arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},_setConstraintsAttr:function(_312){this.inherited(arguments);if(this.focusNode){if(this.constraints.min!==undefined){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}else{dijit.removeWaiState(this.focusNode,"valuemin");}if(this.constraints.max!==undefined){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}else{dijit.removeWaiState(this.focusNode,"valuemax");}}},_setValueAttr:function(_313,_314){dijit.setWaiState(this.focusNode,"valuenow",_313);this.inherited(arguments);}});}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,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"▼ \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_315){var pos=0;if(typeof (_315.selectionStart)=="number"){pos=_315.selectionStart;}else{if(dojo.isIE){var tr=dojo.doc.selection.createRange().duplicate();var ntr=_315.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);pos=String(ntr.text).replace(/\r/g,"").length;}catch(e){}}}return pos;},_setCaretPos:function(_316,_317){_317=parseInt(_317);dijit.selectInputText(_316,_317,_317);},_setDisabledAttr:function(_318){this.inherited(arguments);dijit.setWaiState(this.comboNode,"disabled",_318);},_abortQuery:function(){if(this.searchTimer){clearTimeout(this.searchTimer);this.searchTimer=null;}if(this._fetchHandle){if(this._fetchHandle.abort){this._fetchHandle.abort();}this._fetchHandle=null;}},_onInput:function(evt){if(!this.searchTimer&&(evt.type=="paste"||evt.type=="input")&&this._lastInput!=this.textbox.value){this.searchTimer=setTimeout(dojo.hitch(this,function(){this._onKeyPress({charOrCode:229});}),100);}this.inherited(arguments);},_onKeyPress:function(evt){var key=evt.charOrCode;if(evt.altKey||((evt.ctrlKey||evt.metaKey)&&(key!="x"&&key!="v"))||key==dojo.keys.SHIFT){return;}var _319=false;var _31a="_startSearchFromInput";var pw=this._popupWidget;var dk=dojo.keys;var _31b=null;this._prev_key_backspace=false;this._abortQuery();if(this._isShowingNow){pw.handleKey(key);_31b=pw.getHighlightedOption();}switch(key){case dk.PAGE_DOWN:case dk.DOWN_ARROW:case dk.PAGE_UP:case dk.UP_ARROW:if(!this._isShowingNow){_319=true;_31a="_startSearchAll";}else{this._announceOption(_31b);}dojo.stopEvent(evt);break;case dk.ENTER:if(_31b){if(_31b==pw.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_31b==pw.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this._setBlurValue();this._setCaretPos(this.focusNode,this.focusNode.value.length);}evt.preventDefault();case dk.TAB:var _31c=this.get("displayedValue");if(pw&&(_31c==pw._messages["previousMessage"]||_31c==pw._messages["nextMessage"])){break;}if(_31b){this._selectOption();}if(this._isShowingNow){this._lastQuery=null;this._hideResultList();}break;case " ":if(_31b){dojo.stopEvent(evt);this._selectOption();this._hideResultList();}else{_319=true;}break;case dk.ESCAPE:if(this._isShowingNow){dojo.stopEvent(evt);this._hideResultList();}break;case dk.DELETE:case dk.BACKSPACE:this._prev_key_backspace=true;_319=true;break;default:_319=typeof key=="string"||key==229;}if(_319){this.item=undefined;this.searchTimer=setTimeout(dojo.hitch(this,_31a),1);}},_autoCompleteText:function(text){var fn=this.focusNode;dijit.selectInputText(fn,fn.value.length);var _31d=this.ignoreCase?"toLowerCase":"substr";if(text[_31d](0).indexOf(this.focusNode.value[_31d](0))==0){var cpos=this._getCaretPos(fn);if((cpos+1)>fn.value.length){fn.value=text;dijit.selectInputText(fn,cpos);}}else{fn.value=text;dijit.selectInputText(fn);}},_openResultList:function(_31e,_31f){this._fetchHandle=null;if(this.disabled||this.readOnly||(_31f.query[this.searchAttr]!=this._lastQuery)){return;}this._popupWidget.clearResultList();if(!_31e.length&&!this._maxOptions){this._hideResultList();return;}_31f._maxOptions=this._maxOptions;var _320=this._popupWidget.createOptions(_31e,_31f,dojo.hitch(this,"_getMenuLabelFromItem"));this._showResultList();if(_31f.direction){if(1==_31f.direction){this._popupWidget.highlightFirstOption();}else{if(-1==_31f.direction){this._popupWidget.highlightLastOption();}}this._announceOption(this._popupWidget.getHighlightedOption());}else{if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_31f.query[this.searchAttr])){this._announceOption(_320[1]);}}},_showResultList:function(){this._hideResultList();this.displayMessage("");dojo.style(this._popupWidget.domNode,{width:"",height:""});var best=this.open();var _321=dojo.marginBox(this._popupWidget.domNode);this._popupWidget.domNode.style.overflow=((best.h==_321.h)&&(best.w==_321.w))?"hidden":"auto";var _322=best.w;if(best.h<this._popupWidget.domNode.scrollHeight){_322+=16;}dojo.marginBox(this._popupWidget.domNode,{h:best.h,w:Math.max(_322,this.domNode.offsetWidth)});if(_322<this.domNode.offsetWidth){this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";}dijit.setWaiState(this.comboNode,"expanded","true");},_hideResultList:function(){this._abortQuery();if(this._isShowingNow){dijit.popup.close(this._popupWidget);this._isShowingNow=false;dijit.setWaiState(this.comboNode,"expanded","false");dijit.removeWaiState(this.focusNode,"activedescendant");}},_setBlurValue:function(){var _323=this.get("displayedValue");var pw=this._popupWidget;if(pw&&(_323==pw._messages["previousMessage"]||_323==pw._messages["nextMessage"])){this._setValueAttr(this._lastValueReported,true);}else{if(typeof this.item=="undefined"){this.item=null;this.set("displayedValue",_323);}else{if(this.value!=this._lastValueReported){dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);}this._refreshState();}}},_onBlur:function(){this._hideResultList();this.inherited(arguments);},_setItemAttr:function(item,_324,_325){if(!_325){_325=this.labelFunc(item,this.store);}this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(item):_325;this.item=item;dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_324,_325);},_announceOption:function(node){if(!node){return;}var _326;if(node==this._popupWidget.nextButton||node==this._popupWidget.previousButton){_326=node.innerHTML;this.item=undefined;this.value="";}else{_326=this.labelFunc(node.item,this.store);this.set("item",node.item,false,_326);}this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(node,"id"));this._autoCompleteText(_326);},_selectOption:function(evt){if(evt){this._announceOption(evt.target);}this._hideResultList();this._setCaretPos(this.focusNode,this.focusNode.value.length);dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);},_onArrowMouseDown:function(evt){if(this.disabled||this.readOnly){return;}dojo.stopEvent(evt);this.focus();if(this._isShowingNow){this._hideResultList();}else{this._startSearchAll();}},_startSearchAll:function(){this._startSearch("");},_startSearchFromInput:function(){this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));},_getQueryString:function(text){return dojo.string.substitute(this.queryExpr,[text]);},_startSearch:function(key){if(!this._popupWidget){var _327=this.id+"_popup";this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_327,dir:this.dir});dijit.removeWaiState(this.focusNode,"activedescendant");dijit.setWaiState(this.textbox,"owns",_327);}var _328=dojo.clone(this.query);this._lastInput=key;this._lastQuery=_328[this.searchAttr]=this._getQueryString(key);this.searchTimer=setTimeout(dojo.hitch(this,function(_329,_32a){this.searchTimer=null;var _32b={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_329,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_32c){_32a._fetchHandle=null;console.error("dijit.form.ComboBox: "+_32c);dojo.hitch(_32a,"_hideResultList")();},start:0,count:this.pageSize};dojo.mixin(_32b,_32a.fetchProperties);this._fetchHandle=_32a.store.fetch(_32b);var _32d=function(_32e,_32f){_32e.start+=_32e.count*_32f;_32e.direction=_32f;this._fetchHandle=this.store.fetch(_32e);};this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_32d,this._fetchHandle);},_328,this),this.searchDelay);},_setMaxOptions:function(size,_330){this._maxOptions=size;},_getValueField:function(){return this.searchAttr;},compositionend:function(evt){this._onKeyPress({charOrCode:229});},constructor:function(){this.query={};this.fetchProperties={};},postMixInProperties:function(){if(!this.store){var _331=this.srcNodeRef;this.store=new dijit.form._ComboBoxDataStore(_331);if(!("value" in this.params)){var item=this.store.fetchSelectedItem();if(item){var _332=this._getValueField();this.value=_332!=this.searchAttr?this.store.getValue(item,_332):this.labelFunc(item,this.store);}}}this.inherited(arguments);},postCreate:function(){if(!this.hasDownArrow){this.downArrowNode.style.display="none";}var _333=dojo.query("label[for=\""+this.id+"\"]");if(_333.length){_333[0].id=(this.id+"_label");var cn=this.comboNode;dijit.setWaiState(cn,"labelledby",_333[0].id);}this.inherited(arguments);},uninitialize:function(){if(this._popupWidget&&!this._popupWidget._destroyed){this._hideResultList();this._popupWidget.destroy();}this.inherited(arguments);},_getMenuLabelFromItem:function(item){var _334=this.labelAttr?this.store.getValue(item,this.labelAttr):this.labelFunc(item,this.store);var _335=this.labelType;if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){_334=this.doHighlight(_334,this._escapeHtml(this._lastInput));_335="html";}return {html:_335=="html",label:_334};},doHighlight:function(_336,find){var _337="i"+(this.highlightMatch=="all"?"g":"");var _338=this._escapeHtml(_336);find=dojo.regexp.escapeString(find);var ret=_338.replace(new RegExp("(^|\\s)("+find+")",_337),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");return ret;},_escapeHtml:function(str){str=String(str).replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,""");return str;},open:function(){this._isShowingNow=true;return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});},reset:function(){this.item=null;this.inherited(arguments);},labelFunc:function(item,_339){return _339.getValue(item,this.searchAttr).toString();}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);this.inherited(arguments);},_setValueAttr:function(_33a){this.value=_33a;this.onChange(_33a);},onChange:function(_33b){},onPage:function(_33c){},postCreate:function(){this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];this.inherited(arguments);},onClose:function(){this._blurOptionNode();},_createOption:function(item,_33d){var _33e=_33d(item);var _33f=dojo.doc.createElement("li");dijit.setWaiRole(_33f,"option");if(_33e.html){_33f.innerHTML=_33e.label;}else{_33f.appendChild(dojo.doc.createTextNode(_33e.label));}if(_33f.innerHTML==""){_33f.innerHTML=" ";}_33f.item=item;return _33f;},createOptions:function(_340,_341,_342){this.previousButton.style.display=(_341.start==0)?"none":"";dojo.attr(this.previousButton,"id",this.id+"_prev");dojo.forEach(_340,function(item,i){var _343=this._createOption(item,_342);_343.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");dojo.attr(_343,"id",this.id+i);this.domNode.insertBefore(_343,this.nextButton);},this);var _344=false;if(_341._maxOptions&&_341._maxOptions!=-1){if((_341.start+_341.count)<_341._maxOptions){_344=true;}else{if((_341.start+_341.count)>_341._maxOptions&&_341.count==_340.length){_344=true;}}}else{if(_341.count==_340.length){_344=true;}}this.nextButton.style.display=_344?"":"none";dojo.attr(this.nextButton,"id",this.id+"_next");return this.domNode.childNodes;},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}},_onMouseDown:function(evt){dojo.stopEvent(evt);},_onMouseUp:function(evt){if(evt.target===this.domNode||!this._highlighted_option){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._setValueAttr({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,"dijitMenuItemSelected");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){var fc=this.domNode.firstChild;this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);}else{var ns=this._highlighted_option.nextSibling;if(ns&&ns.style.display!="none"){this._focusOptionNode(ns);}else{this.highlightFirstOption();}}dojo.window.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){var _345=this.domNode.firstChild;var _346=_345.nextSibling;this._focusOptionNode(_346.style.display=="none"?_345:_346);dojo.window.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dojo.window.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){var lc=this.domNode.lastChild;this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);}else{var ps=this._highlighted_option.previousSibling;if(ps&&ps.style.display!="none"){this._focusOptionNode(ps);}else{this.highlightLastOption();}}dojo.window.scrollIntoView(this._highlighted_option);},_page:function(up){var _347=0;var _348=this.domNode.scrollTop;var _349=dojo.style(this.domNode,"height");if(!this.getHighlightedOption()){this._highlightNextOption();}while(_347<_349){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 _34a=this.domNode.scrollTop;_347+=(_34a-_348)*(up?-1:1);_348=_34a;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){var ho=this._highlighted_option;return (ho&&ho.parentNode)?ho:null;},handleKey:function(key){switch(key){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],{_setValueAttr:function(_34b,_34c,_34d){this.item=null;if(!_34b){_34b="";}dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_34b,_34c,_34d);}});dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(root){this.root=root;if(root.tagName!="SELECT"&&root.firstChild){root=dojo.query("select",root);if(root.length>0){root=root[0];}else{this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";root=this.root.firstChild;}this.root=root;}dojo.query("> option",root).forEach(function(node){node.innerHTML=dojo.trim(node.innerHTML);});},getValue:function(item,_34e,_34f){return (_34e=="value")?item.value:(item.innerText||item.textContent||"");},isItemLoaded:function(_350){return true;},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};},_fetchItems:function(args,_351,_352){if(!args.query){args.query={};}if(!args.query.name){args.query.name="";}if(!args.queryOptions){args.queryOptions={};}var _353=dojo.data.util.filter.patternToRegExp(args.query.name,args.queryOptions.ignoreCase),_354=dojo.query("> option",this.root).filter(function(_355){return (_355.innerText||_355.textContent||"").match(_353);});if(args.sort){_354.sort(dojo.data.util.sorter.createSortFunction(args.sort,this));}_351(_354,args);},close:function(_356){return;},getLabel:function(item){return item.innerHTML;},getIdentity:function(item){return dojo.attr(item,"value");},fetchItemByIdentity:function(args){var item=dojo.query("> option[value='"+args.identity+"']",this.root)[0];args.onItem(item);},fetchSelectedItem:function(){var root=this.root,si=root.selectedIndex;return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",root)[0]:null;}});dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);}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],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){return this._isvalid||(!this.required&&this.get("displayedValue")=="");},_refreshState:function(){if(!this.searchTimer){this.inherited(arguments);}},_callbackSetLabel:function(_357,_358,_359){if((_358&&_358.query[this.searchAttr]!=this._lastQuery)||(!_358&&_357.length&&this.store.getIdentity(_357[0])!=this._lastQuery)){return;}if(!_357.length){this.valueNode.value="";dijit.form.TextBox.superclass._setValueAttr.call(this,"",_359||(_359===undefined&&!this._focused));this._isvalid=false;this.validate(this._focused);this.item=null;}else{this.set("item",_357[0],_359);}},_openResultList:function(_35a,_35b){if(_35b.query[this.searchAttr]!=this._lastQuery){return;}if(this.item===undefined){this._isvalid=_35a.length!=0||this._maxOptions!=0;this.validate(true);}dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);},_getValueAttr:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValueAttr:function(_35c,_35d){if(!this._onChangeActive){_35d=null;}this._lastQuery=_35c;if(_35c===null||_35c===""){this._setDisplayedValueAttr("",_35d);return;}var self=this;this.store.fetchItemByIdentity({identity:_35c,onItem:function(item){self._callbackSetLabel(item?[item]:[],undefined,_35d);}});},_setItemAttr:function(item,_35e,_35f){this._isvalid=true;this.inherited(arguments);this.valueNode.value=this.value;this._lastDisplayedValue=this.textbox.value;},_getDisplayQueryString:function(text){return text.replace(/([\\\*\?])/g,"\\$1");},_setDisplayedValueAttr:function(_360,_361){if(!this._created){_361=false;}if(this.store){this._hideResultList();var _362=dojo.clone(this.query);this._lastQuery=_362[this.searchAttr]=this._getDisplayQueryString(_360);this.textbox.value=_360;this._lastDisplayedValue=_360;var _363=this;var _364={query:_362,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_365,_366){_363._fetchHandle=null;dojo.hitch(_363,"_callbackSetLabel")(_365,_366,_361);},onError:function(_367){_363._fetchHandle=null;console.error("dijit.form.FilteringSelect: "+_367);dojo.hitch(_363,"_callbackSetLabel")([],undefined,false);}};dojo.mixin(_364,this.fetchProperties);this._fetchHandle=this.store.fetch(_364);}},postMixInProperties:function(){this.inherited(arguments);this._isvalid=!this.required;},undo:function(){this.set("displayedValue",this._lastDisplayedValue);}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},execute:function(_368){},onExecute:function(){},_setEncTypeAttr:function(_369){this.encType=_369;dojo.attr(this.domNode,"encType",_369);if(dojo.isIE){this.domNode.encoding=_369;}},postCreate:function(){if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){var item=this.srcNodeRef.attributes.getNamedItem("encType");if(item&&!item.specified&&(typeof item.value=="string")){this.set("encType",item.value);}}this.inherited(arguments);},reset:function(e){var faux={returnValue:true,preventDefault:function(){this.returnValue=false;},stopPropagation:function(){},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};if(!(this.onReset(faux)===false)&&faux.returnValue){this.inherited(arguments,[]);}},onReset:function(e){return true;},_onReset:function(e){this.reset(e);dojo.stopEvent(e);return false;},_onSubmit:function(e){var fp=dijit.form.Form.prototype;if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");this.onExecute();this.execute(this.getValues());}if(this.onSubmit(e)===false){dojo.stopEvent(e);}},onSubmit:function(e){return this.isValid();},submit:function(){if(!(this.onSubmit()===false)){this.containerNode.submit();}}});}if(!dojo._hasResource["dijit.form.RadioButton"]){dojo._hasResource["dijit.form.RadioButton"]=true;dojo.provide("dijit.form.RadioButton");}if(!dojo._hasResource["dijit.form._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");dojo.declare("dijit.form._FormSelectWidget",dijit.form._FormValueWidget,{multiple:false,options:null,store:null,query:null,queryOptions:null,onFetch:null,sortByLabel:true,loadChildrenOnOpen:false,getOptions:function(_36a){var _36b=_36a,opts=this.options||[],l=opts.length;if(_36b===undefined){return opts;}if(dojo.isArray(_36b)){return dojo.map(_36b,"return this.getOptions(item);",this);}if(dojo.isObject(_36a)){if(!dojo.some(this.options,function(o,idx){if(o===_36b||(o.value&&o.value===_36b.value)){_36b=idx;return true;}return false;})){_36b=-1;}}if(typeof _36b=="string"){for(var i=0;i<l;i++){if(opts[i].value===_36b){_36b=i;break;}}}if(typeof _36b=="number"&&_36b>=0&&_36b<l){return this.options[_36b];}return null;},addOption:function(_36c){if(!dojo.isArray(_36c)){_36c=[_36c];}dojo.forEach(_36c,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_36d){if(!dojo.isArray(_36d)){_36d=[_36d];}var _36e=this.getOptions(_36d);dojo.forEach(_36e,function(i){if(i){this.options=dojo.filter(this.options,function(node,idx){return (node.value!==i.value);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_36f){if(!dojo.isArray(_36f)){_36f=[_36f];}dojo.forEach(_36f,function(i){var _370=this.getOptions(i),k;if(_370){for(k in i){_370[k]=i[k];}}},this);this._loadChildren();},setStore:function(_371,_372,_373){var _374=this.store;_373=_373||{};if(_374!==_371){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_371&&_371.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_371,"onNew",this,"_onNewItem"),dojo.connect(_371,"onDelete",this,"_onDeleteItem"),dojo.connect(_371,"onSet",this,"_onSetItem")];}this.store=_371;}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_371){var cb=function(_375){if(this.sortByLabel&&!_373.sort&&_375.length){_375.sort(dojo.data.util.sorter.createSortFunction([{attribute:_371.getLabelAttributes(_375[0])[0]}],_371));}if(_373.onFetch){_375=_373.onFetch(_375);}dojo.forEach(_375,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.set("value",(("_pendingValue" in this)?this._pendingValue:_372));delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_375);}this._fetchedWith=opts;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);};var opts=dojo.mixin({onComplete:cb,scope:this},_373);this._loadingStore=true;_371.fetch(opts);}else{delete this._fetchedWith;}return _374;},_setValueAttr:function(_376,_377){if(this._loadingStore){this._pendingValue=_376;return;}var opts=this.getOptions()||[];if(!dojo.isArray(_376)){_376=[_376];}dojo.forEach(_376,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_376[idx]=dojo.filter(opts,function(node){return node.value===i;})[0]||{value:"",label:""};}},this);_376=dojo.filter(_376,function(i){return i&&i.value;});if(!this.multiple&&(!_376[0]||!_376[0].value)&&opts.length){_376[0]=opts[0];}dojo.forEach(opts,function(i){i.selected=dojo.some(_376,function(v){return v.value===i.value;});});var val=dojo.map(_376,function(i){return i.value;}),disp=dojo.map(_376,function(i){return i.label;});this.value=this.multiple?val:val[0];this._setDisplay(this.multiple?disp:disp[0]);this._updateSelection();this._handleOnChange(this.value,_377);},_getDisplayedValueAttr:function(){var val=this.get("value");if(!dojo.isArray(val)){val=[val];}var ret=dojo.map(this.getOptions(val),function(v){if(v&&"label" in v){return v.label;}else{if(v){return v.value;}}return null;},this);return this.multiple?ret:ret[0];},_getValueDeprecated:false,getValue:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},_loadChildren:function(){if(this._loadingStore){return;}dojo.forEach(this._getChildren(),function(_378){_378.destroyRecursive();});dojo.forEach(this.options,this._addOptionItem,this);this._updateSelection();},_updateSelection:function(){this.value=this._getValueFromOpts();var val=this.value;if(!dojo.isArray(val)){val=[val];}if(val&&val[0]){dojo.forEach(this._getChildren(),function(_379){var _37a=dojo.some(val,function(v){return _379.option&&(v===_379.option.value);});dojo.toggleClass(_379.domNode,this.baseClass+"SelectedOption",_37a);dijit.setWaiState(_379.domNode,"selected",_37a);},this);}this._handleOnChange(this.value);},_getValueFromOpts:function(){var opts=this.getOptions()||[];if(!this.multiple&&opts.length){var opt=dojo.filter(opts,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{opts[0].selected=true;return opts[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(opts,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(item,_37b){if(!_37b||!_37b.parent){this._addOptionForItem(item);}},_onDeleteItem:function(item){var _37c=this.store;this.removeOption(_37c.getIdentity(item));},_onSetItem:function(item){this.updateOption(this._getOptionObjForItem(item));},_getOptionObjForItem:function(item){var _37d=this.store,_37e=_37d.getLabel(item),_37f=(_37e?_37d.getIdentity(item):null);return {value:_37f,label:_37e,item:item};},_addOptionForItem:function(item){var _380=this.store;if(!_380.isItemLoaded(item)){_380.loadItem({item:item,onComplete:function(i){this._addOptionForItem(item);},scope:this});return;}var _381=this._getOptionObjForItem(item);this.addOption(_381);},constructor:function(_382){this._oValue=(_382||{}).value||null;},_fillContent:function(){var opts=this.options;if(!opts){opts=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(node){if(node.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:node.getAttribute("value"),label:String(node.innerHTML),selected:node.getAttribute("selected")||false,disabled:node.getAttribute("disabled")||false};},this):[];}if(!this.value){this.value=this._getValueFromOpts();}else{if(this.multiple&&typeof this.value=="string"){this.value=this.value.split(",");}}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);this.connect(this,"onChange","_updateSelection");this.connect(this,"startup","_loadChildren");this._setValueAttr(this.value,null);},startup:function(){this.inherited(arguments);var _383=this.store,_384={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_384[i]=this[i];}delete this[i];},this);if(_383&&_383.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_383,this._oValue,_384);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_385){},_removeOptionItem:function(_386){},_setDisplay:function(_387){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.get("value"));},_pseudoLoadChildren:function(_388){},onSetStore:function(){}});}if(!dojo._hasResource["dijit._KeyNavContainer"]){dojo._hasResource["dijit._KeyNavContainer"]=true;dojo.provide("dijit._KeyNavContainer");dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_389,_38a){var _38b=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_389,function(code){_38b[code]=prev;});dojo.forEach(_38a,function(code){_38b[code]=next;});this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));},addChild:function(_38c,_38d){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_38c);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _38e=this._getFirstFocusableChild();if(_38e){this.focusChild(_38e);}},focusNext:function(){var _38f=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_38f);},focusPrev:function(){var _390=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_390,true);},focusChild:function(_391,last){if(this.focusedChild&&_391!==this.focusedChild){this._onChildBlur(this.focusedChild);}_391.focus(last?"end":"start");this.focusedChild=_391;},_startupChild:function(_392){_392.set("tabIndex","-1");this.connect(_392,"_onFocus",function(){_392.set("tabIndex",this.tabIndex);});this.connect(_392,"_onBlur",function(){_392.set("tabIndex","-1");});},_onContainerFocus:function(evt){if(evt.target!==this.domNode){return;}this.focusFirstChild();dojo.attr(this.domNode,"tabIndex","-1");},_onBlur:function(evt){if(this.tabIndex){dojo.attr(this.domNode,"tabIndex",this.tabIndex);}this.inherited(arguments);},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var func=this._keyNavCodes[evt.charOrCode];if(func){func();dojo.stopEvent(evt);}},_onChildBlur:function(_393){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getNextFocusableChild:function(_394,dir){if(_394){_394=this._getSiblingOfChild(_394,dir);}var _395=this.getChildren();for(var i=0;i<_395.length;i++){if(!_394){_394=_395[(dir>0)?0:(_395.length-1)];}if(_394.isFocusable()){return _394;}_394=this._getSiblingOfChild(_394,dir);}return null;}});}if(!dojo._hasResource["dijit.MenuItem"]){dojo._hasResource["dijit.MenuItem"]=true;dojo.provide("dijit.MenuItem");dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_396){if(_396&&!("label" in this.params)){this.set("label",_396.innerHTML);}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _397=this.id+"_text";dojo.attr(this.containerNode,"id",_397);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_397+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_397);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._hovering=false;this._setStateClass();},_onClick:function(evt){this.getParent().onItemClick(this,evt);dojo.stopEvent(evt);},onClick:function(evt){},focus:function(){try{if(dojo.isIE==8){this.containerNode.focus();}dijit.focus(this.focusNode);}catch(e){}},_onFocus:function(){this._setSelected(true);this.getParent()._onItemFocus(this);this.inherited(arguments);},_setSelected:function(_398){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_398);},setLabel:function(_399){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated. Use set('label', ...) instead.","","2.0");this.set("label",_399);},setDisabled:function(_39a){dojo.deprecated("dijit.Menu.setDisabled() is deprecated. Use set('disabled', bool) instead.","","2.0");this.set("disabled",_39a);},_setDisabledAttr:function(_39b){this.disabled=_39b;dijit.setWaiState(this.focusNode,"disabled",_39b?"true":"false");},_setAccelKeyAttr:function(_39c){this.accelKey=_39c;this.accelKeyNode.style.display=_39c?"":"none";this.accelKeyNode.innerHTML=_39c;dojo.attr(this.containerNode,"colSpan",_39c?"1":"2");}});}if(!dojo._hasResource["dijit.PopupMenuItem"]){dojo._hasResource["dijit.PopupMenuItem"]=true;dojo.provide("dijit.PopupMenuItem");dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){if(this.srcNodeRef){var _39d=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_39d[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}this.inherited(arguments);if(!this.popup){var node=dojo.query("[widgetId]",this.dropDownContainer)[0];this.popup=dijit.byNode(node);}dojo.body().appendChild(this.popup.domNode);this.popup.startup();this.popup.domNode.style.display="none";if(this.arrowWrapper){dojo.style(this.arrowWrapper,"visibility","");}dijit.setWaiState(this.focusNode,"haspopup","true");},destroyDescendants:function(){if(this.popup){if(!this.popup._destroyed){this.popup.destroyRecursive();}delete this.popup;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.CheckedMenuItem"]){dojo._hasResource["dijit.CheckedMenuItem"]=true;dojo.provide("dijit.CheckedMenuItem");dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">✓</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\"> </td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_39e){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_39e);dijit.setWaiState(this.domNode,"checked",_39e);this.checked=_39e;},onChange:function(_39f){},_onClick:function(e){if(!this.disabled){this.set("checked",!this.checked);this.onChange(this.checked);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.MenuSeparator"]){dojo._hasResource["dijit.MenuSeparator"]=true;dojo.provide("dijit.MenuSeparator");dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Menu"]){dojo._hasResource["dijit.Menu"]=true;dojo.provide("dijit.Menu");dojo.declare("dijit._MenuBase",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{parentMenu:null,popupDelay:500,startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_3a0){_3a0.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_3a1){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _3a2=this._getTopMenu();if(_3a2&&_3a2._isMenuBar){_3a2.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _3a3=this.currentPopup.parentMenu;if(_3a3.focusedChild){_3a3.focusedChild._setSelected(false);}_3a3.focusedChild=this.currentPopup.from_item;_3a3.focusedChild._setSelected(true);this._stopPendingCloseTimer(this.currentPopup);}},onItemHover:function(item){if(this.isActive){this.focusChild(item);if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);}}if(this.focusedChild){this.focusChild(item);}this._hoveredChild=item;},_onChildBlur:function(item){this._stopPopupTimer();item._setSelected(false);var _3a4=item.popup;if(_3a4){this._stopPendingCloseTimer(_3a4);_3a4._pendingClose_timer=setTimeout(function(){_3a4._pendingClose_timer=null;if(_3a4.parentMenu){_3a4.parentMenu.currentPopup=null;}dijit.popup.close(_3a4);},this.popupDelay);}},onItemUnhover:function(item){if(this.isActive){this._stopPopupTimer();}if(this._hoveredChild==item){this._hoveredChild=null;}},_stopPopupTimer:function(){if(this.hover_timer){clearTimeout(this.hover_timer);this.hover_timer=null;}},_stopPendingCloseTimer:function(_3a5){if(_3a5._pendingClose_timer){clearTimeout(_3a5._pendingClose_timer);_3a5._pendingClose_timer=null;}},_stopFocusTimer:function(){if(this._focus_timer){clearTimeout(this._focus_timer);this._focus_timer=null;}},_getTopMenu:function(){for(var top=this;top.parentMenu;top=top.parentMenu){}return top;},onItemClick:function(item,evt){if(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _3a6=this.focusedChild;if(!_3a6){return;}var _3a7=_3a6.popup;if(_3a7.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_3a7.parentMenu=this;_3a7.from_item=_3a6;var self=this;dijit.popup.open({parent:this,popup:_3a7,around:_3a6.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){self.focusChild(_3a6);self._cleanUp();_3a6._setSelected(true);self.focusedChild=_3a6;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_3a7;_3a7.connect(_3a7.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_3a7.focus){_3a7._focus_timer=setTimeout(dojo.hitch(_3a7,function(){this._focus_timer=null;this.focus();}),0);}},_markActive:function(){this.isActive=true;dojo.addClass(this.domNode,"dijitMenuActive");dojo.removeClass(this.domNode,"dijitMenuPassive");},onOpen:function(e){this.isShowingNow=true;this._markActive();},_markInactive:function(){this.isActive=false;dojo.removeClass(this.domNode,"dijitMenuActive");dojo.addClass(this.domNode,"dijitMenuPassive");},onClose:function(){this._stopFocusTimer();this._markInactive();this.isShowingNow=false;this.parentMenu=null;},_closeChild:function(){this._stopPopupTimer();if(this.focusedChild){this.focusedChild._setSelected(false);this.focusedChild._onUnhover();this.focusedChild=null;}if(this.currentPopup){dijit.popup.close(this.currentPopup);this.currentPopup=null;}},_onItemFocus:function(item){if(this._hoveredChild&&this._hoveredChild!=item){this._hoveredChild._onUnhover();}},_onBlur:function(){this._cleanUp();this.inherited(arguments);},_cleanUp:function(){this._closeChild();if(typeof this.isShowingNow=="undefined"){this._markInactive();}}});dojo.declare("dijit.Menu",dijit._MenuBase,{constructor:function(){this._bindings=[];},templateString:dojo.cache("dijit","templates/Menu.html","<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,postCreate:function(){if(this.contextMenuForWindow){this.bindDomNode(dojo.body());}else{dojo.forEach(this.targetNodeIds,this.bindDomNode,this);}var k=dojo.keys,l=this.isLeftToRight();this._openSubMenuKey=l?k.RIGHT_ARROW:k.LEFT_ARROW;this._closeSubMenuKey=l?k.LEFT_ARROW:k.RIGHT_ARROW;this.connectKeyNavHandlers([k.UP_ARROW],[k.DOWN_ARROW]);},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case this._openSubMenuKey:this._moveToPopup(evt);dojo.stopEvent(evt);break;case this._closeSubMenuKey:if(this.parentMenu){if(this.parentMenu._isMenuBar){this.parentMenu.focusPrev();}else{this.onCancel(false);}}else{dojo.stopEvent(evt);}break;}},_iframeContentWindow:function(_3a8){var win=dojo.window.get(this._iframeContentDocument(_3a8))||this._iframeContentDocument(_3a8)["__parent__"]||(_3a8.name&&dojo.doc.frames[_3a8.name])||null;return win;},_iframeContentDocument:function(_3a9){var doc=_3a9.contentDocument||(_3a9.contentWindow&&_3a9.contentWindow.document)||(_3a9.name&&dojo.doc.frames[_3a9.name]&&dojo.doc.frames[_3a9.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _3aa=node,win=this._iframeContentWindow(_3aa);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _3ab={node:node,iframe:_3aa};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_3ab));var _3ac=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3aa,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3aa);}})];});_3ab.connects=cn?_3ac(cn):[];if(_3aa){_3ab.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_3aa);cn=dojo.withGlobal(win,dojo.body);_3ab.connects=_3ac(cn);});if(_3aa.addEventListener){_3aa.addEventListener("load",_3ab.onloadHandler,false);}else{_3aa.attachEvent("onload",_3ab.onloadHandler);}}},unBindDomNode:function(_3ad){var node;try{node=dojo.byId(_3ad);}catch(e){return;}var _3ae="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_3ae)){var bid=dojo.attr(node,_3ae)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _3af=b.iframe;if(_3af){if(_3af.removeEventListener){_3af.removeEventListener("load",b.onloadHandler,false);}else{_3af.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_3ae);delete this._bindings[bid];}},_scheduleOpen:function(_3b0,_3b1,_3b2){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_3b0,iframe:_3b1,coords:_3b2});}),1);}},_openMyself:function(args){var _3b3=args.target,_3b4=args.iframe,_3b5=args.coords;if(_3b5){if(_3b4){var od=_3b3.ownerDocument,ifc=dojo.position(_3b4,true),win=this._iframeContentWindow(_3b4),_3b6=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_3b4),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_3b4,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_3b4,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_3b4,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_3b4,cs.borderTopWidth):0);_3b5.x+=ifc.x+left-_3b6.x;_3b5.y+=ifc.y+top-_3b6.y;}}else{_3b5=dojo.position(_3b3,true);_3b5.x+=10;_3b5.y+=10;}var self=this;var _3b7=dijit.getFocus(this);function _3b8(){if(self.refocus){dijit.focus(_3b7);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_3b5.x,y:_3b5.y,onExecute:_3b8,onCancel:_3b8,orient:this.isLeftToRight()?"L":"R"});this.focus();this._onBlur=function(){this.inherited("_onBlur",arguments);dijit.popup.close(this);};},uninitialize:function(){dojo.forEach(this._bindings,function(b){if(b){this.unBindDomNode(b.node);}},this);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.Select"]){dojo._hasResource["dijit.form.Select"]=true;dojo.provide("dijit.form.Select");dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){this.inherited(arguments);var o=(this.menuTableNode=this.domNode);var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));if(o.parentNode){o.parentNode.replaceChild(n,o);}dojo.removeClass(o,"dijitMenuTable");n.className=o.className+" dijitSelectMenu";o.className="dijitReset dijitMenuTable";dijit.setWaiRole(o,"listbox");dijit.setWaiRole(n,"presentation");n.appendChild(o);},resize:function(mb){if(mb){dojo.marginBox(this.domNode,mb);if("w" in mb){this.menuTableNode.style.width="100%";}}}});dojo.declare("dijit.form.Select",[dijit.form._FormSelectWidget,dijit._HasDropDown],{baseClass:"dijitSelect",templateString:dojo.cache("dijit.form","templates/Select.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\" dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">▼</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),required:false,state:"",tooltipPosition:[],emptyLabel:"",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){this.inherited(arguments);if(this.options.length&&!this.value&&this.srcNodeRef){var si=this.srcNodeRef.selectedIndex;this.value=this.options[si!=-1?si:0].value;}this.dropDown=new dijit.form._SelectMenu({id:this.id+"_menu"});dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");},_getMenuItemForOption:function(_3b9){if(!_3b9.value){return new dijit.MenuSeparator();}else{var _3ba=dojo.hitch(this,"_setValueAttr",_3b9);var item=new dijit.MenuItem({option:_3b9,label:_3b9.label,onClick:_3ba,disabled:_3b9.disabled||false});dijit.setWaiRole(item.focusNode,"listitem");return item;}},_addOptionItem:function(_3bb){if(this.dropDown){this.dropDown.addChild(this._getMenuItemForOption(_3bb));}},_getChildren:function(){if(!this.dropDown){return [];}return this.dropDown.getChildren();},_loadChildren:function(_3bc){if(_3bc===true){if(this.dropDown){delete this.dropDown.focusedChild;}if(this.options.length){this.inherited(arguments);}else{dojo.forEach(this._getChildren(),function(_3bd){_3bd.destroyRecursive();});var item=new dijit.MenuItem({label:" "});this.dropDown.addChild(item);}}else{this._updateSelection();}var len=this.options.length;this._isLoaded=false;this._childrenLoaded=true;if(!this._loadingStore){this._setValueAttr(this.value);}},_setValueAttr:function(_3be){this.inherited(arguments);dojo.attr(this.valueNode,"value",this.get("value"));},_setDisplay:function(_3bf){this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_3bf||this.emptyLabel||" ")+"</span>";dijit.setWaiState(this.focusNode,"valuetext",(_3bf||this.emptyLabel||" "));},validate:function(_3c0){var _3c1=this.isValid(_3c0);this.state=_3c1?"":"Error";this._setStateClass();dijit.setWaiState(this.focusNode,"invalid",_3c1?"false":"true");var _3c2=_3c1?"":this._missingMsg;if(this._message!==_3c2){this._message=_3c2;dijit.hideTooltip(this.domNode);if(_3c2){dijit.showTooltip(_3c2,this.domNode,this.tooltipPosition,!this.isLeftToRight());}}return _3c1;},isValid:function(_3c3){return (!this.required||!(/^\s*$/.test(this.value)));},reset:function(){this.inherited(arguments);dijit.hideTooltip(this.domNode);this.state="";this._setStateClass();delete this._message;},postMixInProperties:function(){this.inherited(arguments);this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage;},postCreate:function(){this.inherited(arguments);if(this.tableNode.style.width){dojo.addClass(this.domNode,this.baseClass+"FixedWidth");}},isLoaded:function(){return this._isLoaded;},loadDropDown:function(_3c4){this._loadChildren(true);this._isLoaded=true;_3c4();},closeDropDown:function(){this.inherited(arguments);if(this.dropDown&&this.dropDown.menuTableNode){this.dropDown.menuTableNode.style.width="";}},uninitialize:function(_3c5){if(this.dropDown&&!this.dropDown._destroyed){this.dropDown.destroyRecursive(_3c5);delete this.dropDown;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.SimpleTextarea"]){dojo._hasResource["dijit.form.SimpleTextarea"]=true;dojo.provide("dijit.form.SimpleTextarea");dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox dijitTextArea",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{rows:"textbox",cols:"textbox"}),rows:"3",cols:"20",templateString:"<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",postMixInProperties:function(){if(!this.value&&this.srcNodeRef){this.value=this.srcNodeRef.value;}this.inherited(arguments);},filter:function(_3c6){if(_3c6){_3c6=_3c6.replace(/\r/g,"");}return this.inherited(arguments);},postCreate:function(){this.inherited(arguments);if(dojo.isIE&&this.cols){dojo.addClass(this.textbox,"dijitTextAreaCols");}},_previousValue:"",_onInput:function(e){if(this.maxLength){var _3c7=parseInt(this.maxLength);var _3c8=this.textbox.value.replace(/\r/g,"");var _3c9=_3c8.length-_3c7;if(_3c9>0){if(e){dojo.stopEvent(e);}var _3ca=this.textbox;if(_3ca.selectionStart){var pos=_3ca.selectionStart;var cr=0;if(dojo.isOpera){cr=(this.textbox.value.substring(0,pos).match(/\r/g)||[]).length;}this.textbox.value=_3c8.substring(0,pos-_3c9-cr)+_3c8.substring(pos-cr);_3ca.setSelectionRange(pos-_3c9,pos-_3c9);}else{if(dojo.doc.selection){_3ca.focus();var _3cb=dojo.doc.selection.createRange();_3cb.moveStart("character",-_3c9);_3cb.text="";_3cb.select();}}}this._previousValue=this.textbox.value;}this.inherited(arguments);}});}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",editorWrapper:"dijit._InlineEditor",editorParams:{},onChange:function(_3cc){},onCancel:function(){},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>    ✍    </span>":"<span style='text-decoration: underline;'>    ✍    </span>",constructor:function(){this.editorParams={};},postMixInProperties:function(){this.inherited(arguments);this.displayNode=this.srcNodeRef;var _3cd={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _3cd){this.connect(this.displayNode,name,_3cd[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value&&!("value" in this.params)){this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));}if(!this.value){this.displayNode.innerHTML=this.noValueIndicator;}dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");},setDisabled:function(_3ce){dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated. Use set('disabled', bool) instead.","","2.0");this.set("disabled",_3ce);},_setDisabledAttr:function(_3cf){this.disabled=_3cf;dijit.setWaiState(this.domNode,"disabled",_3cf);if(_3cf){this.displayNode.removeAttribute("tabIndex");}else{this.displayNode.setAttribute("tabIndex",0);}dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_3cf);},_onMouseOver:function(){if(!this.disabled){dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");}},_onMouseOut:function(){dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"edit"),0);},edit:function(){if(this.disabled||this.editing){return;}this.editing=true;this._savedPosition=dojo.style(this.displayNode,"position")||"static";this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";if(this.wrapperWidget){var ew=this.wrapperWidget.editWidget;ew.set("displayedValue" in ew?"displayedValue":"value",this.value);}else{var _3d0=dojo.create("span",null,this.domNode,"before");var ewc=dojo.getObject(this.editorWrapper);this.wrapperWidget=new ewc({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_3d0);}var ww=this.wrapperWidget;if(dojo.isIE){dijit.focus(dijit.getFocus());}dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});dojo.attr(this.displayNode,"tabIndex","-1");setTimeout(dojo.hitch(this,function(){ww.focus();ww._resetValue=ww.getValue();}),0);},_onBlur:function(){this.inherited(arguments);if(!this.editing){}},destroy:function(){if(this.wrapperWidget){this.wrapperWidget.destroy();delete this.wrapperWidget;}this.inherited(arguments);},_showText:function(_3d1){var ww=this.wrapperWidget;dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);if(_3d1){dijit.focus(this.displayNode);}},save:function(_3d2){if(this.disabled||!this.editing){return;}this.editing=false;var ww=this.wrapperWidget;var _3d3=ww.getValue();this.set("value",_3d3);setTimeout(dojo.hitch(this,"onChange",_3d3),0);this._showText(_3d2);},setValue:function(val){dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated. Use set('value', ...) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(val){this.value=val=dojo.trim(val);if(!this.renderAsHtml){val=val.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,""").replace(/\n/g,"<br>");}this.displayNode.innerHTML=val||this.noValueIndicator;},getValue:function(){dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},cancel:function(_3d4){if(this.disabled||!this.editing){return;}this.editing=false;setTimeout(dojo.hitch(this,"onCancel"),0);this._showText(_3d4);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){this.inherited(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 _3d5=this.sourceStyle,_3d6="line-height:"+_3d5.lineHeight+";",_3d7=dojo.getComputedStyle(this.domNode);dojo.forEach(["Weight","Family","Size","Style"],function(prop){var _3d8=_3d5["font"+prop],_3d9=_3d7["font"+prop];if(_3d9!=_3d8){_3d6+="font-"+prop+":"+_3d5["font"+prop]+";";}},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_3d5[prop];},this);var _3da=this.inlineEditBox.width;if(_3da=="100%"){_3d6+="width:100%;";this.domNode.style.display="block";}else{_3d6+="width:"+(_3da+(Number(_3da)==_3da?"px":""))+";";}var _3db=dojo.delegate(this.inlineEditBox.editorParams,{style:_3d6,dir:this.dir,lang:this.lang});_3db["displayedValue" in cls.prototype?"displayedValue":"value"]=this.value;var ew=(this.editWidget=new cls(_3db,this.editorPlaceholder));if(this.inlineEditBox.autoSave){dojo.destroy(this.buttonContainer);this.connect(ew,"onChange","_onChange");this.connect(ew,"onKeyPress","_onKeyPress");}else{if("intermediateChanges" in cls.prototype){ew.set("intermediateChanges",true);this.connect(ew,"onChange","_onIntermediateChange");this.saveButton.set("disabled",true);}}},_onIntermediateChange:function(val){this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());},destroy:function(){this.editWidget.destroy(true);this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return String(ew.get("displayedValue" in ew?"displayedValue":"value"));},_onKeyPress:function(e){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(e.altKey||e.ctrlKey){return;}if(e.charOrCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this.cancel(true);}else{if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){dojo.stopEvent(e);this._onChange();}}}},_onBlur:function(){this.inherited(arguments);if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(this.getValue()==this._resetValue){this.cancel(false);}else{if(this.enableSave()){this.save(false);}}}},_onChange:function(){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){dojo.style(this.inlineEditBox.displayNode,{display:""});dijit.focus(this.inlineEditBox.displayNode);}},enableSave:function(){return (this.editWidget.isValid?this.editWidget.isValid():true);},focus:function(){this.editWidget.focus();setTimeout(dojo.hitch(this,function(){if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){dijit.selectInputText(this.editWidget.focusNode);}}),0);}});}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_3dc,_3dd){var c=document.cookie;if(arguments.length==1){var _3de=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(name)+"=([^;]*)"));return _3de?decodeURIComponent(_3de[1]):undefined;}else{_3dd=_3dd||{};var exp=_3dd.expires;if(typeof exp=="number"){var d=new Date();d.setTime(d.getTime()+exp*24*60*60*1000);exp=_3dd.expires=d;}if(exp&&exp.toUTCString){_3dd.expires=exp.toUTCString();}_3dc=encodeURIComponent(_3dc);var _3df=name+"="+_3dc,_3e0;for(_3e0 in _3dd){_3df+="; "+_3e0;var _3e1=_3dd[_3e0];if(_3e1!==true){_3df+="="+_3e1;}}document.cookie=_3df;}};dojo.cookie.isSupported=function(){if(!("cookieEnabled" in navigator)){this("__djCookieTest__","CookiesAllowed");navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";if(navigator.cookieEnabled){this("__djCookieTest__","",{expires:-1});}}return navigator.cookieEnabled;};}if(!dojo._hasResource["dijit.layout.StackController"]){dojo._hasResource["dijit.layout.StackController"]=true;dojo.provide("dijit.layout.StackController");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.pane2handles={};this.subscribe(this.containerId+"-startup","onStartup");this.subscribe(this.containerId+"-addChild","onAddChild");this.subscribe(this.containerId+"-removeChild","onRemoveChild");this.subscribe(this.containerId+"-selectChild","onSelectChild");this.subscribe(this.containerId+"-containerKeyPress","onContainerKeyPress");},onStartup:function(info){dojo.forEach(info.children,this.onAddChild,this);if(info.selected){this.onSelectChild(info.selected);}},destroy:function(){for(var pane in this.pane2button){this.onRemoveChild(dijit.byId(pane));}this.inherited(arguments);},onAddChild:function(page,_3e2){var cls=dojo.getObject(this.buttonWidget);var _3e3=new cls({id:this.id+"_"+page.id,label:page.title,dir:page.dir,lang:page.lang,showLabel:page.showTitle,iconClass:page.iconClass,closeButton:page.closable,title:page.tooltip});dijit.setWaiState(_3e3.focusNode,"selected","false");this.pane2handles[page.id]=[this.connect(page,"set",function(name,_3e4){var _3e5={title:"label",showTitle:"showLabel",iconClass:"iconClass",closable:"closeButton",tooltip:"title"}[name];if(_3e5){_3e3.set(_3e5,_3e4);}}),this.connect(_3e3,"onClick",dojo.hitch(this,"onButtonClick",page)),this.connect(_3e3,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page))];this.addChild(_3e3,_3e2);this.pane2button[page.id]=_3e3;page.controlButton=_3e3;if(!this._currentChild){_3e3.focusNode.setAttribute("tabIndex","0");dijit.setWaiState(_3e3.focusNode,"selected","true");this._currentChild=page;}if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){this._rectifyRtlTabList();}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}dojo.forEach(this.pane2handles[page.id],this.disconnect,this);delete this.pane2handles[page.id];var _3e6=this.pane2button[page.id];if(_3e6){this.removeChild(_3e6);delete this.pane2button[page.id];_3e6.destroy();}delete page.controlButton;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _3e7=this.pane2button[this._currentChild.id];_3e7.set("checked",false);dijit.setWaiState(_3e7.focusNode,"selected","false");_3e7.focusNode.setAttribute("tabIndex","-1");}var _3e8=this.pane2button[page.id];_3e8.set("checked",true);dijit.setWaiState(_3e8.focusNode,"selected","true");this._currentChild=page;_3e8.focusNode.setAttribute("tabIndex","0");var _3e9=dijit.byId(this.containerId);dijit.setWaiState(_3e9.containerNode,"labelledby",_3e8.id);},onButtonClick:function(page){var _3ea=dijit.byId(this.containerId);_3ea.selectChild(page);},onCloseButtonClick:function(page){var _3eb=dijit.byId(this.containerId);_3eb.closeChild(page);if(this._currentChild){var b=this.pane2button[this._currentChild.id];if(b){dijit.focus(b.focusNode||b.domNode);}}},adjacent:function(_3ec){if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){_3ec=!_3ec;}var _3ed=this.getChildren();var _3ee=dojo.indexOf(_3ed,this.pane2button[this._currentChild.id]);var _3ef=_3ec?1:_3ed.length-1;return _3ed[(_3ee+_3ef)%_3ed.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _3f0=null;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.charOrCode){case k.LEFT_ARROW:case k.UP_ARROW:if(!e._djpage){_3f0=false;}break;case k.PAGE_UP:if(e.ctrlKey){_3f0=false;}break;case k.RIGHT_ARROW:case k.DOWN_ARROW:if(!e._djpage){_3f0=true;}break;case k.PAGE_DOWN:if(e.ctrlKey){_3f0=true;}break;case k.DELETE:if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);break;default:if(e.ctrlKey){if(e.charOrCode===k.TAB){this.adjacent(!e.shiftKey).onClick();dojo.stopEvent(e);}else{if(e.charOrCode=="w"){if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);}}}}if(_3f0!==null){this.adjacent(_3f0).onClick();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(arguments);},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});}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,persist:false,baseClass:"dijitStackContainer",postCreate:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitLayoutContainer");dijit.setWaiRole(this.containerNode,"tabpanel");this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _3f1=this.getChildren();dojo.forEach(_3f1,this._setupChild,this);if(this.persist){this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));}else{dojo.some(_3f1,function(_3f2){if(_3f2.selected){this.selectedChildWidget=_3f2;}return _3f2.selected;},this);}var _3f3=this.selectedChildWidget;if(!_3f3&&_3f1[0]){_3f3=this.selectedChildWidget=_3f1[0];_3f3.selected=true;}dojo.publish(this.id+"-startup",[{children:_3f1,selected:_3f3}]);this.inherited(arguments);},resize:function(){var _3f4=this.selectedChildWidget;if(_3f4&&!this._hasBeenShown){this._hasBeenShown=true;this._showChild(_3f4);}this.inherited(arguments);},_setupChild:function(_3f5){this.inherited(arguments);dojo.removeClass(_3f5.domNode,"dijitVisible");dojo.addClass(_3f5.domNode,"dijitHidden");_3f5.domNode.title="";},addChild:function(_3f6,_3f7){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-addChild",[_3f6,_3f7]);this.layout();if(!this.selectedChildWidget){this.selectChild(_3f6);}}},removeChild:function(page){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-removeChild",[page]);}if(this._beingDestroyed){return;}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _3f8=this.getChildren();if(_3f8.length){this.selectChild(_3f8[0]);}}}if(this._started){this.layout();}},selectChild:function(page,_3f9){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget,_3f9);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);if(this.persist){dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);}}},_transition:function(_3fa,_3fb){if(_3fb){this._hideChild(_3fb);}this._showChild(_3fa);if(_3fa.resize){if(this.doLayout){_3fa.resize(this._containerContentBox||this._contentBox);}else{_3fa.resize();}}},_adjacent:function(_3fc){var _3fd=this.getChildren();var _3fe=dojo.indexOf(_3fd,this.selectedChildWidget);_3fe+=_3fc?1:_3fd.length-1;return _3fd[_3fe%_3fd.length];},forward:function(){this.selectChild(this._adjacent(true),true);},back:function(){this.selectChild(this._adjacent(false),true);},_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._containerContentBox||this._contentBox);}},_showChild:function(page){var _3ff=this.getChildren();page.isFirstChild=(page==_3ff[0]);page.isLastChild=(page==_3ff[_3ff.length-1]);page.selected=true;dojo.removeClass(page.domNode,"dijitHidden");dojo.addClass(page.domNode,"dijitVisible");page._onShow();},_hideChild:function(page){page.selected=false;dojo.removeClass(page.domNode,"dijitVisible");dojo.addClass(page.domNode,"dijitHidden");page.onHide();},closeChild:function(page){var _400=page.onClose(this,page);if(_400){this.removeChild(page);page.destroyRecursive();}},destroyDescendants:function(_401){dojo.forEach(this.getChildren(),function(_402){this.removeChild(_402);_402.destroyRecursive(_401);},this);}});dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});}if(!dojo._hasResource["dijit.layout.AccordionPane"]){dojo._hasResource["dijit.layout.AccordionPane"]=true;dojo.provide("dijit.layout.AccordionPane");dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");},onSelected:function(){}});}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:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",_verticalSpace:0,baseClass:"dijitAccordionContainer",postCreate:function(){this.domNode.style.overflow="hidden";this.inherited(arguments);dijit.setWaiRole(this.domNode,"tablist");},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.selectedChildWidget){var _403=this.selectedChildWidget.containerNode.style;_403.display="";_403.overflow="auto";this.selectedChildWidget._wrapperWidget.set("selected",true);}},_getTargetHeight:function(node){var cs=dojo.getComputedStyle(node);return Math.max(this._verticalSpace-dojo._getPadBorderExtents(node,cs).h-dojo._getMarginExtents(node,cs).h,0);},layout:function(){var _404=this.selectedChildWidget;if(!_404){return;}var _405=_404._wrapperWidget.domNode,_406=dojo._getMarginExtents(_405),_407=dojo._getPadBorderExtents(_405),_408=this._contentBox;var _409=0;dojo.forEach(this.getChildren(),function(_40a){if(_40a!=_404){_409+=dojo.marginBox(_40a._wrapperWidget.domNode).h;}});this._verticalSpace=_408.h-_409-_406.h-_407.h-_404._buttonWidget.getTitleHeight();this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_406.w-_407.w};if(_404){_404.resize(this._containerContentBox);}},_setupChild:function(_40b){_40b._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_40b,buttonWidget:this.buttonWidget,id:_40b.id+"_wrapper",dir:_40b.dir,lang:_40b.lang,parent:this});this.inherited(arguments);},addChild:function(_40c,_40d){if(this._started){dojo.place(_40c.domNode,this.containerNode,_40d);if(!_40c._started){_40c.startup();}this._setupChild(_40c);dojo.publish(this.id+"-addChild",[_40c,_40d]);this.layout();if(!this.selectedChildWidget){this.selectChild(_40c);}}else{this.inherited(arguments);}},removeChild:function(_40e){_40e._wrapperWidget.destroy();delete _40e._wrapperWidget;dojo.removeClass(_40e.domNode,"dijitHidden");this.inherited(arguments);},getChildren:function(){return dojo.map(this.inherited(arguments),function(_40f){return _40f.declaredClass=="dijit.layout._AccordionInnerContainer"?_40f.contentWidget:_40f;},this);},destroy:function(){dojo.forEach(this.getChildren(),function(_410){_410._wrapperWidget.destroy();});this.inherited(arguments);},_transition:function(_411,_412,_413){if(this._inTransition){return;}var _414=[];var _415=this._verticalSpace;if(_411){_411._wrapperWidget.set("selected",true);this._showChild(_411);if(this.doLayout&&_411.resize){_411.resize(this._containerContentBox);}var _416=_411.domNode;dojo.addClass(_416,"dijitVisible");dojo.removeClass(_416,"dijitHidden");if(_413){var _417=_416.style.overflow;_416.style.overflow="hidden";_414.push(dojo.animateProperty({node:_416,duration:this.duration,properties:{height:{start:1,end:this._getTargetHeight(_416)}},onEnd:function(){_416.style.overflow=_417;if(dojo.isIE){setTimeout(function(){dojo.removeClass(_416.parentNode,"dijitAccordionInnerContainerFocused");setTimeout(function(){dojo.addClass(_416.parentNode,"dijitAccordionInnerContainerFocused");},0);},0);}}}));}}if(_412){_412._wrapperWidget.set("selected",false);var _418=_412.domNode;if(_413){var _419=_418.style.overflow;_418.style.overflow="hidden";_414.push(dojo.animateProperty({node:_418,duration:this.duration,properties:{height:{start:this._getTargetHeight(_418),end:1}},onEnd:function(){dojo.addClass(_418,"dijitHidden");dojo.removeClass(_418,"dijitVisible");_418.style.overflow=_419;if(_412.onHide){_412.onHide();}}}));}else{dojo.addClass(_418,"dijitHidden");dojo.removeClass(_418,"dijitVisible");if(_412.onHide){_412.onHide();}}}if(_413){this._inTransition=true;var _41a=dojo.fx.combine(_414);_41a.onEnd=dojo.hitch(this,function(){delete this._inTransition;});_41a.play();}},_onKeyPress:function(e,_41b){if(this._inTransition||this.disabled||e.altKey||!(_41b||e.ctrlKey)){if(this._inTransition){dojo.stopEvent(e);}return;}var k=dojo.keys,c=e.charOrCode;if((_41b&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){this._adjacent(false)._buttonWidget._onTitleClick();dojo.stopEvent(e);}else{if((_41b&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){this._adjacent(true)._buttonWidget._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");var _41c=this.contentWidget,cls=dojo.getObject(this.buttonWidget);this.button=_41c._buttonWidget=(new cls({contentWidget:_41c,label:_41c.title,title:_41c.tooltip,dir:_41c.dir,lang:_41c.lang,iconClass:_41c.iconClass,id:_41c.id+"_button",parent:this.parent})).placeAt(this.domNode);dojo.place(this.contentWidget.domNode,this.domNode);},postCreate:function(){this.inherited(arguments);this.connect(this.contentWidget,"set",function(name,_41d){var _41e={title:"label",tooltip:"title",iconClass:"iconClass"}[name];if(_41e){this.button.set(_41e,_41d);}},this);},_setSelectedAttr:function(_41f){this.selected=_41f;this.button.set("selected",_41f);if(_41f){var cw=this.contentWidget;if(cw.onSelected){cw.onSelected();}}},startup:function(){this.contentWidget.startup();},destroy:function(){this.button.destroyRecursive();delete this.contentWidget._buttonWidget;delete this.contentWidget._wrapperWidget;this.inherited(arguments);},destroyDescendants:function(){this.contentWidget.destroyRecursive();}});dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){return this.parent;},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);var _420=dojo.attr(this.domNode,"id").replace(" ","_");dojo.attr(this.titleTextNode,"id",_420+"_title");dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));},getTitleHeight:function(){return dojo.marginBox(this.domNode).h;},_onTitleClick:function(){var _421=this.getParent();if(!_421._inTransition){_421.selectChild(this.contentWidget,true);dijit.focus(this.focusNode);}},_onTitleKeyPress:function(evt){return this.getParent()._onKeyPress(evt,this.contentWidget);},_setSelectedAttr:function(_422){this.selected=_422;dijit.setWaiState(this.focusNode,"expanded",_422);dijit.setWaiState(this.focusNode,"selected",_422);this.focusNode.setAttribute("tabIndex",_422?"0":"-1");}});}if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){if(!this.gutters){this.baseClass+="NoGutter";}this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this._splitters={};this._splitterThickness={};},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),this._setupChild,this);this.inherited(arguments);},_setupChild:function(_423){var _424=_423.region;if(_424){this.inherited(arguments);dojo.addClass(_423.domNode,this.baseClass+"Pane");var ltr=this.isLeftToRight();if(_424=="leading"){_424=ltr?"left":"right";}if(_424=="trailing"){_424=ltr?"right":"left";}this["_"+_424]=_423.domNode;this["_"+_424+"Widget"]=_423;if((_423.splitter||this.gutters)&&!this._splitters[_424]){var _425=dojo.getObject(_423.splitter?this._splitterClass:"dijit.layout._Gutter");var _426=new _425({id:_423.id+"_splitter",container:this,child:_423,region:_424,live:this.liveSplitters});_426.isSplitter=true;this._splitters[_424]=_426.domNode;dojo.place(this._splitters[_424],_423.domNode,"after");_426.startup();}_423.region=_424;}},_computeSplitterThickness:function(_427){this._splitterThickness[_427]=this._splitterThickness[_427]||dojo.marginBox(this._splitters[_427])[(/top|bottom/.test(_427)?"h":"w")];},layout:function(){for(var _428 in this._splitters){this._computeSplitterThickness(_428);}this._layoutChildren();},addChild:function(_429,_42a){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_42b){var _42c=_42b.region;var _42d=this._splitters[_42c];if(_42d){dijit.byNode(_42d).destroy();delete this._splitters[_42c];delete this._splitterThickness[_42c];}this.inherited(arguments);delete this["_"+_42c];delete this["_"+_42c+"Widget"];if(this._started){this._layoutChildren();}dojo.removeClass(_42b.domNode,this.baseClass+"Pane");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_42e){return !_42e.isSplitter;});},getSplitter:function(_42f){var _430=this._splitters[_42f];return _430?dijit.byNode(_430):null;},resize:function(_431,_432){if(!this.cs||!this.pe){var node=this.domNode;this.cs=dojo.getComputedStyle(node);this.pe=dojo._getPadExtents(node,this.cs);this.pe.r=dojo._toPixelValue(node,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(node,this.cs.paddingBottom);dojo.style(node,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_433,_434){if(!this._borderBox||!this._borderBox.h){return;}var _435=(this.design=="sidebar");var _436=0,_437=0,_438=0,_439=0;var _43a={},_43b={},_43c={},_43d={},_43e=(this._center&&this._center.style)||{};var _43f=/left|right/.test(_433);var _440=!_433||(!_43f&&!_435);var _441=!_433||(_43f&&_435);if(this._top){_43a=(_433=="top"||_441)&&this._top.style;_436=_433=="top"?_434:dojo.marginBox(this._top).h;}if(this._left){_43b=(_433=="left"||_440)&&this._left.style;_438=_433=="left"?_434:dojo.marginBox(this._left).w;}if(this._right){_43c=(_433=="right"||_440)&&this._right.style;_439=_433=="right"?_434:dojo.marginBox(this._right).w;}if(this._bottom){_43d=(_433=="bottom"||_441)&&this._bottom.style;_437=_433=="bottom"?_434:dojo.marginBox(this._bottom).h;}var _442=this._splitters;var _443=_442.top,_444=_442.bottom,_445=_442.left,_446=_442.right;var _447=this._splitterThickness;var _448=_447.top||0,_449=_447.left||0,_44a=_447.right||0,_44b=_447.bottom||0;if(_449>50||_44a>50){setTimeout(dojo.hitch(this,function(){this._splitterThickness={};for(var _44c in this._splitters){this._computeSplitterThickness(_44c);}this._layoutChildren();}),50);return false;}var pe=this.pe;var _44d={left:(_435?_438+_449:0)+pe.l+"px",right:(_435?_439+_44a:0)+pe.r+"px"};if(_443){dojo.mixin(_443.style,_44d);_443.style.top=_436+pe.t+"px";}if(_444){dojo.mixin(_444.style,_44d);_444.style.bottom=_437+pe.b+"px";}_44d={top:(_435?0:_436+_448)+pe.t+"px",bottom:(_435?0:_437+_44b)+pe.b+"px"};if(_445){dojo.mixin(_445.style,_44d);_445.style.left=_438+pe.l+"px";}if(_446){dojo.mixin(_446.style,_44d);_446.style.right=_439+pe.r+"px";}dojo.mixin(_43e,{top:pe.t+_436+_448+"px",left:pe.l+_438+_449+"px",right:pe.r+_439+_44a+"px",bottom:pe.b+_437+_44b+"px"});var _44e={top:_435?pe.t+"px":_43e.top,bottom:_435?pe.b+"px":_43e.bottom};dojo.mixin(_43b,_44e);dojo.mixin(_43c,_44e);_43b.left=pe.l+"px";_43c.right=pe.r+"px";_43a.top=pe.t+"px";_43d.bottom=pe.b+"px";if(_435){_43a.left=_43d.left=_438+_449+pe.l+"px";_43a.right=_43d.right=_439+_44a+pe.r+"px";}else{_43a.left=_43d.left=pe.l+"px";_43a.right=_43d.right=pe.r+"px";}var _44f=this._borderBox.h-pe.t-pe.b,_450=_44f-(_436+_448+_437+_44b),_451=_435?_44f:_450;var _452=this._borderBox.w-pe.l-pe.r,_453=_452-(_438+_449+_439+_44a),_454=_435?_453:_452;var dim={top:{w:_454,h:_436},bottom:{w:_454,h:_437},left:{w:_438,h:_451},right:{w:_439,h:_451},center:{h:_450,w:_453}};if(_433){var _455=this["_"+_433+"Widget"],mb={};mb[/top|bottom/.test(_433)?"h":"w"]=_434;_455.resize?_455.resize(mb,dim[_455.region]):dojo.marginBox(_455.domNode,mb);}var _456=dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.some(this.getChildren(),function(_457){return _457.domNode.tagName=="TEXTAREA"||_457.domNode.tagName=="INPUT";});if(_456){var _458=function(_459,_45a,_45b){if(_459){(_459.resize?_459.resize(_45a,_45b):dojo.marginBox(_459.domNode,_45a));}};if(_445){_445.style.height=_451;}if(_446){_446.style.height=_451;}_458(this._leftWidget,{h:_451},dim.left);_458(this._rightWidget,{h:_451},dim.right);if(_443){_443.style.width=_454;}if(_444){_444.style.width=_454;}_458(this._topWidget,{w:_454},dim.top);_458(this._bottomWidget,{w:_454},dim.bottom);_458(this._centerWidget,dim.center);}else{var _45c=!_433||(/top|bottom/.test(_433)&&this.design!="sidebar"),_45d=!_433||(/left|right/.test(_433)&&this.design=="sidebar"),_45e={center:true,left:_45c,right:_45c,top:_45d,bottom:_45d};dojo.forEach(this.getChildren(),function(_45f){if(_45f.resize&&_45e[_45f.region]){_45f.resize(null,dim[_45f.region]);}},this);}},destroy:function(){for(var _460 in this._splitters){var _461=this._splitters[_460];dijit.byNode(_461).destroy();dojo.destroy(_461);}delete this._splitters;delete this._splitterThickness;this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",splitter:false,minSize:0,maxSize:Infinity});dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" waiRole=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postCreate:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));this._factor=/top|left/.test(this.region)?1:-1;this._cookieName=this.container.id+"_"+this.region;if(this.container.persist){var _462=dojo.cookie(this._cookieName);if(_462){this.child.domNode.style[this.horizontal?"height":"width"]=_462;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_463=this.container._splitterThickness[this.region];var flip={left:"right",right:"left",top:"bottom",bottom:"top",leading:"trailing",trailing:"leading"},_464=this.container["_"+flip[this.region]];var _465=dojo.contentBox(this.container.domNode)[dim]-(_464?dojo.marginBox(_464)[dim]:0)-20-_463*2;return Math.min(this.child.maxSize,_465);},_startDrag:function(e){if(!this.cover){this.cover=dojo.doc.createElement("div");dojo.addClass(this.cover,"dijitSplitterCover");dojo.place(this.cover,this.child.domNode,"after");}dojo.addClass(this.cover,"dijitSplitterCoverActive");if(this.fake){dojo.destroy(this.fake);}if(!(this._resize=this.live)){(this.fake=this.domNode.cloneNode(true)).removeAttribute("id");dojo.addClass(this.domNode,"dijitSplitterShadow");dojo.place(this.fake,this.domNode,"after");}dojo.addClass(this.domNode,"dijitSplitterActive");dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");if(this.fake){dojo.removeClass(this.fake,"dijitSplitterHover");dojo.removeClass(this.fake,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover");}var _466=this._factor,max=this._computeMaxSize(),min=this.child.minSize||20,_467=this.horizontal,axis=_467?"pageY":"pageX",_468=e[axis],_469=this.domNode.style,dim=_467?"h":"w",_46a=dojo.marginBox(this.child.domNode)[dim],_46b=this.region,_46c=parseInt(this.domNode.style[_46b],10),_46d=this._resize,_46e=this.child.domNode,_46f=dojo.hitch(this.container,this.container._layoutChildren),de=dojo.doc;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_470){var _471=e[axis]-_468,_472=_466*_471+_46a,_473=Math.max(Math.min(_472,max),min);if(_46d||_470){_46f(_46b,_473);}_469[_46b]=_466*_471+_46c+(_473-_472)+"px";}),dojo.connect(de,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent),dojo.connect(de,"onmouseup",this,"_stopDrag")]);dojo.stopEvent(e);},_onMouse:function(e){var o=(e.type=="mouseover"||e.type=="mouseenter");dojo.toggleClass(this.domNode,"dijitSplitterHover",o);dojo.toggleClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover",o);},_stopDrag:function(e){try{if(this.cover){dojo.removeClass(this.cover,"dijitSplitterCoverActive");}if(this.fake){dojo.destroy(this.fake);}dojo.removeClass(this.domNode,"dijitSplitterActive");dojo.removeClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Active");dojo.removeClass(this.domNode,"dijitSplitterShadow");this._drag(e);this._drag(e,true);}finally{this._cleanupHandlers();delete this._drag;}if(this.container.persist){dojo.cookie(this._cookieName,this.child.domNode.style[this.horizontal?"height":"width"],{expires:365});}},_cleanupHandlers:function(){dojo.forEach(this._handlers,dojo.disconnect);delete this._handlers;},_onKeyPress:function(e){this._resize=true;var _474=this.horizontal;var tick=1;var dk=dojo.keys;switch(e.charOrCode){case _474?dk.UP_ARROW:dk.LEFT_ARROW:tick*=-1;case _474?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _475=dojo.marginBox(this.child.domNode)[_474?"h":"w"]+this._factor*tick;this.container._layoutChildren(this.region,Math.max(Math.min(_475,this._computeMaxSize()),this.child.minSize));dojo.stopEvent(e);},destroy:function(){this._cleanupHandlers();delete this.child;delete this.container;delete this.cover;delete this.fake;this.inherited(arguments);}});dojo.declare("dijit.layout._Gutter",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitGutter\" waiRole=\"presentation\"></div>",postCreate:function(){this.horizontal=/top|bottom/.test(this.region);dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));}});}if(!dojo._hasResource["dijit.layout._TabContainerBase"]){dojo._hasResource["dijit.layout._TabContainerBase"]=true;dojo.provide("dijit.layout._TabContainerBase");dojo.declare("dijit.layout._TabContainerBase",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",baseClass:"dijitTabContainer",tabStrip:false,nested:false,templateString:dojo.cache("dijit.layout","templates/TabContainer.html","<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),postMixInProperties:function(){this.baseClass+=this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"");this.srcNodeRef&&dojo.style(this.srcNodeRef,"visibility","hidden");this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.tablist=this._makeController(this.tablistNode);if(!this.doLayout){dojo.addClass(this.domNode,"dijitTabContainerNoLayout");}if(this.nested){dojo.addClass(this.domNode,"dijitTabContainerNested");dojo.addClass(this.tablist.containerNode,"dijitTabContainerTabListNested");dojo.addClass(this.tablistSpacer,"dijitTabContainerSpacerNested");dojo.addClass(this.containerNode,"dijitTabPaneWrapperNested");}else{dojo.addClass(this.domNode,"tabStrip-"+(this.tabStrip?"enabled":"disabled"));}},_setupChild:function(tab){dojo.addClass(tab.domNode,"dijitTabPane");this.inherited(arguments);},startup:function(){if(this._started){return;}this.tablist.startup();this.inherited(arguments);},layout:function(){if(!this._contentBox||typeof (this._contentBox.l)=="undefined"){return;}var sc=this.selectedChildWidget;if(this.doLayout){var _476=this.tabPosition.replace(/-h/,"");this.tablist.layoutAlign=_476;var _477=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_476},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_477);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_477[2]);if(sc&&sc.resize){sc.resize(this._containerContentBox);}}else{if(this.tablist.resize){this.tablist.resize({w:dojo.contentBox(this.domNode).w});}if(sc&&sc.resize){sc.resize();}}},destroy:function(){if(this.tablist){this.tablist.destroy();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.TabController"]){dojo._hasResource["dijit.layout.TabController"]=true;dojo.provide("dijit.layout.TabController");dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",tabPosition:"top",buttonWidget:"dijit.layout._TabButton",_rectifyRtlTabList:function(){if(0>=this.tabPosition.indexOf("-h")){return;}if(!this.pane2button){return;}var _478=0;for(var pane in this.pane2button){var ow=this.pane2button[pane].innerDiv.scrollWidth;_478=Math.max(_478,ow);}for(pane in this.pane2button){this.pane2button[pane].innerDiv.style.width=_478+"px";}}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t ></span>\n\t\t\t</div>\n </div>\n </div>\n</div>\n"),scrollOnFocus:false,postMixInProperties:function(){if(!this.iconClass){this.iconClass="dijitTabButtonIcon";}},postCreate:function(){this.inherited(arguments);dojo.setSelectable(this.containerNode,false);if(this.iconNode.className=="dijitTabButtonIcon"){dojo.style(this.iconNode,"width","1px");}},startup:function(){this.inherited(arguments);var n=this.domNode;setTimeout(function(){n.className=n.className;},1);},_setCloseButtonAttr:function(disp){this.closeButton=disp;dojo.toggleClass(this.innerDiv,"dijitClosable",disp);this.closeNode.style.display=disp?"":"none";if(disp){var _479=dojo.i18n.getLocalization("dijit","common");if(this.closeNode){dojo.attr(this.closeNode,"title",_479.itemClose);}var _479=dojo.i18n.getLocalization("dijit","common");this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});this._closeMenu.addChild(new dijit.MenuItem({label:_479.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));}else{if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}}},_setLabelAttr:function(_47a){this.inherited(arguments);if(this.showLabel==false&&!this.params.title){this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},destroy:function(){if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){dojo._hasResource["dijit.layout.ScrollingTabController"]=true;dojo.provide("dijit.layout.ScrollingTabController");dojo.declare("dijit.layout.ScrollingTabController",dijit.layout.TabController,{templateString:dojo.cache("dijit.layout","templates/ScrollingTabController.html","<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>▼</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>◀</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>▶</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),useMenu:true,useSlider:true,tabStripClass:"",widgetsInTemplate:true,_minScroll:5,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{"class":"containerNode"}),postCreate:function(){this.inherited(arguments);var n=this.domNode;this.scrollNode=this.tablistWrapper;this._initButtons();if(!this.tabStripClass){this.tabStripClass="dijitTabContainer"+this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"")+"None";dojo.addClass(n,"tabStrip-disabled");}dojo.addClass(this.tablistWrapper,this.tabStripClass);},onStartup:function(){this.inherited(arguments);dojo.style(this.domNode,"visibility","visible");this._postStartup=true;},onAddChild:function(page,_47b){this.inherited(arguments);var _47c;if(this.useMenu){var _47d=this.containerId;_47c=new dijit.MenuItem({id:page.id+"_stcMi",label:page.title,dir:page.dir,lang:page.lang,onClick:dojo.hitch(this,function(){var _47e=dijit.byId(_47d);_47e.selectChild(page);})});this._menuChildren[page.id]=_47c;this._menu.addChild(_47c,_47b);}this.pane2handles[page.id].push(this.connect(this.pane2button[page.id],"set",function(name,_47f){if(this._postStartup){if(name=="label"){if(_47c){_47c.set(name,_47f);}if(this._dim){this.resize(this._dim);}}}}));dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");},onRemoveChild:function(page,_480){var _481=this.pane2button[page.id];if(this._selectedTab===_481.domNode){this._selectedTab=null;}if(this.useMenu&&page&&page.id&&this._menuChildren[page.id]){this._menu.removeChild(this._menuChildren[page.id]);this._menuChildren[page.id].destroy();delete this._menuChildren[page.id];}this.inherited(arguments);},_initButtons:function(){this._menuChildren={};this._btnWidth=0;this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(btn){if((this.useMenu&&btn==this._menuBtn.domNode)||(this.useSlider&&(btn==this._rightBtn.domNode||btn==this._leftBtn.domNode))){this._btnWidth+=dojo.marginBox(btn).w;return true;}else{dojo.style(btn,"display","none");return false;}},this);if(this.useMenu){this._menu=new dijit.Menu({id:this.id+"_menu",dir:this.dir,lang:this.lang,targetNodeIds:[this._menuBtn.domNode],leftClickToOpen:true,refocus:false});this._supportingWidgets.push(this._menu);}},_getTabsWidth:function(){var _482=this.getChildren();if(_482.length){var _483=_482[this.isLeftToRight()?0:_482.length-1].domNode,_484=_482[this.isLeftToRight()?_482.length-1:0].domNode;return _484.offsetLeft+dojo.style(_484,"width")-_483.offsetLeft;}else{return 0;}},_enableBtn:function(_485){var _486=this._getTabsWidth();_485=_485||dojo.style(this.scrollNode,"width");return _486>0&&_485<_486;},resize:function(dim){if(this.domNode.offsetWidth==0){return;}this._dim=dim;this.scrollNode.style.height="auto";this._contentBox=dijit.layout.marginBox2contentBox(this.domNode,{h:0,w:dim.w});this._contentBox.h=this.scrollNode.offsetHeight;dojo.contentBox(this.domNode,this._contentBox);var _487=this._enableBtn(this._contentBox.w);this._buttons.style("display",_487?"":"none");this._leftBtn.layoutAlign="left";this._rightBtn.layoutAlign="right";this._menuBtn.layoutAlign=this.isLeftToRight()?"right":"left";dijit.layout.layoutChildren(this.domNode,this._contentBox,[this._menuBtn,this._leftBtn,this._rightBtn,{domNode:this.scrollNode,layoutAlign:"client"}]);if(this._selectedTab){if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());w.scrollLeft=sl;}this._setButtonClass(this._getScroll());this._postResize=true;},_getScroll:function(){var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit)?this.scrollNode.scrollLeft:dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width")+(dojo.isIE==8?-1:1)*this.scrollNode.scrollLeft;return sl;},_convertToScrollLeft:function(val){if(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit){return val;}else{var _488=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");return (dojo.isIE==8?-1:1)*(val-_488);}},onSelectChild:function(page){var tab=this.pane2button[page.id];if(!tab||!page){return;}var node=tab.domNode;if(this._postResize&&node!=this._selectedTab){this._selectedTab=node;var sl=this._getScroll();if(sl>node.offsetLeft||sl+dojo.style(this.scrollNode,"width")<node.offsetLeft+dojo.style(node,"width")){this.createSmoothScroll().play();}}this.inherited(arguments);},_getScrollBounds:function(){var _489=this.getChildren(),_48a=dojo.style(this.scrollNode,"width"),_48b=dojo.style(this.containerNode,"width"),_48c=_48b-_48a,_48d=this._getTabsWidth();if(_489.length&&_48d>_48a){return {min:this.isLeftToRight()?0:_489[_489.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_489[_489.length-1].domNode.offsetLeft+dojo.style(_489[_489.length-1].domNode,"width"))-_48a:_48c};}else{var _48e=this.isLeftToRight()?0:_48c;return {min:_48e,max:_48e};}},_getScrollForSelectedTab:function(){var w=this.scrollNode,n=this._selectedTab,_48f=dojo.style(this.scrollNode,"width"),_490=this._getScrollBounds();var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_48f/2;pos=Math.min(Math.max(pos,_490.min),_490.max);return pos;},createSmoothScroll:function(x){if(arguments.length>0){var _491=this._getScrollBounds();x=Math.min(Math.max(x,_491.min),_491.max);}else{x=this._getScrollForSelectedTab();}if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var self=this,w=this.scrollNode,anim=new dojo._Animation({beforeBegin:function(){if(this.curve){delete this.curve;}var oldS=w.scrollLeft,newS=self._convertToScrollLeft(x);anim.curve=new dojo._Line(oldS,newS);},onAnimate:function(val){w.scrollLeft=val;}});this._anim=anim;this._setButtonClass(x);return anim;},_getBtnNode:function(e){var n=e.target;while(n&&!dojo.hasClass(n,"tabStripButton")){n=n.parentNode;}return n;},doSlideRight:function(e){this.doSlide(1,this._getBtnNode(e));},doSlideLeft:function(e){this.doSlide(-1,this._getBtnNode(e));},doSlide:function(_492,node){if(node&&dojo.hasClass(node,"dijitTabDisabled")){return;}var _493=dojo.style(this.scrollNode,"width");var d=(_493*0.75)*_492;var to=this._getScroll()+d;this._setButtonClass(to);this.createSmoothScroll(to).play();},_setButtonClass:function(_494){var _495=this._getScrollBounds();this._leftBtn.set("disabled",_494<=_495.min);this._rightBtn.set("disabled",_494>=_495.max);}});dojo.declare("dijit.layout._ScrollingTabControllerButton",dijit.form.Button,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"-1"});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_496){var cls=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_497=dojo.getObject(this.controllerWidget);return new _497({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":cls,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_496);},postMixInProperties:function(){this.inherited(arguments);if(!this.controllerWidget){this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";}}});}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.number.format=function(_498,_499){_499=dojo.mixin({},_499||{});var _49a=dojo.i18n.normalizeLocale(_499.locale),_49b=dojo.i18n.getLocalization("dojo.cldr","number",_49a);_499.customs=_49b;var _49c=_499.pattern||_49b[(_499.type||"decimal")+"Format"];if(isNaN(_498)||Math.abs(_498)==Infinity){return null;}return dojo.number._applyPattern(_498,_49c,_499);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_49d,_49e,_49f){_49f=_49f||{};var _4a0=_49f.customs.group,_4a1=_49f.customs.decimal,_4a2=_49e.split(";"),_4a3=_4a2[0];_49e=_4a2[(_49d<0)?1:0]||("-"+_4a3);if(_49e.indexOf("%")!=-1){_49d*=100;}else{if(_49e.indexOf("‰")!=-1){_49d*=1000;}else{if(_49e.indexOf("¤")!=-1){_4a0=_49f.customs.currencyGroup||_4a0;_4a1=_49f.customs.currencyDecimal||_4a1;_49e=_49e.replace(/\u00a4{1,3}/,function(_4a4){var prop=["symbol","currency","displayName"][_4a4.length-1];return _49f[prop]||_49f.currency||"";});}else{if(_49e.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _4a5=dojo.number._numberPatternRE;var _4a6=_4a3.match(_4a5);if(!_4a6){throw new Error("unable to find a number expression in pattern: "+_49e);}if(_49f.fractional===false){_49f.places=0;}return _49e.replace(_4a5,dojo.number._formatAbsolute(_49d,_4a6[0],{decimal:_4a1,group:_4a0,places:_49f.places,round:_49f.round}));};dojo.number.round=function(_4a7,_4a8,_4a9){var _4aa=10/(_4a9||10);return (_4aa*+_4a7).toFixed(_4a8)/_4aa;};if((0.9).toFixed()==0){(function(){var _4ab=dojo.number.round;dojo.number.round=function(v,p,m){var d=Math.pow(10,-p||0),a=Math.abs(v);if(!v||a>=d||a*Math.pow(10,p+1)<5){d=0;}return _4ab(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_4ac,_4ad,_4ae){_4ae=_4ae||{};if(_4ae.places===true){_4ae.places=0;}if(_4ae.places===Infinity){_4ae.places=6;}var _4af=_4ad.split("."),_4b0=typeof _4ae.places=="string"&&_4ae.places.indexOf(","),_4b1=_4ae.places;if(_4b0){_4b1=_4ae.places.substring(_4b0+1);}else{if(!(_4b1>=0)){_4b1=(_4af[1]||[]).length;}}if(!(_4ae.round<0)){_4ac=dojo.number.round(_4ac,_4b1,_4ae.round);}var _4b2=String(Math.abs(_4ac)).split("."),_4b3=_4b2[1]||"";if(_4af[1]||_4ae.places){if(_4b0){_4ae.places=_4ae.places.substring(0,_4b0);}var pad=_4ae.places!==undefined?_4ae.places:(_4af[1]&&_4af[1].lastIndexOf("0")+1);if(pad>_4b3.length){_4b2[1]=dojo.string.pad(_4b3,pad,"0",true);}if(_4b1<_4b3.length){_4b2[1]=_4b3.substr(0,_4b1);}}else{if(_4b2[1]){_4b2.pop();}}var _4b4=_4af[0].replace(",","");pad=_4b4.indexOf("0");if(pad!=-1){pad=_4b4.length-pad;if(pad>_4b2[0].length){_4b2[0]=dojo.string.pad(_4b2[0],pad);}if(_4b4.indexOf("#")==-1){_4b2[0]=_4b2[0].substr(_4b2[0].length-pad);}}var _4b5=_4af[0].lastIndexOf(","),_4b6,_4b7;if(_4b5!=-1){_4b6=_4af[0].length-_4b5-1;var _4b8=_4af[0].substr(0,_4b5);_4b5=_4b8.lastIndexOf(",");if(_4b5!=-1){_4b7=_4b8.length-_4b5-1;}}var _4b9=[];for(var _4ba=_4b2[0];_4ba;){var off=_4ba.length-_4b6;_4b9.push((off>0)?_4ba.substr(off):_4ba);_4ba=(off>0)?_4ba.slice(0,off):"";if(_4b7){_4b6=_4b7;delete _4b7;}}_4b2[0]=_4b9.reverse().join(_4ae.group||",");return _4b2.join(_4ae.decimal||".");};dojo.number.regexp=function(_4bb){return dojo.number._parseInfo(_4bb).regexp;};dojo.number._parseInfo=function(_4bc){_4bc=_4bc||{};var _4bd=dojo.i18n.normalizeLocale(_4bc.locale),_4be=dojo.i18n.getLocalization("dojo.cldr","number",_4bd),_4bf=_4bc.pattern||_4be[(_4bc.type||"decimal")+"Format"],_4c0=_4be.group,_4c1=_4be.decimal,_4c2=1;if(_4bf.indexOf("%")!=-1){_4c2/=100;}else{if(_4bf.indexOf("‰")!=-1){_4c2/=1000;}else{var _4c3=_4bf.indexOf("¤")!=-1;if(_4c3){_4c0=_4be.currencyGroup||_4c0;_4c1=_4be.currencyDecimal||_4c1;}}}var _4c4=_4bf.split(";");if(_4c4.length==1){_4c4.push("-"+_4c4[0]);}var re=dojo.regexp.buildGroupRE(_4c4,function(_4c5){_4c5="(?:"+dojo.regexp.escapeString(_4c5,".")+")";return _4c5.replace(dojo.number._numberPatternRE,function(_4c6){var _4c7={signed:false,separator:_4bc.strict?_4c0:[_4c0,""],fractional:_4bc.fractional,decimal:_4c1,exponent:false},_4c8=_4c6.split("."),_4c9=_4bc.places;if(_4c8.length==1&&_4c2!=1){_4c8[1]="###";}if(_4c8.length==1||_4c9===0){_4c7.fractional=false;}else{if(_4c9===undefined){_4c9=_4bc.pattern?_4c8[1].lastIndexOf("0")+1:Infinity;}if(_4c9&&_4bc.fractional==undefined){_4c7.fractional=true;}if(!_4bc.places&&(_4c9<_4c8[1].length)){_4c9+=","+_4c8[1].length;}_4c7.places=_4c9;}var _4ca=_4c8[0].split(",");if(_4ca.length>1){_4c7.groupSize=_4ca.pop().length;if(_4ca.length>1){_4c7.groupSize2=_4ca.pop().length;}}return "("+dojo.number._realNumberRegexp(_4c7)+")";});},true);if(_4c3){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_4cb,_4cc,_4cd,_4ce){var prop=["symbol","currency","displayName"][_4cd.length-1],_4cf=dojo.regexp.escapeString(_4bc[prop]||_4bc.currency||"");_4cc=_4cc?"[\\s\\xa0]":"";_4ce=_4ce?"[\\s\\xa0]":"";if(!_4bc.strict){if(_4cc){_4cc+="*";}if(_4ce){_4ce+="*";}return "(?:"+_4cc+_4cf+_4ce+")?";}return _4cc+_4cf+_4ce;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_4c0,decimal:_4c1,factor:_4c2};};dojo.number.parse=function(_4d0,_4d1){var info=dojo.number._parseInfo(_4d1),_4d2=(new RegExp("^"+info.regexp+"$")).exec(_4d0);if(!_4d2){return NaN;}var _4d3=_4d2[1];if(!_4d2[1]){if(!_4d2[2]){return NaN;}_4d3=_4d2[2];info.factor*=-1;}_4d3=_4d3.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _4d3*info.factor;};dojo.number._realNumberRegexp=function(_4d4){_4d4=_4d4||{};if(!("places" in _4d4)){_4d4.places=Infinity;}if(typeof _4d4.decimal!="string"){_4d4.decimal=".";}if(!("fractional" in _4d4)||/^0/.test(_4d4.places)){_4d4.fractional=[true,false];}if(!("exponent" in _4d4)){_4d4.exponent=[true,false];}if(!("eSigned" in _4d4)){_4d4.eSigned=[true,false];}var _4d5=dojo.number._integerRegexp(_4d4),_4d6=dojo.regexp.buildGroupRE(_4d4.fractional,function(q){var re="";if(q&&(_4d4.places!==0)){re="\\"+_4d4.decimal;if(_4d4.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_4d4.places+"}";}}return re;},true);var _4d7=dojo.regexp.buildGroupRE(_4d4.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_4d4.eSigned})+")";}return "";});var _4d8=_4d5+_4d6;if(_4d6){_4d8="(?:(?:"+_4d8+")|(?:"+_4d6+"))";}return _4d8+_4d7;};dojo.number._integerRegexp=function(_4d9){_4d9=_4d9||{};if(!("signed" in _4d9)){_4d9.signed=[true,false];}if(!("separator" in _4d9)){_4d9.separator="";}else{if(!("groupSize" in _4d9)){_4d9.groupSize=3;}}var _4da=dojo.regexp.buildGroupRE(_4d9.signed,function(q){return q?"[-+]":"";},true);var _4db=dojo.regexp.buildGroupRE(_4d9.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_4d9.groupSize,grp2=_4d9.groupSize2;if(grp2){var _4dc="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_4dc+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_4dc;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _4da+_4db;};}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,name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\"> </span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"> </div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postCreate:function(){this.inherited(arguments);this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());this.update();},update:function(_4dd){dojo.mixin(this,_4dd||{});var tip=this.internalProgress;var _4de=1,_4df;if(this.indeterminate){_4df="addClass";dijit.removeWaiState(tip,"valuenow");dijit.removeWaiState(tip,"valuemin");dijit.removeWaiState(tip,"valuemax");}else{_4df="removeClass";if(String(this.progress).indexOf("%")!=-1){_4de=Math.min(parseFloat(this.progress)/100,1);this.progress=_4de*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_4de=this.progress/this.maximum;}var text=this.report(_4de);this.label.firstChild.nodeValue=text;dijit.setWaiState(tip,"describedby",this.label.id);dijit.setWaiState(tip,"valuenow",this.progress);dijit.setWaiState(tip,"valuemin",0);dijit.setWaiState(tip,"valuemax",this.maximum);}dojo[_4df](this.domNode,"dijitProgressBarIndeterminate");tip.style.width=(_4de*100)+"%";this.onChange();},_setValueAttr:function(v){if(v==Infinity){this.update({indeterminate:true});}else{this.update({indeterminate:false,progress:v});}},_getValueAttr:function(){return this.progress;},report:function(_4e0){return dojo.number.format(_4e0,{type:"percent",places:this.places,locale:this.lang});},onChange:function(){}});}if(!dojo._hasResource["dijit.ToolbarSeparator"]){dojo._hasResource["dijit.ToolbarSeparator"]=true;dojo.provide("dijit.ToolbarSeparator");dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" waiRole=\"presentation\"></div>",postCreate:function(){dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}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\" waiRole=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);this.inherited(arguments);},startup:function(){if(this._started){return;}this.startupKeyNavChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dojo.DeferredList"]){dojo._hasResource["dojo.DeferredList"]=true;dojo.provide("dojo.DeferredList");dojo.DeferredList=function(list,_4e1,_4e2,_4e3,_4e4){var _4e5=[];dojo.Deferred.call(this);var self=this;if(list.length===0&&!_4e1){this.resolve([0,[]]);}var _4e6=0;dojo.forEach(list,function(item,i){item.then(function(_4e7){if(_4e1){self.resolve([i,_4e7]);}else{_4e8(true,_4e7);}},function(_4e9){if(_4e2){self.reject(_4e9);}else{_4e8(false,_4e9);}if(_4e3){return null;}throw _4e9;});function _4e8(_4ea,_4eb){_4e5[i]=[_4ea,_4eb];_4e6++;if(_4e6===list.length){self.resolve(_4e5);}};});};dojo.DeferredList.prototype=new dojo.Deferred();dojo.DeferredList.prototype.gatherResults=function(_4ec){var d=new dojo.DeferredList(_4ec,false,true,false);d.addCallback(function(_4ed){var ret=[];dojo.forEach(_4ed,function(_4ee){ret.push(_4ee[1]);});return ret;});return d;};}if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){dojo._hasResource["dijit.tree.TreeStoreModel"]=true;dojo.provide("dijit.tree.TreeStoreModel");dojo.declare("dijit.tree.TreeStoreModel",null,{store:null,childrenAttrs:["children"],newItemIdAttr:"id",labelAttr:"",root:null,query:null,deferItemLoadingUntilExpand:false,constructor:function(args){dojo.mixin(this,args);this.connects=[];var _4ef=this.store;if(!_4ef.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.Tree: store must support dojo.data.Identity");}if(_4ef.getFeatures()["dojo.data.api.Notification"]){this.connects=this.connects.concat([dojo.connect(_4ef,"onNew",this,"onNewItem"),dojo.connect(_4ef,"onDelete",this,"onDeleteItem"),dojo.connect(_4ef,"onSet",this,"onSetItem")]);}},destroy:function(){dojo.forEach(this.connects,dojo.disconnect);},getRoot:function(_4f0,_4f1){if(this.root){_4f0(this.root);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_4f2){if(_4f2.length!=1){throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_4f2.length+" items, but must return exactly one item");}this.root=_4f2[0];_4f0(this.root);}),onError:_4f1});}},mayHaveChildren:function(item){return dojo.some(this.childrenAttrs,function(attr){return this.store.hasAttribute(item,attr);},this);},getChildren:function(_4f3,_4f4,_4f5){var _4f6=this.store;if(!_4f6.isItemLoaded(_4f3)){var _4f7=dojo.hitch(this,arguments.callee);_4f6.loadItem({item:_4f3,onItem:function(_4f8){_4f7(_4f8,_4f4,_4f5);},onError:_4f5});return;}var _4f9=[];for(var i=0;i<this.childrenAttrs.length;i++){var vals=_4f6.getValues(_4f3,this.childrenAttrs[i]);_4f9=_4f9.concat(vals);}var _4fa=0;if(!this.deferItemLoadingUntilExpand){dojo.forEach(_4f9,function(item){if(!_4f6.isItemLoaded(item)){_4fa++;}});}if(_4fa==0){_4f4(_4f9);}else{dojo.forEach(_4f9,function(item,idx){if(!_4f6.isItemLoaded(item)){_4f6.loadItem({item:item,onItem:function(item){_4f9[idx]=item;if(--_4fa==0){_4f4(_4f9);}},onError:_4f5});}});}},isItem:function(_4fb){return this.store.isItem(_4fb);},fetchItemByIdentity:function(_4fc){this.store.fetchItemByIdentity(_4fc);},getIdentity:function(item){return this.store.getIdentity(item);},getLabel:function(item){if(this.labelAttr){return this.store.getValue(item,this.labelAttr);}else{return this.store.getLabel(item);}},newItem:function(args,_4fd,_4fe){var _4ff={parent:_4fd,attribute:this.childrenAttrs[0],insertIndex:_4fe};if(this.newItemIdAttr&&args[this.newItemIdAttr]){this.fetchItemByIdentity({identity:args[this.newItemIdAttr],scope:this,onItem:function(item){if(item){this.pasteItem(item,null,_4fd,true,_4fe);}else{this.store.newItem(args,_4ff);}}});}else{this.store.newItem(args,_4ff);}},pasteItem:function(_500,_501,_502,_503,_504){var _505=this.store,_506=this.childrenAttrs[0];if(_501){dojo.forEach(this.childrenAttrs,function(attr){if(_505.containsValue(_501,attr,_500)){if(!_503){var _507=dojo.filter(_505.getValues(_501,attr),function(x){return x!=_500;});_505.setValues(_501,attr,_507);}_506=attr;}});}if(_502){if(typeof _504=="number"){var _508=_505.getValues(_502,_506).slice();_508.splice(_504,0,_500);_505.setValues(_502,_506,_508);}else{_505.setValues(_502,_506,_505.getValues(_502,_506).concat(_500));}}},onChange:function(item){},onChildrenChange:function(_509,_50a){},onDelete:function(_50b,_50c){},onNewItem:function(item,_50d){if(!_50d){return;}this.getChildren(_50d.item,dojo.hitch(this,function(_50e){this.onChildrenChange(_50d.item,_50e);}));},onDeleteItem:function(item){this.onDelete(item);},onSetItem:function(item,_50f,_510,_511){if(dojo.indexOf(this.childrenAttrs,_50f)!=-1){this.getChildren(item,dojo.hitch(this,function(_512){this.onChildrenChange(item,_512);}));}else{this.onChange(item);}}});}if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){dojo._hasResource["dijit.tree.ForestStoreModel"]=true;dojo.provide("dijit.tree.ForestStoreModel");dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_513){this.root={store:this,root:true,id:_513.rootId,label:_513.rootLabel,children:_513.rootChildren};},mayHaveChildren:function(item){return item===this.root||this.inherited(arguments);},getChildren:function(_514,_515,_516){if(_514===this.root){if(this.root.children){_515(this.root.children);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_517){this.root.children=_517;_515(_517);}),onError:_516});}}else{this.inherited(arguments);}},isItem:function(_518){return (_518===this.root)?true:this.inherited(arguments);},fetchItemByIdentity:function(_519){if(_519.identity==this.root.id){var _51a=_519.scope?_519.scope:dojo.global;if(_519.onItem){_519.onItem.call(_51a,this.root);}}else{this.inherited(arguments);}},getIdentity:function(item){return (item===this.root)?this.root.id:this.inherited(arguments);},getLabel:function(item){return (item===this.root)?this.root.label:this.inherited(arguments);},newItem:function(args,_51b,_51c){if(_51b===this.root){this.onNewRootItem(args);return this.store.newItem(args);}else{return this.inherited(arguments);}},onNewRootItem:function(args){},pasteItem:function(_51d,_51e,_51f,_520,_521){if(_51e===this.root){if(!_520){this.onLeaveRoot(_51d);}}dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_51d,_51e===this.root?null:_51e,_51f===this.root?null:_51f,_520,_521);if(_51f===this.root){this.onAddToRoot(_51d);}},onAddToRoot:function(item){console.log(this,": item ",item," added to root");},onLeaveRoot:function(item){console.log(this,": item ",item," removed from root");},_requeryTop:function(){var _522=this.root.children||[];this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_523){this.root.children=_523;if(_522.length!=_523.length||dojo.some(_522,function(item,idx){return _523[idx]!=item;})){this.onChildrenChange(this.root,_523);}})});},onNewItem:function(item,_524){this._requeryTop();this.inherited(arguments);},onDeleteItem:function(item){if(dojo.indexOf(this.root.children,item)!=-1){this._requeryTop();}this.inherited(arguments);}});}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,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),postCreate:function(){this.inherited(arguments);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}},_setIndentAttr:function(_525){this.indent=_525;var _526=(Math.max(_525,0)*this.tree._nodePixelIndent)+"px";dojo.style(this.domNode,"backgroundPosition",_526+" 0px");dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_526);dojo.forEach(this.getChildren(),function(_527){_527.set("indent",_525+1);});},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){var tree=this.tree,_528=tree.model;if(tree._v10Compat&&item===_528.root){item=null;}this._applyClassAndStyle(item,"icon","Icon");this._applyClassAndStyle(item,"label","Label");this._applyClassAndStyle(item,"row","Row");},_applyClassAndStyle:function(item,_529,_52a){var _52b="_"+_529+"Class";var _52c=_529+"Node";if(this[_52b]){dojo.removeClass(this[_52c],this[_52b]);}this[_52b]=this.tree["get"+_52a+"Class"](item,this.isExpanded);if(this[_52b]){dojo.addClass(this[_52c],this[_52b]);}dojo.style(this[_52c],this.tree["get"+_52a+"Style"](item,this.isExpanded)||{});},_updateLayout:function(){var _52d=this.getParent();if(!_52d||_52d.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_52e){var _52f=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_530=["*","-","+","*"],idx=_52e?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.removeClass(this.expandoNode,_52f);dojo.addClass(this.expandoNode,_52f[idx]);this.expandoNodeText.innerHTML=_530[idx];},expand:function(){if(this._expandDeferred){return this._expandDeferred;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");dijit.setWaiRole(this.containerNode,"group");dojo.addClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","true");}var def,_531=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){def.callback(true);}});def=(this._expandDeferred=new dojo.Deferred(function(){_531.stop();}));_531.play();return def;},collapse:function(){if(!this.isExpanded){return;}if(this._expandDeferred){this._expandDeferred.cancel();delete this._expandDeferred;}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","false");}dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},indent:0,setChildItems:function(_532){var tree=this.tree,_533=tree.model,defs=[];dojo.forEach(this.getChildren(),function(_534){dijit._Container.prototype.removeChild.call(this,_534);},this);this.state="LOADED";if(_532&&_532.length>0){this.isExpandable=true;dojo.forEach(_532,function(item){var id=_533.getIdentity(item),_535=tree._itemNodesMap[id],node;if(_535){for(var i=0;i<_535.length;i++){if(_535[i]&&!_535[i].getParent()){node=_535[i];node.set("indent",this.indent+1);break;}}}if(!node){node=this.tree._createTreeNode({item:item,tree:tree,isExpandable:_533.mayHaveChildren(item),label:tree.getLabel(item),tooltip:tree.getTooltip(item),dir:tree.dir,lang:tree.lang,indent:this.indent+1});if(_535){_535.push(node);}else{tree._itemNodesMap[id]=[node];}}this.addChild(node);if(this.tree.autoExpand||this.tree._state(item)){defs.push(tree._expandNode(node));}},this);dojo.forEach(this.getChildren(),function(_536,idx){_536._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}this._updateItemClasses(this.item);if(this==tree.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0];if(fc){fc.setFocusable(true);tree.lastFocused=fc;}else{tree.domNode.setAttribute("tabIndex","0");}}return new dojo.DeferredList(defs);},removeChild:function(node){this.inherited(arguments);var _537=this.getChildren();if(_537.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_537,function(_538){_538._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onLabelFocus:function(evt){this.tree._onNodeFocus(this);},setSelected:function(_539){dijit.setWaiState(this.labelNode,"selected",_539);dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_539);},setFocusable:function(_53a){this.labelNode.setAttribute("tabIndex",_53a?"0":"-1");},_onClick:function(evt){this.tree._onClick(this,evt);},_onDblClick:function(evt){this.tree._onDblClick(this,evt);},_onMouseEnter:function(evt){this.tree._onNodeMouseEnter(this,evt);},_onMouseLeave:function(evt){this.tree._onNodeMouseLeave(this,evt);}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],path:[],selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:null,dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_53b,_53c){dojo.publish(this.id,[dojo.mixin({tree:this,event:_53b},_53c||{})]);},postMixInProperties:function(){this.tree=this;if(this.autoExpand){this.persist=false;}this._itemNodesMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}this._loadDeferred=new dojo.Deferred();this.inherited(arguments);},postCreate:function(){this._initState();if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _53d={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_53d[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_53d);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _53e={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_53e.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_53e.getChildren=dojo.hitch(this,function(item,_53f,_540){this.getItemChildren((this._v10Compat&&item===this.model.root)?null:item,_53f,_540);});}this.model=new dijit.tree.ForestStoreModel(_53e);this.showRoot=Boolean(this.label);},onLoad:function(){},_load:function(){this.model.getRoot(dojo.hitch(this,function(item){var rn=(this.rootNode=this.tree._createTreeNode({item:item,tree:this,isExpandable:true,label:this.label||this.getLabel(item),indent:this.showRoot?0:-1}));if(!this.showRoot){rn.rowNode.style.display="none";}this.domNode.appendChild(rn.domNode);var _541=this.model.getIdentity(item);if(this._itemNodesMap[_541]){this._itemNodesMap[_541].push(rn);}else{this._itemNodesMap[_541]=[rn];}rn._updateLayout();this._expandNode(rn).addCallback(dojo.hitch(this,function(){this._loadDeferred.callback(true);this.onLoad();}));}),function(err){console.error(this,": error loading root: ",err);});},getNodesByItem:function(item){if(!item){return [];}var _542=dojo.isString(item)?item:this.model.getIdentity(item);return [].concat(this._itemNodesMap[_542]);},_setSelectedItemAttr:function(item){var _543=this.get("selectedItem");var _544=(!item||dojo.isString(item))?item:this.model.getIdentity(item);if(_544==_543?this.model.getIdentity(_543):null){return;}var _545=this._itemNodesMap[_544];this._selectNode((_545&&_545[0])||null);},_getSelectedItemAttr:function(){return this.selectedNode&&this.selectedNode.item;},_setPathAttr:function(path){var d=new dojo.Deferred();this._selectNode(null);if(!path||!path.length){d.resolve(true);return d;}this._loadDeferred.addCallback(dojo.hitch(this,function(){if(!this.rootNode){d.reject(new Error("!this.rootNode"));return;}if(path[0]!==this.rootNode.item&&(dojo.isString(path[0])&&path[0]!=this.model.getIdentity(this.rootNode.item))){d.reject(new Error(this.id+":path[0] doesn't match this.rootNode.item. Maybe you are using the wrong tree."));return;}path.shift();var node=this.rootNode;function _546(){var item=path.shift(),_547=dojo.isString(item)?item:this.model.getIdentity(item);dojo.some(this._itemNodesMap[_547],function(n){if(n.getParent()==node){node=n;return true;}return false;});if(path.length){this._expandNode(node).addCallback(dojo.hitch(this,_546));}else{this._selectNode(node);d.resolve(true);}};this._expandNode(node).addCallback(dojo.hitch(this,_546));}));return d;},_getPathAttr:function(){if(!this.selectedNode){return;}var res=[];var _548=this.selectedNode;while(_548&&_548!==this.rootNode){res.unshift(_548.item);_548=_548.getParent();}res.unshift(this.rootNode.item);return res;},mayHaveChildren:function(item){},getItemChildren:function(_549,_54a){},getLabel:function(item){return this.model.getLabel(item);},getIconClass:function(item,_54b){return (!item||this.model.mayHaveChildren(item))?(_54b?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(item,_54c){},getRowClass:function(item,_54d){},getIconStyle:function(item,_54e){},getLabelStyle:function(item,_54f){},getRowStyle:function(item,_550){},getTooltip:function(item){return "";},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _551=dijit.getEnclosingWidget(e.target);if(!_551){return;}var key=e.charOrCode;if(typeof key=="string"){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_551,key:key.toLowerCase()});dojo.stopEvent(e);}}else{if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_551,item:_551.item,evt:e});dojo.stopEvent(e);}}},_onEnterKey:function(_552,evt){this._publish("execute",{item:_552.item,node:_552.node});this._selectNode(_552.node);this.onClick(_552.item,_552.node,evt);},_onDownArrow:function(_553){var node=this._getNextNode(_553.node);if(node&&node.isTreeNode){this.focusNode(node);}},_onUpArrow:function(_554){var node=_554.node;var _555=node.getPreviousSibling();if(_555){node=_555;while(node.isExpandable&&node.isExpanded&&node.hasChildren()){var _556=node.getChildren();node=_556[_556.length-1];}}else{var _557=node.getParent();if(!(!this.showRoot&&_557===this.rootNode)){node=_557;}}if(node&&node.isTreeNode){this.focusNode(node);}},_onRightArrow:function(_558){var node=_558.node;if(node.isExpandable&&!node.isExpanded){this._expandNode(node);}else{if(node.hasChildren()){node=node.getChildren()[0];if(node&&node.isTreeNode){this.focusNode(node);}}}},_onLeftArrow:function(_559){var node=_559.node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{var _55a=node.getParent();if(_55a&&_55a.isTreeNode&&!(!this.showRoot&&_55a===this.rootNode)){this.focusNode(_55a);}}},_onHomeKey:function(){var node=this._getRootOrFirstNode();if(node){this.focusNode(node);}},_onEndKey:function(_55b){var node=this.rootNode;while(node.isExpanded){var c=node.getChildren();node=c[c.length-1];}if(node&&node.isTreeNode){this.focusNode(node);}},multiCharSearchDuration:250,_onLetterKeyNav:function(_55c){var cs=this._curSearch;if(cs){cs.pattern=cs.pattern+_55c.key;clearTimeout(cs.timer);}else{cs=this._curSearch={pattern:_55c.key,startNode:_55c.node};}var self=this;cs.timer=setTimeout(function(){delete self._curSearch;},this.multiCharSearchDuration);var node=cs.startNode;do{node=this._getNextNode(node);if(!node){node=this._getRootOrFirstNode();}}while(node!==cs.startNode&&(node.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));if(node&&node.isTreeNode){if(node!==cs.startNode){this.focusNode(node);}}},_onClick:function(_55d,e){var _55e=e.target,_55f=(_55e==_55d.expandoNode||_55e==_55d.expandoNodeText);if((this.openOnClick&&_55d.isExpandable)||_55f){if(_55d.isExpandable){this._onExpandoClick({node:_55d});}}else{this._publish("execute",{item:_55d.item,node:_55d,evt:e});this.onClick(_55d.item,_55d,e);this.focusNode(_55d);}if(!_55f){this._selectNode(_55d);}dojo.stopEvent(e);},_onDblClick:function(_560,e){var _561=e.target,_562=(_561==_560.expandoNode||_561==_560.expandoNodeText);if((this.openOnDblClick&&_560.isExpandable)||_562){if(_560.isExpandable){this._onExpandoClick({node:_560});}}else{this._publish("execute",{item:_560.item,node:_560,evt:e});this.onDblClick(_560.item,_560,e);this.focusNode(_560);}if(!_562){this._selectNode(_560);}dojo.stopEvent(e);},_onExpandoClick:function(_563){var node=_563.node;this.focusNode(node);if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node,evt){},onDblClick:function(item,node,evt){},onOpen:function(item,node){},onClose:function(item,node){},_getNextNode:function(node){if(node.isExpandable&&node.isExpanded&&node.hasChildren()){return node.getChildren()[0];}else{while(node&&node.isTreeNode){var _564=node.getNextSibling();if(_564){return _564;}node=node.getParent();}return null;}},_getRootOrFirstNode:function(){return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];},_collapseNode:function(node){if(node._expandNodeDeferred){delete node._expandNodeDeferred;}if(node.isExpandable){if(node.state=="LOADING"){return;}node.collapse();this.onClose(node.item,node);if(node.item){this._state(node.item,false);this._saveState();}}},_expandNode:function(node,_565){if(node._expandNodeDeferred&&!_565){return node._expandNodeDeferred;}var _566=this.model,item=node.item,_567=this;switch(node.state){case "UNCHECKED":node.markProcessing();var def=(node._expandNodeDeferred=new dojo.Deferred());_566.getChildren(item,function(_568){node.unmarkProcessing();var scid=node.setChildItems(_568);var ed=_567._expandNode(node,true);scid.addCallback(function(){ed.addCallback(function(){def.callback();});});},function(err){console.error(_567,": error loading root children: ",err);});break;default:def=(node._expandNodeDeferred=node.expand());this.onOpen(node.item,node);if(item){this._state(item,true);this._saveState();}}return def;},focusNode:function(node){dijit.focus(node.labelNode);},_selectNode:function(node){if(this.selectedNode&&!this.selectedNode._destroyed){this.selectedNode.setSelected(false);}if(node){node.setSelected(true);}this.selectedNode=node;},_onNodeFocus:function(node){if(node&&node!=this.lastFocused){if(this.lastFocused&&!this.lastFocused._destroyed){this.lastFocused.setFocusable(false);}node.setFocusable(true);this.lastFocused=node;}},_onNodeMouseEnter:function(node){},_onNodeMouseLeave:function(node){},_onItemChange:function(item){var _569=this.model,_56a=_569.getIdentity(item),_56b=this._itemNodesMap[_56a];if(_56b){var _56c=this.getLabel(item),_56d=this.getTooltip(item);dojo.forEach(_56b,function(node){node.set({item:item,label:_56c,tooltip:_56d});node._updateItemClasses(item);});}},_onItemChildrenChange:function(_56e,_56f){var _570=this.model,_571=_570.getIdentity(_56e),_572=this._itemNodesMap[_571];if(_572){dojo.forEach(_572,function(_573){_573.setChildItems(_56f);});}},_onItemDelete:function(item){var _574=this.model,_575=_574.getIdentity(item),_576=this._itemNodesMap[_575];if(_576){dojo.forEach(_576,function(node){var _577=node.getParent();if(_577){_577.removeChild(node);}node.destroyRecursive();});delete this._itemNodesMap[_575];}},_initState:function(){if(this.persist){var _578=dojo.cookie(this.cookieName);this._openedItemIds={};if(_578){dojo.forEach(_578.split(","),function(item){this._openedItemIds[item]=true;},this);}}},_state:function(item,_579){if(!this.persist){return false;}var id=this.model.getIdentity(item);if(arguments.length===1){return this._openedItemIds[id];}if(_579){this._openedItemIds[id]=true;}else{delete this._openedItemIds[id];}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","),{expires:365});},destroy:function(){if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}if(this.rootNode){this.rootNode.destroyRecursive();}if(this.dndController&&!dojo.isString(this.dndController)){this.dndController.destroy();}this.rootNode=null;this.inherited(arguments);},destroyRecursive:function(){this.destroy();},resize:function(_57a){if(_57a){dojo.marginBox(this.domNode,_57a);dojo.style(this.domNode,"overflow","auto");}this._nodePixelIndent=dojo.marginBox(this.tree.indentDetector).w;if(this.tree.rootNode){this.tree.rootNode.set("indent",this.showRoot?0:-1);}},_createTreeNode:function(args){return new dijit._TreeNode(args);}});}if(!dojo._hasResource["dojo.dnd.Container"]){dojo._hasResource["dojo.dnd.Container"]=true;dojo.provide("dojo.dnd.Container");dojo.declare("dojo.dnd.Container",null,{skipForm:false,constructor:function(node,_57b){this.node=dojo.byId(node);if(!_57b){_57b={};}this.creator=_57b.creator||null;this.skipForm=_57b.skipForm;this.parent=_57b.dropParent&&dojo.byId(_57b.dropParent);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");if(!(_57b&&_57b._skipStartup)){this.startup();}this.events=[dojo.connect(this.node,"onmouseover",this,"onMouseOver"),dojo.connect(this.node,"onmouseout",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",this,"onSelectStart"),dojo.connect(this.node,"onselectstart",this,"onSelectStart")];},creator:function(){},getItem:function(key){return this.map[key];},setItem:function(key,data){this.map[key]=data;},delItem:function(key){delete this.map[key];},forInItems:function(f,o){o=o||dojo.global;var m=this.map,e=dojo.dnd._empty;for(var i in m){if(i in e){continue;}f.call(o,m[i],i,this);}return o;},clearItems:function(){this.map={};},getAllNodes:function(){return dojo.query("> .dojoDndItem",this.parent);},sync:function(){var map={};this.getAllNodes().forEach(function(node){if(node.id){var item=this.getItem(node.id);if(item){map[node.id]=item;return;}}else{node.id=dojo.dnd.getUniqueId();}var type=node.getAttribute("dndType"),data=node.getAttribute("dndData");map[node.id]={data:data||node.innerHTML,type:type?type.split(/\s*,\s*/):["text"]};},this);this.map=map;return this;},insertNodes:function(data,_57c,_57d){if(!this.parent.firstChild){_57d=null;}else{if(_57c){if(!_57d){_57d=this.parent.firstChild;}}else{if(_57d){_57d=_57d.nextSibling;}}}if(_57d){for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.insertBefore(t.node,_57d);}}else{for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.appendChild(t.node);}}return this;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.clearItems();this.node=this.parent=this.current=null;},markupFactory:function(_57e,node){_57e._skipStartup=true;return new dojo.dnd.Container(node,_57e);},startup:function(){if(!this.parent){this.parent=this.node;if(this.parent.tagName.toLowerCase()=="table"){var c=this.parent.getElementsByTagName("tbody");if(c&&c.length){this.parent=c[0];}}}this.defaultCreator=dojo.dnd._defaultCreator(this.parent);this.sync();},onMouseOver:function(e){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){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();},onSelectStart:function(e){if(!this.skipForm||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onOverEvent:function(){},onOutEvent:function(){},_changeState:function(type,_57f){var _580="dojoDnd"+type;var _581=type.toLowerCase()+"State";dojo.removeClass(this.node,_580+this[_581]);dojo.addClass(this.node,_580+_57f);this[_581]=_57f;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},_getChildByEvent:function(e){var node=e.target;if(node){for(var _582=node.parentNode;_582;node=_582,_582=node.parentNode){if(_582==this.parent&&dojo.hasClass(node,"dojoDndItem")){return node;}}}return null;},_normalizedCreator:function(item,hint){var t=(this.creator||this.defaultCreator).call(this,item,hint);if(!dojo.isArray(t.type)){t.type=["text"];}if(!t.node.id){t.node.id=dojo.dnd.getUniqueId();}dojo.addClass(t.node,"dojoDndItem");return t;}});dojo.dnd._createNode=function(tag){if(!tag){return dojo.dnd._createSpan;}return function(text){return dojo.create(tag,{innerHTML:text});};};dojo.dnd._createTrTd=function(text){var tr=dojo.create("tr");dojo.create("td",{innerHTML:text},tr);return tr;};dojo.dnd._createSpan=function(text){return dojo.create("span",{innerHTML:text});};dojo.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};dojo.dnd._defaultCreator=function(node){var tag=node.tagName.toLowerCase();var c=tag=="tbody"||tag=="thead"?dojo.dnd._createTrTd:dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);return function(item,hint){var _583=item&&dojo.isObject(item),data,type,n;if(_583&&item.tagName&&item.nodeType&&item.getAttribute){data=item.getAttribute("dndData")||item.innerHTML;type=item.getAttribute("dndType");type=type?type.split(/\s*,\s*/):["text"];n=item;}else{data=(_583&&item.data)?item.data:item;type=(_583&&item.type)?item.type:["text"];n=(hint=="avatar"?dojo.dnd._createSpan:c)(String(data));}if(!n.id){n.id=dojo.dnd.getUniqueId();}return {node:n,data:data,type:type};};};}if(!dojo._hasResource["dijit.tree._dndContainer"]){dojo._hasResource["dijit.tree._dndContainer"]=true;dojo.provide("dijit.tree._dndContainer");dojo.declare("dijit.tree._dndContainer",null,{constructor:function(tree,_584){this.tree=tree;this.node=tree.domNode;dojo.mixin(this,_584);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");this.events=[dojo.connect(this.node,"onmouseenter",this,"onOverEvent"),dojo.connect(this.node,"onmouseleave",this,"onOutEvent"),dojo.connect(this.tree,"_onNodeMouseEnter",this,"onMouseOver"),dojo.connect(this.tree,"_onNodeMouseLeave",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",dojo,"stopEvent"),dojo.connect(this.node,"onselectstart",dojo,"stopEvent")];},getItem:function(key){var node=this.selection[key],ret={data:dijit.getEnclosingWidget(node),type:["treeNode"]};return ret;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.node=this.parent=null;},onMouseOver:function(_585,evt){this.current=_585.rowNode;this.currentWidget=_585;},onMouseOut:function(_586,evt){this.current=null;this.currentWidget=null;},_changeState:function(type,_587){var _588="dojoDnd"+type;var _589=type.toLowerCase()+"State";dojo.removeClass(this.node,_588+this[_589]);dojo.addClass(this.node,_588+_587);this[_589]=_587;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},onOverEvent:function(){this._changeState("Container","Over");},onOutEvent:function(){this._changeState("Container","");}});}if(!dojo._hasResource["dijit.tree._dndSelector"]){dojo._hasResource["dijit.tree._dndSelector"]=true;dojo.provide("dijit.tree._dndSelector");dojo.declare("dijit.tree._dndSelector",dijit.tree._dndContainer,{constructor:function(tree,_58a){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"),dojo.connect(this.tree.domNode,"onmousemove",this,"onMouseMove"));},singular:false,getSelectedNodes:function(){return this.selection;},selectNone:function(){return this._removeSelection()._removeAnchor();},destroy:function(){this.inherited(arguments);this.selection=this.anchor=null;},onMouseDown:function(e){if(!this.current){return;}if(e.button==dojo.mouseButtons.RIGHT){return;}var _58b=dijit.getEnclosingWidget(this.current),id=_58b.id+"-dnd";if(!dojo.hasAttr(this.current,"id")){dojo.attr(this.current,"id",id);}if(!this.singular&&!dojo.isCopyKey(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.isCopyKey(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.isCopyKey(e)){}else{}}else{if(dojo.isCopyKey(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{if(!(id in this.selection)){this.selectNone();this.anchor=this.current;this._addItemClass(this.current,"Anchor");this.selection[id]=this.current;}}}}dojo.stopEvent(e);},onMouseUp:function(e){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;}},onMouseMove:function(e){this.simpleSelection=false;},_removeSelection:function(){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;},_removeAnchor:function(){if(this.anchor){this._removeItemClass(this.anchor,"Anchor");this.anchor=null;}return this;},forInSelectedItems:function(f,o){o=o||dojo.global;for(var id in this.selection){console.log("selected item id: "+id);f.call(o,this.getItem(id),id,this);}}});}if(!dojo._hasResource["dojo.dnd.Avatar"]){dojo._hasResource["dojo.dnd.Avatar"]=true;dojo.provide("dojo.dnd.Avatar");dojo.declare("dojo.dnd.Avatar",null,{constructor:function(_58c){this.manager=_58c;this.construct();},construct:function(){this.isA11y=dojo.hasClass(dojo.body(),"dijit_a11y");var a=dojo.create("table",{"class":"dojoDndAvatar",style:{position:"absolute",zIndex:"1999",margin:"0px"}}),_58d=this.manager.source,node,b=dojo.create("tbody",null,a),tr=dojo.create("tr",null,b),td=dojo.create("td",null,tr),icon=this.isA11y?dojo.create("span",{id:"a11yIcon",innerHTML:this.manager.copy?"+":"<"},td):null,span=dojo.create("span",{innerHTML:_58d.generateText?this._generateText():""},td),k=Math.min(5,this.manager.nodes.length),i=0;dojo.attr(tr,{"class":"dojoDndAvatarHeader",style:{opacity:0.9}});for(;i<k;++i){if(_58d.creator){node=_58d._normalizedCreator(_58d.getItem(this.manager.nodes[i].id).data,"avatar").node;}else{node=this.manager.nodes[i].cloneNode(true);if(node.tagName.toLowerCase()=="tr"){var _58e=dojo.create("table"),_58f=dojo.create("tbody",null,_58e);_58f.appendChild(node);node=_58e;}}node.id="";tr=dojo.create("tr",null,b);td=dojo.create("td",null,tr);td.appendChild(node);dojo.attr(tr,{"class":"dojoDndAvatarItem",style:{opacity:(9-i)/10}});}this.node=a;},destroy:function(){dojo.destroy(this.node);this.node=false;},update:function(){dojo[(this.manager.canDropFlag?"add":"remove")+"Class"](this.node,"dojoDndAvatarCanDrop");if(this.isA11y){var icon=dojo.byId("a11yIcon");var text="+";if(this.manager.canDropFlag&&!this.manager.copy){text="< ";}else{if(!this.manager.canDropFlag&&!this.manager.copy){text="o";}else{if(!this.manager.canDropFlag){text="x";}}}icon.innerHTML=text;}dojo.query(("tr.dojoDndAvatarHeader td span"+(this.isA11y?" span":"")),this.node).forEach(function(node){node.innerHTML=this._generateText();},this);},_generateText:function(){return this.manager.nodes.length.toString();}});}if(!dojo._hasResource["dojo.dnd.Manager"]){dojo._hasResource["dojo.dnd.Manager"]=true;dojo.provide("dojo.dnd.Manager");dojo.declare("dojo.dnd.Manager",null,{constructor:function(){this.avatar=null;this.source=null;this.nodes=[];this.copy=true;this.target=null;this.canDropFlag=false;this.events=[];},OFFSET_X:16,OFFSET_Y:16,overSource:function(_590){if(this.avatar){this.target=(_590&&_590.targetState!="Disabled")?_590:null;this.canDropFlag=Boolean(this.target);this.avatar.update();}dojo.publish("/dnd/source/over",[_590]);},outSource:function(_591){if(this.avatar){if(this.target==_591){this.target=null;this.canDropFlag=false;this.avatar.update();dojo.publish("/dnd/source/over",[null]);}}else{dojo.publish("/dnd/source/over",[null]);}},startDrag:function(_592,_593,copy){this.source=_592;this.nodes=_593;this.copy=Boolean(copy);this.avatar=this.makeAvatar();dojo.body().appendChild(this.avatar.node);dojo.publish("/dnd/start",[_592,_593,this.copy]);this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)];var c="dojoDnd"+(copy?"Copy":"Move");dojo.addClass(dojo.body(),c);},canDrop:function(flag){var _594=Boolean(this.target&&flag);if(this.canDropFlag!=_594){this.canDropFlag=_594;this.avatar.update();}},stopDrag:function(){dojo.removeClass(dojo.body(),"dojoDndCopy");dojo.removeClass(dojo.body(),"dojoDndMove");dojo.forEach(this.events,dojo.disconnect);this.events=[];this.avatar.destroy();this.avatar=null;this.source=this.target=null;this.nodes=[];},makeAvatar:function(){return new dojo.dnd.Avatar(this);},updateAvatar:function(){this.avatar.update();},onMouseMove:function(e){var a=this.avatar;if(a){dojo.dnd.autoScrollNodes(e);var s=a.node.style;s.left=(e.pageX+this.OFFSET_X)+"px";s.top=(e.pageY+this.OFFSET_Y)+"px";var copy=Boolean(this.source.copyState(dojo.isCopyKey(e)));if(this.copy!=copy){this._setCopyStatus(copy);}}},onMouseUp:function(e){if(this.avatar){if(this.target&&this.canDropFlag){var copy=Boolean(this.source.copyState(dojo.isCopyKey(e))),_595=[this.source,this.nodes,copy,this.target,e];dojo.publish("/dnd/drop/before",_595);dojo.publish("/dnd/drop",_595);}else{dojo.publish("/dnd/cancel");}this.stopDrag();}},onKeyDown:function(e){if(this.avatar){switch(e.keyCode){case dojo.keys.CTRL:var copy=Boolean(this.source.copyState(true));if(this.copy!=copy){this._setCopyStatus(copy);}break;case dojo.keys.ESCAPE:dojo.publish("/dnd/cancel");this.stopDrag();break;}}},onKeyUp:function(e){if(this.avatar&&e.keyCode==dojo.keys.CTRL){var copy=Boolean(this.source.copyState(false));if(this.copy!=copy){this._setCopyStatus(copy);}}},_setCopyStatus:function(copy){this.copy=copy;this.source._markDndStatus(this.copy);this.updateAvatar();dojo.removeClass(dojo.body(),"dojoDnd"+(this.copy?"Move":"Copy"));dojo.addClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"));}});dojo.dnd._manager=null;dojo.dnd.manager=function(){if(!dojo.dnd._manager){dojo.dnd._manager=new dojo.dnd.Manager();}return dojo.dnd._manager;};}if(!dojo._hasResource["dijit.tree.dndSource"]){dojo._hasResource["dijit.tree.dndSource"]=true;dojo.provide("dijit.tree.dndSource");dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(tree,_596){if(!_596){_596={};}dojo.mixin(this,_596);this.isSource=typeof _596.isSource=="undefined"?true:_596.isSource;var type=_596.accept instanceof Array?_596.accept:["text","treeNode"];this.accept=null;if(type.length){this.accept={};for(var i=0;i<type.length;++i){this.accept[type[i]]=1;}}this.isDragging=false;this.mouseDown=false;this.targetAnchor=null;this.targetBox=null;this.dropPosition="";this._lastX=0;this._lastY=0;this.sourceState="";if(this.isSource){dojo.addClass(this.node,"dojoDndSource");}this.targetState="";if(this.accept){dojo.addClass(this.node,"dojoDndTarget");}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")];},checkAcceptance:function(_597,_598){return true;},copyState:function(_599){return this.copyOnly||_599;},destroy:function(){this.inherited("destroy",arguments);dojo.forEach(this.topics,dojo.unsubscribe);this.targetAnchor=null;},_onDragMouse:function(e){var m=dojo.dnd.manager(),_59a=this.targetAnchor,_59b=this.current,_59c=this.currentWidget,_59d=this.dropPosition;var _59e="Over";if(_59b&&this.betweenThreshold>0){if(!this.targetBox||_59a!=_59b){this.targetBox=dojo.position(_59b,true);}if((e.pageY-this.targetBox.y)<=this.betweenThreshold){_59e="Before";}else{if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){_59e="After";}}}if(_59b!=_59a||_59e!=_59d){if(_59a){this._removeItemClass(_59a,_59d);}if(_59b){this._addItemClass(_59b,_59e);}if(!_59b){m.canDrop(false);}else{if(_59c==this.tree.rootNode&&_59e!="Over"){m.canDrop(false);}else{if(m.source==this&&(_59b.id in this.selection)){m.canDrop(false);}else{if(this.checkItemAcceptance(_59b,m.source,_59e.toLowerCase())&&!this._isParentChildDrop(m.source,_59b)){m.canDrop(true);}else{m.canDrop(false);}}}}this.targetAnchor=_59b;this.dropPosition=_59e;}},onMouseMove:function(e){if(this.isDragging&&this.targetState=="Disabled"){return;}this.inherited(arguments);var m=dojo.dnd.manager();if(this.isDragging){this._onDragMouse(e);}else{if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>=this.dragThreshold||Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){var n=this.getSelectedNodes();var _59f=[];for(var i in n){_59f.push(n[i]);}if(_59f.length){m.startDrag(this,_59f,this.copyState(dojo.isCopyKey(e)));}}}},onMouseDown:function(e){this.mouseDown=true;this.mouseButton=e.button;this._lastX=e.pageX;this._lastY=e.pageY;this.inherited("onMouseDown",arguments);},onMouseUp:function(e){if(this.mouseDown){this.mouseDown=false;this.inherited("onMouseUp",arguments);}},onMouseOut:function(){this.inherited(arguments);this._unmarkTargetAnchor();},checkItemAcceptance:function(_5a0,_5a1,_5a2){return true;},onDndSourceOver:function(_5a3){if(this!=_5a3){this.mouseDown=false;this._unmarkTargetAnchor();}else{if(this.isDragging){var m=dojo.dnd.manager();m.canDrop(false);}}},onDndStart:function(_5a4,_5a5,copy){if(this.isSource){this._changeState("Source",this==_5a4?(copy?"Copied":"Moved"):"");}var _5a6=this.checkAcceptance(_5a4,_5a5);this._changeState("Target",_5a6?"":"Disabled");if(this==_5a4){dojo.dnd.manager().overSource(this);}this.isDragging=true;},itemCreator:function(_5a7,_5a8,_5a9){return dojo.map(_5a7,function(node){return {"id":node.id,"name":node.textContent||node.innerText||""};});},onDndDrop:function(_5aa,_5ab,copy){if(this.containerState=="Over"){var tree=this.tree,_5ac=tree.model,_5ad=this.targetAnchor,_5ae=false;this.isDragging=false;var _5af=dijit.getEnclosingWidget(_5ad);var _5b0;var _5b1;_5b0=(_5af&&_5af.item)||tree.item;if(this.dropPosition=="Before"||this.dropPosition=="After"){_5b0=(_5af.getParent()&&_5af.getParent().item)||tree.item;_5b1=_5af.getIndexInParent();if(this.dropPosition=="After"){_5b1=_5af.getIndexInParent()+1;}}else{_5b0=(_5af&&_5af.item)||tree.item;}var _5b2;dojo.forEach(_5ab,function(node,idx){var _5b3=_5aa.getItem(node.id);if(dojo.indexOf(_5b3.type,"treeNode")!=-1){var _5b4=_5b3.data,_5b5=_5b4.item,_5b6=_5b4.getParent().item;}if(_5aa==this){if(typeof _5b1=="number"){if(_5b0==_5b6&&_5b4.getIndexInParent()<_5b1){_5b1-=1;}}_5ac.pasteItem(_5b5,_5b6,_5b0,copy,_5b1);}else{if(_5ac.isItem(_5b5)){_5ac.pasteItem(_5b5,_5b6,_5b0,copy,_5b1);}else{if(!_5b2){_5b2=this.itemCreator(_5ab,_5ad,_5aa);}_5ac.newItem(_5b2[idx],_5b0,_5b1);}}},this);this.tree._expandNode(_5af);}this.onDndCancel();},onDndCancel:function(){this._unmarkTargetAnchor();this.isDragging=false;this.mouseDown=false;delete this.mouseButton;this._changeState("Source","");this._changeState("Target","");},onOverEvent:function(){this.inherited(arguments);dojo.dnd.manager().overSource(this);},onOutEvent:function(){this._unmarkTargetAnchor();var m=dojo.dnd.manager();if(this.isDragging){m.canDrop(false);}m.outSource(this);this.inherited(arguments);},_isParentChildDrop:function(_5b7,_5b8){if(!_5b7.tree||_5b7.tree!=this.tree){return false;}var root=_5b7.tree.domNode;var ids={};for(var x in _5b7.selection){ids[_5b7.selection[x].parentNode.id]=true;}var node=_5b8.parentNode;while(node!=root&&(!node.id||!ids[node.id])){node=node.parentNode;}return node.id&&ids[node.id];},_unmarkTargetAnchor:function(){if(!this.targetAnchor){return;}this._removeItemClass(this.targetAnchor,this.dropPosition);this.targetAnchor=null;this.targetBox=null;this.dropPosition=null;},_markDndStatus:function(copy){this._changeState("Source",copy?"Copied":"Moved");}});}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(_5b9){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_5b9.url;this._ccUrl=_5b9.url;this.url=_5b9.url;this._jsonData=_5b9.data;this.data=null;this._datatypeMap=_5b9.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_5ba){return dojo.date.stamp.fromISOString(_5ba);}};}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._reverseRefMap="_RRM";this._loadInProgress=false;this._queuedFetches=[];if(_5b9.urlPreventCache!==undefined){this.urlPreventCache=_5b9.urlPreventCache?true:false;}if(_5b9.hierarchical!==undefined){this.hierarchical=_5b9.hierarchical?true:false;}if(_5b9.clearOnClose){this.clearOnClose=true;}if("failOk" in _5b9){this.failOk=_5b9.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_5bb){if(typeof _5bb!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_5bc,_5bd){var _5be=this.getValues(item,_5bc);return (_5be.length>0)?_5be[0]:_5bd;},getValues:function(item,_5bf){this._assertIsItem(item);this._assertIsAttribute(_5bf);return (item[_5bf]||[]).slice(0);},getAttributes:function(item){this._assertIsItem(item);var _5c0=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)&&(key!==this._reverseRefMap)){_5c0.push(key);}}return _5c0;},hasAttribute:function(item,_5c1){this._assertIsItem(item);this._assertIsAttribute(_5c1);return (_5c1 in item);},containsValue:function(item,_5c2,_5c3){var _5c4=undefined;if(typeof _5c3==="string"){_5c4=dojo.data.util.filter.patternToRegExp(_5c3,false);}return this._containsValue(item,_5c2,_5c3,_5c4);},_containsValue:function(item,_5c5,_5c6,_5c7){return dojo.some(this.getValues(item,_5c5),function(_5c8){if(_5c8!==null&&!dojo.isObject(_5c8)&&_5c7){if(_5c8.toString().match(_5c7)){return true;}}else{if(_5c6===_5c8){return true;}}});},isItem:function(_5c9){if(_5c9&&_5c9[this._storeRefPropName]===this){if(this._arrayOfAllItems[_5c9[this._itemNumPropName]]===_5c9){return true;}}return false;},isItemLoaded:function(_5ca){return this.isItem(_5ca);},loadItem:function(_5cb){this._assertIsItem(_5cb.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(_5cc,_5cd,_5ce){var self=this,_5cf=function(_5d0,_5d1){var _5d2=[],i,key;if(_5d0.query){var _5d3,_5d4=_5d0.queryOptions?_5d0.queryOptions.ignoreCase:false;var _5d5={};for(key in _5d0.query){_5d3=_5d0.query[key];if(typeof _5d3==="string"){_5d5[key]=dojo.data.util.filter.patternToRegExp(_5d3,_5d4);}else{if(_5d3 instanceof RegExp){_5d5[key]=_5d3;}}}for(i=0;i<_5d1.length;++i){var _5d6=true;var _5d7=_5d1[i];if(_5d7===null){_5d6=false;}else{for(key in _5d0.query){_5d3=_5d0.query[key];if(!self._containsValue(_5d7,key,_5d3,_5d5[key])){_5d6=false;}}}if(_5d6){_5d2.push(_5d7);}}_5cd(_5d2,_5d0);}else{for(i=0;i<_5d1.length;++i){var item=_5d1[i];if(item!==null){_5d2.push(item);}}_5cd(_5d2,_5d0);}};if(this._loadFinished){_5cf(_5cc,this._getItemsArray(_5cc.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_5cc,filter:_5cf});}else{this._loadInProgress=true;var _5d8={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _5d9=dojo.xhrGet(_5d8);_5d9.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_5cf(_5cc,self._getItemsArray(_5cc.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_5ce(e,_5cc);}});_5d9.addErrback(function(_5da){self._loadInProgress=false;_5ce(_5da,_5cc);});var _5db=null;if(_5cc.abort){_5db=_5cc.abort;}_5cc.abort=function(){var df=_5d9;if(df&&df.fired===-1){df.cancel();df=null;}if(_5db){_5db.call(_5cc);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_5cf(_5cc,this._getItemsArray(_5cc.queryOptions));}catch(e){_5ce(e,_5cc);}}else{_5ce(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_5cc);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _5dc=this._queuedFetches[i],_5dd=_5dc.args,_5de=_5dc.filter;if(_5de){_5de(_5dd,this._getItemsArray(_5dd.queryOptions));}else{this.fetchItemByIdentity(_5dd);}}this._queuedFetches=[];}},_getItemsArray:function(_5df){if(_5df&&_5df.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_5e0){if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){console.debug("dojo.data.ItemFileReadStore: WARNING! Data reload "+" information has not been provided."+" Please set 'url' or 'data' to the appropriate value before"+" the next fetch");}this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._itemsByIdentity=null;this._loadInProgress=false;this._queuedFetches=[];}},_getItemsFromLoadedData:function(_5e1){var _5e2=false,self=this;function _5e3(_5e4){var _5e5=((_5e4!==null)&&(typeof _5e4==="object")&&(!dojo.isArray(_5e4)||_5e2)&&(!dojo.isFunction(_5e4))&&(_5e4.constructor==Object||dojo.isArray(_5e4))&&(typeof _5e4._reference==="undefined")&&(typeof _5e4._type==="undefined")&&(typeof _5e4._value==="undefined")&&self.hierarchical);return _5e5;};function _5e6(_5e7){self._arrayOfAllItems.push(_5e7);for(var _5e8 in _5e7){var _5e9=_5e7[_5e8];if(_5e9){if(dojo.isArray(_5e9)){var _5ea=_5e9;for(var k=0;k<_5ea.length;++k){var _5eb=_5ea[k];if(_5e3(_5eb)){_5e6(_5eb);}}}else{if(_5e3(_5e9)){_5e6(_5e9);}}}}};this._labelAttr=_5e1.label;var i,item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_5e1.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];if(dojo.isArray(item)){_5e2=true;}_5e6(item);item[this._rootItemPropName]=true;}var _5ec={},key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _5ed=item[key];if(_5ed!==null){if(!dojo.isArray(_5ed)){item[key]=[_5ed];}}else{item[key]=[null];}}_5ec[key]=key;}}while(_5ec[this._storeRefPropName]){this._storeRefPropName+="_";}while(_5ec[this._itemNumPropName]){this._itemNumPropName+="_";}while(_5ec[this._reverseRefMap]){this._reverseRefMap+="_";}var _5ee;var _5ef=_5e1.identifier;if(_5ef){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_5ef;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_5ee=item[_5ef];var _5f0=_5ee[0];if(!this._itemsByIdentity[_5f0]){this._itemsByIdentity[_5f0]=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: ["+_5ef+"]. Value collided: ["+_5f0+"]");}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: ["+_5ef+"]. Value collided: ["+_5f0+"]");}}}}}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){_5ee=item[key];for(var j=0;j<_5ee.length;++j){_5ed=_5ee[j];if(_5ed!==null&&typeof _5ed=="object"){if(("_type" in _5ed)&&("_value" in _5ed)){var type=_5ed._type;var _5f1=this._datatypeMap[type];if(!_5f1){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_5f1)){_5ee[j]=new _5f1(_5ed._value);}else{if(dojo.isFunction(_5f1.deserialize)){_5ee[j]=_5f1.deserialize(_5ed._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(_5ed._reference){var _5f2=_5ed._reference;if(!dojo.isObject(_5f2)){_5ee[j]=this._getItemByIdentity(_5f2);}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _5f3=this._arrayOfAllItems[k],_5f4=true;for(var _5f5 in _5f2){if(_5f3[_5f5]!=_5f2[_5f5]){_5f4=false;}}if(_5f4){_5ee[j]=_5f3;}}}if(this.referenceIntegrity){var _5f6=_5ee[j];if(this.isItem(_5f6)){this._addReferenceToMap(_5f6,item,key);}}}else{if(this.isItem(_5ed)){if(this.referenceIntegrity){this._addReferenceToMap(_5ed,item,key);}}}}}}}},_addReferenceToMap:function(_5f7,_5f8,_5f9){},getIdentity:function(item){var _5fa=this._features["dojo.data.api.Identity"];if(_5fa===Number){return item[this._itemNumPropName];}else{var _5fb=item[_5fa];if(_5fb){return _5fb[0];}}return null;},fetchItemByIdentity:function(_5fc){var item,_5fd;if(!this._loadFinished){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_5fc});}else{this._loadInProgress=true;var _5fe={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _5ff=dojo.xhrGet(_5fe);_5ff.addCallback(function(data){var _600=_5fc.scope?_5fc.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;item=self._getItemByIdentity(_5fc.identity);if(_5fc.onItem){_5fc.onItem.call(_600,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_5fc.onError){_5fc.onError.call(_600,error);}}});_5ff.addErrback(function(_601){self._loadInProgress=false;if(_5fc.onError){var _602=_5fc.scope?_5fc.scope:dojo.global;_5fc.onError.call(_602,_601);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;item=self._getItemByIdentity(_5fc.identity);if(_5fc.onItem){_5fd=_5fc.scope?_5fc.scope:dojo.global;_5fc.onItem.call(_5fd,item);}}}}else{item=this._getItemByIdentity(_5fc.identity);if(_5fc.onItem){_5fd=_5fc.scope?_5fc.scope:dojo.global;_5fc.onItem.call(_5fd,item);}}},_getItemByIdentity:function(_603){var item=null;if(this._itemsByIdentity){item=this._itemsByIdentity[_603];}else{item=this._arrayOfAllItems[_603];}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _604=this._features["dojo.data.api.Identity"];if(_604===Number){return null;}else{return [_604];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){var _605={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _606=dojo.xhrGet(_605);_606.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}else{if(self._loadInProgress){throw new Error("dojo.data.ItemFileReadStore: Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){console.log(e);throw e;}});_606.addErrback(function(_607){throw _607;});}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["dojo.data.ItemFileWriteStore"]){dojo._hasResource["dojo.data.ItemFileWriteStore"]=true;dojo.provide("dojo.data.ItemFileWriteStore");dojo.declare("dojo.data.ItemFileWriteStore",dojo.data.ItemFileReadStore,{constructor:function(_608){this._features["dojo.data.api.Write"]=true;this._features["dojo.data.api.Notification"]=true;this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};if(!this._datatypeMap["Date"].serialize){this._datatypeMap["Date"].serialize=function(obj){return dojo.date.stamp.toISOString(obj,{zulu:true});};}if(_608&&(_608.referenceIntegrity===false)){this.referenceIntegrity=false;}this._saveInProgress=false;},referenceIntegrity:true,_assert:function(_609){if(!_609){throw new Error("assertion failed in ItemFileWriteStore");}},_getIdentifierAttribute:function(){var _60a=this.getFeatures()["dojo.data.api.Identity"];return _60a;},newItem:function(_60b,_60c){this._assert(!this._saveInProgress);if(!this._loadFinished){this._forceLoad();}if(typeof _60b!="object"&&typeof _60b!="undefined"){throw new Error("newItem() was passed something other than an object");}var _60d=null;var _60e=this._getIdentifierAttribute();if(_60e===Number){_60d=this._arrayOfAllItems.length;}else{_60d=_60b[_60e];if(typeof _60d==="undefined"){throw new Error("newItem() was not passed an identity for the new item");}if(dojo.isArray(_60d)){throw new Error("newItem() was not passed an single-valued identity");}}if(this._itemsByIdentity){this._assert(typeof this._itemsByIdentity[_60d]==="undefined");}this._assert(typeof this._pending._newItems[_60d]==="undefined");this._assert(typeof this._pending._deletedItems[_60d]==="undefined");var _60f={};_60f[this._storeRefPropName]=this;_60f[this._itemNumPropName]=this._arrayOfAllItems.length;if(this._itemsByIdentity){this._itemsByIdentity[_60d]=_60f;_60f[_60e]=[_60d];}this._arrayOfAllItems.push(_60f);var _610=null;if(_60c&&_60c.parent&&_60c.attribute){_610={item:_60c.parent,attribute:_60c.attribute,oldValue:undefined};var _611=this.getValues(_60c.parent,_60c.attribute);if(_611&&_611.length>0){var _612=_611.slice(0,_611.length);if(_611.length===1){_610.oldValue=_611[0];}else{_610.oldValue=_611.slice(0,_611.length);}_612.push(_60f);this._setValueOrValues(_60c.parent,_60c.attribute,_612,false);_610.newValue=this.getValues(_60c.parent,_60c.attribute);}else{this._setValueOrValues(_60c.parent,_60c.attribute,_60f,false);_610.newValue=_60f;}}else{_60f[this._rootItemPropName]=true;this._arrayOfTopLevelItems.push(_60f);}this._pending._newItems[_60d]=_60f;for(var key in _60b){if(key===this._storeRefPropName||key===this._itemNumPropName){throw new Error("encountered bug in ItemFileWriteStore.newItem");}var _613=_60b[key];if(!dojo.isArray(_613)){_613=[_613];}_60f[key]=_613;if(this.referenceIntegrity){for(var i=0;i<_613.length;i++){var val=_613[i];if(this.isItem(val)){this._addReferenceToMap(val,_60f,key);}}}}this.onNew(_60f,_610);return _60f;},_removeArrayElement:function(_614,_615){var _616=dojo.indexOf(_614,_615);if(_616!=-1){_614.splice(_616,1);return true;}return false;},deleteItem:function(item){this._assert(!this._saveInProgress);this._assertIsItem(item);var _617=item[this._itemNumPropName];var _618=this.getIdentity(item);if(this.referenceIntegrity){var _619=this.getAttributes(item);if(item[this._reverseRefMap]){item["backup_"+this._reverseRefMap]=dojo.clone(item[this._reverseRefMap]);}dojo.forEach(_619,function(_61a){dojo.forEach(this.getValues(item,_61a),function(_61b){if(this.isItem(_61b)){if(!item["backupRefs_"+this._reverseRefMap]){item["backupRefs_"+this._reverseRefMap]=[];}item["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_61b),attr:_61a});this._removeReferenceFromMap(_61b,item,_61a);}},this);},this);var _61c=item[this._reverseRefMap];if(_61c){for(var _61d in _61c){var _61e=null;if(this._itemsByIdentity){_61e=this._itemsByIdentity[_61d];}else{_61e=this._arrayOfAllItems[_61d];}if(_61e){for(var _61f in _61c[_61d]){var _620=this.getValues(_61e,_61f)||[];var _621=dojo.filter(_620,function(_622){return !(this.isItem(_622)&&this.getIdentity(_622)==_618);},this);this._removeReferenceFromMap(item,_61e,_61f);if(_621.length<_620.length){this._setValueOrValues(_61e,_61f,_621,true);}}}}}}this._arrayOfAllItems[_617]=null;item[this._storeRefPropName]=null;if(this._itemsByIdentity){delete this._itemsByIdentity[_618];}this._pending._deletedItems[_618]=item;if(item[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,item);}this.onDelete(item);return true;},setValue:function(item,_623,_624){return this._setValueOrValues(item,_623,_624,true);},setValues:function(item,_625,_626){return this._setValueOrValues(item,_625,_626,true);},unsetAttribute:function(item,_627){return this._setValueOrValues(item,_627,[],true);},_setValueOrValues:function(item,_628,_629,_62a){this._assert(!this._saveInProgress);this._assertIsItem(item);this._assert(dojo.isString(_628));this._assert(typeof _629!=="undefined");var _62b=this._getIdentifierAttribute();if(_628==_62b){throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");}var _62c=this._getValueOrValues(item,_628);var _62d=this.getIdentity(item);if(!this._pending._modifiedItems[_62d]){var _62e={};for(var key in item){if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){_62e[key]=item[key];}else{if(key===this._reverseRefMap){_62e[key]=dojo.clone(item[key]);}else{_62e[key]=item[key].slice(0,item[key].length);}}}this._pending._modifiedItems[_62d]=_62e;}var _62f=false;if(dojo.isArray(_629)&&_629.length===0){_62f=delete item[_628];_629=undefined;if(this.referenceIntegrity&&_62c){var _630=_62c;if(!dojo.isArray(_630)){_630=[_630];}for(var i=0;i<_630.length;i++){var _631=_630[i];if(this.isItem(_631)){this._removeReferenceFromMap(_631,item,_628);}}}}else{var _632;if(dojo.isArray(_629)){var _633=_629;_632=_629.slice(0,_629.length);}else{_632=[_629];}if(this.referenceIntegrity){if(_62c){var _630=_62c;if(!dojo.isArray(_630)){_630=[_630];}var map={};dojo.forEach(_630,function(_634){if(this.isItem(_634)){var id=this.getIdentity(_634);map[id.toString()]=true;}},this);dojo.forEach(_632,function(_635){if(this.isItem(_635)){var id=this.getIdentity(_635);if(map[id.toString()]){delete map[id.toString()];}else{this._addReferenceToMap(_635,item,_628);}}},this);for(var rId in map){var _636;if(this._itemsByIdentity){_636=this._itemsByIdentity[rId];}else{_636=this._arrayOfAllItems[rId];}this._removeReferenceFromMap(_636,item,_628);}}else{for(var i=0;i<_632.length;i++){var _631=_632[i];if(this.isItem(_631)){this._addReferenceToMap(_631,item,_628);}}}}item[_628]=_632;_62f=true;}if(_62a){this.onSet(item,_628,_62c,_629);}return _62f;},_addReferenceToMap:function(_637,_638,_639){var _63a=this.getIdentity(_638);var _63b=_637[this._reverseRefMap];if(!_63b){_63b=_637[this._reverseRefMap]={};}var _63c=_63b[_63a];if(!_63c){_63c=_63b[_63a]={};}_63c[_639]=true;},_removeReferenceFromMap:function(_63d,_63e,_63f){var _640=this.getIdentity(_63e);var _641=_63d[this._reverseRefMap];var _642;if(_641){for(_642 in _641){if(_642==_640){delete _641[_642][_63f];if(this._isEmpty(_641[_642])){delete _641[_642];}}}if(this._isEmpty(_641)){delete _63d[this._reverseRefMap];}}},_dumpReferenceMap:function(){var i;for(i=0;i<this._arrayOfAllItems.length;i++){var item=this._arrayOfAllItems[i];if(item&&item[this._reverseRefMap]){console.log("Item: ["+this.getIdentity(item)+"] is referenced by: "+dojo.toJson(item[this._reverseRefMap]));}}},_getValueOrValues:function(item,_643){var _644=undefined;if(this.hasAttribute(item,_643)){var _645=this.getValues(item,_643);if(_645.length==1){_644=_645[0];}else{_644=_645;}}return _644;},_flatten:function(_646){if(this.isItem(_646)){var item=_646;var _647=this.getIdentity(item);var _648={_reference:_647};return _648;}else{if(typeof _646==="object"){for(var type in this._datatypeMap){var _649=this._datatypeMap[type];if(dojo.isObject(_649)&&!dojo.isFunction(_649)){if(_646 instanceof _649.type){if(!_649.serialize){throw new Error("ItemFileWriteStore: No serializer defined for type mapping: ["+type+"]");}return {_type:type,_value:_649.serialize(_646)};}}else{if(_646 instanceof _649){return {_type:type,_value:_646.toString()};}}}}return _646;}},_getNewFileContentString:function(){var _64a={};var _64b=this._getIdentifierAttribute();if(_64b!==Number){_64a.identifier=_64b;}if(this._labelAttr){_64a.label=this._labelAttr;}_64a.items=[];for(var i=0;i<this._arrayOfAllItems.length;++i){var item=this._arrayOfAllItems[i];if(item!==null){var _64c={};for(var key in item){if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){var _64d=key;var _64e=this.getValues(item,_64d);if(_64e.length==1){_64c[_64d]=this._flatten(_64e[0]);}else{var _64f=[];for(var j=0;j<_64e.length;++j){_64f.push(this._flatten(_64e[j]));_64c[_64d]=_64f;}}}}_64a.items.push(_64c);}}var _650=true;return dojo.toJson(_64a,_650);},_isEmpty:function(_651){var _652=true;if(dojo.isObject(_651)){var i;for(i in _651){_652=false;break;}}else{if(dojo.isArray(_651)){if(_651.length>0){_652=false;}}}return _652;},save:function(_653){this._assert(!this._saveInProgress);this._saveInProgress=true;var self=this;var _654=function(){self._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};self._saveInProgress=false;if(_653&&_653.onComplete){var _655=_653.scope||dojo.global;_653.onComplete.call(_655);}};var _656=function(err){self._saveInProgress=false;if(_653&&_653.onError){var _657=_653.scope||dojo.global;_653.onError.call(_657,err);}};if(this._saveEverything){var _658=this._getNewFileContentString();this._saveEverything(_654,_656,_658);}if(this._saveCustom){this._saveCustom(_654,_656);}if(!this._saveEverything&&!this._saveCustom){_654();}},revert:function(){this._assert(!this._saveInProgress);var _659;for(_659 in this._pending._modifiedItems){var _65a=this._pending._modifiedItems[_659];var _65b=null;if(this._itemsByIdentity){_65b=this._itemsByIdentity[_659];}else{_65b=this._arrayOfAllItems[_659];}_65a[this._storeRefPropName]=this;for(key in _65b){delete _65b[key];}dojo.mixin(_65b,_65a);}var _65c;for(_659 in this._pending._deletedItems){_65c=this._pending._deletedItems[_659];_65c[this._storeRefPropName]=this;var _65d=_65c[this._itemNumPropName];if(_65c["backup_"+this._reverseRefMap]){_65c[this._reverseRefMap]=_65c["backup_"+this._reverseRefMap];delete _65c["backup_"+this._reverseRefMap];}this._arrayOfAllItems[_65d]=_65c;if(this._itemsByIdentity){this._itemsByIdentity[_659]=_65c;}if(_65c[this._rootItemPropName]){this._arrayOfTopLevelItems.push(_65c);}}for(_659 in this._pending._deletedItems){_65c=this._pending._deletedItems[_659];if(_65c["backupRefs_"+this._reverseRefMap]){dojo.forEach(_65c["backupRefs_"+this._reverseRefMap],function(_65e){var _65f;if(this._itemsByIdentity){_65f=this._itemsByIdentity[_65e.id];}else{_65f=this._arrayOfAllItems[_65e.id];}this._addReferenceToMap(_65f,_65c,_65e.attr);},this);delete _65c["backupRefs_"+this._reverseRefMap];}}for(_659 in this._pending._newItems){var _660=this._pending._newItems[_659];_660[this._storeRefPropName]=null;this._arrayOfAllItems[_660[this._itemNumPropName]]=null;if(_660[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,_660);}if(this._itemsByIdentity){delete this._itemsByIdentity[_659];}}this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};return true;},isDirty:function(item){if(item){var _661=this.getIdentity(item);return new Boolean(this._pending._newItems[_661]||this._pending._modifiedItems[_661]||this._pending._deletedItems[_661]).valueOf();}else{if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){return true;}return false;}},onSet:function(item,_662,_663,_664){},onNew:function(_665,_666){},onDelete:function(_667){},close:function(_668){if(this.clearOnClose){if(!this.isDirty()){this.inherited(arguments);}else{throw new Error("dojo.data.ItemFileWriteStore: There are unsaved changes present in the store. Please save or revert the changes before invoking close.");}}}});}dojo.i18n._preloadLocalizations("dojo.nls.tt-rss-layer",["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]); +dojo.provide("tt-rss-layer");if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.getObject("date.stamp",true,dojo);dojo.date.stamp.fromISOString=function(_1,_2){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 _3=dojo.date.stamp._isoRegExp.exec(_1),_4=null;if(_3){_3.shift();if(_3[1]){_3[1]--;}if(_3[6]){_3[6]*=1000;}if(_2){_2=new Date(_2);dojo.forEach(dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_5){return _2["get"+_5]();}),function(_6,_7){_3[_7]=_3[_7]||_6;});}_4=new Date(_3[0]||1970,_3[1]||0,_3[2]||1,_3[3]||0,_3[4]||0,_3[5]||0,_3[6]||0);if(_3[0]<100){_4.setFullYear(_3[0]||1970);}var _8=0,_9=_3[7]&&_3[7].charAt(0);if(_9!="Z"){_8=((_3[8]||0)*60)+(Number(_3[9])||0);if(_9!="-"){_8*=-1;}}if(_9){_8-=_4.getTimezoneOffset();}if(_8){_4.setTime(_4.getTime()+_8*60000);}}return _4;};dojo.date.stamp.toISOString=function(_a,_b){var _c=function(n){return (n<10)?"0"+n:n;};_b=_b||{};var _d=[],_e=_b.zulu?"getUTC":"get",_f="";if(_b.selector!="time"){var _10=_a[_e+"FullYear"]();_f=["0000".substr((_10+"").length)+_10,_c(_a[_e+"Month"]()+1),_c(_a[_e+"Date"]())].join("-");}_d.push(_f);if(_b.selector!="date"){var _11=[_c(_a[_e+"Hours"]()),_c(_a[_e+"Minutes"]()),_c(_a[_e+"Seconds"]())].join(":");var _12=_a[_e+"Milliseconds"]();if(_b.milliseconds){_11+="."+(_12<100?"0":"")+_c(_12);}if(_b.zulu){_11+="Z";}else{if(_b.selector!="time"){var _13=_a.getTimezoneOffset();var _14=Math.abs(_13);_11+=(_13>0?"-":"+")+_c(Math.floor(_14/60))+":"+_c(_14%60);}}_d.push(_11);}return _d.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");new Date("X");dojo.parser=new function(){var d=dojo;function _15(_16){if(d.isString(_16)){return "string";}if(typeof _16=="number"){return "number";}if(typeof _16=="boolean"){return "boolean";}if(d.isFunction(_16)){return "function";}if(d.isArray(_16)){return "array";}if(_16 instanceof Date){return "date";}if(_16 instanceof d._Url){return "url";}return "object";};function _17(_18,_19){switch(_19){case "string":return _18;case "number":return _18.length?Number(_18):NaN;case "boolean":return typeof _18=="boolean"?_18:!(_18.toLowerCase()=="false");case "function":if(d.isFunction(_18)){_18=_18.toString();_18=d.trim(_18.substring(_18.indexOf("{")+1,_18.length-1));}try{if(_18===""||_18.search(/[^\w\.]+/i)!=-1){return new Function(_18);}else{return d.getObject(_18,false)||new Function(_18);}}catch(e){return new Function();}case "array":return _18?_18.split(/\s*,\s*/):[];case "date":switch(_18){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_18);}case "url":return d.baseUrl+_18;default:return d.fromJson(_18);}};var _1a={},_1b={};d.connect(d,"extend",function(){_1b={};});function _1c(cls,_1d){for(var _1e in cls){if(_1e.charAt(0)=="_"){continue;}if(_1e in _1a){continue;}_1d[_1e]=_15(cls[_1e]);}return _1d;};function _1f(_20,_21){var c=_1b[_20];if(!c){var cls=d.getObject(_20),_22=null;if(!cls){return null;}if(!_21){_22=_1c(cls.prototype,{});}c={cls:cls,params:_22};}else{if(!_21&&!c.params){c.params=_1c(c.cls.prototype,{});}}return c;};this._functionFromScript=function(_23,_24){var _25="";var _26="";var _27=(_23.getAttribute(_24+"args")||_23.getAttribute("args"));if(_27){d.forEach(_27.split(/\s*,\s*/),function(_28,idx){_25+="var "+_28+" = arguments["+idx+"]; ";});}var _29=_23.getAttribute("with");if(_29&&_29.length){d.forEach(_29.split(/\s*,\s*/),function(_2a){_25+="with("+_2a+"){";_26+="}";});}return new Function(_25+_23.innerHTML+_26);};this.instantiate=function(_2b,_2c,_2d){var _2e=[],_2c=_2c||{};_2d=_2d||{};var _2f=(_2d.scope||d._scopeName)+"Type",_30="data-"+(_2d.scope||d._scopeName)+"-";d.forEach(_2b,function(obj){if(!obj){return;}var _31,_32,_33,_34,_35,_36;if(obj.node){_31=obj.node;_32=obj.type;_36=obj.fastpath;_33=obj.clsInfo||(_32&&_1f(_32,_36));_34=_33&&_33.cls;_35=obj.scripts;}else{_31=obj;_32=_2f in _2c?_2c[_2f]:_31.getAttribute(_2f);_33=_32&&_1f(_32);_34=_33&&_33.cls;_35=(_34&&(_34._noScript||_34.prototype._noScript)?[]:d.query("> script[type^='dojo/']",_31));}if(!_33){throw new Error("Could not load class '"+_32);}var _37={};if(_2d.defaults){d._mixin(_37,_2d.defaults);}if(obj.inherited){d._mixin(_37,obj.inherited);}if(_36){var _38=_31.getAttribute(_30+"props");if(_38&&_38.length){try{_38=d.fromJson.call(_2d.propsThis,"{"+_38+"}");d._mixin(_37,_38);}catch(e){throw new Error(e.toString()+" in data-dojo-props='"+_38+"'");}}var _39=_31.getAttribute(_30+"attach-point");if(_39){_37.dojoAttachPoint=_39;}var _3a=_31.getAttribute(_30+"attach-event");if(_3a){_37.dojoAttachEvent=_3a;}dojo.mixin(_37,_2c);}else{var _3b=_31.attributes;for(var _3c in _33.params){var _3d=_3c in _2c?{value:_2c[_3c],specified:true}:_3b.getNamedItem(_3c);if(!_3d||(!_3d.specified&&(!dojo.isIE||_3c.toLowerCase()!="value"))){continue;}var _3e=_3d.value;switch(_3c){case "class":_3e="className" in _2c?_2c.className:_31.className;break;case "style":_3e="style" in _2c?_2c.style:(_31.style&&_31.style.cssText);}var _3f=_33.params[_3c];if(typeof _3e=="string"){_37[_3c]=_17(_3e,_3f);}else{_37[_3c]=_3e;}}}var _40=[],_41=[];d.forEach(_35,function(_42){_31.removeChild(_42);var _43=(_42.getAttribute(_30+"event")||_42.getAttribute("event")),_32=_42.getAttribute("type"),nf=d.parser._functionFromScript(_42,_30);if(_43){if(_32=="dojo/connect"){_40.push({event:_43,func:nf});}else{_37[_43]=nf;}}else{_41.push(nf);}});var _44=_34.markupFactory||_34.prototype&&_34.prototype.markupFactory;var _45=_44?_44(_37,_31,_34):new _34(_37,_31);_2e.push(_45);var _46=(_31.getAttribute(_30+"id")||_31.getAttribute("jsId"));if(_46){d.setObject(_46,_45);}d.forEach(_40,function(_47){d.connect(_45,_47.event,null,_47.func);});d.forEach(_41,function(_48){_48.call(_45);});});if(!_2c._started){d.forEach(_2e,function(_49){if(!_2d.noStart&&_49&&dojo.isFunction(_49.startup)&&!_49._started&&(!_49.getParent||!_49.getParent())){_49.startup();}});}return _2e;};this.parse=function(_4a,_4b){var _4c;if(!_4b&&_4a&&_4a.rootNode){_4b=_4a;_4c=_4b.rootNode;}else{_4c=_4a;}_4c=_4c?dojo.byId(_4c):dojo.body();_4b=_4b||{};var _4d=(_4b.scope||d._scopeName)+"Type",_4e="data-"+(_4b.scope||d._scopeName)+"-";function _4f(_50,_51){var _52=dojo.clone(_50.inherited);dojo.forEach(["dir","lang"],function(_53){var val=_50.node.getAttribute(_53);if(val){_52[_53]=val;}});var _54=_50.clsInfo&&!_50.clsInfo.cls.prototype._noScript?_50.scripts:null;var _55=(!_50.clsInfo||!_50.clsInfo.cls.prototype.stopParser)||(_4b&&_4b.template);for(var _56=_50.node.firstChild;_56;_56=_56.nextSibling){if(_56.nodeType==1){var _57,_58=_55&&_56.getAttribute(_4e+"type");if(_58){_57=_58;}else{_57=_55&&_56.getAttribute(_4d);}var _59=_58==_57;if(_57){var _5a={"type":_57,fastpath:_59,clsInfo:_1f(_57,_59),node:_56,scripts:[],inherited:_52};_51.push(_5a);_4f(_5a,_51);}else{if(_54&&_56.nodeName.toLowerCase()=="script"){_57=_56.getAttribute("type");if(_57&&/^dojo\/\w/i.test(_57)){_54.push(_56);}}else{if(_55){_4f({node:_56,inherited:_52},_51);}}}}}};var _5b={};if(_4b&&_4b.inherited){for(var key in _4b.inherited){if(_4b.inherited[key]){_5b[key]=_4b.inherited[key];}}}var _5c=[];_4f({node:_4c,inherited:_5b},_5c);var _5d=_4b&&_4b.template?{template:true}:null;return this.instantiate(_5c,_5d,_4b);};}();(function(){var _5e=function(){if(dojo.config.parseOnLoad){dojo.parser.parse();}};if(dojo.getObject("dijit.wai.onload")===dojo._loaders[0]){dojo._loaders.splice(1,0,_5e);}else{dojo._loaders.unshift(_5e);}})();}if(!dojo._hasResource["dojo.window"]){dojo._hasResource["dojo.window"]=true;dojo.provide("dojo.window");dojo.getObject("window",true,dojo);dojo.window.getBox=function(){var _5f=(dojo.doc.compatMode=="BackCompat")?dojo.body():dojo.doc.documentElement;var _60=dojo._docScroll();return {w:_5f.clientWidth,h:_5f.clientHeight,l:_60.x,t:_60.y};};dojo.window.get=function(doc){if(dojo.isIE&&window!==document.parentWindow){doc.parentWindow.execScript("document._parentWindow = window;","Javascript");var win=doc._parentWindow;doc._parentWindow=null;return win;}return doc.parentWindow||doc.defaultView;};dojo.window.scrollIntoView=function(_61,pos){try{_61=dojo.byId(_61);var doc=_61.ownerDocument||dojo.doc,_62=doc.body||dojo.body(),_63=doc.documentElement||_62.parentNode,_64=dojo.isIE,_65=dojo.isWebKit;if((!(dojo.isMoz||_64||_65||dojo.isOpera)||_61==_62||_61==_63)&&(typeof _61.scrollIntoView!="undefined")){_61.scrollIntoView(false);return;}var _66=doc.compatMode=="BackCompat",_67=(_64>=9&&_61.ownerDocument.parentWindow.frameElement)?((_63.clientHeight>0&&_63.clientWidth>0&&(_62.clientHeight==0||_62.clientWidth==0||_62.clientHeight>_63.clientHeight||_62.clientWidth>_63.clientWidth))?_63:_62):(_66?_62:_63),_68=_65?_62:_67,_69=_67.clientWidth,_6a=_67.clientHeight,rtl=!dojo._isBodyLtr(),_6b=pos||dojo.position(_61),el=_61.parentNode,_6c=function(el){return ((_64<=6||(_64&&_66))?false:(dojo.style(el,"position").toLowerCase()=="fixed"));};if(_6c(_61)){return;}while(el){if(el==_62){el=_68;}var _6d=dojo.position(el),_6e=_6c(el);if(el==_68){_6d.w=_69;_6d.h=_6a;if(_68==_63&&_64&&rtl){_6d.x+=_68.offsetWidth-_6d.w;}if(_6d.x<0||!_64){_6d.x=0;}if(_6d.y<0||!_64){_6d.y=0;}}else{var pb=dojo._getPadBorderExtents(el);_6d.w-=pb.w;_6d.h-=pb.h;_6d.x+=pb.l;_6d.y+=pb.t;var _6f=el.clientWidth,_70=_6d.w-_6f;if(_6f>0&&_70>0){_6d.w=_6f;_6d.x+=(rtl&&(_64||el.clientLeft>pb.l))?_70:0;}_6f=el.clientHeight;_70=_6d.h-_6f;if(_6f>0&&_70>0){_6d.h=_6f;}}if(_6e){if(_6d.y<0){_6d.h+=_6d.y;_6d.y=0;}if(_6d.x<0){_6d.w+=_6d.x;_6d.x=0;}if(_6d.y+_6d.h>_6a){_6d.h=_6a-_6d.y;}if(_6d.x+_6d.w>_69){_6d.w=_69-_6d.x;}}var l=_6b.x-_6d.x,t=_6b.y-Math.max(_6d.y,0),r=l+_6b.w-_6d.w,bot=t+_6b.h-_6d.h;if(r*l>0){var s=Math[l<0?"max":"min"](l,r);if(rtl&&((_64==8&&!_66)||_64>=9)){s=-s;}_6b.x+=el.scrollLeft;el.scrollLeft+=s;_6b.x-=el.scrollLeft;}if(bot*t>0){_6b.y+=el.scrollTop;el.scrollTop+=Math[t<0?"max":"min"](t,bot);_6b.y-=el.scrollTop;}el=(el!=_68)&&!_6e&&el.parentNode;}}catch(error){console.error("scrollIntoView: "+error);_61.scrollIntoView(false);}};}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={};this.length=0;},add:function(_71){if(this._hash[_71.id]){throw new Error("Tried to register widget with id=="+_71.id+" but that id is already registered");}this._hash[_71.id]=_71;this.length++;},remove:function(id){if(this._hash[id]){delete this._hash[id];this.length--;}},forEach:function(_72,_73){_73=_73||dojo.global;var i=0,id;for(id in this._hash){_72.call(_73,this._hash[id],i++,this._hash);}return this;},filter:function(_74,_75){_75=_75||dojo.global;var res=new dijit.WidgetSet(),i=0,id;for(id in this._hash){var w=this._hash[id];if(_74.call(_75,w,i++,this._hash)){res.add(w);}}return res;},byId:function(id){return this._hash[id];},byClass:function(cls){var res=new dijit.WidgetSet(),id,_76;for(id in this._hash){_76=this._hash[id];if(_76.declaredClass==cls){res.add(_76);}}return res;},toArray:function(){var ar=[];for(var id in this._hash){ar.push(this._hash[id]);}return ar;},map:function(_77,_78){return dojo.map(this.toArray(),_77,_78);},every:function(_79,_7a){_7a=_7a||dojo.global;var x=0,i;for(i in this._hash){if(!_79.call(_7a,this._hash[i],x++,this._hash)){return false;}}return true;},some:function(_7b,_7c){_7c=_7c||dojo.global;var x=0,i;for(i in this._hash){if(_7b.call(_7c,this._hash[i],x++,this._hash)){return true;}}return false;}});(function(){dijit.registry=new dijit.WidgetSet();var _7d=dijit.registry._hash,_7e=dojo.attr,_7f=dojo.hasAttr,_80=dojo.style;dijit.byId=function(id){return typeof id=="string"?_7d[id]:id;};var _81={};dijit.getUniqueId=function(_82){var id;do{id=_82+"_"+(_82 in _81?++_81[_82]:_81[_82]=0);}while(_7d[id]);return dijit._scopeName=="dijit"?id:dijit._scopeName+"_"+id;};dijit.findWidgets=function(_83){var _84=[];function _85(_86){for(var _87=_86.firstChild;_87;_87=_87.nextSibling){if(_87.nodeType==1){var _88=_87.getAttribute("widgetId");if(_88){var _89=_7d[_88];if(_89){_84.push(_89);}}else{_85(_87);}}}};_85(_83);return _84;};dijit._destroyAll=function(){dijit._curFocus=null;dijit._prevFocus=null;dijit._activeStack=[];dojo.forEach(dijit.findWidgets(dojo.body()),function(_8a){if(!_8a._destroyed){if(_8a.destroyRecursive){_8a.destroyRecursive();}else{if(_8a.destroy){_8a.destroy();}}}});};if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit._destroyAll();});}dijit.byNode=function(_8b){return _7d[_8b.getAttribute("widgetId")];};dijit.getEnclosingWidget=function(_8c){while(_8c){var id=_8c.getAttribute&&_8c.getAttribute("widgetId");if(id){return _7d[id];}_8c=_8c.parentNode;}return null;};var _8d=(dijit._isElementShown=function(_8e){var s=_80(_8e);return (s.visibility!="hidden")&&(s.visibility!="collapsed")&&(s.display!="none")&&(_7e(_8e,"type")!="hidden");});dijit.hasDefaultTabStop=function(_8f){switch(_8f.nodeName.toLowerCase()){case "a":return _7f(_8f,"href");case "area":case "button":case "input":case "object":case "select":case "textarea":return true;case "iframe":var _90;try{var _91=_8f.contentDocument;if("designMode" in _91&&_91.designMode=="on"){return true;}_90=_91.body;}catch(e1){try{_90=_8f.contentWindow.document.body;}catch(e2){return false;}}return _90.contentEditable=="true"||(_90.firstChild&&_90.firstChild.contentEditable=="true");default:return _8f.contentEditable=="true";}};var _92=(dijit.isTabNavigable=function(_93){if(_7e(_93,"disabled")){return false;}else{if(_7f(_93,"tabIndex")){return _7e(_93,"tabIndex")>=0;}else{return dijit.hasDefaultTabStop(_93);}}});dijit._getTabNavigable=function(_94){var _95,_96,_97,_98,_99,_9a,_9b={};function _9c(_9d){return _9d&&_9d.tagName.toLowerCase()=="input"&&_9d.type&&_9d.type.toLowerCase()=="radio"&&_9d.name&&_9d.name.toLowerCase();};var _9e=function(_9f){dojo.query("> *",_9f).forEach(function(_a0){if((dojo.isIE&&_a0.scopeName!=="HTML")||!_8d(_a0)){return;}if(_92(_a0)){var _a1=_7e(_a0,"tabIndex");if(!_7f(_a0,"tabIndex")||_a1==0){if(!_95){_95=_a0;}_96=_a0;}else{if(_a1>0){if(!_97||_a1<_98){_98=_a1;_97=_a0;}if(!_99||_a1>=_9a){_9a=_a1;_99=_a0;}}}var rn=_9c(_a0);if(dojo.attr(_a0,"checked")&&rn){_9b[rn]=_a0;}}if(_a0.nodeName.toUpperCase()!="SELECT"){_9e(_a0);}});};if(_8d(_94)){_9e(_94);}function rs(_a2){return _9b[_9c(_a2)]||_a2;};return {first:rs(_95),last:rs(_96),lowest:rs(_97),highest:rs(_99)};};dijit.getFirstInTabbingOrder=function(_a3){var _a4=dijit._getTabNavigable(dojo.byId(_a3));return _a4.lowest?_a4.lowest:_a4.first;};dijit.getLastInTabbingOrder=function(_a5){var _a6=dijit._getTabNavigable(dojo.byId(_a5));return _a6.last?_a6.last:_a6.highest;};dijit.defaultDuration=dojo.config["defaultDuration"]||200;})();}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(){return dijit.getBookmark().isCollapsed;},getBookmark:function(){var bm,rg,tg,sel=dojo.doc.selection,cf=dijit._curFocus;if(dojo.global.getSelection){sel=dojo.global.getSelection();if(sel){if(sel.isCollapsed){tg=cf?cf.tagName:"";if(tg){tg=tg.toLowerCase();if(tg=="textarea"||(tg=="input"&&(!cf.type||cf.type.toLowerCase()=="text"))){sel={start:cf.selectionStart,end:cf.selectionEnd,node:cf,pRange:true};return {isCollapsed:(sel.end<=sel.start),mark:sel};}}bm={isCollapsed:true};if(sel.rangeCount){bm.mark=sel.getRangeAt(0).cloneRange();}}else{rg=sel.getRangeAt(0);bm={isCollapsed:false,mark:rg.cloneRange()};}}}else{if(sel){tg=cf?cf.tagName:"";tg=tg.toLowerCase();if(cf&&tg&&(tg=="button"||tg=="textarea"||tg=="input")){if(sel.type&&sel.type.toLowerCase()=="none"){return {isCollapsed:true,mark:null};}else{rg=sel.createRange();return {isCollapsed:rg.text&&rg.text.length?false:true,mark:{range:rg,pRange:true}};}}bm={};try{rg=sel.createRange();bm.isCollapsed=!(sel.type=="Text"?rg.htmlText.length:rg.length);}catch(e){bm.isCollapsed=true;return bm;}if(sel.type.toUpperCase()=="CONTROL"){if(rg.length){bm.mark=[];var i=0,len=rg.length;while(i<len){bm.mark.push(rg.item(i++));}}else{bm.isCollapsed=true;bm.mark=null;}}else{bm.mark=rg.getBookmark();}}else{console.warn("No idea how to store the current selection for this browser!");}}return bm;},moveToBookmark:function(_a7){var _a8=dojo.doc,_a9=_a7.mark;if(_a9){if(dojo.global.getSelection){var sel=dojo.global.getSelection();if(sel&&sel.removeAllRanges){if(_a9.pRange){var r=_a9;var n=r.node;n.selectionStart=r.start;n.selectionEnd=r.end;}else{sel.removeAllRanges();sel.addRange(_a9);}}else{console.warn("No idea how to restore selection for this browser!");}}else{if(_a8.selection&&_a9){var rg;if(_a9.pRange){rg=_a9.range;}else{if(dojo.isArray(_a9)){rg=_a8.body.createControlRange();dojo.forEach(_a9,function(n){rg.addElement(n);});}else{rg=_a8.body.createTextRange();rg.moveToBookmark(_a9);}}rg.select();}}}},getFocus:function(_aa,_ab){var _ac=!dijit._curFocus||(_aa&&dojo.isDescendant(dijit._curFocus,_aa.domNode))?dijit._prevFocus:dijit._curFocus;return {node:_ac,bookmark:(_ac==dijit._curFocus)&&dojo.withGlobal(_ab||dojo.global,dijit.getBookmark),openedForWindow:_ab};},focus:function(_ad){if(!_ad){return;}var _ae="node" in _ad?_ad.node:_ad,_af=_ad.bookmark,_b0=_ad.openedForWindow,_b1=_af?_af.isCollapsed:false;if(_ae){var _b2=(_ae.tagName.toLowerCase()=="iframe")?_ae.contentWindow:_ae;if(_b2&&_b2.focus){try{_b2.focus();}catch(e){}}dijit._onFocusNode(_ae);}if(_af&&dojo.withGlobal(_b0||dojo.global,dijit.isCollapsed)&&!_b1){if(_b0){_b0.focus();}try{dojo.withGlobal(_b0||dojo.global,dijit.moveToBookmark,null,[_af]);}catch(e2){}}},_activeStack:[],registerIframe:function(_b3){return dijit.registerWin(_b3.contentWindow,_b3);},unregisterIframe:function(_b4){dijit.unregisterWin(_b4);},registerWin:function(_b5,_b6){var _b7=function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);if(dojo.isIE&&evt&&evt.srcElement&&evt.srcElement.parentNode==null){return;}dijit._onTouchNode(_b6||evt.target||evt.srcElement,"mouse");};var doc=dojo.isIE?_b5.document.documentElement:_b5.document;if(doc){if(dojo.isIE){_b5.document.body.attachEvent("onmousedown",_b7);var _b8=function(evt){if(evt.srcElement.tagName.toLowerCase()!="#document"&&dijit.isTabNavigable(evt.srcElement)){dijit._onFocusNode(_b6||evt.srcElement);}else{dijit._onTouchNode(_b6||evt.srcElement);}};doc.attachEvent("onactivate",_b8);var _b9=function(evt){dijit._onBlurNode(_b6||evt.srcElement);};doc.attachEvent("ondeactivate",_b9);return function(){_b5.document.detachEvent("onmousedown",_b7);doc.detachEvent("onactivate",_b8);doc.detachEvent("ondeactivate",_b9);doc=null;};}else{doc.body.addEventListener("mousedown",_b7,true);var _ba=function(evt){dijit._onFocusNode(_b6||evt.target);};doc.addEventListener("focus",_ba,true);var _bb=function(evt){dijit._onBlurNode(_b6||evt.target);};doc.addEventListener("blur",_bb,true);return function(){doc.body.removeEventListener("mousedown",_b7,true);doc.removeEventListener("focus",_ba,true);doc.removeEventListener("blur",_bb,true);doc=null;};}}},unregisterWin:function(_bc){_bc&&_bc();},_onBlurNode:function(_bd){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);dijit._prevFocus=null;},100);},_onTouchNode:function(_be,by){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _bf=[];try{while(_be){var _c0=dojo.attr(_be,"dijitPopupParent");if(_c0){_be=dijit.byId(_c0).domNode;}else{if(_be.tagName&&_be.tagName.toLowerCase()=="body"){if(_be===dojo.body()){break;}_be=dojo.window.get(_be.ownerDocument).frameElement;}else{var id=_be.getAttribute&&_be.getAttribute("widgetId"),_c1=id&&dijit.byId(id);if(_c1&&!(by=="mouse"&&_c1.get("disabled"))){_bf.unshift(id);}_be=_be.parentNode;}}}}catch(e){}dijit._setStack(_bf,by);},_onFocusNode:function(_c2){if(!_c2){return;}if(_c2.nodeType==9){return;}dijit._onTouchNode(_c2);if(_c2==dijit._curFocus){return;}if(dijit._curFocus){dijit._prevFocus=dijit._curFocus;}dijit._curFocus=_c2;dojo.publish("focusNode",[_c2]);},_setStack:function(_c3,by){var _c4=dijit._activeStack;dijit._activeStack=_c3;for(var _c5=0;_c5<Math.min(_c4.length,_c3.length);_c5++){if(_c4[_c5]!=_c3[_c5]){break;}}var _c6;for(var i=_c4.length-1;i>=_c5;i--){_c6=dijit.byId(_c4[i]);if(_c6){_c6._focused=false;_c6.set("focused",false);_c6._hasBeenBlurred=true;if(_c6._onBlur){_c6._onBlur(by);}dojo.publish("widgetBlur",[_c6,by]);}}for(i=_c5;i<_c3.length;i++){_c6=dijit.byId(_c3[i]);if(_c6){_c6._focused=true;_c6.set("focused",true);if(_c6._onFocus){_c6._onFocus(by);}dojo.publish("widgetFocus",[_c6,by]);}}}});dojo.addOnLoad(function(){var _c7=dijit.registerWin(window);if(dojo.isIE){dojo.addOnWindowUnload(function(){dijit.unregisterWin(_c7);_c7=null;});}});}if(!dojo._hasResource["dojo.AdapterRegistry"]){dojo._hasResource["dojo.AdapterRegistry"]=true;dojo.provide("dojo.AdapterRegistry");dojo.AdapterRegistry=function(_c8){this.pairs=[];this.returnWrappers=_c8||false;};dojo.extend(dojo.AdapterRegistry,{register:function(_c9,_ca,_cb,_cc,_cd){this.pairs[((_cd)?"unshift":"push")]([_c9,_ca,_cb,_cc]);},match:function(){for(var i=0;i<this.pairs.length;i++){var _ce=this.pairs[i];if(_ce[1].apply(this,arguments)){if((_ce[3])||(this.returnWrappers)){return _ce[2];}else{return _ce[2].apply(this,arguments);}}}throw new Error("No match found");},unregister:function(_cf){for(var i=0;i<this.pairs.length;i++){var _d0=this.pairs[i];if(_d0[0]==_cf){this.pairs.splice(i,1);return true;}}return false;}});}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){return dojo.window.getBox();};dijit.placeOnScreen=function(_d1,pos,_d2,_d3){var _d4=dojo.map(_d2,function(_d5){var c={corner:_d5,pos:{x:pos.x,y:pos.y}};if(_d3){c.pos.x+=_d5.charAt(1)=="L"?_d3.x:-_d3.x;c.pos.y+=_d5.charAt(0)=="T"?_d3.y:-_d3.y;}return c;});return dijit._place(_d1,_d4);};dijit._place=function(_d6,_d7,_d8,_d9){var _da=dojo.window.getBox();if(!_d6.parentNode||String(_d6.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_d6);}var _db=null;dojo.some(_d7,function(_dc){var _dd=_dc.corner;var pos=_dc.pos;var _de=0;var _df={w:_dd.charAt(1)=="L"?(_da.l+_da.w)-pos.x:pos.x-_da.l,h:_dd.charAt(1)=="T"?(_da.t+_da.h)-pos.y:pos.y-_da.t};if(_d8){var res=_d8(_d6,_dc.aroundCorner,_dd,_df,_d9);_de=typeof res=="undefined"?0:res;}var _e0=_d6.style;var _e1=_e0.display;var _e2=_e0.visibility;_e0.visibility="hidden";_e0.display="";var mb=dojo.marginBox(_d6);_e0.display=_e1;_e0.visibility=_e2;var _e3=Math.max(_da.l,_dd.charAt(1)=="L"?pos.x:(pos.x-mb.w)),_e4=Math.max(_da.t,_dd.charAt(0)=="T"?pos.y:(pos.y-mb.h)),_e5=Math.min(_da.l+_da.w,_dd.charAt(1)=="L"?(_e3+mb.w):pos.x),_e6=Math.min(_da.t+_da.h,_dd.charAt(0)=="T"?(_e4+mb.h):pos.y),_e7=_e5-_e3,_e8=_e6-_e4;_de+=(mb.w-_e7)+(mb.h-_e8);if(_db==null||_de<_db.overflow){_db={corner:_dd,aroundCorner:_dc.aroundCorner,x:_e3,y:_e4,w:_e7,h:_e8,overflow:_de,spaceAvailable:_df};}return !_de;});if(_db.overflow&&_d8){_d8(_d6,_db.aroundCorner,_db.corner,_db.spaceAvailable,_d9);}var l=dojo._isBodyLtr(),s=_d6.style;s.top=_db.y+"px";s[l?"left":"right"]=(l?_db.x:_da.w-_db.x-_db.w)+"px";return _db;};dijit.placeOnScreenAroundNode=function(_e9,_ea,_eb,_ec){_ea=dojo.byId(_ea);var _ed=dojo.position(_ea,true);return dijit._placeOnScreenAroundRect(_e9,_ed.x,_ed.y,_ed.w,_ed.h,_eb,_ec);};dijit.placeOnScreenAroundRectangle=function(_ee,_ef,_f0,_f1){return dijit._placeOnScreenAroundRect(_ee,_ef.x,_ef.y,_ef.width,_ef.height,_f0,_f1);};dijit._placeOnScreenAroundRect=function(_f2,x,y,_f3,_f4,_f5,_f6){var _f7=[];for(var _f8 in _f5){_f7.push({aroundCorner:_f8,corner:_f5[_f8],pos:{x:x+(_f8.charAt(1)=="L"?0:_f3),y:y+(_f8.charAt(0)=="T"?0:_f4)}});}return dijit._place(_f2,_f7,_f6,{w:_f3,h:_f4});};dijit.placementRegistry=new dojo.AdapterRegistry();dijit.placementRegistry.register("node",function(n,x){return typeof x=="object"&&typeof x.offsetWidth!="undefined"&&typeof x.offsetHeight!="undefined";},dijit.placeOnScreenAroundNode);dijit.placementRegistry.register("rect",function(n,x){return typeof x=="object"&&"x" in x&&"y" in x&&"width" in x&&"height" in x;},dijit.placeOnScreenAroundRectangle);dijit.placeOnScreenAroundElement=function(_f9,_fa,_fb,_fc){return dijit.placementRegistry.match.apply(dijit.placementRegistry,arguments);};dijit.getPopupAroundAlignment=function(_fd,_fe){var _ff={};dojo.forEach(_fd,function(pos){switch(pos){case "after":_ff[_fe?"BR":"BL"]=_fe?"BL":"BR";break;case "before":_ff[_fe?"BL":"BR"]=_fe?"BR":"BL";break;case "below-alt":_fe=!_fe;case "below":_ff[_fe?"BL":"BR"]=_fe?"TL":"TR";_ff[_fe?"BR":"BL"]=_fe?"TR":"TL";break;case "above-alt":_fe=!_fe;case "above":default:_ff[_fe?"TL":"TR"]=_fe?"BL":"BR";_ff[_fe?"TR":"TL"]=_fe?"BR":"BL";break;}});return _ff;};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){return dojo.window.get(doc);};}if(!dojo._hasResource["dijit._base.popup"]){dojo._hasResource["dijit._base.popup"]=true;dojo.provide("dijit._base.popup");dijit.popup={_stack:[],_beginZIndex:1000,_idGen:1,_createWrapper:function(_100){var _101=_100.declaredClass?_100._popupWrapper:(_100.parentNode&&dojo.hasClass(_100.parentNode,"dijitPopup")),node=_100.domNode||_100;if(!_101){_101=dojo.create("div",{"class":"dijitPopup",style:{display:"none"},role:"presentation"},dojo.body());_101.appendChild(node);var s=node.style;s.display="";s.visibility="";s.position="";s.top="0px";if(_100.declaredClass){_100._popupWrapper=_101;dojo.connect(_100,"destroy",function(){dojo.destroy(_101);delete _100._popupWrapper;});}}return _101;},moveOffScreen:function(_102){var _103=this._createWrapper(_102);dojo.style(_103,{visibility:"hidden",top:"-9999px",display:""});},hide:function(_104){var _105=this._createWrapper(_104);dojo.style(_105,"display","none");},getTopPopup:function(){var _106=this._stack;for(var pi=_106.length-1;pi>0&&_106[pi].parent===_106[pi-1].widget;pi--){}return _106[pi];},open:function(args){var _107=this._stack,_108=args.popup,_109=args.orient||((args.parent?args.parent.isLeftToRight():dojo._isBodyLtr())?{"BL":"TL","BR":"TR","TL":"BL","TR":"BR"}:{"BR":"TR","BL":"TL","TR":"BR","TL":"BL"}),_10a=args.around,id=(args.around&&args.around.id)?(args.around.id+"_dropdown"):("popup_"+this._idGen++);while(_107.length&&(!args.parent||!dojo.isDescendant(args.parent.domNode,_107[_107.length-1].widget.domNode))){dijit.popup.close(_107[_107.length-1].widget);}var _10b=this._createWrapper(_108);dojo.attr(_10b,{id:id,style:{zIndex:this._beginZIndex+_107.length},"class":"dijitPopup "+(_108.baseClass||_108["class"]||"").split(" ")[0]+"Popup",dijitPopupParent:args.parent?args.parent.id:""});if(dojo.isIE||dojo.isMoz){if(!_108.bgIframe){_108.bgIframe=new dijit.BackgroundIframe(_10b);}}var best=_10a?dijit.placeOnScreenAroundElement(_10b,_10a,_109,_108.orient?dojo.hitch(_108,"orient"):null):dijit.placeOnScreen(_10b,args,_109=="R"?["TR","BR","TL","BL"]:["TL","BL","TR","BR"],args.padding);_10b.style.display="";_10b.style.visibility="visible";_108.domNode.style.visibility="visible";var _10c=[];_10c.push(dojo.connect(_10b,"onkeypress",this,function(evt){if(evt.charOrCode==dojo.keys.ESCAPE&&args.onCancel){dojo.stopEvent(evt);args.onCancel();}else{if(evt.charOrCode===dojo.keys.TAB){dojo.stopEvent(evt);var _10d=this.getTopPopup();if(_10d&&_10d.onCancel){_10d.onCancel();}}}}));if(_108.onCancel){_10c.push(dojo.connect(_108,"onCancel",args.onCancel));}_10c.push(dojo.connect(_108,_108.onExecute?"onExecute":"onChange",this,function(){var _10e=this.getTopPopup();if(_10e&&_10e.onExecute){_10e.onExecute();}}));_107.push({widget:_108,parent:args.parent,onExecute:args.onExecute,onCancel:args.onCancel,onClose:args.onClose,handlers:_10c});if(_108.onOpen){_108.onOpen(best);}return best;},close:function(_10f){var _110=this._stack;while((_10f&&dojo.some(_110,function(elem){return elem.widget==_10f;}))||(!_10f&&_110.length)){var top=_110.pop(),_111=top.widget,_112=top.onClose;if(_111.onClose){_111.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(_111&&_111.domNode){this.hide(_111);}if(_112){_112();}}}};dijit._frames=new function(){var _113=[];this.pop=function(){var _114;if(_113.length){_114=_113.pop();_114.style.display="";}else{if(dojo.isIE<9){var burl=dojo.config["dojoBlankHtmlUrl"]||(dojo.moduleUrl("dojo","resources/blank.html")+"")||"javascript:\"\"";var html="<iframe src='"+burl+"'"+" style='position: absolute; left: 0px; top: 0px;"+"z-index: -1; filter:Alpha(Opacity=\"0\");'>";_114=dojo.doc.createElement(html);}else{_114=dojo.create("iframe");_114.src="javascript:\"\"";_114.className="dijitBackgroundIframe";dojo.style(_114,"opacity",0.1);}_114.tabIndex=-1;dijit.setWaiRole(_114,"presentation");}return _114;};this.push=function(_115){_115.style.display="none";_113.push(_115);};}();dijit.BackgroundIframe=function(node){if(!node.id){throw new Error("no id");}if(dojo.isIE||dojo.isMoz){var _116=(this.iframe=dijit._frames.pop());node.appendChild(_116);if(dojo.isIE<7||dojo.isQuirks){this.resize(node);this._conn=dojo.connect(node,"onresize",this,function(){this.resize(node);});}else{dojo.style(_116,{width:"100%",height:"100%"});}}};dojo.extend(dijit.BackgroundIframe,{resize:function(node){if(this.iframe){dojo.style(this.iframe,{width:node.offsetWidth+"px",height:node.offsetHeight+"px"});}},destroy:function(){if(this._conn){dojo.disconnect(this._conn);this._conn=null;}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(node,pos){dojo.window.scrollIntoView(node,pos);};}if(!dojo._hasResource["dojo.uacss"]){dojo._hasResource["dojo.uacss"]=true;dojo.provide("dojo.uacss");(function(){var d=dojo,html=d.doc.documentElement,ie=d.isIE,_117=d.isOpera,maj=Math.floor,ff=d.isFF,_118=d.boxModel.replace(/-/,""),_119={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_ie8:maj(ie)==8,dj_ie9:maj(ie)==9,dj_quirks:d.isQuirks,dj_iequirks:ie&&d.isQuirks,dj_opera:_117,dj_khtml:d.isKhtml,dj_webkit:d.isWebKit,dj_safari:d.isSafari,dj_chrome:d.isChrome,dj_gecko:d.isMozilla,dj_ff3:maj(ff)==3};_119["dj_"+_118]=true;var _11a="";for(var clz in _119){if(_119[clz]){_11a+=clz+" ";}}html.className=d.trim(html.className+" "+_11a);dojo._loaders.unshift(function(){if(!dojo._isBodyLtr()){var _11b="dj_rtl dijitRtl "+_11a.replace(/ /g,"-rtl ");html.className=d.trim(html.className+" "+_11b);}});})();}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");}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=Math.max(this._currentTimeout<0?this._initialDelay:(this._subsequentDelay>1?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay)),this._minDelay);this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_11c,node,_11d,obj,_11e,_11f,_120){if(obj!=this._obj){this.stop();this._initialDelay=_11f||500;this._subsequentDelay=_11e||0.9;this._minDelay=_120||10;this._obj=obj;this._evt=evt;this._node=node;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_11c,_11d);this._fireEventAndReload();this._evt=dojo.mixin({faux:true},evt);}},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(node,_121,_122,_123,_124,_125,_126){if(_121.keyCode){_121.charOrCode=_121.keyCode;dojo.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}else{if(_121.charCode){_121.charOrCode=String.fromCharCode(_121.charCode);dojo.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.","","2.0");}}return [dojo.connect(node,"onkeypress",this,function(evt){if(evt.charOrCode==_121.charOrCode&&(_121.ctrlKey===undefined||_121.ctrlKey==evt.ctrlKey)&&(_121.altKey===undefined||_121.altKey==evt.altKey)&&(_121.metaKey===undefined||_121.metaKey==(evt.metaKey||false))&&(_121.shiftKey===undefined||_121.shiftKey==evt.shiftKey)){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_122,node,_123,_121,_124,_125,_126);}else{if(dijit.typematic._obj==_121){dijit.typematic.stop();}}}),dojo.connect(node,"onkeyup",this,function(evt){if(dijit.typematic._obj==_121){dijit.typematic.stop();}})];},addMouseListener:function(node,_127,_128,_129,_12a,_12b){var dc=dojo.connect;return [dc(node,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_127,node,_128,node,_129,_12a,_12b);}),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){evt.preventDefault();}),dc(node,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_127,node,_128,node,_129,_12a,_12b);setTimeout(dojo.hitch(this,dijit.typematic.stop),50);}})];},addListener:function(_12c,_12d,_12e,_12f,_130,_131,_132,_133){return this.addKeyListener(_12d,_12e,_12f,_130,_131,_132,_133).concat(this.addMouseListener(_12c,_12f,_130,_131,_132,_133));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.wai={onload:function(){var div=dojo.create("div",{id:"a11yTestNode",style:{cssText:"border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"height: 5px;"+"top: -999px;"+"background-image: url(\""+(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif"))+"\");"}},dojo.body());var cs=dojo.getComputedStyle(div);if(cs){var _134=cs.backgroundImage;var _135=(cs.borderTopColor==cs.borderRightColor)||(_134!=null&&(_134=="none"||_134=="url(invalid-url:)"));dojo[_135?"addClass":"removeClass"](dojo.body(),"dijit_a11y");if(dojo.isIE){div.outerHTML="";}else{dojo.body().removeChild(div);}}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}dojo.mixin(dijit,{hasWaiRole:function(elem,role){var _136=this.getWaiRole(elem);return role?(_136.indexOf(role)>-1):(_136.length>0);},getWaiRole:function(elem){return dojo.trim((dojo.attr(elem,"role")||"").replace("wairole:",""));},setWaiRole:function(elem,role){dojo.attr(elem,"role",role);},removeWaiRole:function(elem,role){var _137=dojo.attr(elem,"role");if(!_137){return;}if(role){var t=dojo.trim((" "+_137+" ").replace(" "+role+" "," "));dojo.attr(elem,"role",t);}else{elem.removeAttribute("role");}},hasWaiState:function(elem,_138){return elem.hasAttribute?elem.hasAttribute("aria-"+_138):!!elem.getAttribute("aria-"+_138);},getWaiState:function(elem,_139){return elem.getAttribute("aria-"+_139)||"";},setWaiState:function(elem,_13a,_13b){elem.setAttribute("aria-"+_13a,_13b);},removeWaiState:function(elem,_13c){elem.removeAttribute("aria-"+_13c);}});}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.Stateful"]){dojo._hasResource["dojo.Stateful"]=true;dojo.provide("dojo.Stateful");dojo.declare("dojo.Stateful",null,{postscript:function(_13d){if(_13d){dojo.mixin(this,_13d);}},get:function(name){return this[name];},set:function(name,_13e){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _13f=this[name];this[name]=_13e;if(this._watchCallbacks){this._watchCallbacks(name,_13f,_13e);}return this;},watch:function(name,_140){var _141=this._watchCallbacks;if(!_141){var self=this;_141=this._watchCallbacks=function(name,_142,_143,_144){var _145=function(_146){if(_146){_146=_146.slice();for(var i=0,l=_146.length;i<l;i++){try{_146[i].call(self,name,_142,_143);}catch(e){console.error(e);}}}};_145(_141["_"+name]);if(!_144){_145(_141["*"]);}};}if(!_140&&typeof name==="function"){_140=name;name="*";}else{name="_"+name;}var _147=_141[name];if(typeof _147!=="object"){_147=_141[name]=[];}_147.push(_140);return {unwatch:function(){_147.splice(dojo.indexOf(_147,_140),1);}};}});}if(!dojo._hasResource["dijit._WidgetBase"]){dojo._hasResource["dijit._WidgetBase"]=true;dojo.provide("dijit._WidgetBase");(function(){dojo.declare("dijit._WidgetBase",dojo.Stateful,{id:"",lang:"",dir:"","class":"",style:"",title:"",tooltip:"",baseClass:"",srcNodeRef:null,domNode:null,containerNode:null,attributeMap:{id:"",dir:"",lang:"","class":"",style:"",title:""},_blankGif:(dojo.config.blankGif||dojo.moduleUrl("dojo","resources/blank.gif")).toString(),postscript:function(_148,_149){this.create(_148,_149);},create:function(_14a,_14b){this.srcNodeRef=dojo.byId(_14b);this._connects=[];this._subscribes=[];if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_14a){this.params=_14a;dojo._mixin(this,_14a);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this._applyAttributes();var _14c=this.srcNodeRef;if(_14c&&_14c.parentNode&&this.domNode!==_14c){_14c.parentNode.replaceChild(this.domNode,_14c);}}if(this.domNode){this.domNode.setAttribute("widgetId",this.id);}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}this._created=true;},_applyAttributes:function(){var _14d=function(attr,_14e){if((_14e.params&&attr in _14e.params)||_14e[attr]){_14e.set(attr,_14e[attr]);}};for(var attr in this.attributeMap){_14d(attr,this);}dojo.forEach(this._getSetterAttributes(),function(a){if(!(a in this.attributeMap)){_14d(a,this);}},this);},_getSetterAttributes:function(){var ctor=this.constructor;if(!ctor._setterAttrs){var r=(ctor._setterAttrs=[]),_14f,_150=ctor.prototype;for(var _151 in _150){if(dojo.isFunction(_150[_151])&&(_14f=_151.match(/^_set([a-zA-Z]*)Attr$/))&&_14f[1]){r.push(_14f[1].charAt(0).toLowerCase()+_14f[1].substr(1));}}}return ctor._setterAttrs;},postMixInProperties:function(){},buildRendering:function(){if(!this.domNode){this.domNode=this.srcNodeRef||dojo.create("div");}if(this.baseClass){var _152=this.baseClass.split(" ");if(!this.isLeftToRight()){_152=_152.concat(dojo.map(_152,function(name){return name+"Rtl";}));}dojo.addClass(this.domNode,_152);}},postCreate:function(){},startup:function(){this._started=true;},destroyRecursive:function(_153){this._beingDestroyed=true;this.destroyDescendants(_153);this.destroy(_153);},destroy:function(_154){this._beingDestroyed=true;this.uninitialize();var d=dojo,dfe=d.forEach,dun=d.unsubscribe;dfe(this._connects,function(_155){dfe(_155,d.disconnect);});dfe(this._subscribes,function(_156){dun(_156);});dfe(this._supportingWidgets||[],function(w){if(w.destroyRecursive){w.destroyRecursive();}else{if(w.destroy){w.destroy();}}});this.destroyRendering(_154);dijit.registry.remove(this.id);this._destroyed=true;},destroyRendering:function(_157){if(this.bgIframe){this.bgIframe.destroy(_157);delete this.bgIframe;}if(this.domNode){if(_157){dojo.removeAttr(this.domNode,"widgetId");}else{dojo.destroy(this.domNode);}delete this.domNode;}if(this.srcNodeRef){if(!_157){dojo.destroy(this.srcNodeRef);}delete this.srcNodeRef;}},destroyDescendants:function(_158){dojo.forEach(this.getChildren(),function(_159){if(_159.destroyRecursive){_159.destroyRecursive(_158);}});},uninitialize:function(){return false;},_setClassAttr:function(_15a){var _15b=this[this.attributeMap["class"]||"domNode"];dojo.replaceClass(_15b,_15a,this["class"]);this._set("class",_15a);},_setStyleAttr:function(_15c){var _15d=this[this.attributeMap.style||"domNode"];if(dojo.isObject(_15c)){dojo.style(_15d,_15c);}else{if(_15d.style.cssText){_15d.style.cssText+="; "+_15c;}else{_15d.style.cssText=_15c;}}this._set("style",_15c);},_attrToDom:function(attr,_15e){var _15f=this.attributeMap[attr];dojo.forEach(dojo.isArray(_15f)?_15f:[_15f],function(_160){var _161=this[_160.node||_160||"domNode"];var type=_160.type||"attribute";switch(type){case "attribute":if(dojo.isFunction(_15e)){_15e=dojo.hitch(this,_15e);}var _162=_160.attribute?_160.attribute:(/^on[A-Z][a-zA-Z]*$/.test(attr)?attr.toLowerCase():attr);dojo.attr(_161,_162,_15e);break;case "innerText":_161.innerHTML="";_161.appendChild(dojo.doc.createTextNode(_15e));break;case "innerHTML":_161.innerHTML=_15e;break;case "class":dojo.replaceClass(_161,_15e,this[attr]);break;}},this);},get:function(name){var _163=this._getAttrNames(name);return this[_163.g]?this[_163.g]():this[name];},set:function(name,_164){if(typeof name==="object"){for(var x in name){this.set(x,name[x]);}return this;}var _165=this._getAttrNames(name);if(this[_165.s]){var _166=this[_165.s].apply(this,Array.prototype.slice.call(arguments,1));}else{if(name in this.attributeMap){this._attrToDom(name,_164);}this._set(name,_164);}return _166||this;},_attrPairNames:{},_getAttrNames:function(name){var apn=this._attrPairNames;if(apn[name]){return apn[name];}var uc=name.charAt(0).toUpperCase()+name.substr(1);return (apn[name]={n:name+"Node",s:"_set"+uc+"Attr",g:"_get"+uc+"Attr"});},_set:function(name,_167){var _168=this[name];this[name]=_167;if(this._watchCallbacks&&this._created&&_167!==_168){this._watchCallbacks(name,_168,_167);}},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){return this.containerNode?dojo.query("[widgetId]",this.containerNode).map(dijit.byNode):[];},getChildren:function(){return this.containerNode?dijit.findWidgets(this.containerNode):[];},connect:function(obj,_169,_16a){var _16b=[dojo._connect(obj,_169,this,_16a)];this._connects.push(_16b);return _16b;},disconnect:function(_16c){for(var i=0;i<this._connects.length;i++){if(this._connects[i]==_16c){dojo.forEach(_16c,dojo.disconnect);this._connects.splice(i,1);return;}}},subscribe:function(_16d,_16e){var _16f=dojo.subscribe(_16d,this,_16e);this._subscribes.push(_16f);return _16f;},unsubscribe:function(_170){for(var i=0;i<this._subscribes.length;i++){if(this._subscribes[i]==_170){dojo.unsubscribe(_170);this._subscribes.splice(i,1);return;}}},isLeftToRight:function(){return this.dir?(this.dir=="ltr"):dojo._isBodyLtr();},placeAt:function(_171,_172){if(_171.declaredClass&&_171.addChild){_171.addChild(this,_172);}else{dojo.place(this.domNode,_171,_172);}return this;}});})();}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.connect(dojo,"_connect",function(_173,_174){if(_173&&dojo.isFunction(_173._onConnect)){_173._onConnect(_174);}});dijit._connectOnUseEventHandler=function(_175){};dijit._lastKeyDownNode=null;if(dojo.isIE){(function(){var _176=function(evt){dijit._lastKeyDownNode=evt.srcElement;};dojo.doc.attachEvent("onkeydown",_176);dojo.addOnWindowUnload(function(){dojo.doc.detachEvent("onkeydown",_176);});})();}else{dojo.doc.addEventListener("keydown",function(evt){dijit._lastKeyDownNode=evt.target;},true);}(function(){dojo.declare("dijit._Widget",dijit._WidgetBase,{_deferredConnects:{onClick:"",onDblClick:"",onKeyDown:"",onKeyPress:"",onKeyUp:"",onMouseMove:"",onMouseDown:"",onMouseOut:"",onMouseOver:"",onMouseLeave:"",onMouseEnter:"",onMouseUp:""},onClick:dijit._connectOnUseEventHandler,onDblClick:dijit._connectOnUseEventHandler,onKeyDown:dijit._connectOnUseEventHandler,onKeyPress:dijit._connectOnUseEventHandler,onKeyUp:dijit._connectOnUseEventHandler,onMouseDown:dijit._connectOnUseEventHandler,onMouseMove:dijit._connectOnUseEventHandler,onMouseOut:dijit._connectOnUseEventHandler,onMouseOver:dijit._connectOnUseEventHandler,onMouseLeave:dijit._connectOnUseEventHandler,onMouseEnter:dijit._connectOnUseEventHandler,onMouseUp:dijit._connectOnUseEventHandler,create:function(_177,_178){this._deferredConnects=dojo.clone(this._deferredConnects);for(var attr in this.attributeMap){delete this._deferredConnects[attr];}for(attr in this._deferredConnects){if(this[attr]!==dijit._connectOnUseEventHandler){delete this._deferredConnects[attr];}}this.inherited(arguments);if(this.domNode){for(attr in this.params){this._onConnect(attr);}}},_onConnect:function(_179){if(_179 in this._deferredConnects){var _17a=this[this._deferredConnects[_179]||"domNode"];this.connect(_17a,_179.toLowerCase(),_179);delete this._deferredConnects[_179];}},focused:false,isFocusable:function(){return this.focus&&(dojo.style(this.domNode,"display")!="none");},onFocus:function(){},onBlur:function(){},_onFocus:function(e){this.onFocus();},_onBlur:function(){this.onBlur();},setAttribute:function(attr,_17b){dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.","","2.0");this.set(attr,_17b);},attr:function(name,_17c){if(dojo.config.isDebug){var _17d=arguments.callee._ach||(arguments.callee._ach={}),_17e=(arguments.callee.caller||"unknown caller").toString();if(!_17d[_17e]){dojo.deprecated(this.declaredClass+"::attr() is deprecated. Use get() or set() instead, called from "+_17e,"","2.0");_17d[_17e]=true;}}var args=arguments.length;if(args>=2||typeof name==="object"){return this.set.apply(this,arguments);}else{return this.get(name);}},nodesWithKeyClick:["input","button"],connect:function(obj,_17f,_180){var d=dojo,dc=d._connect,_181=this.inherited(arguments,[obj,_17f=="ondijitclick"?"onclick":_17f,_180]);if(_17f=="ondijitclick"){if(d.indexOf(this.nodesWithKeyClick,obj.nodeName.toLowerCase())==-1){var m=d.hitch(this,_180);_181.push(dc(obj,"onkeydown",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=e.target;if(!("openDropDown" in this&&obj==this._buttonNode)){e.preventDefault();}}}),dc(obj,"onkeyup",this,function(e){if((e.keyCode==d.keys.ENTER||e.keyCode==d.keys.SPACE)&&e.target==dijit._lastKeyDownNode&&!e.ctrlKey&&!e.shiftKey&&!e.altKey&&!e.metaKey){dijit._lastKeyDownNode=null;return m(e);}}));}}return _181;},_onShow:function(){this.onShow();},onShow:function(){},onHide:function(){},onClose:function(){return true;}});})();}if(!dojo._hasResource["dojo.string"]){dojo._hasResource["dojo.string"]=true;dojo.provide("dojo.string");dojo.getObject("string",true,dojo);dojo.string.rep=function(str,num){if(num<=0||!str){return "";}var buf=[];for(;;){if(num&1){buf.push(str);}if(!(num>>=1)){break;}str+=str;}return buf.join("");};dojo.string.pad=function(text,size,ch,end){if(!ch){ch="0";}var out=String(text),pad=dojo.string.rep(ch,Math.ceil((size-out.length)/ch.length));return end?out+pad:pad+out;};dojo.string.substitute=function(_182,map,_183,_184){_184=_184||dojo.global;_183=_183?dojo.hitch(_184,_183):function(v){return v;};return _182.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g,function(_185,key,_186){var _187=dojo.getObject(key,false,map);if(_186){_187=dojo.getObject(_186,false,_184).call(_184,_187,key);}return _183(_187,key).toString();});};dojo.string.trim=String.prototype.trim?dojo.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["dojo.cache"]){dojo._hasResource["dojo.cache"]=true;dojo.provide("dojo.cache");var cache={};dojo.cache=function(_188,url,_189){if(typeof _188=="string"){var _18a=dojo.moduleUrl(_188,url);}else{_18a=_188;_189=url;}var key=_18a.toString();var val=_189;if(_189!=undefined&&!dojo.isString(_189)){val=("value" in _189?_189.value:undefined);}var _18b=_189&&_189.sanitize?true:false;if(typeof val=="string"){val=cache[key]=_18b?dojo.cache._sanitize(val):val;}else{if(val===null){delete cache[key];}else{if(!(key in cache)){val=dojo._getText(key);cache[key]=_18b?dojo.cache._sanitize(val):val;}val=cache[key];}}return val;};dojo.cache._sanitize=function(val){if(val){val=val.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _18c=val.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_18c){val=_18c[1];}}else{val="";}return val;};}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateString:null,templatePath:null,widgetsInTemplate:false,_skipNodeCache:false,_earlyTemplatedStartup:false,constructor:function(){this._attachPoints=[];this._attachEvents=[];},_stringRepl:function(tmpl){var _18d=this.declaredClass,_18e=this;return dojo.string.substitute(tmpl,this,function(_18f,key){if(key.charAt(0)=="!"){_18f=dojo.getObject(key.substr(1),false,_18e);}if(typeof _18f=="undefined"){throw new Error(_18d+" template:"+key);}if(_18f==null){return "";}return key.charAt(0)=="!"?_18f:_18f.toString().replace(/"/g,""");},this);},buildRendering:function(){var _190=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString,this._skipNodeCache);var node;if(dojo.isString(_190)){node=dojo._toDom(this._stringRepl(_190));if(node.nodeType!=1){throw new Error("Invalid template: "+_190);}}else{node=_190.cloneNode(true);}this.domNode=node;this.inherited(arguments);this._attachTemplateNodes(node);if(this.widgetsInTemplate){var cw=(this._startupWidgets=dojo.parser.parse(node,{noStart:!this._earlyTemplatedStartup,template:true,inherited:{dir:this.dir,lang:this.lang},propsThis:this,scope:"dojo"}));this._supportingWidgets=dijit.findWidgets(node);this._attachTemplateNodes(cw,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_191){var dest=this.containerNode;if(_191&&dest){while(_191.hasChildNodes()){dest.appendChild(_191.firstChild);}}},_attachTemplateNodes:function(_192,_193){_193=_193||function(n,p){return n.getAttribute(p);};var _194=dojo.isArray(_192)?_192:(_192.all||_192.getElementsByTagName("*"));var x=dojo.isArray(_192)?0:-1;for(;x<_194.length;x++){var _195=(x==-1)?_192:_194[x];if(this.widgetsInTemplate&&(_193(_195,"dojoType")||_193(_195,"data-dojo-type"))){continue;}var _196=_193(_195,"dojoAttachPoint")||_193(_195,"data-dojo-attach-point");if(_196){var _197,_198=_196.split(/\s*,\s*/);while((_197=_198.shift())){if(dojo.isArray(this[_197])){this[_197].push(_195);}else{this[_197]=_195;}this._attachPoints.push(_197);}}var _199=_193(_195,"dojoAttachEvent")||_193(_195,"data-dojo-attach-event");if(_199){var _19a,_19b=_199.split(/\s*,\s*/);var trim=dojo.trim;while((_19a=_19b.shift())){if(_19a){var _19c=null;if(_19a.indexOf(":")!=-1){var _19d=_19a.split(":");_19a=trim(_19d[0]);_19c=trim(_19d[1]);}else{_19a=trim(_19a);}if(!_19c){_19c=_19a;}this._attachEvents.push(this.connect(_195,_19a,_19c));}}}var role=_193(_195,"waiRole");if(role){dijit.setWaiRole(_195,role);}var _19e=_193(_195,"waiState");if(_19e){dojo.forEach(_19e.split(/\s*,\s*/),function(_19f){if(_19f.indexOf("-")!=-1){var pair=_19f.split("-");dijit.setWaiState(_195,pair[0],pair[1]);}});}}},startup:function(){dojo.forEach(this._startupWidgets,function(w){if(w&&!w._started&&w.startup){w.startup();}});this.inherited(arguments);},destroyRendering:function(){dojo.forEach(this._attachPoints,function(_1a0){delete this[_1a0];},this);this._attachPoints=[];dojo.forEach(this._attachEvents,this.disconnect,this);this._attachEvents=[];this.inherited(arguments);}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_1a1,_1a2,_1a3){var _1a4=dijit._Templated._templateCache;var key=_1a2||_1a1;var _1a5=_1a4[key];if(_1a5){try{if(!_1a5.ownerDocument||_1a5.ownerDocument==dojo.doc){return _1a5;}}catch(e){}dojo.destroy(_1a5);}if(!_1a2){_1a2=dojo.cache(_1a1,{sanitize:true});}_1a2=dojo.string.trim(_1a2);if(_1a3||_1a2.match(/\$\{([^\}]+)\}/g)){return (_1a4[key]=_1a2);}else{var node=dojo._toDom(_1a2);if(node.nodeType!=1){throw new Error("Invalid template: "+_1a2);}return (_1a4[key]=node);}};if(dojo.isIE){dojo.addOnWindowUnload(function(){var _1a6=dijit._Templated._templateCache;for(var key in _1a6){var _1a7=_1a6[key];if(typeof _1a7=="object"){dojo.destroy(_1a7);}delete _1a6[key];}});}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._Container",null,{isContainer:true,buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}},addChild:function(_1a8,_1a9){var _1aa=this.containerNode;if(_1a9&&typeof _1a9=="number"){var _1ab=this.getChildren();if(_1ab&&_1ab.length>=_1a9){_1aa=_1ab[_1a9-1].domNode;_1a9="after";}}dojo.place(_1a8.domNode,_1aa,_1a9);if(this._started&&!_1a8._started){_1a8.startup();}},removeChild:function(_1ac){if(typeof _1ac=="number"){_1ac=this.getChildren()[_1ac];}if(_1ac){var node=_1ac.domNode;if(node&&node.parentNode){node.parentNode.removeChild(node);}}},hasChildren:function(){return this.getChildren().length>0;},destroyDescendants:function(_1ad){dojo.forEach(this.getChildren(),function(_1ae){_1ae.destroyRecursive(_1ad);});},_getSiblingOfChild:function(_1af,dir){var node=_1af.domNode,_1b0=(dir>0?"nextSibling":"previousSibling");do{node=node[_1b0];}while(node&&(node.nodeType!=1||!dijit.byNode(node)));return node&&dijit.byNode(node);},getIndexOfChild:function(_1b1){return dojo.indexOf(this.getChildren(),_1b1);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_1b2){_1b2.startup();});this.inherited(arguments);}});}if(!dojo._hasResource["dijit._Contained"]){dojo._hasResource["dijit._Contained"]=true;dojo.provide("dijit._Contained");dojo.declare("dijit._Contained",null,{getParent:function(){var _1b3=dijit.getEnclosingWidget(this.domNode.parentNode);return _1b3&&_1b3.isContainer?_1b3:null;},_getSibling:function(_1b4){var node=this.domNode;do{node=node[_1b4+"Sibling"];}while(node&&node.nodeType!=1);return node&&dijit.byNode(node);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");},getIndexInParent:function(){var p=this.getParent();if(!p||!p.getIndexOfChild){return -1;}return p.getIndexOfChild(this);}});}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],{baseClass:"dijitLayoutContainer",isLayoutContainer:true,buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitContainer");},startup:function(){if(this._started){return;}this.inherited(arguments);var _1b5=this.getParent&&this.getParent();if(!(_1b5&&_1b5.isLayoutContainer)){this.resize();this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this.resize();});}},resize:function(_1b6,_1b7){var node=this.domNode;if(_1b6){dojo.marginBox(node,_1b6);if(_1b6.t){node.style.top=_1b6.t+"px";}if(_1b6.l){node.style.left=_1b6.l+"px";}}var mb=_1b7||{};dojo.mixin(mb,_1b6||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(node),mb);}var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var be=dojo._getBorderExtents(node,cs);var bb=(this._borderBox={w:mb.w-(me.w+be.w),h:mb.h-(me.h+be.h)});var pe=dojo._getPadExtents(node,cs);this._contentBox={l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:bb.w-pe.w,h:bb.h-pe.h};this.layout();},layout:function(){},_setupChild:function(_1b8){var cls=this.baseClass+"-child "+(_1b8.baseClass?this.baseClass+"-"+_1b8.baseClass:"");dojo.addClass(_1b8.domNode,cls);},addChild:function(_1b9,_1ba){this.inherited(arguments);if(this._started){this._setupChild(_1b9);}},removeChild:function(_1bb){var cls=this.baseClass+"-child"+(_1bb.baseClass?" "+this.baseClass+"-"+_1bb.baseClass:"");dojo.removeClass(_1bb.domNode,cls);this.inherited(arguments);}});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 _1bc=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_1bd,dim){var _1be=_1bd.resize?_1bd.resize(dim):dojo.marginBox(_1bd.domNode,dim);if(_1be){dojo.mixin(_1bd,_1be);}else{dojo.mixin(_1bd,dojo.marginBox(_1bd.domNode));dojo.mixin(_1bd,dim);}};dijit.layout.layoutChildren=function(_1bf,dim,_1c0,_1c1,_1c2){dim=dojo.mixin({},dim);dojo.addClass(_1bf,"dijitLayoutContainer");_1c0=dojo.filter(_1c0,function(item){return item.region!="center"&&item.layoutAlign!="client";}).concat(dojo.filter(_1c0,function(item){return item.region=="center"||item.layoutAlign=="client";}));dojo.forEach(_1c0,function(_1c3){var elm=_1c3.domNode,pos=(_1c3.region||_1c3.layoutAlign);var _1c4=elm.style;_1c4.left=dim.l+"px";_1c4.top=dim.t+"px";_1c4.position="absolute";dojo.addClass(elm,"dijitAlign"+_1bc(pos));var _1c5={};if(_1c1&&_1c1==_1c3.id){_1c5[_1c3.region=="top"||_1c3.region=="bottom"?"h":"w"]=_1c2;}if(pos=="top"||pos=="bottom"){_1c5.w=dim.w;size(_1c3,_1c5);dim.h-=_1c3.h;if(pos=="top"){dim.t+=_1c3.h;}else{_1c4.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){_1c5.h=dim.h;size(_1c3,_1c5);dim.w-=_1c3.w;if(pos=="left"){dim.l+=_1c3.w;}else{_1c4.left=dim.l+dim.w+"px";}}else{if(pos=="client"||pos=="center"){size(_1c3,dim);}}}});};})();}if(!dojo._hasResource["dijit._CssStateMixin"]){dojo._hasResource["dijit._CssStateMixin"]=true;dojo.provide("dijit._CssStateMixin");dojo.declare("dijit._CssStateMixin",[],{cssStateNodes:{},hovering:false,active:false,_applyAttributes:function(){this.inherited(arguments);dojo.forEach(["onmouseenter","onmouseleave","onmousedown"],function(e){this.connect(this.domNode,e,"_cssMouseEvent");},this);dojo.forEach(["disabled","readOnly","checked","selected","focused","state","hovering","active"],function(attr){this.watch(attr,dojo.hitch(this,"_setStateClass"));},this);for(var ap in this.cssStateNodes){this._trackMouseState(this[ap],this.cssStateNodes[ap]);}this._setStateClass();},_cssMouseEvent:function(_1c6){if(!this.disabled){switch(_1c6.type){case "mouseenter":case "mouseover":this._set("hovering",true);this._set("active",this._mouseDown);break;case "mouseleave":case "mouseout":this._set("hovering",false);this._set("active",false);break;case "mousedown":this._set("active",true);this._mouseDown=true;var _1c7=this.connect(dojo.body(),"onmouseup",function(){this._mouseDown=false;this._set("active",false);this.disconnect(_1c7);});break;}}},_setStateClass:function(){var _1c8=this.baseClass.split(" ");function _1c9(_1ca){_1c8=_1c8.concat(dojo.map(_1c8,function(c){return c+_1ca;}),"dijit"+_1ca);};if(!this.isLeftToRight()){_1c9("Rtl");}if(this.checked){_1c9("Checked");}if(this.state){_1c9(this.state);}if(this.selected){_1c9("Selected");}if(this.disabled){_1c9("Disabled");}else{if(this.readOnly){_1c9("ReadOnly");}else{if(this.active){_1c9("Active");}else{if(this.hovering){_1c9("Hover");}}}}if(this._focused){_1c9("Focused");}var tn=this.stateNode||this.domNode,_1cb={};dojo.forEach(tn.className.split(" "),function(c){_1cb[c]=true;});if("_stateClasses" in this){dojo.forEach(this._stateClasses,function(c){delete _1cb[c];});}dojo.forEach(_1c8,function(c){_1cb[c]=true;});var _1cc=[];for(var c in _1cb){_1cc.push(c);}tn.className=_1cc.join(" ");this._stateClasses=_1c8;},_trackMouseState:function(node,_1cd){var _1ce=false,_1cf=false,_1d0=false;var self=this,cn=dojo.hitch(this,"connect",node);function _1d1(){var _1d2=("disabled" in self&&self.disabled)||("readonly" in self&&self.readonly);dojo.toggleClass(node,_1cd+"Hover",_1ce&&!_1cf&&!_1d2);dojo.toggleClass(node,_1cd+"Active",_1cf&&!_1d2);dojo.toggleClass(node,_1cd+"Focused",_1d0&&!_1d2);};cn("onmouseenter",function(){_1ce=true;_1d1();});cn("onmouseleave",function(){_1ce=false;_1cf=false;_1d1();});cn("onmousedown",function(){_1cf=true;_1d1();});cn("onmouseup",function(){_1cf=false;_1d1();});cn("onfocus",function(){_1d0=true;_1d1();});cn("onblur",function(){_1d0=false;_1d1();});this.watch("disabled",_1d1);this.watch("readOnly",_1d1);}});}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,dijit._CssStateMixin],{name:"",alt:"",value:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,scrollOnFocus:true,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{value:"focusNode",id:"focusNode",tabIndex:"focusNode",alt:"focusNode",title:"focusNode"}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name=\""+this.name.replace(/'/g,""")+"\""):"";this.inherited(arguments);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousedown","_onMouseDown");},_setDisabledAttr:function(_1d3){this._set("disabled",_1d3);dojo.attr(this.focusNode,"disabled",_1d3);if(this.valueNode){dojo.attr(this.valueNode,"disabled",_1d3);}dijit.setWaiState(this.focusNode,"disabled",_1d3);if(_1d3){this._set("hovering",false);this._set("active",false);var _1d4="tabIndex" in this.attributeMap?this.attributeMap.tabIndex:"focusNode";dojo.forEach(dojo.isArray(_1d4)?_1d4:[_1d4],function(_1d5){var node=this[_1d5];if(dojo.isWebKit||dijit.hasDefaultTabStop(node)){node.setAttribute("tabIndex","-1");}else{node.removeAttribute("tabIndex");}},this);}else{if(this.tabIndex!=""){this.focusNode.setAttribute("tabIndex",this.tabIndex);}}},setDisabled:function(_1d6){dojo.deprecated("setDisabled("+_1d6+") is deprecated. Use set('disabled',"+_1d6+") instead.","","2.0");this.set("disabled",_1d6);},_onFocus:function(e){if(this.scrollOnFocus){dojo.window.scrollIntoView(this.domNode);}this.inherited(arguments);},isFocusable:function(){return !this.disabled&&this.focusNode&&(dojo.style(this.domNode,"display")!="none");},focus:function(){if(!this.disabled){dijit.focus(this.focusNode);}},compare:function(val1,val2){if(typeof val1=="number"&&typeof val2=="number"){return (isNaN(val1)&&isNaN(val2))?0:val1-val2;}else{if(val1>val2){return 1;}else{if(val1<val2){return -1;}else{return 0;}}}},onChange:function(_1d7){},_onChangeActive:false,_handleOnChange:function(_1d8,_1d9){if(this._lastValueReported==undefined&&(_1d9===null||!this._onChangeActive)){this._resetValue=this._lastValueReported=_1d8;}this._pendingOnChange=this._pendingOnChange||(typeof _1d8!=typeof this._lastValueReported)||(this.compare(_1d8,this._lastValueReported)!=0);if((this.intermediateChanges||_1d9||_1d9===undefined)&&this._pendingOnChange){this._lastValueReported=_1d8;this._pendingOnChange=false;if(this._onChangeActive){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);}this._onChangeHandle=setTimeout(dojo.hitch(this,function(){this._onChangeHandle=null;this.onChange(_1d8);}),0);}}},create:function(){this.inherited(arguments);this._onChangeActive=true;},destroy:function(){if(this._onChangeHandle){clearTimeout(this._onChangeHandle);this.onChange(this._lastValueReported);}this.inherited(arguments);},setValue:function(_1da){dojo.deprecated("dijit.form._FormWidget:setValue("+_1da+") is deprecated. Use set('value',"+_1da+") instead.","","2.0");this.set("value",_1da);},getValue:function(){dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_onMouseDown:function(e){if(!e.ctrlKey&&dojo.mouseButtons.isLeft(e)&&this.isFocusable()){var _1db=this.connect(dojo.body(),"onmouseup",function(){if(this.isFocusable()){this.focus();}this.disconnect(_1db);});}}});dojo.declare("dijit.form._FormValueWidget",dijit.form._FormWidget,{readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"",readOnly:"focusNode"}),_setReadOnlyAttr:function(_1dc){dojo.attr(this.focusNode,"readOnly",_1dc);dijit.setWaiState(this.focusNode,"readonly",_1dc);this._set("readOnly",_1dc);},postCreate:function(){this.inherited(arguments);if(dojo.isIE<9||(dojo.isIE&&dojo.isQuirks)){this.connect(this.focusNode||this.domNode,"onkeydown",this._onKeyDown);}if(this._resetValue===undefined){this._lastValueReported=this._resetValue=this.value;}},_setValueAttr:function(_1dd,_1de){this._handleOnChange(_1dd,_1de);},_handleOnChange:function(_1df,_1e0){this._set("value",_1df);this.inherited(arguments);},undo:function(){this._setValueAttr(this._lastValueReported,false);},reset:function(){this._hasBeenBlurred=false;this._setValueAttr(this._resetValue,true);},_onKeyDown:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!(e.ctrlKey||e.altKey||e.metaKey)){var te;if(dojo.isIE){e.preventDefault();te=document.createEventObject();te.keyCode=dojo.keys.ESCAPE;te.shiftKey=e.shiftKey;e.srcElement.fireEvent("onkeypress",te);}}},_layoutHackIE7:function(){if(dojo.isIE==7){var _1e1=this.domNode;var _1e2=_1e1.parentNode;var _1e3=_1e1.firstChild||_1e1;var _1e4=_1e3.style.filter;var _1e5=this;while(_1e2&&_1e2.clientHeight==0){(function ping(){var _1e6=_1e5.connect(_1e2,"onscroll",function(e){_1e5.disconnect(_1e6);_1e3.style.filter=(new Date()).getMilliseconds();setTimeout(function(){_1e3.style.filter=_1e4;},0);});})();_1e2=_1e2.parentNode;}}}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");}if(!dojo._hasResource["dojo.fx.Toggler"]){dojo._hasResource["dojo.fx.Toggler"]=true;dojo.provide("dojo.fx.Toggler");dojo.declare("dojo.fx.Toggler",null,{node:null,showFunc:dojo.fadeIn,hideFunc:dojo.fadeOut,showDuration:200,hideDuration:200,constructor:function(args){var _1e7=this;dojo.mixin(_1e7,args);_1e7.node=args.node;_1e7._showArgs=dojo.mixin({},args);_1e7._showArgs.node=_1e7.node;_1e7._showArgs.duration=_1e7.showDuration;_1e7.showAnim=_1e7.showFunc(_1e7._showArgs);_1e7._hideArgs=dojo.mixin({},args);_1e7._hideArgs.node=_1e7.node;_1e7._hideArgs.duration=_1e7.hideDuration;_1e7.hideAnim=_1e7.hideFunc(_1e7._hideArgs);dojo.connect(_1e7.showAnim,"beforeBegin",dojo.hitch(_1e7.hideAnim,"stop",true));dojo.connect(_1e7.hideAnim,"beforeBegin",dojo.hitch(_1e7.showAnim,"stop",true));},show:function(_1e8){return this.showAnim.play(_1e8||0);},hide:function(_1e9){return this.hideAnim.play(_1e9||0);}});}if(!dojo._hasResource["dojo.fx"]){dojo._hasResource["dojo.fx"]=true;dojo.provide("dojo.fx");(function(){var d=dojo,_1ea={_fire:function(evt,args){if(this[evt]){this[evt].apply(this,args||[]);}return this;}};var _1eb=function(_1ec){this._index=-1;this._animations=_1ec||[];this._current=this._onAnimateCtx=this._onEndCtx=null;this.duration=0;d.forEach(this._animations,function(a){this.duration+=a.duration;if(a.delay){this.duration+=a.delay;}},this);};d.extend(_1eb,{_onAnimate:function(){this._fire("onAnimate",arguments);},_onEnd:function(){d.disconnect(this._onAnimateCtx);d.disconnect(this._onEndCtx);this._onAnimateCtx=this._onEndCtx=null;if(this._index+1==this._animations.length){this._fire("onEnd");}else{this._current=this._animations[++this._index];this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play(0,true);}},play:function(_1ed,_1ee){if(!this._current){this._current=this._animations[this._index=0];}if(!_1ee&&this._current.status()=="playing"){return this;}var _1ef=d.connect(this._current,"beforeBegin",this,function(){this._fire("beforeBegin");}),_1f0=d.connect(this._current,"onBegin",this,function(arg){this._fire("onBegin",arguments);}),_1f1=d.connect(this._current,"onPlay",this,function(arg){this._fire("onPlay",arguments);d.disconnect(_1ef);d.disconnect(_1f0);d.disconnect(_1f1);});if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}this._onAnimateCtx=d.connect(this._current,"onAnimate",this,"_onAnimate");if(this._onEndCtx){d.disconnect(this._onEndCtx);}this._onEndCtx=d.connect(this._current,"onEnd",this,"_onEnd");this._current.play.apply(this._current,arguments);return this;},pause:function(){if(this._current){var e=d.connect(this._current,"onPause",this,function(arg){this._fire("onPause",arguments);d.disconnect(e);});this._current.pause();}return this;},gotoPercent:function(_1f2,_1f3){this.pause();var _1f4=this.duration*_1f2;this._current=null;d.some(this._animations,function(a){if(a.duration<=_1f4){this._current=a;return true;}_1f4-=a.duration;return false;});if(this._current){this._current.gotoPercent(_1f4/this._current.duration,_1f3);}return this;},stop:function(_1f5){if(this._current){if(_1f5){for(;this._index+1<this._animations.length;++this._index){this._animations[this._index].stop(true);}this._current=this._animations[this._index];}var e=d.connect(this._current,"onStop",this,function(arg){this._fire("onStop",arguments);d.disconnect(e);});this._current.stop();}return this;},status:function(){return this._current?this._current.status():"stopped";},destroy:function(){if(this._onAnimateCtx){d.disconnect(this._onAnimateCtx);}if(this._onEndCtx){d.disconnect(this._onEndCtx);}}});d.extend(_1eb,_1ea);dojo.fx.chain=function(_1f6){return new _1eb(_1f6);};var _1f7=function(_1f8){this._animations=_1f8||[];this._connects=[];this._finished=0;this.duration=0;d.forEach(_1f8,function(a){var _1f9=a.duration;if(a.delay){_1f9+=a.delay;}if(this.duration<_1f9){this.duration=_1f9;}this._connects.push(d.connect(a,"onEnd",this,"_onEnd"));},this);this._pseudoAnimation=new d.Animation({curve:[0,1],duration:this.duration});var self=this;d.forEach(["beforeBegin","onBegin","onPlay","onAnimate","onPause","onStop","onEnd"],function(evt){self._connects.push(d.connect(self._pseudoAnimation,evt,function(){self._fire(evt,arguments);}));});};d.extend(_1f7,{_doAction:function(_1fa,args){d.forEach(this._animations,function(a){a[_1fa].apply(a,args);});return this;},_onEnd:function(){if(++this._finished>this._animations.length){this._fire("onEnd");}},_call:function(_1fb,args){var t=this._pseudoAnimation;t[_1fb].apply(t,args);},play:function(_1fc,_1fd){this._finished=0;this._doAction("play",arguments);this._call("play",arguments);return this;},pause:function(){this._doAction("pause",arguments);this._call("pause",arguments);return this;},gotoPercent:function(_1fe,_1ff){var ms=this.duration*_1fe;d.forEach(this._animations,function(a){a.gotoPercent(a.duration<ms?1:(ms/a.duration),_1ff);});this._call("gotoPercent",arguments);return this;},stop:function(_200){this._doAction("stop",arguments);this._call("stop",arguments);return this;},status:function(){return this._pseudoAnimation.status();},destroy:function(){d.forEach(this._connects,dojo.disconnect);}});d.extend(_1f7,_1ea);dojo.fx.combine=function(_201){return new _1f7(_201);};dojo.fx.wipeIn=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{start:function(){o=s.overflow;s.overflow="hidden";if(s.visibility=="hidden"||s.display=="none"){s.height="1px";s.display="";s.visibility="";return 1;}else{var _202=d.style(node,"height");return Math.max(_202,1);}},end:function(){return node.scrollHeight;}}}},args));d.connect(anim,"onEnd",function(){s.height="auto";s.overflow=o;});return anim;};dojo.fx.wipeOut=function(args){var node=args.node=d.byId(args.node),s=node.style,o;var anim=d.animateProperty(d.mixin({properties:{height:{end:1}}},args));d.connect(anim,"beforeBegin",function(){o=s.overflow;s.overflow="hidden";s.display="";});d.connect(anim,"onEnd",function(){s.overflow=o;s.height="auto";s.display="none";});return anim;};dojo.fx.slideTo=function(args){var node=args.node=d.byId(args.node),top=null,left=null;var init=(function(n){return function(){var cs=d.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=d.position(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=d.animateProperty(d.mixin({properties:{top:args.top||0,left:args.left||0}},args));d.connect(anim,"beforeBegin",anim,init);return anim;};})();}if(!dojo._hasResource["dojo.NodeList-fx"]){dojo._hasResource["dojo.NodeList-fx"]=true;dojo.provide("dojo.NodeList-fx");dojo.extend(dojo.NodeList,{_anim:function(obj,_203,args){args=args||{};var a=dojo.fx.combine(this.map(function(item){var _204={node:item};dojo.mixin(_204,args);return obj[_203](_204);}));return args.auto?a.play()&&this:a;},wipeIn:function(args){return this._anim(dojo.fx,"wipeIn",args);},wipeOut:function(args){return this._anim(dojo.fx,"wipeOut",args);},slideTo:function(args){return this._anim(dojo.fx,"slideTo",args);},fadeIn:function(args){return this._anim(dojo,"fadeIn",args);},fadeOut:function(args){return this._anim(dojo,"fadeOut",args);},animateProperty:function(args){return this._anim(dojo,"animateProperty",args);},anim:function(_205,_206,_207,_208,_209){var _20a=dojo.fx.combine(this.map(function(item){return dojo.animateProperty({node:item,properties:_205,duration:_206||350,easing:_207});}));if(_208){dojo.connect(_20a,"onEnd",_208);}return _20a.play(_209||0);}});}if(!dojo._hasResource["dojo.colors"]){dojo._hasResource["dojo.colors"]=true;dojo.provide("dojo.colors");dojo.getObject("colors",true,dojo);(function(){var _20b=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(_20c,obj){var m=_20c.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);if(m){var c=m[2].split(/\s*,\s*/),l=c.length,t=m[1],a;if((t=="rgb"&&l==3)||(t=="rgba"&&l==4)){var r=c[0];if(r.charAt(r.length-1)=="%"){a=dojo.map(c,function(x){return parseFloat(x)*2.56;});if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}return dojo.colorFromArray(c,obj);}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=[_20b(m1,m2,H+1/3)*256,_20b(m1,m2,H)*256,_20b(m1,m2,H-1/3)*256,1];if(l==4){a[3]=c[3];}return dojo.colorFromArray(a,obj);}}return null;};var _20d=function(c,low,high){c=Number(c);return isNaN(c)?high:c<low?low:c>high?high:c;};dojo.Color.prototype.sanitize=function(){var t=this;t.r=Math.round(_20d(t.r,0,255));t.g=Math.round(_20d(t.g,0,255));t.b=Math.round(_20d(t.b,0,255));t.a=_20d(t.a,0,1);return this;};})();dojo.colors.makeGrey=function(g,a){return dojo.colorFromArray([g,g,g,a]);};dojo.mixin(dojo.Color.named,{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]});}if(!dojo._hasResource["dojo.i18n"]){dojo._hasResource["dojo.i18n"]=true;dojo.provide("dojo.i18n");dojo.getObject("i18n",true,dojo);dojo.i18n.getLocalization=dojo.i18n.getLocalization||function(_20e,_20f,_210){_210=dojo.i18n.normalizeLocale(_210);var _211=_210.split("-");var _212=[_20e,"nls",_20f].join(".");var _213=dojo._loadedModules[_212];if(_213){var _214;for(var i=_211.length;i>0;i--){var loc=_211.slice(0,i).join("_");if(_213[loc]){_214=_213[loc];break;}}if(!_214){_214=_213.ROOT;}if(_214){var _215=function(){};_215.prototype=_214;return new _215();}}throw new Error("Bundle not found: "+_20f+" in "+_20e+" , locale="+_210);};dojo.i18n.normalizeLocale=function(_216){var _217=_216?_216.toLowerCase():dojo.locale;if(_217=="root"){_217="ROOT";}return _217;};dojo.i18n._requireLocalization=function(_218,_219,_21a,_21b){var _21c=dojo.i18n.normalizeLocale(_21a);var _21d=[_218,"nls",_219].join(".");var _21e="";if(_21b){var _21f=_21b.split(",");for(var i=0;i<_21f.length;i++){if(_21c["indexOf"](_21f[i])==0){if(_21f[i].length>_21e.length){_21e=_21f[i];}}}if(!_21e){_21e="ROOT";}}var _220=_21b?_21e:_21c;var _221=dojo._loadedModules[_21d];var _222=null;if(_221){if(dojo.config.localizationComplete&&_221._built){return;}var _223=_220.replace(/-/g,"_");var _224=_21d+"."+_223;_222=dojo._loadedModules[_224];}if(!_222){_221=dojo["provide"](_21d);var syms=dojo._getModuleSymbols(_218);var _225=syms.concat("nls").join("/");var _226;dojo.i18n._searchLocalePath(_220,_21b,function(loc){var _227=loc.replace(/-/g,"_");var _228=_21d+"."+_227;var _229=false;if(!dojo._loadedModules[_228]){dojo["provide"](_228);var _22a=[_225];if(loc!="ROOT"){_22a.push(loc);}_22a.push(_219);var _22b=_22a.join("/")+".js";_229=dojo._loadPath(_22b,null,function(hash){hash=hash.root||hash;var _22c=function(){};_22c.prototype=_226;_221[_227]=new _22c();for(var j in hash){_221[_227][j]=hash[j];}});}else{_229=true;}if(_229&&_221[_227]){_226=_221[_227];}else{_221[_227]=_226;}if(_21b){return true;}});}if(_21b&&_21c!=_21e){_221[_21c.replace(/-/g,"_")]=_221[_21e.replace(/-/g,"_")];}};(function(){var _22d=dojo.config.extraLocale;if(_22d){if(!_22d instanceof Array){_22d=[_22d];}var req=dojo.i18n._requireLocalization;dojo.i18n._requireLocalization=function(m,b,_22e,_22f){req(m,b,_22e,_22f);if(_22e){return;}for(var i=0;i<_22d.length;i++){req(m,b,_22d[i],_22f);}};}})();dojo.i18n._searchLocalePath=function(_230,down,_231){_230=dojo.i18n.normalizeLocale(_230);var _232=_230.split("-");var _233=[];for(var i=_232.length;i>0;i--){_233.push(_232.slice(0,i).join("-"));}_233.push(false);if(down){_233.reverse();}for(var j=_233.length-1;j>=0;j--){var loc=_233[j]||"ROOT";var stop=_231(loc);if(stop){break;}}};dojo.i18n._preloadLocalizations=function(_234,_235){function _236(_237){_237=dojo.i18n.normalizeLocale(_237);dojo.i18n._searchLocalePath(_237,true,function(loc){for(var i=0;i<_235.length;i++){if(_235[i]==loc){dojo["require"](_234+"_"+loc);return true;}}return false;});};_236();var _238=dojo.config.extraLocale||[];for(var i=0;i<_238.length;i++){_236(_238[i]);}};}if(!dojo._hasResource["dijit._PaletteMixin"]){dojo._hasResource["dijit._PaletteMixin"]=true;dojo.provide("dijit._PaletteMixin");dojo.declare("dijit._PaletteMixin",[dijit._CssStateMixin],{defaultTimeout:500,timeoutChangeRate:0.9,value:null,_selectedCell:-1,tabIndex:"0",cellClass:"dijitPaletteCell",dyeClass:"",_preparePalette:function(_239,_23a,_23b){this._cells=[];var url=this._blankGif;_23b=_23b||dojo.getObject(this.dyeClass);for(var row=0;row<_239.length;row++){var _23c=dojo.create("tr",{tabIndex:"-1"},this.gridNode);for(var col=0;col<_239[row].length;col++){var _23d=_239[row][col];if(_23d){var _23e=new _23b(_23d,row,col);var _23f=dojo.create("td",{"class":this.cellClass,tabIndex:"-1",title:_23a[_23d]});_23e.fillCell(_23f,url);this.connect(_23f,"ondijitclick","_onCellClick");this._trackMouseState(_23f,this.cellClass);dojo.place(_23f,_23c);_23f.index=this._cells.length;this._cells.push({node:_23f,dye:_23e});}}}this._xDim=_239[0].length;this._yDim=_239.length;var _240={UP_ARROW:-this._xDim,DOWN_ARROW:this._xDim,RIGHT_ARROW:this.isLeftToRight()?1:-1,LEFT_ARROW:this.isLeftToRight()?-1:1};for(var key in _240){this._connects.push(dijit.typematic.addKeyListener(this.domNode,{charOrCode:dojo.keys[key],ctrlKey:false,altKey:false,shiftKey:false},this,function(){var _241=_240[key];return function(_242){this._navigateByKey(_241,_242);};}(),this.timeoutChangeRate,this.defaultTimeout));}},postCreate:function(){this.inherited(arguments);this._setCurrent(this._cells[0].node);},focus:function(){dijit.focus(this._currentFocus);},_onCellClick:function(evt){var _243=evt.currentTarget,_244=this._getDye(_243).getValue();this._setCurrent(_243);setTimeout(dojo.hitch(this,function(){dijit.focus(_243);this._setValueAttr(_244,true);}));dojo.removeClass(_243,"dijitPaletteCellHover");dojo.stopEvent(evt);},_setCurrent:function(node){if("_currentFocus" in this){dojo.attr(this._currentFocus,"tabIndex","-1");}this._currentFocus=node;if(node){dojo.attr(node,"tabIndex",this.tabIndex);}},_setValueAttr:function(_245,_246){if(this._selectedCell>=0){dojo.removeClass(this._cells[this._selectedCell].node,"dijitPaletteCellSelected");}this._selectedCell=-1;if(_245){for(var i=0;i<this._cells.length;i++){if(_245==this._cells[i].dye.getValue()){this._selectedCell=i;dojo.addClass(this._cells[i].node,"dijitPaletteCellSelected");break;}}}this._set("value",this._selectedCell>=0?_245:null);if(_246||_246===undefined){this.onChange(_245);}},onChange:function(_247){},_navigateByKey:function(_248,_249){if(_249==-1){return;}var _24a=this._currentFocus.index+_248;if(_24a<this._cells.length&&_24a>-1){var _24b=this._cells[_24a].node;this._setCurrent(_24b);setTimeout(dojo.hitch(dijit,"focus",_24b),0);}},_getDye:function(cell){return this._cells[cell.index].dye;}});}if(!dojo._hasResource["dijit.ColorPalette"]){dojo._hasResource["dijit.ColorPalette"]=true;dojo.provide("dijit.ColorPalette");dojo.declare("dijit.ColorPalette",[dijit._Widget,dijit._Templated,dijit._PaletteMixin],{palette:"7x10",_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"]]},templateString:dojo.cache("dijit","templates/ColorPalette.html","<div class=\"dijitInline dijitColorPalette\">\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"),baseClass:"dijitColorPalette",buildRendering:function(){this.inherited(arguments);this._preparePalette(this._palettes[this.palette],dojo.i18n.getLocalization("dojo","colors",this.lang),dojo.declare(dijit._Color,{hc:dojo.hasClass(dojo.body(),"dijit_a11y"),palette:this.palette}));}});dojo.declare("dijit._Color",dojo.Color,{template:"<span class='dijitInline dijitPaletteImg'>"+"<img src='${blankGif}' alt='${alt}' class='dijitColorPaletteSwatch' style='background-color: ${color}'/>"+"</span>",hcTemplate:"<span class='dijitInline dijitPaletteImg' style='position: relative; overflow: hidden; height: 12px; width: 14px;'>"+"<img src='${image}' alt='${alt}' style='position: absolute; left: ${left}px; top: ${top}px; ${size}'/>"+"</span>",_imagePaths:{"7x10":dojo.moduleUrl("dijit.themes","a11y/colors7x10.png"),"3x4":dojo.moduleUrl("dijit.themes","a11y/colors3x4.png")},constructor:function(_24c,row,col){this._alias=_24c;this._row=row;this._col=col;this.setColor(dojo.Color.named[_24c]);},getValue:function(){return this.toHex();},fillCell:function(cell,_24d){var html=dojo.string.substitute(this.hc?this.hcTemplate:this.template,{color:this.toHex(),blankGif:_24d,alt:this._alias,image:this._imagePaths[this.palette].toString(),left:this._col*-20-5,top:this._row*-20-5,size:this.palette=="7x10"?"height: 145px; width: 206px":"height: 64px; width: 86px"});dojo.place(html,cell);}});}if(!dojo._hasResource["dojo.dnd.common"]){dojo._hasResource["dojo.dnd.common"]=true;dojo.provide("dojo.dnd.common");dojo.getObject("dnd",true,dojo);dojo.dnd.getCopyKeyState=dojo.isCopyKey;dojo.dnd._uniqueId=0;dojo.dnd.getUniqueId=function(){var id;do{id=dojo._scopeName+"Unique"+(++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.getObject("dnd",true,dojo);dojo.dnd.getViewport=dojo.window.getBox;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.window.getBox(),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.position(n,true);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-t.x,ry=e.pageY-t.y,dx=0,dy=0;if(dojo.isWebKit||dojo.isOpera){rx+=dojo.body().scrollLeft;ry+=dojo.body().scrollTop;}if(rx>0&&rx<b.w){if(rx<w){dx=-w;}else{if(rx>b.w-w){dx=w;}}}if(ry>0&&ry<b.h){if(ry<h){dy=-h;}else{if(ry>b.h-h){dy=h;}}}var _24e=n.scrollLeft,_24f=n.scrollTop;n.scrollLeft=n.scrollLeft+dx;n.scrollTop=n.scrollTop+dy;if(_24e!=n.scrollLeft||_24f!=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(node,e,host){this.node=dojo.byId(node);var pos=e.touches?e.touches[0]:e;this.marginBox={l:pos.pageX,t:pos.pageY};this.mouseButton=e.button;var h=(this.host=host),d=node.ownerDocument;this.events=[dojo.connect(d,"onmousemove",this,"onFirstMove"),dojo.connect(d,"ontouchmove",this,"onFirstMove"),dojo.connect(d,"onmousemove",this,"onMouseMove"),dojo.connect(d,"ontouchmove",this,"onMouseMove"),dojo.connect(d,"onmouseup",this,"onMouseUp"),dojo.connect(d,"ontouchend",this,"onMouseUp"),dojo.connect(d,"ondragstart",dojo.stopEvent),dojo.connect(d.body,"onselectstart",dojo.stopEvent)];if(h&&h.onMoveStart){h.onMoveStart(this);}},onMouseMove:function(e){dojo.dnd.autoScroll(e);var m=this.marginBox,pos=e.touches?e.touches[0]:e;this.host.onMove(this,{l:m.l+pos.pageX,t:m.t+pos.pageY},e);dojo.stopEvent(e);},onMouseUp:function(e){if(dojo.isWebKit&&dojo.isMac&&this.mouseButton==2?e.button==0:this.mouseButton==e.button){this.destroy();}dojo.stopEvent(e);},onFirstMove:function(e){var s=this.node.style,l,t,h=this.host;switch(s.position){case "relative":case "absolute":l=Math.round(parseFloat(s.left))||0;t=Math.round(parseFloat(s.top))||0;break;default:s.position="absolute";var m=dojo.marginBox(this.node);var b=dojo.doc.body;var bs=dojo.getComputedStyle(b);var bm=dojo._getMarginBox(b,bs);var bc=dojo._getContentBox(b,bs);l=m.l-(bc.l-bm.l);t=m.t-(bc.t-bm.t);break;}this.marginBox.l=l-this.marginBox.l;this.marginBox.t=t-this.marginBox.t;if(h&&h.onFirstMove){h.onFirstMove(this,e);}dojo.disconnect(this.events.shift());dojo.disconnect(this.events.shift());},destroy:function(){dojo.forEach(this.events,dojo.disconnect);var h=this.host;if(h&&h.onMoveStop){h.onMoveStop(this);}this.events=this.node=this.host=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(node,_250){this.node=dojo.byId(node);if(!_250){_250={};}this.handle=_250.handle?dojo.byId(_250.handle):null;if(!this.handle){this.handle=this.node;}this.delay=_250.delay>0?_250.delay:0;this.skip=_250.skip;this.mover=_250.mover?_250.mover:dojo.dnd.Mover;this.events=[dojo.connect(this.handle,"onmousedown",this,"onMouseDown"),dojo.connect(this.handle,"ontouchstart",this,"onMouseDown"),dojo.connect(this.handle,"ondragstart",this,"onSelectStart"),dojo.connect(this.handle,"onselectstart",this,"onSelectStart")];},markupFactory:function(_251,node){return new dojo.dnd.Moveable(node,_251);},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"),dojo.connect(this.handle,"ontouchmove",this,"onMouseMove"),dojo.connect(this.handle,"onmouseup",this,"onMouseUp"),dojo.connect(this.handle,"ontouchend",this,"onMouseUp"));var pos=e.touches?e.touches[0]:e;this._lastX=pos.pageX;this._lastY=pos.pageY;}else{this.onDragDetected(e);}dojo.stopEvent(e);},onMouseMove:function(e){var pos=e.touches?e.touches[0]:e;if(Math.abs(pos.pageX-this._lastX)>this.delay||Math.abs(pos.pageY-this._lastY)>this.delay){this.onMouseUp(e);this.onDragDetected(e);}dojo.stopEvent(e);},onMouseUp:function(e){for(var i=0;i<2;++i){dojo.disconnect(this.events.pop());}dojo.stopEvent(e);},onSelectStart:function(e){if(!this.skip||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onDragDetected:function(e){new this.mover(this.node,e,this);},onMoveStart:function(_252){dojo.publish("/dnd/move/start",[_252]);dojo.addClass(dojo.body(),"dojoMove");dojo.addClass(this.node,"dojoMoveItem");},onMoveStop:function(_253){dojo.publish("/dnd/move/stop",[_253]);dojo.removeClass(dojo.body(),"dojoMove");dojo.removeClass(this.node,"dojoMoveItem");},onFirstMove:function(_254,e){},onMove:function(_255,_256,e){this.onMoving(_255,_256);var s=_255.node.style;s.left=_256.l+"px";s.top=_256.t+"px";this.onMoved(_255,_256);},onMoving:function(_257,_258){},onMoved:function(_259,_25a){}});}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(_25b,node){return new dojo.dnd.move.constrainedMoveable(node,_25b);},constructor:function(node,_25c){if(!_25c){_25c={};}this.constraints=_25c.constraints;this.within=_25c.within;},onFirstMove:function(_25d){var c=this.constraintBox=this.constraints.call(this,_25d);c.r=c.l+c.w;c.b=c.t+c.h;if(this.within){var mb=dojo._getMarginSize(_25d.node);c.r-=mb.w;c.b-=mb.h;}},onMove:function(_25e,_25f){var c=this.constraintBox,s=_25e.node.style;this.onMoving(_25e,_25f);_25f.l=_25f.l<c.l?c.l:c.r<_25f.l?c.r:_25f.l;_25f.t=_25f.t<c.t?c.t:c.b<_25f.t?c.b:_25f.t;s.left=_25f.l+"px";s.top=_25f.t+"px";this.onMoved(_25e,_25f);}});dojo.declare("dojo.dnd.move.boxConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{box:{},markupFactory:function(_260,node){return new dojo.dnd.move.boxConstrainedMoveable(node,_260);},constructor:function(node,_261){var box=_261&&_261.box;this.constraints=function(){return box;};}});dojo.declare("dojo.dnd.move.parentConstrainedMoveable",dojo.dnd.move.constrainedMoveable,{area:"content",markupFactory:function(_262,node){return new dojo.dnd.move.parentConstrainedMoveable(node,_262);},constructor:function(node,_263){var area=_263&&_263.area;this.constraints=function(){var n=this.node.parentNode,s=dojo.getComputedStyle(n),mb=dojo._getMarginBox(n,s);if(area=="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(area=="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(area=="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.constrainedMover=dojo.dnd.move.constrainedMover;dojo.dnd.boxConstrainedMover=dojo.dnd.move.boxConstrainedMover;dojo.dnd.parentConstrainedMover=dojo.dnd.move.parentConstrainedMover;}if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){dojo._hasResource["dojo.dnd.TimedMoveable"]=true;dojo.provide("dojo.dnd.TimedMoveable");(function(){var _264=dojo.dnd.Moveable.prototype.onMove;dojo.declare("dojo.dnd.TimedMoveable",dojo.dnd.Moveable,{timeout:40,constructor:function(node,_265){if(!_265){_265={};}if(_265.timeout&&typeof _265.timeout=="number"&&_265.timeout>=0){this.timeout=_265.timeout;}},markupFactory:function(_266,node){return new dojo.dnd.TimedMoveable(node,_266);},onMoveStop:function(_267){if(_267._timer){clearTimeout(_267._timer);_264.call(this,_267,_267._leftTop);}dojo.dnd.Moveable.prototype.onMoveStop.apply(this,arguments);},onMove:function(_268,_269){_268._leftTop=_269;if(!_268._timer){var _26a=this;_268._timer=setTimeout(function(){_268._timer=null;_264.call(_26a,_268,_268._leftTop);},this.timeout);}}});})();}if(!dojo._hasResource["dijit.form._FormMixin"]){dojo._hasResource["dijit.form._FormMixin"]=true;dojo.provide("dijit.form._FormMixin");dojo.declare("dijit.form._FormMixin",null,{state:"",reset:function(){dojo.forEach(this.getDescendants(),function(_26b){if(_26b.reset){_26b.reset();}});},validate:function(){var _26c=false;return dojo.every(dojo.map(this.getDescendants(),function(_26d){_26d._hasBeenBlurred=true;var _26e=_26d.disabled||!_26d.validate||_26d.validate();if(!_26e&&!_26c){dojo.window.scrollIntoView(_26d.containerNode||_26d.domNode);_26d.focus();_26c=true;}return _26e;}),function(item){return item;});},setValues:function(val){dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(obj){var map={};dojo.forEach(this.getDescendants(),function(_26f){if(!_26f.name){return;}var _270=map[_26f.name]||(map[_26f.name]=[]);_270.push(_26f);});for(var name in map){if(!map.hasOwnProperty(name)){continue;}var _271=map[name],_272=dojo.getObject(name,false,obj);if(_272===undefined){continue;}if(!dojo.isArray(_272)){_272=[_272];}if(typeof _271[0].checked=="boolean"){dojo.forEach(_271,function(w,i){w.set("value",dojo.indexOf(_272,w.value)!=-1);});}else{if(_271[0].multiple){_271[0].set("value",_272);}else{dojo.forEach(_271,function(w,i){w.set("value",_272[i]);});}}}},getValues:function(){dojo.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},_getValueAttr:function(){var obj={};dojo.forEach(this.getDescendants(),function(_273){var name=_273.name;if(!name||_273.disabled){return;}var _274=_273.get("value");if(typeof _273.checked=="boolean"){if(/Radio/.test(_273.declaredClass)){if(_274!==false){dojo.setObject(name,_274,obj);}else{_274=dojo.getObject(name,false,obj);if(_274===undefined){dojo.setObject(name,null,obj);}}}else{var ary=dojo.getObject(name,false,obj);if(!ary){ary=[];dojo.setObject(name,ary,obj);}if(_274!==false){ary.push(_274);}}}else{var prev=dojo.getObject(name,false,obj);if(typeof prev!="undefined"){if(dojo.isArray(prev)){prev.push(_274);}else{dojo.setObject(name,[prev,_274],obj);}}else{dojo.setObject(name,_274,obj);}}});return obj;},isValid:function(){return this.state=="";},onValidStateChange:function(_275){},_getState:function(){var _276=dojo.map(this._descendants,function(w){return w.get("state")||"";});return dojo.indexOf(_276,"Error")>=0?"Error":dojo.indexOf(_276,"Incomplete")>=0?"Incomplete":"";},disconnectChildren:function(){dojo.forEach(this._childConnections||[],dojo.hitch(this,"disconnect"));dojo.forEach(this._childWatches||[],function(w){w.unwatch();});},connectChildren:function(_277){var _278=this;this.disconnectChildren();this._descendants=this.getDescendants();var set=_277?function(name,val){_278[name]=val;}:dojo.hitch(this,"_set");set("value",this.get("value"));set("state",this._getState());var _279=(this._childConnections=[]),_27a=(this._childWatches=[]);dojo.forEach(dojo.filter(this._descendants,function(item){return item.validate;}),function(_27b){dojo.forEach(["state","disabled"],function(attr){_27a.push(_27b.watch(attr,function(attr,_27c,_27d){_278.set("state",_278._getState());}));});});var _27e=function(){if(_278._onChangeDelayTimer){clearTimeout(_278._onChangeDelayTimer);}_278._onChangeDelayTimer=setTimeout(function(){delete _278._onChangeDelayTimer;_278._set("value",_278.get("value"));},10);};dojo.forEach(dojo.filter(this._descendants,function(item){return item.onChange;}),function(_27f){_279.push(_278.connect(_27f,"onChange",_27e));_27a.push(_27f.watch("disabled",_27e));});},startup:function(){this.inherited(arguments);this.connectChildren(true);this.watch("state",function(attr,_280,_281){this.onValidStateChange(_281=="");});},destroy:function(){this.disconnectChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dijit._DialogMixin"]){dojo._hasResource["dijit._DialogMixin"]=true;dojo.provide("dijit._DialogMixin");dojo.declare("dijit._DialogMixin",null,{attributeMap:dijit._Widget.prototype.attributeMap,execute:function(_282){},onCancel:function(){},onExecute:function(){},_onSubmit:function(){this.onExecute();this.execute(this.get("value"));},_getFocusItems:function(){var _283=dijit._getTabNavigable(this.containerNode);this._firstFocusItem=_283.lowest||_283.first||this.closeButtonNode||this.domNode;this._lastFocusItem=_283.last||_283.highest||this._firstFocusItem;}});}if(!dojo._hasResource["dijit.DialogUnderlay"]){dojo._hasResource["dijit.DialogUnderlay"]=true;dojo.provide("dijit.DialogUnderlay");dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",dialogId:"","class":"",attributeMap:{id:"domNode"},_setDialogIdAttr:function(id){dojo.attr(this.node,"id",id+"_underlay");this._set("dialogId",id);},_setClassAttr:function(_284){this.node.className="dijitDialogUnderlay "+_284;this._set("class",_284);},postCreate:function(){dojo.body().appendChild(this.domNode);},layout:function(){var is=this.node.style,os=this.domNode.style;os.display="none";var _285=dojo.window.getBox();os.top=_285.t+"px";os.left=_285.l+"px";is.width=_285.w+"px";is.height=_285.h+"px";os.display="block";},show:function(){this.domNode.style.display="block";this.layout();this.bgIframe=new dijit.BackgroundIframe(this.domNode);},hide:function(){this.bgIframe.destroy();delete this.bgIframe;this.domNode.style.display="none";}});}if(!dojo._hasResource["dijit.layout._ContentPaneResizeMixin"]){dojo._hasResource["dijit.layout._ContentPaneResizeMixin"]=true;dojo.provide("dijit.layout._ContentPaneResizeMixin");dojo.declare("dijit.layout._ContentPaneResizeMixin",null,{doLayout:true,isContainer:true,isLayoutContainer:true,_startChildren:function(){dojo.forEach(this.getChildren(),function(_286){_286.startup();_286._started=true;});},startup:function(){if(this._started){return;}var _287=dijit._Contained.prototype.getParent.call(this);this._childOfLayoutWidget=_287&&_287.isLayoutContainer;this._needLayout=!this._childOfLayoutWidget;this.inherited(arguments);this._startChildren();if(this._isShown()){this._onShow();}if(!this._childOfLayoutWidget){this.connect(dojo.isIE?this.domNode:dojo.global,"onresize",function(){this._needLayout=!this._childOfLayoutWidget;this.resize();});}},_checkIfSingleChild:function(){var _288=dojo.query("> *",this.containerNode).filter(function(node){return node.tagName!=="SCRIPT";}),_289=_288.filter(function(node){return dojo.hasAttr(node,"data-dojo-type")||dojo.hasAttr(node,"dojoType")||dojo.hasAttr(node,"widgetId");}),_28a=dojo.filter(_289.map(dijit.byNode),function(_28b){return _28b&&_28b.domNode&&_28b.resize;});if(_288.length==_289.length&&_28a.length==1){this._singleChild=_28a[0];}else{delete this._singleChild;}dojo.toggleClass(this.containerNode,this.baseClass+"SingleChild",!!this._singleChild);},resize:function(_28c,_28d){if(!this._wasShown&&this.open!==false){this._onShow();}this._resizeCalled=true;this._scheduleLayout(_28c,_28d);},_scheduleLayout:function(_28e,_28f){if(this._isShown()){this._layout(_28e,_28f);}else{this._needLayout=true;this._changeSize=_28e;this._resultSize=_28f;}},_layout:function(_290,_291){if(_290){dojo.marginBox(this.domNode,_290);}var cn=this.containerNode;if(cn===this.domNode){var mb=_291||{};dojo.mixin(mb,_290||{});if(!("h" in mb)||!("w" in mb)){mb=dojo.mixin(dojo.marginBox(cn),mb);}this._contentBox=dijit.layout.marginBox2contentBox(cn,mb);}else{this._contentBox=dojo.contentBox(cn);}this._layoutChildren();delete this._needLayout;},_layoutChildren:function(){if(this.doLayout){this._checkIfSingleChild();}if(this._singleChild&&this._singleChild.resize){var cb=this._contentBox||dojo.contentBox(this.containerNode);this._singleChild.resize({w:cb.w,h:cb.h});}else{dojo.forEach(this.getChildren(),function(_292){if(_292.resize){_292.resize();}});}},_isShown:function(){if(this._childOfLayoutWidget){if(this._resizeCalled&&"open" in this){return this.open;}return this._resizeCalled;}else{if("open" in this){return this.open;}else{var node=this.domNode,_293=this.domNode.parentNode;return (node.style.display!="none")&&(node.style.visibility!="hidden")&&!dojo.hasClass(node,"dijitHidden")&&_293&&_293.style&&(_293.style.display!="none");}}},_onShow:function(){if(this._needLayout){this._layout(this._changeSize,this._resultSize);}this.inherited(arguments);this._wasShown=true;}});}if(!dojo._hasResource["dojo.html"]){dojo._hasResource["dojo.html"]=true;dojo.provide("dojo.html");dojo.getObject("html",true,dojo);(function(){var _294=0,d=dojo;dojo.html._secureForInnerHtml=function(cont){return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig,"");};dojo.html._emptyNode=dojo.empty;dojo.html._setNodeContent=function(node,cont){d.empty(node);if(cont){if(typeof cont=="string"){cont=d._toDom(cont,node.ownerDocument);}if(!cont.nodeType&&d.isArrayLike(cont)){for(var _295=cont.length,i=0;i<cont.length;i=_295==cont.length?i+1:0){d.place(cont[i],node,"last");}}else{d.place(cont,node,"last");}}return node;};dojo.declare("dojo.html._ContentSetter",null,{node:"",content:"",id:"",cleanContent:false,extractContent:false,parseContent:false,parserScope:dojo._scopeName,startup:true,constructor:function(_296,node){dojo.mixin(this,_296||{});node=this.node=dojo.byId(this.node||node);if(!this.id){this.id=["Setter",(node)?node.id||node.tagName:"",_294++].join("_");}},set:function(cont,_297){if(undefined!==cont){this.content=cont;}if(_297){this._mixin(_297);}this.onBegin();this.setContent();this.onEnd();return this.node;},setContent:function(){var node=this.node;if(!node){throw new Error(this.declaredClass+": setContent given no node");}try{node=dojo.html._setNodeContent(node,this.content);}catch(e){var _298=this.onContentError(e);try{node.innerHTML=_298;}catch(e){console.error("Fatal "+this.declaredClass+".setContent could not change content due to "+e.message,e);}}this.node=node;},empty:function(){if(this.parseResults&&this.parseResults.length){dojo.forEach(this.parseResults,function(w){if(w.destroy){w.destroy();}});delete this.parseResults;}dojo.html._emptyNode(this.node);},onBegin:function(){var cont=this.content;if(dojo.isString(cont)){if(this.cleanContent){cont=dojo.html._secureForInnerHtml(cont);}if(this.extractContent){var _299=cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im);if(_299){cont=_299[1];}}}this.empty();this.content=cont;return this.node;},onEnd:function(){if(this.parseContent){this._parse();}return this.node;},tearDown:function(){delete this.parseResults;delete this.node;delete this.content;},onContentError:function(err){return "Error occured setting content: "+err;},_mixin:function(_29a){var _29b={},key;for(key in _29a){if(key in _29b){continue;}this[key]=_29a[key];}},_parse:function(){var _29c=this.node;try{var _29d={};dojo.forEach(["dir","lang","textDir"],function(name){if(this[name]){_29d[name]=this[name];}},this);this.parseResults=dojo.parser.parse({rootNode:_29c,noStart:!this.startup,inherited:_29d,scope:this.parserScope});}catch(e){this._onError("Content",e,"Error parsing in _ContentSetter#"+this.id);}},_onError:function(type,err,_29e){var _29f=this["on"+type+"Error"].call(this,err);if(_29e){console.error(_29e,err);}else{if(_29f){dojo.html._setNodeContent(this.node,_29f,true);}}}});dojo.html.set=function(node,cont,_2a0){if(undefined==cont){console.warn("dojo.html.set: no cont argument provided, using empty string");cont="";}if(!_2a0){return dojo.html._setNodeContent(node,cont,true);}else{var op=new dojo.html._ContentSetter(dojo.mixin(_2a0,{content:cont,node:node}));return op.set();}};})();}if(!dojo._hasResource["dijit.layout.ContentPane"]){dojo._hasResource["dijit.layout.ContentPane"]=true;dojo.provide("dijit.layout.ContentPane");dojo.declare("dijit.layout.ContentPane",[dijit._Widget,dijit.layout._ContentPaneResizeMixin],{href:"",extractContent:false,parseOnLoad:true,parserScope:dojo._scopeName,preventCache:false,preload:false,refreshOnShow:false,loadingMessage:"<span class='dijitContentPaneLoading'>${loadingState}</span>",errorMessage:"<span class='dijitContentPaneError'>${errorState}</span>",isLoaded:false,baseClass:"dijitContentPane",ioArgs:{},onLoadDeferred:null,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[]}),stopParser:true,template:false,create:function(_2a1,_2a2){if((!_2a1||!_2a1.template)&&_2a2&&!("href" in _2a1)&&!("content" in _2a1)){var df=dojo.doc.createDocumentFragment();_2a2=dojo.byId(_2a2);while(_2a2.firstChild){df.appendChild(_2a2.firstChild);}_2a1=dojo.delegate(_2a1,{content:df});}this.inherited(arguments,[_2a1,_2a2]);},postMixInProperties:function(){this.inherited(arguments);var _2a3=dojo.i18n.getLocalization("dijit","loading",this.lang);this.loadingMessage=dojo.string.substitute(this.loadingMessage,_2a3);this.errorMessage=dojo.string.substitute(this.errorMessage,_2a3);},buildRendering:function(){this.inherited(arguments);if(!this.containerNode){this.containerNode=this.domNode;}this.domNode.title="";if(!dojo.attr(this.domNode,"role")){dijit.setWaiRole(this.domNode,"group");}},_startChildren:function(){this.inherited(arguments);if(this._contentSetter){dojo.forEach(this._contentSetter.parseResults,function(obj){if(!obj._started&&!obj._destroyed&&dojo.isFunction(obj.startup)){obj.startup();obj._started=true;}},this);}},setHref:function(href){dojo.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.","","2.0");return this.set("href",href);},_setHrefAttr:function(href){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.onLoadDeferred.addCallback(dojo.hitch(this,"onLoad"));this._set("href",href);if(this.preload||(this._created&&this._isShown())){this._load();}else{this._hrefChanged=true;}return this.onLoadDeferred;},setContent:function(data){dojo.deprecated("dijit.layout.ContentPane.setContent() is deprecated. Use set('content', ...) instead.","","2.0");this.set("content",data);},_setContentAttr:function(data){this._set("href","");this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));if(this._created){this.onLoadDeferred.addCallback(dojo.hitch(this,"onLoad"));}this._setContent(data||"");this._isDownloaded=false;return this.onLoadDeferred;},_getContentAttr:function(){return this.containerNode.innerHTML;},cancel:function(){if(this._xhrDfd&&(this._xhrDfd.fired==-1)){this._xhrDfd.cancel();}delete this._xhrDfd;this.onLoadDeferred=null;},uninitialize:function(){if(this._beingDestroyed){this.cancel();}this.inherited(arguments);},destroyRecursive:function(_2a4){if(this._beingDestroyed){return;}this.inherited(arguments);},_onShow:function(){this.inherited(arguments);if(this.href){if(!this._xhrDfd&&(!this.isLoaded||this._hrefChanged||this.refreshOnShow)){return this.refresh();}}},refresh:function(){this.cancel();this.onLoadDeferred=new dojo.Deferred(dojo.hitch(this,"cancel"));this.onLoadDeferred.addCallback(dojo.hitch(this,"onLoad"));this._load();return this.onLoadDeferred;},_load:function(){this._setContent(this.onDownloadStart(),true);var self=this;var _2a5={preventCache:(this.preventCache||this.refreshOnShow),url:this.href,handleAs:"text"};if(dojo.isObject(this.ioArgs)){dojo.mixin(_2a5,this.ioArgs);}var hand=(this._xhrDfd=(this.ioMethod||dojo.xhrGet)(_2a5));hand.addCallback(function(html){try{self._isDownloaded=true;self._setContent(html,false);self.onDownloadEnd();}catch(err){self._onError("Content",err);}delete self._xhrDfd;return html;});hand.addErrback(function(err){if(!hand.canceled){self._onError("Download",err);}delete self._xhrDfd;return err;});delete this._hrefChanged;},_onLoadHandler:function(data){this._set("isLoaded",true);try{this.onLoadDeferred.callback(data);}catch(e){console.error("Error "+this.widgetId+" running custom onLoad code: "+e.message);}},_onUnloadHandler:function(){this._set("isLoaded",false);try{this.onUnload();}catch(e){console.error("Error "+this.widgetId+" running custom onUnload code: "+e.message);}},destroyDescendants:function(){if(this.isLoaded){this._onUnloadHandler();}var _2a6=this._contentSetter;dojo.forEach(this.getChildren(),function(_2a7){if(_2a7.destroyRecursive){_2a7.destroyRecursive();}});if(_2a6){dojo.forEach(_2a6.parseResults,function(_2a8){if(_2a8.destroyRecursive&&_2a8.domNode&&_2a8.domNode.parentNode==dojo.body()){_2a8.destroyRecursive();}});delete _2a6.parseResults;}dojo.html._emptyNode(this.containerNode);delete this._singleChild;},_setContent:function(cont,_2a9){this.destroyDescendants();var _2aa=this._contentSetter;if(!(_2aa&&_2aa instanceof dojo.html._ContentSetter)){_2aa=this._contentSetter=new dojo.html._ContentSetter({node:this.containerNode,_onError:dojo.hitch(this,this._onError),onContentError:dojo.hitch(this,function(e){var _2ab=this.onContentError(e);try{this.containerNode.innerHTML=_2ab;}catch(e){console.error("Fatal "+this.id+" could not change content due to "+e.message,e);}})});}var _2ac=dojo.mixin({cleanContent:this.cleanContent,extractContent:this.extractContent,parseContent:this.parseOnLoad,parserScope:this.parserScope,startup:false,dir:this.dir,lang:this.lang},this._contentSetterParams||{});_2aa.set((dojo.isObject(cont)&&cont.domNode)?cont.domNode:cont,_2ac);delete this._contentSetterParams;if(this.doLayout){this._checkIfSingleChild();}if(!_2a9){if(this._started){this._startChildren();this._scheduleLayout();}this._onLoadHandler(cont);}},_onError:function(type,err,_2ad){this.onLoadDeferred.errback(err);var _2ae=this["on"+type+"Error"].call(this,err);if(_2ad){console.error(_2ad,err);}else{if(_2ae){this._setContent(_2ae,true);}}},onLoad:function(data){},onUnload:function(){},onDownloadStart:function(){return this.loadingMessage;},onContentError:function(_2af){},onDownloadError:function(_2b0){return this.errorMessage;},onDownloadEnd:function(){}});}if(!dojo._hasResource["dijit.TooltipDialog"]){dojo._hasResource["dijit.TooltipDialog"]=true;dojo.provide("dijit.TooltipDialog");dojo.declare("dijit.TooltipDialog",[dijit.layout.ContentPane,dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin],{title:"",doLayout:false,autofocus:true,baseClass:"dijitTooltipDialog",_firstFocusItem:null,_lastFocusItem:null,templateString:dojo.cache("dijit","templates/TooltipDialog.html","<div role=\"presentation\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" role=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\"></div>\n</div>\n"),_setTitleAttr:function(_2b1){this.containerNode.title=_2b1;this._set("title",_2b1);},postCreate:function(){this.inherited(arguments);this.connect(this.containerNode,"onkeypress","_onKey");},orient:function(node,_2b2,_2b3){var newC="dijitTooltipAB"+(_2b3.charAt(1)=="L"?"Left":"Right")+" dijitTooltip"+(_2b3.charAt(0)=="T"?"Below":"Above");dojo.replaceClass(this.domNode,newC,this._currentOrientClass||"");this._currentOrientClass=newC;},focus:function(){this._getFocusItems(this.containerNode);dijit.focus(this._firstFocusItem);},onOpen:function(pos){this.orient(this.domNode,pos.aroundCorner,pos.corner);this._onShow();},onClose:function(){this.onHide();},_onKey:function(evt){var node=evt.target;var dk=dojo.keys;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.containerNode);}var _2b4=(this._firstFocusItem==this._lastFocusItem);if(evt.charOrCode==dk.ESCAPE){setTimeout(dojo.hitch(this,"onCancel"),0);dojo.stopEvent(evt);}else{if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_2b4){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_2b4){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{if(evt.charOrCode===dk.TAB){evt.stopPropagation();}}}}}});}if(!dojo._hasResource["dijit.Dialog"]){dojo._hasResource["dijit.Dialog"]=true;dojo.provide("dijit.Dialog");dojo.declare("dijit._DialogBase",[dijit._Templated,dijit.form._FormMixin,dijit._DialogMixin,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/Dialog.html","<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"),baseClass:"dijitDialog",cssStateNodes:{closeButtonNode:"dijitDialogCloseIcon"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{title:[{node:"titleNode",type:"innerHTML"},{node:"titleBar",type:"attribute"}],"aria-describedby":""}),open:false,duration:dijit.defaultDuration,refocus:true,autofocus:true,_firstFocusItem:null,_lastFocusItem:null,doLayout:false,draggable:true,"aria-describedby":"",postMixInProperties:function(){var _2b5=dojo.i18n.getLocalization("dijit","common");dojo.mixin(this,_2b5);this.inherited(arguments);},postCreate:function(){dojo.style(this.domNode,{display:"none",position:"absolute"});dojo.body().appendChild(this.domNode);this.inherited(arguments);this.connect(this,"onExecute","hide");this.connect(this,"onCancel","hide");this._modalconnects=[];},onLoad:function(){this._position();if(this.autofocus&&dijit._DialogLevelManager.isTop(this)){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this.inherited(arguments);},_endDrag:function(e){if(e&&e.node&&e.node===this.domNode){this._relativePosition=dojo.position(e.node);}},_setup:function(){var node=this.domNode;if(this.titleBar&&this.draggable){this._moveable=(dojo.isIE==6)?new dojo.dnd.TimedMoveable(node,{handle:this.titleBar}):new dojo.dnd.Moveable(node,{handle:this.titleBar,timeout:0});this._dndListener=dojo.subscribe("/dnd/move/stop",this,"_endDrag");}else{dojo.addClass(node,"dijitDialogFixed");}this.underlayAttrs={dialogId:this.id,"class":dojo.map(this["class"].split(/\s/),function(s){return s+"_underlay";}).join(" ")};},_size:function(){this._checkIfSingleChild();if(this._singleChild){if(this._singleChildOriginalStyle){this._singleChild.domNode.style.cssText=this._singleChildOriginalStyle;}delete this._singleChildOriginalStyle;}else{dojo.style(this.containerNode,{width:"auto",height:"auto"});}var mb=dojo._getMarginSize(this.domNode);var _2b6=dojo.window.getBox();if(mb.w>=_2b6.w||mb.h>=_2b6.h){var w=Math.min(mb.w,Math.floor(_2b6.w*0.75)),h=Math.min(mb.h,Math.floor(_2b6.h*0.75));if(this._singleChild&&this._singleChild.resize){this._singleChildOriginalStyle=this._singleChild.domNode.style.cssText;this._singleChild.resize({w:w,h:h});}else{dojo.style(this.containerNode,{width:w+"px",height:h+"px",overflow:"auto",position:"relative"});}}else{if(this._singleChild&&this._singleChild.resize){this._singleChild.resize();}}},_position:function(){if(!dojo.hasClass(dojo.body(),"dojoMove")){var node=this.domNode,_2b7=dojo.window.getBox(),p=this._relativePosition,bb=p?null:dojo._getBorderBox(node),l=Math.floor(_2b7.l+(p?p.x:(_2b7.w-bb.w)/2)),t=Math.floor(_2b7.t+(p?p.y:(_2b7.h-bb.h)/2));dojo.style(node,{left:l+"px",top:t+"px"});}},_onKey:function(evt){if(evt.charOrCode){var dk=dojo.keys;var node=evt.target;if(evt.charOrCode===dk.TAB){this._getFocusItems(this.domNode);}var _2b8=(this._firstFocusItem==this._lastFocusItem);if(node==this._firstFocusItem&&evt.shiftKey&&evt.charOrCode===dk.TAB){if(!_2b8){dijit.focus(this._lastFocusItem);}dojo.stopEvent(evt);}else{if(node==this._lastFocusItem&&evt.charOrCode===dk.TAB&&!evt.shiftKey){if(!_2b8){dijit.focus(this._firstFocusItem);}dojo.stopEvent(evt);}else{while(node){if(node==this.domNode||dojo.hasClass(node,"dijitPopup")){if(evt.charOrCode==dk.ESCAPE){this.onCancel();}else{return;}}node=node.parentNode;}if(evt.charOrCode!==dk.TAB){dojo.stopEvent(evt);}else{if(!dojo.isOpera){try{this._firstFocusItem.focus();}catch(e){}}}}}}},show:function(){if(this.open){return;}if(!this._started){this.startup();}if(!this._alreadyInitialized){this._setup();this._alreadyInitialized=true;}if(this._fadeOutDeferred){this._fadeOutDeferred.cancel();}this._modalconnects.push(dojo.connect(window,"onscroll",this,"layout"));this._modalconnects.push(dojo.connect(window,"onresize",this,function(){var _2b9=dojo.window.getBox();if(!this._oldViewport||_2b9.h!=this._oldViewport.h||_2b9.w!=this._oldViewport.w){this.layout();this._oldViewport=_2b9;}}));this._modalconnects.push(dojo.connect(this.domNode,"onkeypress",this,"_onKey"));dojo.style(this.domNode,{opacity:0,display:""});this._set("open",true);this._onShow();this._size();this._position();var _2ba;this._fadeInDeferred=new dojo.Deferred(dojo.hitch(this,function(){_2ba.stop();delete this._fadeInDeferred;}));_2ba=dojo.fadeIn({node:this.domNode,duration:this.duration,beforeBegin:dojo.hitch(this,function(){dijit._DialogLevelManager.show(this,this.underlayAttrs);}),onEnd:dojo.hitch(this,function(){if(this.autofocus&&dijit._DialogLevelManager.isTop(this)){this._getFocusItems(this.domNode);dijit.focus(this._firstFocusItem);}this._fadeInDeferred.callback(true);delete this._fadeInDeferred;})}).play();return this._fadeInDeferred;},hide:function(){if(!this._alreadyInitialized){return;}if(this._fadeInDeferred){this._fadeInDeferred.cancel();}var _2bb;this._fadeOutDeferred=new dojo.Deferred(dojo.hitch(this,function(){_2bb.stop();delete this._fadeOutDeferred;}));_2bb=dojo.fadeOut({node:this.domNode,duration:this.duration,onEnd:dojo.hitch(this,function(){this.domNode.style.display="none";dijit._DialogLevelManager.hide(this);this.onHide();this._fadeOutDeferred.callback(true);delete this._fadeOutDeferred;})}).play();if(this._scrollConnected){this._scrollConnected=false;}dojo.forEach(this._modalconnects,dojo.disconnect);this._modalconnects=[];if(this._relativePosition){delete this._relativePosition;}this._set("open",false);return this._fadeOutDeferred;},layout:function(){if(this.domNode.style.display!="none"){if(dijit._underlay){dijit._underlay.layout();}this._position();}},destroy:function(){if(this._fadeInDeferred){this._fadeInDeferred.cancel();}if(this._fadeOutDeferred){this._fadeOutDeferred.cancel();}if(this._moveable){this._moveable.destroy();}if(this._dndListener){dojo.unsubscribe(this._dndListener);}dojo.forEach(this._modalconnects,dojo.disconnect);dijit._DialogLevelManager.hide(this);this.inherited(arguments);}});dojo.declare("dijit.Dialog",[dijit.layout.ContentPane,dijit._DialogBase],{});dijit._DialogLevelManager={show:function(_2bc,_2bd){var ds=dijit._dialogStack;ds[ds.length-1].focus=dijit.getFocus(_2bc);var _2be=dijit._underlay;if(!_2be||_2be._destroyed){_2be=dijit._underlay=new dijit.DialogUnderlay(_2bd);}else{_2be.set(_2bc.underlayAttrs);}var _2bf=ds[ds.length-1].dialog?ds[ds.length-1].zIndex+2:950;if(ds.length==1){_2be.show();}dojo.style(dijit._underlay.domNode,"zIndex",_2bf-1);dojo.style(_2bc.domNode,"zIndex",_2bf);ds.push({dialog:_2bc,underlayAttrs:_2bd,zIndex:_2bf});},hide:function(_2c0){var ds=dijit._dialogStack;if(ds[ds.length-1].dialog==_2c0){ds.pop();var pd=ds[ds.length-1];if(ds.length==1){if(!dijit._underlay._destroyed){dijit._underlay.hide();}}else{dojo.style(dijit._underlay.domNode,"zIndex",pd.zIndex-1);dijit._underlay.set(pd.underlayAttrs);}if(_2c0.refocus){var _2c1=pd.focus;if(!_2c1||(pd.dialog&&!dojo.isDescendant(_2c1.node,pd.dialog.domNode))){pd.dialog._getFocusItems(pd.dialog.domNode);_2c1=pd.dialog._firstFocusItem;}try{dijit.focus(_2c1);}catch(e){}}}else{var idx=dojo.indexOf(dojo.map(ds,function(elem){return elem.dialog;}),_2c0);if(idx!=-1){ds.splice(idx,1);}}},isTop:function(_2c2){var ds=dijit._dialogStack;return ds[ds.length-1].dialog==_2c2;}};dijit._dialogStack=[{dialog:null,focus:null,underlayAttrs:null}];}if(!dojo._hasResource["dijit._HasDropDown"]){dojo._hasResource["dijit._HasDropDown"]=true;dojo.provide("dijit._HasDropDown");dojo.declare("dijit._HasDropDown",null,{_buttonNode:null,_arrowWrapperNode:null,_popupStateNode:null,_aroundNode:null,dropDown:null,autoWidth:true,forceWidth:false,maxHeight:0,dropDownPosition:["below","above"],_stopClickEvents:true,_onDropDownMouseDown:function(e){if(this.disabled||this.readOnly){return;}dojo.stopEvent(e);this._docHandler=this.connect(dojo.doc,"onmouseup","_onDropDownMouseUp");this.toggleDropDown();},_onDropDownMouseUp:function(e){if(e&&this._docHandler){this.disconnect(this._docHandler);}var _2c3=this.dropDown,_2c4=false;if(e&&this._opened){var c=dojo.position(this._buttonNode,true);if(!(e.pageX>=c.x&&e.pageX<=c.x+c.w)||!(e.pageY>=c.y&&e.pageY<=c.y+c.h)){var t=e.target;while(t&&!_2c4){if(dojo.hasClass(t,"dijitPopup")){_2c4=true;}else{t=t.parentNode;}}if(_2c4){t=e.target;if(_2c3.onItemClick){var _2c5;while(t&&!(_2c5=dijit.byNode(t))){t=t.parentNode;}if(_2c5&&_2c5.onClick&&_2c5.getParent){_2c5.getParent().onItemClick(_2c5,e);}}return;}}}if(this._opened&&_2c3.focus&&_2c3.autoFocus!==false){window.setTimeout(dojo.hitch(_2c3,"focus"),1);}},_onDropDownClick:function(e){if(this._stopClickEvents){dojo.stopEvent(e);}},buildRendering:function(){this.inherited(arguments);this._buttonNode=this._buttonNode||this.focusNode||this.domNode;this._popupStateNode=this._popupStateNode||this.focusNode||this._buttonNode;var _2c6={"after":this.isLeftToRight()?"Right":"Left","before":this.isLeftToRight()?"Left":"Right","above":"Up","below":"Down","left":"Left","right":"Right"}[this.dropDownPosition[0]]||this.dropDownPosition[0]||"Down";dojo.addClass(this._arrowWrapperNode||this._buttonNode,"dijit"+_2c6+"ArrowButton");},postCreate:function(){this.inherited(arguments);this.connect(this._buttonNode,"onmousedown","_onDropDownMouseDown");this.connect(this._buttonNode,"onclick","_onDropDownClick");this.connect(this.focusNode,"onkeypress","_onKey");this.connect(this.focusNode,"onkeyup","_onKeyUp");},destroy:function(){if(this.dropDown){if(!this.dropDown._destroyed){this.dropDown.destroyRecursive();}delete this.dropDown;}this.inherited(arguments);},_onKey:function(e){if(this.disabled||this.readOnly){return;}var d=this.dropDown,_2c7=e.target;if(d&&this._opened&&d.handleKey){if(d.handleKey(e)===false){dojo.stopEvent(e);return;}}if(d&&this._opened&&e.charOrCode==dojo.keys.ESCAPE){this.closeDropDown();dojo.stopEvent(e);}else{if(!this._opened&&(e.charOrCode==dojo.keys.DOWN_ARROW||((e.charOrCode==dojo.keys.ENTER||e.charOrCode==" ")&&((_2c7.tagName||"").toLowerCase()!=="input"||(_2c7.type&&_2c7.type.toLowerCase()!=="text"))))){this._toggleOnKeyUp=true;dojo.stopEvent(e);}}},_onKeyUp:function(){if(this._toggleOnKeyUp){delete this._toggleOnKeyUp;this.toggleDropDown();var d=this.dropDown;if(d&&d.focus){setTimeout(dojo.hitch(d,"focus"),1);}}},_onBlur:function(){var _2c8=dijit._curFocus&&this.dropDown&&dojo.isDescendant(dijit._curFocus,this.dropDown.domNode);this.closeDropDown(_2c8);this.inherited(arguments);},isLoaded:function(){return true;},loadDropDown:function(_2c9){_2c9();},toggleDropDown:function(){if(this.disabled||this.readOnly){return;}if(!this._opened){if(!this.isLoaded()){this.loadDropDown(dojo.hitch(this,"openDropDown"));return;}else{this.openDropDown();}}else{this.closeDropDown();}},openDropDown:function(){var _2ca=this.dropDown,_2cb=_2ca.domNode,_2cc=this._aroundNode||this.domNode,self=this;if(!this._preparedNode){this._preparedNode=true;if(_2cb.style.width){this._explicitDDWidth=true;}if(_2cb.style.height){this._explicitDDHeight=true;}}if(this.maxHeight||this.forceWidth||this.autoWidth){var _2cd={display:"",visibility:"hidden"};if(!this._explicitDDWidth){_2cd.width="";}if(!this._explicitDDHeight){_2cd.height="";}dojo.style(_2cb,_2cd);var _2ce=this.maxHeight;if(_2ce==-1){var _2cf=dojo.window.getBox(),_2d0=dojo.position(_2cc,false);_2ce=Math.floor(Math.max(_2d0.y,_2cf.h-(_2d0.y+_2d0.h)));}if(_2ca.startup&&!_2ca._started){_2ca.startup();}dijit.popup.moveOffScreen(_2ca);var mb=dojo._getMarginSize(_2cb);var _2d1=(_2ce&&mb.h>_2ce);dojo.style(_2cb,{overflowX:"hidden",overflowY:_2d1?"auto":"hidden"});if(_2d1){mb.h=_2ce;if("w" in mb){mb.w+=16;}}else{delete mb.h;}if(this.forceWidth){mb.w=_2cc.offsetWidth;}else{if(this.autoWidth){mb.w=Math.max(mb.w,_2cc.offsetWidth);}else{delete mb.w;}}if(dojo.isFunction(_2ca.resize)){_2ca.resize(mb);}else{dojo.marginBox(_2cb,mb);}}var _2d2=dijit.popup.open({parent:this,popup:_2ca,around:_2cc,orient:dijit.getPopupAroundAlignment((this.dropDownPosition&&this.dropDownPosition.length)?this.dropDownPosition:["below"],this.isLeftToRight()),onExecute:function(){self.closeDropDown(true);},onCancel:function(){self.closeDropDown(true);},onClose:function(){dojo.attr(self._popupStateNode,"popupActive",false);dojo.removeClass(self._popupStateNode,"dijitHasDropDownOpen");self._opened=false;}});dojo.attr(this._popupStateNode,"popupActive","true");dojo.addClass(self._popupStateNode,"dijitHasDropDownOpen");this._opened=true;return _2d2;},closeDropDown:function(_2d3){if(this._opened){if(_2d3){this.focus();}dijit.popup.close(this.dropDown);this._opened=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:dojo.cache("dijit.form","templates/Button.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">●</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{value:"valueNode"}),_onClick:function(e){if(this.disabled){return false;}this._clicked();return this.onClick(e);},_onButtonClick:function(e){if(this._onClick(e)===false){e.preventDefault();}else{if(this.type=="submit"&&!(this.valueNode||this.focusNode).form){for(var node=this.domNode;node.parentNode;node=node.parentNode){var _2d4=dijit.byNode(node);if(_2d4&&typeof _2d4._onSubmit=="function"){_2d4._onSubmit(e);break;}}}else{if(this.valueNode){this.valueNode.click();e.preventDefault();}}}},buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.focusNode,false);},_fillContent:function(_2d5){if(_2d5&&(!this.params||!("label" in this.params))){this.set("label",_2d5.innerHTML);}},_setShowLabelAttr:function(val){if(this.containerNode){dojo.toggleClass(this.containerNode,"dijitDisplayNone",!val);}this._set("showLabel",val);},onClick:function(e){return true;},_clicked:function(e){},setLabel:function(_2d6){dojo.deprecated("dijit.form.Button.setLabel() is deprecated. Use set('label', ...) instead.","","2.0");this.set("label",_2d6);},_setLabelAttr:function(_2d7){this._set("label",_2d7);this.containerNode.innerHTML=_2d7;if(this.showLabel==false&&!this.params.title){this.titleNode.title=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},_setIconClassAttr:function(val){var _2d8=this.iconClass||"dijitNoIcon",_2d9=val||"dijitNoIcon";dojo.replaceClass(this.iconNode,_2d9,_2d8);this._set("iconClass",val);}});dojo.declare("dijit.form.DropDownButton",[dijit.form.Button,dijit._Container,dijit._HasDropDown],{baseClass:"dijitDropDownButton",templateString:dojo.cache("dijit.form","templates/DropDownButton.html","<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\trole=\"button\" aria-haspopup=\"true\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">▼</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"),_fillContent:function(){if(this.srcNodeRef){var _2da=dojo.query("*",this.srcNodeRef);dijit.form.DropDownButton.superclass._fillContent.call(this,_2da[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}if(!this.dropDown&&this.dropDownContainer){var _2db=dojo.query("[widgetId]",this.dropDownContainer)[0];this.dropDown=dijit.byNode(_2db);delete this.dropDownContainer;}if(this.dropDown){dijit.popup.hide(this.dropDown);}this.inherited(arguments);},isLoaded:function(){var _2dc=this.dropDown;return (!!_2dc&&(!_2dc.href||_2dc.isLoaded));},loadDropDown:function(){var _2dd=this.dropDown;if(!_2dd){return;}if(!this.isLoaded()){var _2de=dojo.connect(_2dd,"onLoad",this,function(){dojo.disconnect(_2de);this.openDropDown();});_2dd.refresh();}else{this.openDropDown();}},isFocusable:function(){return this.inherited(arguments)&&!this._mouseDown;}});dojo.declare("dijit.form.ComboButton",dijit.form.DropDownButton,{templateString:dojo.cache("dijit.form","templates/ComboButton.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' role=\"presentation\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" role=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\trole=\"button\" aria-haspopup=\"true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">▼</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{id:"",tabIndex:["focusNode","titleNode"],title:"titleNode"}),optionsTitle:"",baseClass:"dijitComboButton",cssStateNodes:{"buttonNode":"dijitButtonNode","titleNode":"dijitButtonContents","_popupStateNode":"dijitDownArrowButton"},_focusedNode:null,_onButtonKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"RIGHT_ARROW":"LEFT_ARROW"]){dijit.focus(this._popupStateNode);dojo.stopEvent(evt);}},_onArrowKeyPress:function(evt){if(evt.charOrCode==dojo.keys[this.isLeftToRight()?"LEFT_ARROW":"RIGHT_ARROW"]){dijit.focus(this.titleNode);dojo.stopEvent(evt);}},focus:function(_2df){if(!this.disabled){dijit.focus(_2df=="start"?this.titleNode:this._popupStateNode);}}});dojo.declare("dijit.form.ToggleButton",dijit.form.Button,{baseClass:"dijitToggleButton",checked:false,attributeMap:dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap),{checked:"focusNode"}),_clicked:function(evt){this.set("checked",!this.checked);},_setCheckedAttr:function(_2e0,_2e1){this._set("checked",_2e0);dojo.attr(this.focusNode||this.domNode,"checked",_2e0);dijit.setWaiState(this.focusNode||this.domNode,"pressed",_2e0);this._handleOnChange(_2e0,_2e1);},setChecked:function(_2e2){dojo.deprecated("setChecked("+_2e2+") is deprecated. Use set('checked',"+_2e2+") instead.","","2.0");this.set("checked",_2e2);},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);}});}if(!dojo._hasResource["dijit.form.ToggleButton"]){dojo._hasResource["dijit.form.ToggleButton"]=true;dojo.provide("dijit.form.ToggleButton");}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:dojo.cache("dijit.form","templates/CheckBox.html","<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"),baseClass:"dijitCheckBox",type:"checkbox",value:"on",readOnly:false,attributeMap:dojo.delegate(dijit.form._FormWidget.prototype.attributeMap,{readOnly:"focusNode"}),_setReadOnlyAttr:function(_2e3){this._set("readOnly",_2e3);dojo.attr(this.focusNode,"readOnly",_2e3);dijit.setWaiState(this.focusNode,"readonly",_2e3);},_setValueAttr:function(_2e4,_2e5){if(typeof _2e4=="string"){this._set("value",_2e4);dojo.attr(this.focusNode,"value",_2e4);_2e4=true;}if(this._created){this.set("checked",_2e4,_2e5);}},_getValueAttr:function(){return (this.checked?this.value:false);},_setLabelAttr:undefined,postMixInProperties:function(){if(this.value==""){this.value="on";}this.checkedAttrSetting=this.checked?"checked":"";this.inherited(arguments);},_fillContent:function(_2e6){},reset:function(){this._hasBeenBlurred=false;this.set("checked",this.params.checked||false);this._set("value",this.params.value||"on");dojo.attr(this.focusNode,"value",this.value);},_onFocus:function(){if(this.id){dojo.query("label[for='"+this.id+"']").addClass("dijitFocusedLabel");}this.inherited(arguments);},_onBlur:function(){if(this.id){dojo.query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel");}this.inherited(arguments);},_onClick:function(e){if(this.readOnly){dojo.stopEvent(e);return false;}return this.inherited(arguments);}});dojo.declare("dijit.form.RadioButton",dijit.form.CheckBox,{type:"radio",baseClass:"dijitRadio",_setCheckedAttr:function(_2e7){this.inherited(arguments);if(!this._created){return;}if(_2e7){var _2e8=this;dojo.query("INPUT[type=radio]",this.focusNode.form||dojo.doc).forEach(function(_2e9){if(_2e9.name==_2e8.name&&_2e9!=_2e8.focusNode&&_2e9.form==_2e8.focusNode.form){var _2ea=dijit.getEnclosingWidget(_2e9);if(_2ea&&_2ea.checked){_2ea.set("checked",false);}}});}},_clicked:function(e){if(!this.checked){this.set("checked",true);}}});}if(!dojo._hasResource["dijit.form.DropDownButton"]){dojo._hasResource["dijit.form.DropDownButton"]=true;dojo.provide("dijit.form.DropDownButton");}if(!dojo._hasResource["dojo.regexp"]){dojo._hasResource["dojo.regexp"]=true;dojo.provide("dojo.regexp");dojo.getObject("regexp",true,dojo);dojo.regexp.escapeString=function(str,_2eb){return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,function(ch){if(_2eb&&_2eb.indexOf(ch)!=-1){return ch;}return "\\"+ch;});};dojo.regexp.buildGroupRE=function(arr,re,_2ec){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("|"),_2ec);};dojo.regexp.group=function(_2ed,_2ee){return "("+(_2ee?"?:":"")+_2ed+")";};}if(!dojo._hasResource["dojo.data.util.sorter"]){dojo._hasResource["dojo.data.util.sorter"]=true;dojo.provide("dojo.data.util.sorter");dojo.getObject("data.util.sorter",true,dojo);dojo.data.util.sorter.basicComparator=function(a,b){var r=-1;if(a===null){a=undefined;}if(b===null){b=undefined;}if(a==b){r=0;}else{if(a>b||a==null){r=1;}}return r;};dojo.data.util.sorter.createSortFunction=function(_2ef,_2f0){var _2f1=[];function _2f2(attr,dir,comp,s){return function(_2f3,_2f4){var a=s.getValue(_2f3,attr);var b=s.getValue(_2f4,attr);return dir*comp(a,b);};};var _2f5;var map=_2f0.comparatorMap;var bc=dojo.data.util.sorter.basicComparator;for(var i=0;i<_2ef.length;i++){_2f5=_2ef[i];var attr=_2f5.attribute;if(attr){var dir=(_2f5.descending)?-1:1;var comp=bc;if(map){if(typeof attr!=="string"&&("toString" in attr)){attr=attr.toString();}comp=map[attr]||bc;}_2f1.push(_2f2(attr,dir,comp,_2f0));}}return function(rowA,rowB){var i=0;while(i<_2f1.length){var ret=_2f1[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.getObject("data.util.simpleFetch",true,dojo);dojo.data.util.simpleFetch.fetch=function(_2f6){_2f6=_2f6||{};if(!_2f6.store){_2f6.store=this;}var self=this;var _2f7=function(_2f8,_2f9){if(_2f9.onError){var _2fa=_2f9.scope||dojo.global;_2f9.onError.call(_2fa,_2f8,_2f9);}};var _2fb=function(_2fc,_2fd){var _2fe=_2fd.abort||null;var _2ff=false;var _300=_2fd.start?_2fd.start:0;var _301=(_2fd.count&&(_2fd.count!==Infinity))?(_300+_2fd.count):_2fc.length;_2fd.abort=function(){_2ff=true;if(_2fe){_2fe.call(_2fd);}};var _302=_2fd.scope||dojo.global;if(!_2fd.store){_2fd.store=self;}if(_2fd.onBegin){_2fd.onBegin.call(_302,_2fc.length,_2fd);}if(_2fd.sort){_2fc.sort(dojo.data.util.sorter.createSortFunction(_2fd.sort,self));}if(_2fd.onItem){for(var i=_300;(i<_2fc.length)&&(i<_301);++i){var item=_2fc[i];if(!_2ff){_2fd.onItem.call(_302,item,_2fd);}}}if(_2fd.onComplete&&!_2ff){var _303=null;if(!_2fd.onItem){_303=_2fc.slice(_300,_301);}_2fd.onComplete.call(_302,_303,_2fd);}};this._fetchItems(_2f6,_2fb,_2f7);return _2f6;};}if(!dojo._hasResource["dojo.data.util.filter"]){dojo._hasResource["dojo.data.util.filter"]=true;dojo.provide("dojo.data.util.filter");dojo.getObject("data.util.filter",true,dojo);dojo.data.util.filter.patternToRegExp=function(_304,_305){var rxp="^";var c=null;for(var i=0;i<_304.length;i++){c=_304.charAt(i);switch(c){case "\\":rxp+=c;i++;rxp+=_304.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(_305){return new RegExp(rxp,"mi");}else{return new RegExp(rxp,"m");}};}if(!dojo._hasResource["dijit.form.TextBox"]){dojo._hasResource["dijit.form.TextBox"]=true;dojo.provide("dijit.form.TextBox");dojo.declare("dijit.form.TextBox",dijit.form._FormValueWidget,{trim:false,uppercase:false,lowercase:false,propercase:false,maxLength:"",selectOnClick:false,placeHolder:"",templateString:dojo.cache("dijit.form","templates/TextBox.html","<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),_singleNodeTemplate:"<input class=\"dijit dijitReset dijitLeft dijitInputField\" dojoAttachPoint=\"textbox,focusNode\" autocomplete=\"off\" type=\"${type}\" ${!nameAttrSetting} />",_buttonInputDisabled:dojo.isIE?"disabled":"",baseClass:"dijitTextBox",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{maxLength:"focusNode"}),postMixInProperties:function(){var type=this.type.toLowerCase();if(this.templateString&&this.templateString.toLowerCase()=="input"||((type=="hidden"||type=="file")&&this.templateString==dijit.form.TextBox.prototype.templateString)){this.templateString=this._singleNodeTemplate;}this.inherited(arguments);},_setPlaceHolderAttr:function(v){this._set("placeHolder",v);if(!this._phspan){this._attachPoints.push("_phspan");this._phspan=dojo.create("span",{className:"dijitPlaceHolder dijitInputField"},this.textbox,"after");}this._phspan.innerHTML="";this._phspan.appendChild(document.createTextNode(v));this._updatePlaceHolder();},_updatePlaceHolder:function(){if(this._phspan){this._phspan.style.display=(this.placeHolder&&!this._focused&&!this.textbox.value)?"":"none";}},_getValueAttr:function(){return this.parse(this.get("displayedValue"),this.constraints);},_setValueAttr:function(_306,_307,_308){var _309;if(_306!==undefined){_309=this.filter(_306);if(typeof _308!="string"){if(_309!==null&&((typeof _309!="number")||!isNaN(_309))){_308=this.filter(this.format(_309,this.constraints));}else{_308="";}}}if(_308!=null&&_308!=undefined&&((typeof _308)!="number"||!isNaN(_308))&&this.textbox.value!=_308){this.textbox.value=_308;this._set("displayedValue",this.get("displayedValue"));}this._updatePlaceHolder();this.inherited(arguments,[_309,_307]);},displayedValue:"",getDisplayedValue:function(){dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.","","2.0");return this.get("displayedValue");},_getDisplayedValueAttr:function(){return this.filter(this.textbox.value);},setDisplayedValue:function(_30a){dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.","","2.0");this.set("displayedValue",_30a);},_setDisplayedValueAttr:function(_30b){if(_30b===null||_30b===undefined){_30b="";}else{if(typeof _30b!="string"){_30b=String(_30b);}}this.textbox.value=_30b;this._setValueAttr(this.get("value"),undefined);this._set("displayedValue",this.get("displayedValue"));},format:function(_30c,_30d){return ((_30c==null||_30c==undefined)?"":(_30c.toString?_30c.toString():_30c));},parse:function(_30e,_30f){return _30e;},_refreshState:function(){},_onInput:function(e){if(e&&e.type&&/key/i.test(e.type)&&e.keyCode){switch(e.keyCode){case dojo.keys.SHIFT:case dojo.keys.ALT:case dojo.keys.CTRL:case dojo.keys.TAB:return;}}if(this.intermediateChanges){var _310=this;setTimeout(function(){_310._handleOnChange(_310.get("value"),false);},0);}this._refreshState();this._set("displayedValue",this.get("displayedValue"));},postCreate:function(){if(dojo.isIE){setTimeout(dojo.hitch(this,function(){var s=dojo.getComputedStyle(this.domNode);if(s){var ff=s.fontFamily;if(ff){var _311=this.domNode.getElementsByTagName("INPUT");if(_311){for(var i=0;i<_311.length;i++){_311[i].style.fontFamily=ff;}}}}}),0);}this.textbox.setAttribute("value",this.textbox.value);this.inherited(arguments);if(dojo.isMoz||dojo.isOpera){this.connect(this.textbox,"oninput","_onInput");}else{this.connect(this.textbox,"onkeydown","_onInput");this.connect(this.textbox,"onkeyup","_onInput");this.connect(this.textbox,"onpaste","_onInput");this.connect(this.textbox,"oncut","_onInput");}},_blankValue:"",filter:function(val){if(val===null){return this._blankValue;}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;},_setBlurValue:function(){this._setValueAttr(this.get("value"),true);},_onBlur:function(e){if(this.disabled){return;}this._setBlurValue();this.inherited(arguments);if(this._selectOnClickHandle){this.disconnect(this._selectOnClickHandle);}if(this.selectOnClick&&dojo.isMoz){this.textbox.selectionStart=this.textbox.selectionEnd=undefined;}this._updatePlaceHolder();},_onFocus:function(by){if(this.disabled||this.readOnly){return;}if(this.selectOnClick&&by=="mouse"){this._selectOnClickHandle=this.connect(this.domNode,"onmouseup",function(){this.disconnect(this._selectOnClickHandle);var _312;if(dojo.isIE){var _313=dojo.doc.selection.createRange();var _314=_313.parentElement();_312=_314==this.textbox&&_313.text.length==0;}else{_312=this.textbox.selectionStart==this.textbox.selectionEnd;}if(_312){dijit.selectInputText(this.textbox);}});}this._updatePlaceHolder();this.inherited(arguments);this._refreshState();},reset:function(){this.textbox.value="";this.inherited(arguments);}});dijit.selectInputText=function(_315,_316,stop){var _317=dojo.global;var _318=dojo.doc;_315=dojo.byId(_315);if(isNaN(_316)){_316=0;}if(isNaN(stop)){stop=_315.value?_315.value.length:0;}dijit.focus(_315);if(_318["selection"]&&dojo.body()["createTextRange"]){if(_315.createTextRange){var r=_315.createTextRange();r.collapse(true);r.moveStart("character",-99999);r.moveStart("character",_316);r.moveEnd("character",stop-_316);r.select();}}else{if(_317["getSelection"]){if(_315.setSelectionRange){_315.setSelectionRange(_316,stop);}}}};}if(!dojo._hasResource["dijit.Tooltip"]){dojo._hasResource["dijit.Tooltip"]=true;dojo.provide("dijit.Tooltip");dojo.declare("dijit._MasterTooltip",[dijit._Widget,dijit._Templated],{duration:dijit.defaultDuration,templateString:dojo.cache("dijit","templates/Tooltip.html","<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" dojoAttachPoint=\"connectorNode\"></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(_319,_31a,_31b,rtl){if(this.aroundNode&&this.aroundNode===_31a){return;}this.domNode.width="auto";if(this.fadeOut.status()=="playing"){this._onDeck=arguments;return;}this.containerNode.innerHTML=_319;var pos=dijit.placeOnScreenAroundElement(this.domNode,_31a,dijit.getPopupAroundAlignment((_31b&&_31b.length)?_31b:dijit.Tooltip.defaultPosition,!rtl),dojo.hitch(this,"orient"));dojo.style(this.domNode,"opacity",0);this.fadeIn.play();this.isShowingNow=true;this.aroundNode=_31a;},orient:function(node,_31c,_31d,_31e,_31f){this.connectorNode.style.top="";var _320=_31e.w-this.connectorNode.offsetWidth;node.className="dijitTooltip "+{"BL-TL":"dijitTooltipBelow dijitTooltipABLeft","TL-BL":"dijitTooltipAbove dijitTooltipABLeft","BR-TR":"dijitTooltipBelow dijitTooltipABRight","TR-BR":"dijitTooltipAbove dijitTooltipABRight","BR-BL":"dijitTooltipRight","BL-BR":"dijitTooltipLeft"}[_31c+"-"+_31d];this.domNode.style.width="auto";var size=dojo.contentBox(this.domNode);var _321=Math.min((Math.max(_320,1)),size.w);var _322=_321<size.w;this.domNode.style.width=_321+"px";if(_322){this.containerNode.style.overflow="auto";var _323=this.containerNode.scrollWidth;this.containerNode.style.overflow="visible";if(_323>_321){_323=_323+dojo.style(this.domNode,"paddingLeft")+dojo.style(this.domNode,"paddingRight");this.domNode.style.width=_323+"px";}}if(_31d.charAt(0)=="B"&&_31c.charAt(0)=="B"){var mb=dojo.marginBox(node);var _324=this.connectorNode.offsetHeight;if(mb.h>_31e.h){var _325=_31e.h-(_31f.h/2)-(_324/2);this.connectorNode.style.top=_325+"px";this.connectorNode.style.bottom="";}else{this.connectorNode.style.bottom=Math.min(Math.max(_31f.h/2-_324/2,0),mb.h-_324)+"px";this.connectorNode.style.top="";}}else{this.connectorNode.style.top="";this.connectorNode.style.bottom="";}return Math.max(0,size.w-_320);},_onShow:function(){if(dojo.isIE){this.domNode.style.filter="";}},hide:function(_326){if(this._onDeck&&this._onDeck[1]==_326){this._onDeck=null;}else{if(this.aroundNode===_326){this.fadeIn.stop();this.isShowingNow=false;this.aroundNode=null;this.fadeOut.play();}else{}}},_onHide:function(){this.domNode.style.cssText="";this.containerNode.innerHTML="";if(this._onDeck){this.show.apply(this,this._onDeck);this._onDeck=null;}}});dijit.showTooltip=function(_327,_328,_329,rtl){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.show(_327,_328,_329,rtl);};dijit.hideTooltip=function(_32a){if(!dijit._masterTT){dijit._masterTT=new dijit._MasterTooltip();}return dijit._masterTT.hide(_32a);};dojo.declare("dijit.Tooltip",dijit._Widget,{label:"",showDelay:400,connectId:[],position:[],_setConnectIdAttr:function(_32b){dojo.forEach(this._connections||[],function(_32c){dojo.forEach(_32c,dojo.hitch(this,"disconnect"));},this);var ary=dojo.isArrayLike(_32b)?_32b:(_32b?[_32b]:[]);this._connections=dojo.map(ary,function(id){var node=dojo.byId(id);return node?[this.connect(node,"onmouseenter","_onTargetMouseEnter"),this.connect(node,"onmouseleave","_onTargetMouseLeave"),this.connect(node,"onfocus","_onTargetFocus"),this.connect(node,"onblur","_onTargetBlur")]:[];},this);this._set("connectId",_32b);this._connectIds=ary;},addTarget:function(node){var id=node.id||node;if(dojo.indexOf(this._connectIds,id)==-1){this.set("connectId",this._connectIds.concat(id));}},removeTarget:function(node){var id=node.id||node,idx=dojo.indexOf(this._connectIds,id);if(idx>=0){this._connectIds.splice(idx,1);this.set("connectId",this._connectIds);}},buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitTooltipData");},startup:function(){this.inherited(arguments);var ids=this.connectId;dojo.forEach(dojo.isArrayLike(ids)?ids:[ids],this.addTarget,this);},_onTargetMouseEnter:function(e){this._onHover(e);},_onTargetMouseLeave:function(e){this._onUnHover(e);},_onTargetFocus:function(e){this._focus=true;this._onHover(e);},_onTargetBlur:function(e){this._focus=false;this._onUnHover(e);},_onHover:function(e){if(!this._showTimer){var _32d=e.target;this._showTimer=setTimeout(dojo.hitch(this,function(){this.open(_32d);}),this.showDelay);}},_onUnHover:function(e){if(this._focus){return;}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}this.close();},open:function(_32e){if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}dijit.showTooltip(this.label||this.domNode.innerHTML,_32e,this.position,!this.isLeftToRight());this._connectNode=_32e;this.onShow(_32e,this.position);},close:function(){if(this._connectNode){dijit.hideTooltip(this._connectNode);delete this._connectNode;this.onHide();}if(this._showTimer){clearTimeout(this._showTimer);delete this._showTimer;}},onShow:function(_32f,_330){},onHide:function(){},uninitialize:function(){this.close();this.inherited(arguments);}});dijit.Tooltip.defaultPosition=["after","before"];}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:dojo.cache("dijit.form","templates/ValidationTextBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" role=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitValidationTextBox",required:false,promptMessage:"",invalidMessage:"$_unset_$",missingMessage:"$_unset_$",message:"",constraints:{},regExp:".*",regExpGen:function(_331){return this.regExp;},state:"",tooltipPosition:[],_setValueAttr:function(){this.inherited(arguments);this.validate(this._focused);},validator:function(_332,_333){return (new RegExp("^(?:"+this.regExpGen(_333)+")"+(this.required?"":"?")+"$")).test(_332)&&(!this.required||!this._isEmpty(_332))&&(this._isEmpty(_332)||this.parse(_332,_333)!==undefined);},_isValidSubset:function(){return this.textbox.value.search(this._partialre)==0;},isValid:function(_334){return this.validator(this.textbox.value,this.constraints);},_isEmpty:function(_335){return (this.trim?/^\s*$/:/^$/).test(_335);},getErrorMessage:function(_336){return (this.required&&this._isEmpty(this.textbox.value))?this.missingMessage:this.invalidMessage;},getPromptMessage:function(_337){return this.promptMessage;},_maskValidSubsetError:true,validate:function(_338){var _339="";var _33a=this.disabled||this.isValid(_338);if(_33a){this._maskValidSubsetError=true;}var _33b=this._isEmpty(this.textbox.value);var _33c=!_33a&&_338&&this._isValidSubset();this._set("state",_33a?"":(((((!this._hasBeenBlurred||_338)&&_33b)||_33c)&&this._maskValidSubsetError)?"Incomplete":"Error"));dijit.setWaiState(this.focusNode,"invalid",_33a?"false":"true");if(this.state=="Error"){this._maskValidSubsetError=_338&&_33c;_339=this.getErrorMessage(_338);}else{if(this.state=="Incomplete"){_339=this.getPromptMessage(_338);this._maskValidSubsetError=!this._hasBeenBlurred||_338;}else{if(_33b){_339=this.getPromptMessage(_338);}}}this.set("message",_339);return _33a;},displayMessage:function(_33d){dijit.hideTooltip(this.domNode);if(_33d&&this._focused){dijit.showTooltip(_33d,this.domNode,this.tooltipPosition,!this.isLeftToRight());}},_refreshState:function(){this.validate(this._focused);this.inherited(arguments);},constructor:function(){this.constraints={};},_setConstraintsAttr:function(_33e){if(!_33e.locale&&this.lang){_33e.locale=this.lang;}this._set("constraints",_33e);this._computePartialRE();},_computePartialRE:function(){var p=this.regExpGen(this.constraints);this.regExp=p;var _33f="";if(p!=".*"){this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g,function(re){switch(re.charAt(0)){case "{":case "+":case "?":case "*":case "^":case "$":case "|":case "(":_33f+=re;break;case ")":_33f+="|$)";break;default:_33f+="(?:"+re+"|$)";break;}});}try{"".search(_33f);}catch(e){_33f=this.regExp;console.warn("RegExp error in "+this.declaredClass+": "+this.regExp);}this._partialre="^(?:"+_33f+")$";},postMixInProperties:function(){this.inherited(arguments);this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);if(this.invalidMessage=="$_unset_$"){this.invalidMessage=this.messages.invalidMessage;}if(!this.invalidMessage){this.invalidMessage=this.promptMessage;}if(this.missingMessage=="$_unset_$"){this.missingMessage=this.messages.missingMessage;}if(!this.missingMessage){this.missingMessage=this.invalidMessage;}this._setConstraintsAttr(this.constraints);},_setDisabledAttr:function(_340){this.inherited(arguments);this._refreshState();},_setRequiredAttr:function(_341){this._set("required",_341);dijit.setWaiState(this.focusNode,"required",_341);this._refreshState();},_setMessageAttr:function(_342){this._set("message",_342);this.displayMessage(_342);},reset:function(){this._maskValidSubsetError=true;this.inherited(arguments);},_onBlur:function(){this.displayMessage("");this.inherited(arguments);}});dojo.declare("dijit.form.MappedTextBox",dijit.form.ValidationTextBox,{postMixInProperties:function(){this.inherited(arguments);this.nameAttrSetting="";},serialize:function(val,_343){return val.toString?val.toString():"";},toString:function(){var val=this.filter(this.get("value"));return val!=null?(typeof val=="string"?val:this.serialize(val,this.constraints)):"";},validate:function(){this.valueNode.value=this.toString();return this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.valueNode=dojo.place("<input type='hidden'"+(this.name?" name='"+this.name.replace(/'/g,""")+"'":"")+"/>",this.textbox,"after");},reset:function(){this.valueNode.value="";this.inherited(arguments);}});dojo.declare("dijit.form.RangeBoundTextBox",dijit.form.MappedTextBox,{rangeMessage:"",rangeCheck:function(_344,_345){return ("min" in _345?(this.compare(_344,_345.min)>=0):true)&&("max" in _345?(this.compare(_344,_345.max)<=0):true);},isInRange:function(_346){return this.rangeCheck(this.get("value"),this.constraints);},_isDefinitelyOutOfRange:function(){var val=this.get("value");var _347=false;var _348=false;if("min" in this.constraints){var min=this.constraints.min;min=this.compare(val,((typeof min=="number")&&min>=0&&val!=0)?0:min);_347=(typeof min=="number")&&min<0;}if("max" in this.constraints){var max=this.constraints.max;max=this.compare(val,((typeof max!="number")||max>0)?max:0);_348=(typeof max=="number")&&max>0;}return _347||_348;},_isValidSubset:function(){return this.inherited(arguments)&&!this._isDefinitelyOutOfRange();},isValid:function(_349){return this.inherited(arguments)&&((this._isEmpty(this.textbox.value)&&!this.required)||this.isInRange(_349));},getErrorMessage:function(_34a){var v=this.get("value");if(v!==null&&v!==""&&v!==undefined&&(typeof v!="number"||!isNaN(v))&&!this.isInRange(_34a)){return this.rangeMessage;}return this.inherited(arguments);},postMixInProperties:function(){this.inherited(arguments);if(!this.rangeMessage){this.messages=dojo.i18n.getLocalization("dijit.form","validate",this.lang);this.rangeMessage=this.messages.rangeMessage;}},_setConstraintsAttr:function(_34b){this.inherited(arguments);if(this.focusNode){if(this.constraints.min!==undefined){dijit.setWaiState(this.focusNode,"valuemin",this.constraints.min);}else{dijit.removeWaiState(this.focusNode,"valuemin");}if(this.constraints.max!==undefined){dijit.setWaiState(this.focusNode,"valuemax",this.constraints.max);}else{dijit.removeWaiState(this.focusNode,"valuemax");}}},_setValueAttr:function(_34c,_34d){dijit.setWaiState(this.focusNode,"valuenow",_34c);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.ComboBox"]){dojo._hasResource["dijit.form.ComboBox"]=true;dojo.provide("dijit.form.ComboBox");dojo.declare("dijit.form.ComboBoxMixin",dijit._HasDropDown,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/DropDownBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"_buttonNode, _popupStateNode\" role=\"presentation\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"▼ \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",dropDownClass:"dijit.form._ComboBoxMenu",cssStateNodes:{"_buttonNode":"dijitDownArrowButton"},maxHeight:-1,_stopClickEvents:false,_getCaretPos:function(_34e){var pos=0;if(typeof (_34e.selectionStart)=="number"){pos=_34e.selectionStart;}else{if(dojo.isIE){var tr=dojo.doc.selection.createRange().duplicate();var ntr=_34e.createTextRange();tr.move("character",0);ntr.move("character",0);try{ntr.setEndPoint("EndToEnd",tr);pos=String(ntr.text).replace(/\r/g,"").length;}catch(e){}}}return pos;},_setCaretPos:function(_34f,_350){_350=parseInt(_350);dijit.selectInputText(_34f,_350,_350);},_setDisabledAttr:function(_351){this.inherited(arguments);dijit.setWaiState(this.domNode,"disabled",_351);},_abortQuery:function(){if(this.searchTimer){clearTimeout(this.searchTimer);this.searchTimer=null;}if(this._fetchHandle){if(this._fetchHandle.abort){this._fetchHandle.abort();}this._fetchHandle=null;}},_onInput:function(evt){if(!this.searchTimer&&(evt.type=="paste"||evt.type=="input")&&this._lastInput!=this.textbox.value){this.searchTimer=setTimeout(dojo.hitch(this,function(){this._onKey({charOrCode:229});}),100);}this.inherited(arguments);},_onKey:function(evt){var key=evt.charOrCode;if(evt.altKey||((evt.ctrlKey||evt.metaKey)&&(key!="x"&&key!="v"))||key==dojo.keys.SHIFT){return;}var _352=false;var pw=this.dropDown;var dk=dojo.keys;var _353=null;this._prev_key_backspace=false;this._abortQuery();this.inherited(arguments);if(this._opened){_353=pw.getHighlightedOption();}switch(key){case dk.PAGE_DOWN:case dk.DOWN_ARROW:case dk.PAGE_UP:case dk.UP_ARROW:if(this._opened){this._announceOption(_353);}dojo.stopEvent(evt);break;case dk.ENTER:if(_353){if(_353==pw.nextButton){this._nextSearch(1);dojo.stopEvent(evt);break;}else{if(_353==pw.previousButton){this._nextSearch(-1);dojo.stopEvent(evt);break;}}}else{this._setBlurValue();this._setCaretPos(this.focusNode,this.focusNode.value.length);}if(this._opened||this._fetchHandle){evt.preventDefault();}case dk.TAB:var _354=this.get("displayedValue");if(pw&&(_354==pw._messages["previousMessage"]||_354==pw._messages["nextMessage"])){break;}if(_353){this._selectOption();}if(this._opened){this._lastQuery=null;this.closeDropDown();}break;case " ":if(_353){dojo.stopEvent(evt);this._selectOption();this.closeDropDown();}else{_352=true;}break;case dk.DELETE:case dk.BACKSPACE:this._prev_key_backspace=true;_352=true;break;default:_352=typeof key=="string"||key==229;}if(_352){this.item=undefined;this.searchTimer=setTimeout(dojo.hitch(this,"_startSearchFromInput"),1);}},_autoCompleteText:function(text){var fn=this.focusNode;dijit.selectInputText(fn,fn.value.length);var _355=this.ignoreCase?"toLowerCase":"substr";if(text[_355](0).indexOf(this.focusNode.value[_355](0))==0){var cpos=this._getCaretPos(fn);if((cpos+1)>fn.value.length){fn.value=text;dijit.selectInputText(fn,cpos);}}else{fn.value=text;dijit.selectInputText(fn);}},_openResultList:function(_356,_357){this._fetchHandle=null;if(this.disabled||this.readOnly||(_357.query[this.searchAttr]!=this._lastQuery)){return;}var _358=this.dropDown._highlighted_option&&dojo.hasClass(this.dropDown._highlighted_option,"dijitMenuItemSelected");this.dropDown.clearResultList();if(!_356.length&&!this._maxOptions){this.closeDropDown();return;}_357._maxOptions=this._maxOptions;var _359=this.dropDown.createOptions(_356,_357,dojo.hitch(this,"_getMenuLabelFromItem"));this._showResultList();if(_357.direction){if(1==_357.direction){this.dropDown.highlightFirstOption();}else{if(-1==_357.direction){this.dropDown.highlightLastOption();}}if(_358){this._announceOption(this.dropDown.getHighlightedOption());}}else{if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_357.query[this.searchAttr])){this._announceOption(_359[1]);}}},_showResultList:function(){this.closeDropDown(true);this.displayMessage("");this.openDropDown();dijit.setWaiState(this.domNode,"expanded","true");},loadDropDown:function(_35a){this._startSearchAll();},isLoaded:function(){return false;},closeDropDown:function(){this._abortQuery();if(this._opened){this.inherited(arguments);dijit.setWaiState(this.domNode,"expanded","false");dijit.removeWaiState(this.focusNode,"activedescendant");}},_setBlurValue:function(){var _35b=this.get("displayedValue");var pw=this.dropDown;if(pw&&(_35b==pw._messages["previousMessage"]||_35b==pw._messages["nextMessage"])){this._setValueAttr(this._lastValueReported,true);}else{if(typeof this.item=="undefined"){this.item=null;this.set("displayedValue",_35b);}else{if(this.value!=this._lastValueReported){dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);}this._refreshState();}}},_onBlur:function(){this.closeDropDown();this.inherited(arguments);},_setItemAttr:function(item,_35c,_35d){if(!_35d){_35d=this.store.getValue(item,this.searchAttr);}var _35e=this._getValueField()!=this.searchAttr?this.store.getIdentity(item):_35d;this._set("item",item);dijit.form.ComboBox.superclass._setValueAttr.call(this,_35e,_35c,_35d);},_announceOption:function(node){if(!node){return;}var _35f;if(node==this.dropDown.nextButton||node==this.dropDown.previousButton){_35f=node.innerHTML;this.item=undefined;this.value="";}else{_35f=this.store.getValue(node.item,this.searchAttr).toString();this.set("item",node.item,false,_35f);}this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(node,"id"));this._autoCompleteText(_35f);},_selectOption:function(evt){if(evt){this._announceOption(evt.target);}this.closeDropDown();this._setCaretPos(this.focusNode,this.focusNode.value.length);dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);},_startSearchAll:function(){this._startSearch("");},_startSearchFromInput:function(){this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));},_getQueryString:function(text){return dojo.string.substitute(this.queryExpr,[text]);},_startSearch:function(key){if(!this.dropDown){var _360=this.id+"_popup",_361=dojo.getObject(this.dropDownClass,false);this.dropDown=new _361({onChange:dojo.hitch(this,this._selectOption),id:_360,dir:this.dir});dijit.removeWaiState(this.focusNode,"activedescendant");dijit.setWaiState(this.textbox,"owns",_360);}var _362=dojo.clone(this.query);this._lastInput=key;this._lastQuery=_362[this.searchAttr]=this._getQueryString(key);this.searchTimer=setTimeout(dojo.hitch(this,function(_363,_364){this.searchTimer=null;var _365={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_363,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_366){_364._fetchHandle=null;console.error("dijit.form.ComboBox: "+_366);_364.closeDropDown();},start:0,count:this.pageSize};dojo.mixin(_365,_364.fetchProperties);this._fetchHandle=_364.store.fetch(_365);var _367=function(_368,_369){_368.start+=_368.count*_369;_368.direction=_369;this._fetchHandle=this.store.fetch(_368);this.focus();};this._nextSearch=this.dropDown.onPage=dojo.hitch(this,_367,this._fetchHandle);},_362,this),this.searchDelay);},_setMaxOptions:function(size,_36a){this._maxOptions=size;},_getValueField:function(){return this.searchAttr;},constructor:function(){this.query={};this.fetchProperties={};},postMixInProperties:function(){if(!this.store){var _36b=this.srcNodeRef;this.store=new dijit.form._ComboBoxDataStore(_36b);if(!("value" in this.params)){var item=(this.item=this.store.fetchSelectedItem());if(item){var _36c=this._getValueField();this.value=this.store.getValue(item,_36c);}}}this.inherited(arguments);},postCreate:function(){var _36d=dojo.query("label[for=\""+this.id+"\"]");if(_36d.length){_36d[0].id=(this.id+"_label");dijit.setWaiState(this.domNode,"labelledby",_36d[0].id);}this.inherited(arguments);},_setHasDownArrowAttr:function(val){this.hasDownArrow=val;this._buttonNode.style.display=val?"":"none";},_getMenuLabelFromItem:function(item){var _36e=this.labelFunc(item,this.store),_36f=this.labelType;if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){_36e=this.doHighlight(_36e,this._escapeHtml(this._lastInput));_36f="html";}return {html:_36f=="html",label:_36e};},doHighlight:function(_370,find){var _371=(this.ignoreCase?"i":"")+(this.highlightMatch=="all"?"g":""),i=this.queryExpr.indexOf("${0}");find=dojo.regexp.escapeString(find);return this._escapeHtml(_370).replace(new RegExp((i==0?"^":"")+"("+find+")"+(i==(this.queryExpr.length-4)?"$":""),_371),"<span class=\"dijitComboBoxHighlightMatch\">$1</span>");},_escapeHtml:function(str){str=String(str).replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,""");return str;},reset:function(){this.item=null;this.inherited(arguments);},labelFunc:function(item,_372){return _372.getValue(item,this.labelAttr||this.searchAttr).toString();}});dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' role='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' role='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){this.inherited(arguments);this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);},buildRendering:function(){this.inherited(arguments);this.previousButton.innerHTML=this._messages["previousMessage"];this.nextButton.innerHTML=this._messages["nextMessage"];},_setValueAttr:function(_373){this.value=_373;this.onChange(_373);},onChange:function(_374){},onPage:function(_375){},onClose:function(){this._blurOptionNode();},_createOption:function(item,_376){var _377=dojo.create("li",{"class":"dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl"),role:"option"});var _378=_376(item);if(_378.html){_377.innerHTML=_378.label;}else{_377.appendChild(dojo.doc.createTextNode(_378.label));}if(_377.innerHTML==""){_377.innerHTML=" ";}_377.item=item;return _377;},createOptions:function(_379,_37a,_37b){this.previousButton.style.display=(_37a.start==0)?"none":"";dojo.attr(this.previousButton,"id",this.id+"_prev");dojo.forEach(_379,function(item,i){var _37c=this._createOption(item,_37b);dojo.attr(_37c,"id",this.id+i);this.domNode.insertBefore(_37c,this.nextButton);},this);var _37d=false;if(_37a._maxOptions&&_37a._maxOptions!=-1){if((_37a.start+_37a.count)<_37a._maxOptions){_37d=true;}else{if((_37a.start+_37a.count)>_37a._maxOptions&&_37a.count==_379.length){_37d=true;}}}else{if(_37a.count==_379.length){_37d=true;}}this.nextButton.style.display=_37d?"":"none";dojo.attr(this.nextButton,"id",this.id+"_next");return this.domNode.childNodes;},clearResultList:function(){while(this.domNode.childNodes.length>2){this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);}this._blurOptionNode();},_onMouseDown:function(evt){dojo.stopEvent(evt);},_onMouseUp:function(evt){if(evt.target===this.domNode||!this._highlighted_option){return;}else{if(evt.target==this.previousButton){this._blurOptionNode();this.onPage(-1);}else{if(evt.target==this.nextButton){this._blurOptionNode();this.onPage(1);}else{var tgt=evt.target;while(!tgt.item){tgt=tgt.parentNode;}this._setValueAttr({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,"dijitMenuItemSelected");}},_blurOptionNode:function(){if(this._highlighted_option){dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");this._highlighted_option=null;}},_highlightNextOption:function(){if(!this.getHighlightedOption()){var fc=this.domNode.firstChild;this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);}else{var ns=this._highlighted_option.nextSibling;if(ns&&ns.style.display!="none"){this._focusOptionNode(ns);}else{this.highlightFirstOption();}}dojo.window.scrollIntoView(this._highlighted_option);},highlightFirstOption:function(){var _37e=this.domNode.firstChild;var _37f=_37e.nextSibling;this._focusOptionNode(_37f.style.display=="none"?_37e:_37f);dojo.window.scrollIntoView(this._highlighted_option);},highlightLastOption:function(){this._focusOptionNode(this.domNode.lastChild.previousSibling);dojo.window.scrollIntoView(this._highlighted_option);},_highlightPrevOption:function(){if(!this.getHighlightedOption()){var lc=this.domNode.lastChild;this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);}else{var ps=this._highlighted_option.previousSibling;if(ps&&ps.style.display!="none"){this._focusOptionNode(ps);}else{this.highlightLastOption();}}dojo.window.scrollIntoView(this._highlighted_option);},_page:function(up){var _380=0;var _381=this.domNode.scrollTop;var _382=dojo.style(this.domNode,"height");if(!this.getHighlightedOption()){this._highlightNextOption();}while(_380<_382){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 _383=this.domNode.scrollTop;_380+=(_383-_381)*(up?-1:1);_381=_383;}},pageUp:function(){this._page(true);},pageDown:function(){this._page(false);},getHighlightedOption:function(){var ho=this._highlighted_option;return (ho&&ho.parentNode)?ho:null;},handleKey:function(evt){switch(evt.charOrCode){case dojo.keys.DOWN_ARROW:this._highlightNextOption();return false;case dojo.keys.PAGE_DOWN:this.pageDown();return false;case dojo.keys.UP_ARROW:this._highlightPrevOption();return false;case dojo.keys.PAGE_UP:this.pageUp();return false;default:return true;}}});dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_384,_385,_386){this._set("item",null);if(!_384){_384="";}dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_384,_385,_386);}});dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(root){this.root=root;if(root.tagName!="SELECT"&&root.firstChild){root=dojo.query("select",root);if(root.length>0){root=root[0];}else{this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";root=this.root.firstChild;}this.root=root;}dojo.query("> option",root).forEach(function(node){node.innerHTML=dojo.trim(node.innerHTML);});},getValue:function(item,_387,_388){return (_387=="value")?item.value:(item.innerText||item.textContent||"");},isItemLoaded:function(_389){return true;},getFeatures:function(){return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};},_fetchItems:function(args,_38a,_38b){if(!args.query){args.query={};}if(!args.query.name){args.query.name="";}if(!args.queryOptions){args.queryOptions={};}var _38c=dojo.data.util.filter.patternToRegExp(args.query.name,args.queryOptions.ignoreCase),_38d=dojo.query("> option",this.root).filter(function(_38e){return (_38e.innerText||_38e.textContent||"").match(_38c);});if(args.sort){_38d.sort(dojo.data.util.sorter.createSortFunction(args.sort,this));}_38a(_38d,args);},close:function(_38f){return;},getLabel:function(item){return item.innerHTML;},getIdentity:function(item){return dojo.attr(item,"value");},fetchItemByIdentity:function(args){var item=dojo.query("> option[value='"+args.identity+"']",this.root)[0];args.onItem(item);},fetchSelectedItem:function(){var root=this.root,si=root.selectedIndex;return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",root)[0]:null;}});dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);}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],{required:true,_lastDisplayedValue:"",_isValidSubset:function(){return this._opened;},isValid:function(){return this.item||(!this.required&&this.get("displayedValue")=="");},_refreshState:function(){if(!this.searchTimer){this.inherited(arguments);}},_callbackSetLabel:function(_390,_391,_392){if((_391&&_391.query[this.searchAttr]!=this._lastQuery)||(!_391&&_390.length&&this.store.getIdentity(_390[0])!=this._lastQuery)){return;}if(!_390.length){this.valueNode.value="";dijit.form.TextBox.superclass._setValueAttr.call(this,"",_392||(_392===undefined&&!this._focused));this._set("item",null);this.validate(this._focused);}else{this.set("item",_390[0],_392);}},_openResultList:function(_393,_394){if(_394.query[this.searchAttr]!=this._lastQuery){return;}dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments);if(this.item===undefined){this.validate(true);}},_getValueAttr:function(){return this.valueNode.value;},_getValueField:function(){return "value";},_setValueAttr:function(_395,_396){if(!this._onChangeActive){_396=null;}this._lastQuery=_395;if(_395===null||_395===""){this._setDisplayedValueAttr("",_396);return;}var self=this;this.store.fetchItemByIdentity({identity:_395,onItem:function(item){self._callbackSetLabel(item?[item]:[],undefined,_396);}});},_setItemAttr:function(item,_397,_398){this.inherited(arguments);this.valueNode.value=this.value;this._lastDisplayedValue=this.textbox.value;},_getDisplayQueryString:function(text){return text.replace(/([\\\*\?])/g,"\\$1");},_setDisplayedValueAttr:function(_399,_39a){if(_399==null){_399="";}if(!this._created){if(!("displayedValue" in this.params)){return;}_39a=false;}if(this.store){this.closeDropDown();var _39b=dojo.clone(this.query);this._lastQuery=_39b[this.searchAttr]=this._getDisplayQueryString(_399);this.textbox.value=_399;this._lastDisplayedValue=_399;this._set("displayedValue",_399);var _39c=this;var _39d={query:_39b,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_39e,_39f){_39c._fetchHandle=null;dojo.hitch(_39c,"_callbackSetLabel")(_39e,_39f,_39a);},onError:function(_3a0){_39c._fetchHandle=null;console.error("dijit.form.FilteringSelect: "+_3a0);dojo.hitch(_39c,"_callbackSetLabel")([],undefined,false);}};dojo.mixin(_39d,this.fetchProperties);this._fetchHandle=this.store.fetch(_39d);}},undo:function(){this.set("displayedValue",this._lastDisplayedValue);}});}if(!dojo._hasResource["dijit.form.Form"]){dojo._hasResource["dijit.form.Form"]=true;dojo.provide("dijit.form.Form");dojo.declare("dijit.form.Form",[dijit._Widget,dijit._Templated,dijit.form._FormMixin,dijit.layout._ContentPaneResizeMixin],{name:"",action:"",method:"",encType:"","accept-charset":"",accept:"",target:"",templateString:"<form dojoAttachPoint='containerNode' dojoAttachEvent='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>",attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{action:"",method:"",encType:"","accept-charset":"",accept:"",target:""}),postMixInProperties:function(){this.nameAttrSetting=this.name?("name='"+this.name+"'"):"";this.inherited(arguments);},execute:function(_3a1){},onExecute:function(){},_setEncTypeAttr:function(_3a2){this.encType=_3a2;dojo.attr(this.domNode,"encType",_3a2);if(dojo.isIE){this.domNode.encoding=_3a2;}},postCreate:function(){if(dojo.isIE&&this.srcNodeRef&&this.srcNodeRef.attributes){var item=this.srcNodeRef.attributes.getNamedItem("encType");if(item&&!item.specified&&(typeof item.value=="string")){this.set("encType",item.value);}}this.inherited(arguments);},reset:function(e){var faux={returnValue:true,preventDefault:function(){this.returnValue=false;},stopPropagation:function(){},currentTarget:e?e.target:this.domNode,target:e?e.target:this.domNode};if(!(this.onReset(faux)===false)&&faux.returnValue){this.inherited(arguments,[]);}},onReset:function(e){return true;},_onReset:function(e){this.reset(e);dojo.stopEvent(e);return false;},_onSubmit:function(e){var fp=dijit.form.Form.prototype;if(this.execute!=fp.execute||this.onExecute!=fp.onExecute){dojo.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.","","2.0");this.onExecute();this.execute(this.getValues());}if(this.onSubmit(e)===false){dojo.stopEvent(e);}},onSubmit:function(e){return this.isValid();},submit:function(){if(!(this.onSubmit()===false)){this.containerNode.submit();}}});}if(!dojo._hasResource["dijit.form.RadioButton"]){dojo._hasResource["dijit.form.RadioButton"]=true;dojo.provide("dijit.form.RadioButton");}if(!dojo._hasResource["dijit.form._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");dojo.declare("dijit.form._FormSelectWidget",dijit.form._FormValueWidget,{multiple:false,options:null,store:null,query:null,queryOptions:null,onFetch:null,sortByLabel:true,loadChildrenOnOpen:false,getOptions:function(_3a3){var _3a4=_3a3,opts=this.options||[],l=opts.length;if(_3a4===undefined){return opts;}if(dojo.isArray(_3a4)){return dojo.map(_3a4,"return this.getOptions(item);",this);}if(dojo.isObject(_3a3)){if(!dojo.some(this.options,function(o,idx){if(o===_3a4||(o.value&&o.value===_3a4.value)){_3a4=idx;return true;}return false;})){_3a4=-1;}}if(typeof _3a4=="string"){for(var i=0;i<l;i++){if(opts[i].value===_3a4){_3a4=i;break;}}}if(typeof _3a4=="number"&&_3a4>=0&&_3a4<l){return this.options[_3a4];}return null;},addOption:function(_3a5){if(!dojo.isArray(_3a5)){_3a5=[_3a5];}dojo.forEach(_3a5,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_3a6){if(!dojo.isArray(_3a6)){_3a6=[_3a6];}var _3a7=this.getOptions(_3a6);dojo.forEach(_3a7,function(i){if(i){this.options=dojo.filter(this.options,function(node,idx){return (node.value!==i.value||node.label!==i.label);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_3a8){if(!dojo.isArray(_3a8)){_3a8=[_3a8];}dojo.forEach(_3a8,function(i){var _3a9=this.getOptions(i),k;if(_3a9){for(k in i){_3a9[k]=i[k];}}},this);this._loadChildren();},setStore:function(_3aa,_3ab,_3ac){var _3ad=this.store;_3ac=_3ac||{};if(_3ad!==_3aa){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_3aa&&_3aa.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_3aa,"onNew",this,"_onNewItem"),dojo.connect(_3aa,"onDelete",this,"_onDeleteItem"),dojo.connect(_3aa,"onSet",this,"_onSetItem")];}this._set("store",_3aa);}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_3aa){this._loadingStore=true;_3aa.fetch(dojo.delegate(_3ac,{onComplete:function(_3ae,opts){if(this.sortByLabel&&!_3ac.sort&&_3ae.length){_3ae.sort(dojo.data.util.sorter.createSortFunction([{attribute:_3aa.getLabelAttributes(_3ae[0])[0]}],_3aa));}if(_3ac.onFetch){_3ae=_3ac.onFetch.call(this,_3ae,opts);}dojo.forEach(_3ae,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.set("value","_pendingValue" in this?this._pendingValue:_3ab);delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_3ae);}this._fetchedWith=opts;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);},scope:this}));}else{delete this._fetchedWith;}return _3ad;},_setValueAttr:function(_3af,_3b0){if(this._loadingStore){this._pendingValue=_3af;return;}var opts=this.getOptions()||[];if(!dojo.isArray(_3af)){_3af=[_3af];}dojo.forEach(_3af,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_3af[idx]=dojo.filter(opts,function(node){return node.value===i;})[0]||{value:"",label:""};}},this);_3af=dojo.filter(_3af,function(i){return i&&i.value;});if(!this.multiple&&(!_3af[0]||!_3af[0].value)&&opts.length){_3af[0]=opts[0];}dojo.forEach(opts,function(i){i.selected=dojo.some(_3af,function(v){return v.value===i.value;});});var val=dojo.map(_3af,function(i){return i.value;}),disp=dojo.map(_3af,function(i){return i.label;});this._set("value",this.multiple?val:val[0]);this._setDisplay(this.multiple?disp:disp[0]);this._updateSelection();this._handleOnChange(this.value,_3b0);},_getDisplayedValueAttr:function(){var val=this.get("value");if(!dojo.isArray(val)){val=[val];}var ret=dojo.map(this.getOptions(val),function(v){if(v&&"label" in v){return v.label;}else{if(v){return v.value;}}return null;},this);return this.multiple?ret:ret[0];},_loadChildren:function(){if(this._loadingStore){return;}dojo.forEach(this._getChildren(),function(_3b1){_3b1.destroyRecursive();});dojo.forEach(this.options,this._addOptionItem,this);this._updateSelection();},_updateSelection:function(){this._set("value",this._getValueFromOpts());var val=this.value;if(!dojo.isArray(val)){val=[val];}if(val&&val[0]){dojo.forEach(this._getChildren(),function(_3b2){var _3b3=dojo.some(val,function(v){return _3b2.option&&(v===_3b2.option.value);});dojo.toggleClass(_3b2.domNode,this.baseClass+"SelectedOption",_3b3);dijit.setWaiState(_3b2.domNode,"selected",_3b3);},this);}},_getValueFromOpts:function(){var opts=this.getOptions()||[];if(!this.multiple&&opts.length){var opt=dojo.filter(opts,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{opts[0].selected=true;return opts[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(opts,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(item,_3b4){if(!_3b4||!_3b4.parent){this._addOptionForItem(item);}},_onDeleteItem:function(item){var _3b5=this.store;this.removeOption(_3b5.getIdentity(item));},_onSetItem:function(item){this.updateOption(this._getOptionObjForItem(item));},_getOptionObjForItem:function(item){var _3b6=this.store,_3b7=_3b6.getLabel(item),_3b8=(_3b7?_3b6.getIdentity(item):null);return {value:_3b8,label:_3b7,item:item};},_addOptionForItem:function(item){var _3b9=this.store;if(!_3b9.isItemLoaded(item)){_3b9.loadItem({item:item,onComplete:function(i){this._addOptionForItem(item);},scope:this});return;}var _3ba=this._getOptionObjForItem(item);this.addOption(_3ba);},constructor:function(_3bb){this._oValue=(_3bb||{}).value||null;},buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.focusNode,false);},_fillContent:function(){var opts=this.options;if(!opts){opts=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(node){if(node.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:(node.getAttribute("data-"+dojo._scopeName+"-value")||node.getAttribute("value")),label:String(node.innerHTML),selected:node.getAttribute("selected")||false,disabled:node.getAttribute("disabled")||false};},this):[];}if(!this.value){this._set("value",this._getValueFromOpts());}else{if(this.multiple&&typeof this.value=="string"){this_set("value",this.value.split(","));}}},postCreate:function(){this.inherited(arguments);this.connect(this,"onChange","_updateSelection");this.connect(this,"startup","_loadChildren");this._setValueAttr(this.value,null);},startup:function(){this.inherited(arguments);var _3bc=this.store,_3bd={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_3bd[i]=this[i];}delete this[i];},this);if(_3bc&&_3bc.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_3bc,this._oValue,_3bd);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_3be){},_removeOptionItem:function(_3bf){},_setDisplay:function(_3c0){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.get("value"));},_pseudoLoadChildren:function(_3c1){},onSetStore:function(){}});}if(!dojo._hasResource["dijit._KeyNavContainer"]){dojo._hasResource["dijit._KeyNavContainer"]=true;dojo.provide("dijit._KeyNavContainer");dojo.declare("dijit._KeyNavContainer",dijit._Container,{tabIndex:"0",_keyNavCodes:{},connectKeyNavHandlers:function(_3c2,_3c3){var _3c4=(this._keyNavCodes={});var prev=dojo.hitch(this,this.focusPrev);var next=dojo.hitch(this,this.focusNext);dojo.forEach(_3c2,function(code){_3c4[code]=prev;});dojo.forEach(_3c3,function(code){_3c4[code]=next;});_3c4[dojo.keys.HOME]=dojo.hitch(this,"focusFirstChild");_3c4[dojo.keys.END]=dojo.hitch(this,"focusLastChild");this.connect(this.domNode,"onkeypress","_onContainerKeypress");this.connect(this.domNode,"onfocus","_onContainerFocus");},startupKeyNavChildren:function(){dojo.forEach(this.getChildren(),dojo.hitch(this,"_startupChild"));},addChild:function(_3c5,_3c6){dijit._KeyNavContainer.superclass.addChild.apply(this,arguments);this._startupChild(_3c5);},focus:function(){this.focusFirstChild();},focusFirstChild:function(){var _3c7=this._getFirstFocusableChild();if(_3c7){this.focusChild(_3c7);}},focusLastChild:function(){var _3c8=this._getLastFocusableChild();if(_3c8){this.focusChild(_3c8);}},focusNext:function(){var _3c9=this._getNextFocusableChild(this.focusedChild,1);this.focusChild(_3c9);},focusPrev:function(){var _3ca=this._getNextFocusableChild(this.focusedChild,-1);this.focusChild(_3ca,true);},focusChild:function(_3cb,last){if(this.focusedChild&&_3cb!==this.focusedChild){this._onChildBlur(this.focusedChild);}_3cb.set("tabIndex",this.tabIndex);_3cb.focus(last?"end":"start");this._set("focusedChild",_3cb);},_startupChild:function(_3cc){_3cc.set("tabIndex","-1");this.connect(_3cc,"_onFocus",function(){_3cc.set("tabIndex",this.tabIndex);});this.connect(_3cc,"_onBlur",function(){_3cc.set("tabIndex","-1");});},_onContainerFocus:function(evt){if(evt.target!==this.domNode){return;}this.focusFirstChild();dojo.attr(this.domNode,"tabIndex","-1");},_onBlur:function(evt){if(this.tabIndex){dojo.attr(this.domNode,"tabIndex",this.tabIndex);}this.inherited(arguments);},_onContainerKeypress:function(evt){if(evt.ctrlKey||evt.altKey){return;}var func=this._keyNavCodes[evt.charOrCode];if(func){func();dojo.stopEvent(evt);}},_onChildBlur:function(_3cd){},_getFirstFocusableChild:function(){return this._getNextFocusableChild(null,1);},_getLastFocusableChild:function(){return this._getNextFocusableChild(null,-1);},_getNextFocusableChild:function(_3ce,dir){if(_3ce){_3ce=this._getSiblingOfChild(_3ce,dir);}var _3cf=this.getChildren();for(var i=0;i<_3cf.length;i++){if(!_3ce){_3ce=_3cf[(dir>0)?0:(_3cf.length-1)];}if(_3ce.isFocusable()){return _3ce;}_3ce=this._getSiblingOfChild(_3ce,dir);}return null;}});}if(!dojo._hasResource["dijit.MenuItem"]){dojo._hasResource["dijit.MenuItem"]=true;dojo.provide("dijit.MenuItem");dojo.declare("dijit.MenuItem",[dijit._Widget,dijit._Templated,dijit._Contained,dijit._CssStateMixin],{templateString:dojo.cache("dijit","templates/MenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" role=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"),attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"containerNode",type:"innerHTML"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitMenuItem",label:"",iconClass:"",accelKey:"",disabled:false,_fillContent:function(_3d0){if(_3d0&&!("label" in this.params)){this.set("label",_3d0.innerHTML);}},buildRendering:function(){this.inherited(arguments);var _3d1=this.id+"_text";dojo.attr(this.containerNode,"id",_3d1);if(this.accelKeyNode){dojo.attr(this.accelKeyNode,"id",this.id+"_accel");_3d1+=" "+this.id+"_accel";}dijit.setWaiState(this.domNode,"labelledby",_3d1);dojo.setSelectable(this.domNode,false);},_onHover:function(){this.getParent().onItemHover(this);},_onUnhover:function(){this.getParent().onItemUnhover(this);this._set("hovering",false);},_onClick:function(evt){this.getParent().onItemClick(this,evt);dojo.stopEvent(evt);},onClick:function(evt){},focus:function(){try{if(dojo.isIE==8){this.containerNode.focus();}dijit.focus(this.focusNode);}catch(e){}},_onFocus:function(){this._setSelected(true);this.getParent()._onItemFocus(this);this.inherited(arguments);},_setSelected:function(_3d2){dojo.toggleClass(this.domNode,"dijitMenuItemSelected",_3d2);},setLabel:function(_3d3){dojo.deprecated("dijit.MenuItem.setLabel() is deprecated. Use set('label', ...) instead.","","2.0");this.set("label",_3d3);},setDisabled:function(_3d4){dojo.deprecated("dijit.Menu.setDisabled() is deprecated. Use set('disabled', bool) instead.","","2.0");this.set("disabled",_3d4);},_setDisabledAttr:function(_3d5){dijit.setWaiState(this.focusNode,"disabled",_3d5?"true":"false");this._set("disabled",_3d5);},_setAccelKeyAttr:function(_3d6){this.accelKeyNode.style.display=_3d6?"":"none";this.accelKeyNode.innerHTML=_3d6;dojo.attr(this.containerNode,"colSpan",_3d6?"1":"2");this._set("accelKey",_3d6);}});}if(!dojo._hasResource["dijit.PopupMenuItem"]){dojo._hasResource["dijit.PopupMenuItem"]=true;dojo.provide("dijit.PopupMenuItem");dojo.declare("dijit.PopupMenuItem",dijit.MenuItem,{_fillContent:function(){if(this.srcNodeRef){var _3d7=dojo.query("*",this.srcNodeRef);dijit.PopupMenuItem.superclass._fillContent.call(this,_3d7[0]);this.dropDownContainer=this.srcNodeRef;}},startup:function(){if(this._started){return;}this.inherited(arguments);if(!this.popup){var node=dojo.query("[widgetId]",this.dropDownContainer)[0];this.popup=dijit.byNode(node);}dojo.body().appendChild(this.popup.domNode);this.popup.startup();this.popup.domNode.style.display="none";if(this.arrowWrapper){dojo.style(this.arrowWrapper,"visibility","");}dijit.setWaiState(this.focusNode,"haspopup","true");},destroyDescendants:function(){if(this.popup){if(!this.popup._destroyed){this.popup.destroyRecursive();}delete this.popup;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.CheckedMenuItem"]){dojo._hasResource["dijit.CheckedMenuItem"]=true;dojo.provide("dijit.CheckedMenuItem");dojo.declare("dijit.CheckedMenuItem",dijit.MenuItem,{templateString:dojo.cache("dijit","templates/CheckedMenuItem.html","<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">✓</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" role=\"presentation\"> </td>\n</tr>\n"),checked:false,_setCheckedAttr:function(_3d8){dojo.toggleClass(this.domNode,"dijitCheckedMenuItemChecked",_3d8);dijit.setWaiState(this.domNode,"checked",_3d8);this._set("checked",_3d8);},onChange:function(_3d9){},_onClick:function(e){if(!this.disabled){this.set("checked",!this.checked);this.onChange(this.checked);}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.MenuSeparator"]){dojo._hasResource["dijit.MenuSeparator"]=true;dojo.provide("dijit.MenuSeparator");dojo.declare("dijit.MenuSeparator",[dijit._Widget,dijit._Templated,dijit._Contained],{templateString:dojo.cache("dijit","templates/MenuSeparator.html","<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"),buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}if(!dojo._hasResource["dijit.Menu"]){dojo._hasResource["dijit.Menu"]=true;dojo.provide("dijit.Menu");dojo.declare("dijit._MenuBase",[dijit._Widget,dijit._Templated,dijit._KeyNavContainer],{parentMenu:null,popupDelay:500,startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_3da){_3da.startup();});this.startupKeyNavChildren();this.inherited(arguments);},onExecute:function(){},onCancel:function(_3db){},_moveToPopup:function(evt){if(this.focusedChild&&this.focusedChild.popup&&!this.focusedChild.disabled){this.focusedChild._onClick(evt);}else{var _3dc=this._getTopMenu();if(_3dc&&_3dc._isMenuBar){_3dc.focusNext();}}},_onPopupHover:function(evt){if(this.currentPopup&&this.currentPopup._pendingClose_timer){var _3dd=this.currentPopup.parentMenu;if(_3dd.focusedChild){_3dd.focusedChild._setSelected(false);}_3dd.focusedChild=this.currentPopup.from_item;_3dd.focusedChild._setSelected(true);this._stopPendingCloseTimer(this.currentPopup);}},onItemHover:function(item){if(this.isActive){this.focusChild(item);if(this.focusedChild.popup&&!this.focusedChild.disabled&&!this.hover_timer){this.hover_timer=setTimeout(dojo.hitch(this,"_openPopup"),this.popupDelay);}}if(this.focusedChild){this.focusChild(item);}this._hoveredChild=item;},_onChildBlur:function(item){this._stopPopupTimer();item._setSelected(false);var _3de=item.popup;if(_3de){this._stopPendingCloseTimer(_3de);_3de._pendingClose_timer=setTimeout(function(){_3de._pendingClose_timer=null;if(_3de.parentMenu){_3de.parentMenu.currentPopup=null;}dijit.popup.close(_3de);},this.popupDelay);}},onItemUnhover:function(item){if(this.isActive){this._stopPopupTimer();}if(this._hoveredChild==item){this._hoveredChild=null;}},_stopPopupTimer:function(){if(this.hover_timer){clearTimeout(this.hover_timer);this.hover_timer=null;}},_stopPendingCloseTimer:function(_3df){if(_3df._pendingClose_timer){clearTimeout(_3df._pendingClose_timer);_3df._pendingClose_timer=null;}},_stopFocusTimer:function(){if(this._focus_timer){clearTimeout(this._focus_timer);this._focus_timer=null;}},_getTopMenu:function(){for(var top=this;top.parentMenu;top=top.parentMenu){}return top;},onItemClick:function(item,evt){if(typeof this.isShowingNow=="undefined"){this._markActive();}this.focusChild(item);if(item.disabled){return false;}if(item.popup){this._openPopup();}else{this.onExecute();item.onClick(evt);}},_openPopup:function(){this._stopPopupTimer();var _3e0=this.focusedChild;if(!_3e0){return;}var _3e1=_3e0.popup;if(_3e1.isShowingNow){return;}if(this.currentPopup){this._stopPendingCloseTimer(this.currentPopup);dijit.popup.close(this.currentPopup);}_3e1.parentMenu=this;_3e1.from_item=_3e0;var self=this;dijit.popup.open({parent:this,popup:_3e1,around:_3e0.domNode,orient:this._orient||(this.isLeftToRight()?{"TR":"TL","TL":"TR","BR":"BL","BL":"BR"}:{"TL":"TR","TR":"TL","BL":"BR","BR":"BL"}),onCancel:function(){self.focusChild(_3e0);self._cleanUp();_3e0._setSelected(true);self.focusedChild=_3e0;},onExecute:dojo.hitch(this,"_cleanUp")});this.currentPopup=_3e1;_3e1.connect(_3e1.domNode,"onmouseenter",dojo.hitch(self,"_onPopupHover"));if(_3e1.focus){_3e1._focus_timer=setTimeout(dojo.hitch(_3e1,function(){this._focus_timer=null;this.focus();}),0);}},_markActive:function(){this.isActive=true;dojo.replaceClass(this.domNode,"dijitMenuActive","dijitMenuPassive");},onOpen:function(e){this.isShowingNow=true;this._markActive();},_markInactive:function(){this.isActive=false;dojo.replaceClass(this.domNode,"dijitMenuPassive","dijitMenuActive");},onClose:function(){this._stopFocusTimer();this._markInactive();this.isShowingNow=false;this.parentMenu=null;},_closeChild:function(){this._stopPopupTimer();var _3e2=this.focusedChild&&this.focusedChild.from_item;if(this.currentPopup){if(dijit._curFocus&&dojo.isDescendant(dijit._curFocus,this.currentPopup.domNode)){this.focusedChild.focusNode.focus();}dijit.popup.close(this.currentPopup);this.currentPopup=null;}if(this.focusedChild){this.focusedChild._setSelected(false);this.focusedChild._onUnhover();this.focusedChild=null;}},_onItemFocus:function(item){if(this._hoveredChild&&this._hoveredChild!=item){this._hoveredChild._onUnhover();}},_onBlur:function(){this._cleanUp();this.inherited(arguments);},_cleanUp:function(){this._closeChild();if(typeof this.isShowingNow=="undefined"){this._markInactive();}}});dojo.declare("dijit.Menu",dijit._MenuBase,{constructor:function(){this._bindings=[];},templateString:dojo.cache("dijit","templates/Menu.html","<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"),baseClass:"dijitMenu",targetNodeIds:[],contextMenuForWindow:false,leftClickToOpen:false,refocus:true,postCreate:function(){if(this.contextMenuForWindow){this.bindDomNode(dojo.body());}else{dojo.forEach(this.targetNodeIds,this.bindDomNode,this);}var k=dojo.keys,l=this.isLeftToRight();this._openSubMenuKey=l?k.RIGHT_ARROW:k.LEFT_ARROW;this._closeSubMenuKey=l?k.LEFT_ARROW:k.RIGHT_ARROW;this.connectKeyNavHandlers([k.UP_ARROW],[k.DOWN_ARROW]);},_onKeyPress:function(evt){if(evt.ctrlKey||evt.altKey){return;}switch(evt.charOrCode){case this._openSubMenuKey:this._moveToPopup(evt);dojo.stopEvent(evt);break;case this._closeSubMenuKey:if(this.parentMenu){if(this.parentMenu._isMenuBar){this.parentMenu.focusPrev();}else{this.onCancel(false);}}else{dojo.stopEvent(evt);}break;}},_iframeContentWindow:function(_3e3){var win=dojo.window.get(this._iframeContentDocument(_3e3))||this._iframeContentDocument(_3e3)["__parent__"]||(_3e3.name&&dojo.doc.frames[_3e3.name])||null;return win;},_iframeContentDocument:function(_3e4){var doc=_3e4.contentDocument||(_3e4.contentWindow&&_3e4.contentWindow.document)||(_3e4.name&&dojo.doc.frames[_3e4.name]&&dojo.doc.frames[_3e4.name].document)||null;return doc;},bindDomNode:function(node){node=dojo.byId(node);var cn;if(node.tagName.toLowerCase()=="iframe"){var _3e5=node,win=this._iframeContentWindow(_3e5);cn=dojo.withGlobal(win,dojo.body);}else{cn=(node==dojo.body()?dojo.doc.documentElement:node);}var _3e6={node:node,iframe:_3e5};dojo.attr(node,"_dijitMenu"+this.id,this._bindings.push(_3e6));var _3e7=dojo.hitch(this,function(cn){return [dojo.connect(cn,this.leftClickToOpen?"onclick":"oncontextmenu",this,function(evt){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3e5,{x:evt.pageX,y:evt.pageY});}),dojo.connect(cn,"onkeydown",this,function(evt){if(evt.shiftKey&&evt.keyCode==dojo.keys.F10){dojo.stopEvent(evt);this._scheduleOpen(evt.target,_3e5);}})];});_3e6.connects=cn?_3e7(cn):[];if(_3e5){_3e6.onloadHandler=dojo.hitch(this,function(){var win=this._iframeContentWindow(_3e5);cn=dojo.withGlobal(win,dojo.body);_3e6.connects=_3e7(cn);});if(_3e5.addEventListener){_3e5.addEventListener("load",_3e6.onloadHandler,false);}else{_3e5.attachEvent("onload",_3e6.onloadHandler);}}},unBindDomNode:function(_3e8){var node;try{node=dojo.byId(_3e8);}catch(e){return;}var _3e9="_dijitMenu"+this.id;if(node&&dojo.hasAttr(node,_3e9)){var bid=dojo.attr(node,_3e9)-1,b=this._bindings[bid];dojo.forEach(b.connects,dojo.disconnect);var _3ea=b.iframe;if(_3ea){if(_3ea.removeEventListener){_3ea.removeEventListener("load",b.onloadHandler,false);}else{_3ea.detachEvent("onload",b.onloadHandler);}}dojo.removeAttr(node,_3e9);delete this._bindings[bid];}},_scheduleOpen:function(_3eb,_3ec,_3ed){if(!this._openTimer){this._openTimer=setTimeout(dojo.hitch(this,function(){delete this._openTimer;this._openMyself({target:_3eb,iframe:_3ec,coords:_3ed});}),1);}},_openMyself:function(args){var _3ee=args.target,_3ef=args.iframe,_3f0=args.coords;if(_3f0){if(_3ef){var od=_3ee.ownerDocument,ifc=dojo.position(_3ef,true),win=this._iframeContentWindow(_3ef),_3f1=dojo.withGlobal(win,"_docScroll",dojo);var cs=dojo.getComputedStyle(_3ef),tp=dojo._toPixelValue,left=(dojo.isIE&&dojo.isQuirks?0:tp(_3ef,cs.paddingLeft))+(dojo.isIE&&dojo.isQuirks?tp(_3ef,cs.borderLeftWidth):0),top=(dojo.isIE&&dojo.isQuirks?0:tp(_3ef,cs.paddingTop))+(dojo.isIE&&dojo.isQuirks?tp(_3ef,cs.borderTopWidth):0);_3f0.x+=ifc.x+left-_3f1.x;_3f0.y+=ifc.y+top-_3f1.y;}}else{_3f0=dojo.position(_3ee,true);_3f0.x+=10;_3f0.y+=10;}var self=this;var _3f2=dijit.getFocus(this);function _3f3(){if(self.refocus){dijit.focus(_3f2);}dijit.popup.close(self);};dijit.popup.open({popup:this,x:_3f0.x,y:_3f0.y,onExecute:_3f3,onCancel:_3f3,orient:this.isLeftToRight()?"L":"R"});this.focus();this._onBlur=function(){this.inherited("_onBlur",arguments);dijit.popup.close(this);};},uninitialize:function(){dojo.forEach(this._bindings,function(b){if(b){this.unBindDomNode(b.node);}},this);this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.Select"]){dojo._hasResource["dijit.form.Select"]=true;dojo.provide("dijit.form.Select");dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){this.inherited(arguments);var o=(this.menuTableNode=this.domNode);var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}}));if(o.parentNode){o.parentNode.replaceChild(n,o);}dojo.removeClass(o,"dijitMenuTable");n.className=o.className+" dijitSelectMenu";o.className="dijitReset dijitMenuTable";dijit.setWaiRole(o,"listbox");dijit.setWaiRole(n,"presentation");n.appendChild(o);},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousemove",dojo.stopEvent);},resize:function(mb){if(mb){dojo.marginBox(this.domNode,mb);if("w" in mb){this.menuTableNode.style.width="100%";}}}});dojo.declare("dijit.form.Select",[dijit.form._FormSelectWidget,dijit._HasDropDown],{baseClass:"dijitSelect",templateString:dojo.cache("dijit.form","templates/Select.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\trole=\"combobox\" aria-haspopup=\"true\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" role=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\" dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" role=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">▼</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),required:false,state:"",message:"",tooltipPosition:[],emptyLabel:" ",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){this.inherited(arguments);if(this.options.length&&!this.value&&this.srcNodeRef){var si=this.srcNodeRef.selectedIndex||0;this.value=this.options[si>=0?si:0].value;}this.dropDown=new dijit.form._SelectMenu({id:this.id+"_menu"});dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu");},_getMenuItemForOption:function(_3f4){if(!_3f4.value&&!_3f4.label){return new dijit.MenuSeparator();}else{var _3f5=dojo.hitch(this,"_setValueAttr",_3f4);var item=new dijit.MenuItem({option:_3f4,label:_3f4.label||this.emptyLabel,onClick:_3f5,disabled:_3f4.disabled||false});dijit.setWaiRole(item.focusNode,"listitem");return item;}},_addOptionItem:function(_3f6){if(this.dropDown){this.dropDown.addChild(this._getMenuItemForOption(_3f6));}},_getChildren:function(){if(!this.dropDown){return [];}return this.dropDown.getChildren();},_loadChildren:function(_3f7){if(_3f7===true){if(this.dropDown){delete this.dropDown.focusedChild;}if(this.options.length){this.inherited(arguments);}else{dojo.forEach(this._getChildren(),function(_3f8){_3f8.destroyRecursive();});var item=new dijit.MenuItem({label:" "});this.dropDown.addChild(item);}}else{this._updateSelection();}this._isLoaded=false;this._childrenLoaded=true;if(!this._loadingStore){this._setValueAttr(this.value);}},_setValueAttr:function(_3f9){this.inherited(arguments);dojo.attr(this.valueNode,"value",this.get("value"));},_setDisplay:function(_3fa){var lbl=_3fa||this.emptyLabel;this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+lbl+"</span>";dijit.setWaiState(this.focusNode,"valuetext",lbl);},validate:function(_3fb){var _3fc=this.isValid(_3fb);this._set("state",_3fc?"":"Error");dijit.setWaiState(this.focusNode,"invalid",_3fc?"false":"true");var _3fd=_3fc?"":this._missingMsg;if(this.message!==_3fd){this._set("message",_3fd);dijit.hideTooltip(this.domNode);if(_3fd){dijit.showTooltip(_3fd,this.domNode,this.tooltipPosition,!this.isLeftToRight());}}return _3fc;},isValid:function(_3fe){return (!this.required||this.value===0||!(/^\s*$/.test(this.value||"")));},reset:function(){this.inherited(arguments);dijit.hideTooltip(this.domNode);this._set("state","");this._set("message","");},postMixInProperties:function(){this.inherited(arguments);this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage;},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onmousemove",dojo.stopEvent);},_setStyleAttr:function(_3ff){this.inherited(arguments);dojo.toggleClass(this.domNode,this.baseClass+"FixedWidth",!!this.tableNode.style.width);},isLoaded:function(){return this._isLoaded;},loadDropDown:function(_400){this._loadChildren(true);this._isLoaded=true;_400();},closeDropDown:function(){this.inherited(arguments);if(this.dropDown&&this.dropDown.menuTableNode){this.dropDown.menuTableNode.style.width="";}},uninitialize:function(_401){if(this.dropDown&&!this.dropDown._destroyed){this.dropDown.destroyRecursive(_401);delete this.dropDown;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.form.SimpleTextarea"]){dojo._hasResource["dijit.form.SimpleTextarea"]=true;dojo.provide("dijit.form.SimpleTextarea");dojo.declare("dijit.form.SimpleTextarea",dijit.form.TextBox,{baseClass:"dijitTextBox dijitTextArea",attributeMap:dojo.delegate(dijit.form._FormValueWidget.prototype.attributeMap,{rows:"textbox",cols:"textbox"}),rows:"3",cols:"20",templateString:"<textarea ${!nameAttrSetting} dojoAttachPoint='focusNode,containerNode,textbox' autocomplete='off'></textarea>",postMixInProperties:function(){if(!this.value&&this.srcNodeRef){this.value=this.srcNodeRef.value;}this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);if(dojo.isIE&&this.cols){dojo.addClass(this.textbox,"dijitTextAreaCols");}},filter:function(_402){if(_402){_402=_402.replace(/\r/g,"");}return this.inherited(arguments);},_previousValue:"",_onInput:function(e){if(this.maxLength){var _403=parseInt(this.maxLength);var _404=this.textbox.value.replace(/\r/g,"");var _405=_404.length-_403;if(_405>0){if(e){dojo.stopEvent(e);}var _406=this.textbox;if(_406.selectionStart){var pos=_406.selectionStart;var cr=0;if(dojo.isOpera){cr=(this.textbox.value.substring(0,pos).match(/\r/g)||[]).length;}this.textbox.value=_404.substring(0,pos-_405-cr)+_404.substring(pos-cr);_406.setSelectionRange(pos-_405,pos-_405);}else{if(dojo.doc.selection){_406.focus();var _407=dojo.doc.selection.createRange();_407.moveStart("character",-_405);_407.text="";_407.select();}}}this._previousValue=this.textbox.value;}this.inherited(arguments);}});}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",editorWrapper:"dijit._InlineEditor",editorParams:{},disabled:false,onChange:function(_408){},onCancel:function(){},width:"100%",value:"",noValueIndicator:dojo.isIE<=6?"<span style='font-family: wingdings; text-decoration: underline;'>    ✍    </span>":"<span style='text-decoration: underline;'>    ✍    </span>",constructor:function(){this.editorParams={};},postMixInProperties:function(){this.inherited(arguments);this.displayNode=this.srcNodeRef;var _409={ondijitclick:"_onClick",onmouseover:"_onMouseOver",onmouseout:"_onMouseOut",onfocus:"_onMouseOver",onblur:"_onMouseOut"};for(var name in _409){this.connect(this.displayNode,name,_409[name]);}dijit.setWaiRole(this.displayNode,"button");if(!this.displayNode.getAttribute("tabIndex")){this.displayNode.setAttribute("tabIndex",0);}if(!this.value&&!("value" in this.params)){this.value=dojo.trim(this.renderAsHtml?this.displayNode.innerHTML:(this.displayNode.innerText||this.displayNode.textContent||""));}if(!this.value){this.displayNode.innerHTML=this.noValueIndicator;}dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayMode");},setDisabled:function(_40a){dojo.deprecated("dijit.InlineEditBox.setDisabled() is deprecated. Use set('disabled', bool) instead.","","2.0");this.set("disabled",_40a);},_setDisabledAttr:function(_40b){dijit.setWaiState(this.domNode,"disabled",_40b);if(_40b){this.displayNode.removeAttribute("tabIndex");}else{this.displayNode.setAttribute("tabIndex",0);}dojo.toggleClass(this.displayNode,"dijitInlineEditBoxDisplayModeDisabled",_40b);this._set("disabled",_40b);},_onMouseOver:function(){if(!this.disabled){dojo.addClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");}},_onMouseOut:function(){dojo.removeClass(this.displayNode,"dijitInlineEditBoxDisplayModeHover");},_onClick:function(e){if(this.disabled){return;}if(e){dojo.stopEvent(e);}this._onMouseOut();setTimeout(dojo.hitch(this,"edit"),0);},edit:function(){if(this.disabled||this.editing){return;}this.editing=true;this._savedPosition=dojo.style(this.displayNode,"position")||"static";this._savedOpacity=dojo.style(this.displayNode,"opacity")||"1";this._savedTabIndex=dojo.attr(this.displayNode,"tabIndex")||"0";if(this.wrapperWidget){var ew=this.wrapperWidget.editWidget;ew.set("displayedValue" in ew?"displayedValue":"value",this.value);}else{var _40c=dojo.create("span",null,this.domNode,"before");var ewc=typeof this.editorWrapper=="string"?dojo.getObject(this.editorWrapper):this.editorWrapper;this.wrapperWidget=new ewc({value:this.value,buttonSave:this.buttonSave,buttonCancel:this.buttonCancel,dir:this.dir,lang:this.lang,tabIndex:this._savedTabIndex,editor:this.editor,inlineEditBox:this,sourceStyle:dojo.getComputedStyle(this.displayNode),save:dojo.hitch(this,"save"),cancel:dojo.hitch(this,"cancel")},_40c);if(!this._started){this.startup();}}var ww=this.wrapperWidget;if(dojo.isIE){dijit.focus(dijit.getFocus());}dojo.style(this.displayNode,{position:"absolute",opacity:"0",display:"none"});dojo.style(ww.domNode,{position:this._savedPosition,visibility:"visible",opacity:"1"});dojo.attr(this.displayNode,"tabIndex","-1");setTimeout(dojo.hitch(this,function(){ww.focus();ww._resetValue=ww.getValue();}),0);},_onBlur:function(){this.inherited(arguments);if(!this.editing){}},destroy:function(){if(this.wrapperWidget&&!this.wrapperWidget._destroyed){this.wrapperWidget.destroy();delete this.wrapperWidget;}this.inherited(arguments);},_showText:function(_40d){var ww=this.wrapperWidget;dojo.style(ww.domNode,{position:"absolute",visibility:"hidden",opacity:"0"});dojo.style(this.displayNode,{position:this._savedPosition,opacity:this._savedOpacity,display:""});dojo.attr(this.displayNode,"tabIndex",this._savedTabIndex);if(_40d){dijit.focus(this.displayNode);}},save:function(_40e){if(this.disabled||!this.editing){return;}this.editing=false;var ww=this.wrapperWidget;var _40f=ww.getValue();this.set("value",_40f);this._showText(_40e);},setValue:function(val){dojo.deprecated("dijit.InlineEditBox.setValue() is deprecated. Use set('value', ...) instead.","","2.0");return this.set("value",val);},_setValueAttr:function(val){val=dojo.trim(val);var _410=this.renderAsHtml?val:val.replace(/&/gm,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,""").replace(/\n/g,"<br>");this.displayNode.innerHTML=_410||this.noValueIndicator;this._set("value",val);if(this._started){setTimeout(dojo.hitch(this,"onChange",val),0);}},getValue:function(){dojo.deprecated("dijit.InlineEditBox.getValue() is deprecated. Use get('value') instead.","","2.0");return this.get("value");},cancel:function(_411){if(this.disabled||!this.editing){return;}this.editing=false;setTimeout(dojo.hitch(this,"onCancel"),0);this._showText(_411);}});dojo.declare("dijit._InlineEditor",[dijit._Widget,dijit._Templated],{templateString:dojo.cache("dijit","templates/InlineEditBox.html","<span data-dojo-attach-point=\"editNode\" role=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdata-dojo-attach-event=\"onkeypress: _onKeyPress\"\n\t><span data-dojo-attach-point=\"editorPlaceholder\"></span\n\t><span data-dojo-attach-point=\"buttonContainer\"\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonSave}', 'class': 'saveButton'\"\n\t\t\tdata-dojo-attach-point=\"saveButton\" data-dojo-attach-event=\"onClick:save\"></button\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonCancel}', 'class': 'cancelButton'\"\n\t\t\tdata-dojo-attach-point=\"cancelButton\" data-dojo-attach-event=\"onClick:cancel\"></button\n\t></span\n></span>\n"),widgetsInTemplate:true,postMixInProperties:function(){this.inherited(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);},buildRendering:function(){this.inherited(arguments);var cls=typeof this.editor=="string"?dojo.getObject(this.editor):this.editor;var _412=this.sourceStyle,_413="line-height:"+_412.lineHeight+";",_414=dojo.getComputedStyle(this.domNode);dojo.forEach(["Weight","Family","Size","Style"],function(prop){var _415=_412["font"+prop],_416=_414["font"+prop];if(_416!=_415){_413+="font-"+prop+":"+_412["font"+prop]+";";}},this);dojo.forEach(["marginTop","marginBottom","marginLeft","marginRight"],function(prop){this.domNode.style[prop]=_412[prop];},this);var _417=this.inlineEditBox.width;if(_417=="100%"){_413+="width:100%;";this.domNode.style.display="block";}else{_413+="width:"+(_417+(Number(_417)==_417?"px":""))+";";}var _418=dojo.delegate(this.inlineEditBox.editorParams,{style:_413,dir:this.dir,lang:this.lang});_418["displayedValue" in cls.prototype?"displayedValue":"value"]=this.value;this.editWidget=new cls(_418,this.editorPlaceholder);if(this.inlineEditBox.autoSave){dojo.destroy(this.buttonContainer);}},postCreate:function(){this.inherited(arguments);var ew=this.editWidget;if(this.inlineEditBox.autoSave){this.connect(ew,"onChange","_onChange");this.connect(ew,"onKeyPress","_onKeyPress");}else{if("intermediateChanges" in ew){ew.set("intermediateChanges",true);this.connect(ew,"onChange","_onIntermediateChange");this.saveButton.set("disabled",true);}}},_onIntermediateChange:function(val){this.saveButton.set("disabled",(this.getValue()==this._resetValue)||!this.enableSave());},destroy:function(){this.editWidget.destroy(true);this.inherited(arguments);},getValue:function(){var ew=this.editWidget;return String(ew.get("displayedValue" in ew?"displayedValue":"value"));},_onKeyPress:function(e){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(e.altKey||e.ctrlKey){return;}if(e.charOrCode==dojo.keys.ESCAPE){dojo.stopEvent(e);this.cancel(true);}else{if(e.charOrCode==dojo.keys.ENTER&&e.target.tagName=="INPUT"){dojo.stopEvent(e);this._onChange();}}}},_onBlur:function(){this.inherited(arguments);if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing){if(this.getValue()==this._resetValue){this.cancel(false);}else{if(this.enableSave()){this.save(false);}}}},_onChange:function(){if(this.inlineEditBox.autoSave&&this.inlineEditBox.editing&&this.enableSave()){dojo.style(this.inlineEditBox.displayNode,{display:""});dijit.focus(this.inlineEditBox.displayNode);}},enableSave:function(){return (this.editWidget.isValid?this.editWidget.isValid():true);},focus:function(){this.editWidget.focus();setTimeout(dojo.hitch(this,function(){if(this.editWidget.focusNode&&this.editWidget.focusNode.tagName=="INPUT"){dijit.selectInputText(this.editWidget.focusNode);}}),0);}});}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_419,_41a){var c=document.cookie;if(arguments.length==1){var _41b=c.match(new RegExp("(?:^|; )"+dojo.regexp.escapeString(name)+"=([^;]*)"));return _41b?decodeURIComponent(_41b[1]):undefined;}else{_41a=_41a||{};var exp=_41a.expires;if(typeof exp=="number"){var d=new Date();d.setTime(d.getTime()+exp*24*60*60*1000);exp=_41a.expires=d;}if(exp&&exp.toUTCString){_41a.expires=exp.toUTCString();}_419=encodeURIComponent(_419);var _41c=name+"="+_419,_41d;for(_41d in _41a){_41c+="; "+_41d;var _41e=_41a[_41d];if(_41e!==true){_41c+="="+_41e;}}document.cookie=_41c;}};dojo.cookie.isSupported=function(){if(!("cookieEnabled" in navigator)){this("__djCookieTest__","CookiesAllowed");navigator.cookieEnabled=this("__djCookieTest__")=="CookiesAllowed";if(navigator.cookieEnabled){this("__djCookieTest__","",{expires:-1});}}return navigator.cookieEnabled;};}if(!dojo._hasResource["dijit.layout.StackController"]){dojo._hasResource["dijit.layout.StackController"]=true;dojo.provide("dijit.layout.StackController");dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"<span role='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>",containerId:"",buttonWidget:"dijit.layout._StackButton",constructor:function(){this.pane2button={};this.pane2connects={};this.pane2watches={};},buildRendering:function(){this.inherited(arguments);dijit.setWaiRole(this.domNode,"tablist");},postCreate:function(){this.inherited(arguments);this.subscribe(this.containerId+"-startup","onStartup");this.subscribe(this.containerId+"-addChild","onAddChild");this.subscribe(this.containerId+"-removeChild","onRemoveChild");this.subscribe(this.containerId+"-selectChild","onSelectChild");this.subscribe(this.containerId+"-containerKeyPress","onContainerKeyPress");},onStartup:function(info){dojo.forEach(info.children,this.onAddChild,this);if(info.selected){this.onSelectChild(info.selected);}},destroy:function(){for(var pane in this.pane2button){this.onRemoveChild(dijit.byId(pane));}this.inherited(arguments);},onAddChild:function(page,_41f){var cls=dojo.getObject(this.buttonWidget);var _420=new cls({id:this.id+"_"+page.id,label:page.title,dir:page.dir,lang:page.lang,showLabel:page.showTitle,iconClass:page.iconClass,closeButton:page.closable,title:page.tooltip});dijit.setWaiState(_420.focusNode,"selected","false");var _421=["title","showTitle","iconClass","closable","tooltip"],_422=["label","showLabel","iconClass","closeButton","title"];this.pane2watches[page.id]=dojo.map(_421,function(_423,idx){return page.watch(_423,function(name,_424,_425){_420.set(_422[idx],_425);});});this.pane2connects[page.id]=[this.connect(_420,"onClick",dojo.hitch(this,"onButtonClick",page)),this.connect(_420,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page))];this.addChild(_420,_41f);this.pane2button[page.id]=_420;page.controlButton=_420;if(!this._currentChild){_420.focusNode.setAttribute("tabIndex","0");dijit.setWaiState(_420.focusNode,"selected","true");this._currentChild=page;}if(!this.isLeftToRight()&&dojo.isIE&&this._rectifyRtlTabList){this._rectifyRtlTabList();}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}dojo.forEach(this.pane2connects[page.id],dojo.hitch(this,"disconnect"));delete this.pane2connects[page.id];dojo.forEach(this.pane2watches[page.id],function(w){w.unwatch();});delete this.pane2watches[page.id];var _426=this.pane2button[page.id];if(_426){this.removeChild(_426);delete this.pane2button[page.id];_426.destroy();}delete page.controlButton;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _427=this.pane2button[this._currentChild.id];_427.set("checked",false);dijit.setWaiState(_427.focusNode,"selected","false");_427.focusNode.setAttribute("tabIndex","-1");}var _428=this.pane2button[page.id];_428.set("checked",true);dijit.setWaiState(_428.focusNode,"selected","true");this._currentChild=page;_428.focusNode.setAttribute("tabIndex","0");var _429=dijit.byId(this.containerId);dijit.setWaiState(_429.containerNode,"labelledby",_428.id);},onButtonClick:function(page){var _42a=dijit.byId(this.containerId);_42a.selectChild(page);},onCloseButtonClick:function(page){var _42b=dijit.byId(this.containerId);_42b.closeChild(page);if(this._currentChild){var b=this.pane2button[this._currentChild.id];if(b){dijit.focus(b.focusNode||b.domNode);}}},adjacent:function(_42c){if(!this.isLeftToRight()&&(!this.tabPosition||/top|bottom/.test(this.tabPosition))){_42c=!_42c;}var _42d=this.getChildren();var _42e=dojo.indexOf(_42d,this.pane2button[this._currentChild.id]);var _42f=_42c?1:_42d.length-1;return _42d[(_42e+_42f)%_42d.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _430=null;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.charOrCode){case k.LEFT_ARROW:case k.UP_ARROW:if(!e._djpage){_430=false;}break;case k.PAGE_UP:if(e.ctrlKey){_430=false;}break;case k.RIGHT_ARROW:case k.DOWN_ARROW:if(!e._djpage){_430=true;}break;case k.PAGE_DOWN:if(e.ctrlKey){_430=true;}break;case k.HOME:case k.END:var _431=this.getChildren();if(_431&&_431.length){_431[e.charOrCode==k.HOME?0:_431.length-1].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.charOrCode===k.TAB){this.adjacent(!e.shiftKey).onClick();dojo.stopEvent(e);}else{if(e.charOrCode=="w"){if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);}}}}if(_430!==null){this.adjacent(_430).onClick();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",buildRendering:function(evt){this.inherited(arguments);dijit.setWaiRole((this.focusNode||this.domNode),"tab");},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});}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,persist:false,baseClass:"dijitStackContainer",buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitLayoutContainer");dijit.setWaiRole(this.containerNode,"tabpanel");},postCreate:function(){this.inherited(arguments);this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _432=this.getChildren();dojo.forEach(_432,this._setupChild,this);if(this.persist){this.selectedChildWidget=dijit.byId(dojo.cookie(this.id+"_selectedChild"));}else{dojo.some(_432,function(_433){if(_433.selected){this.selectedChildWidget=_433;}return _433.selected;},this);}var _434=this.selectedChildWidget;if(!_434&&_432[0]){_434=this.selectedChildWidget=_432[0];_434.selected=true;}dojo.publish(this.id+"-startup",[{children:_432,selected:_434}]);this.inherited(arguments);},resize:function(){var _435=this.selectedChildWidget;if(_435&&!this._hasBeenShown){this._hasBeenShown=true;this._showChild(_435);}this.inherited(arguments);},_setupChild:function(_436){this.inherited(arguments);dojo.replaceClass(_436.domNode,"dijitHidden","dijitVisible");_436.domNode.title="";},addChild:function(_437,_438){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-addChild",[_437,_438]);this.layout();if(!this.selectedChildWidget){this.selectChild(_437);}}},removeChild:function(page){this.inherited(arguments);if(this._started){dojo.publish(this.id+"-removeChild",[page]);}if(this._beingDestroyed){return;}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _439=this.getChildren();if(_439.length){this.selectChild(_439[0]);}}}if(this._started){this.layout();}},selectChild:function(page,_43a){page=dijit.byId(page);if(this.selectedChildWidget!=page){var d=this._transition(page,this.selectedChildWidget,_43a);this._set("selectedChildWidget",page);dojo.publish(this.id+"-selectChild",[page]);if(this.persist){dojo.cookie(this.id+"_selectedChild",this.selectedChildWidget.id);}}return d;},_transition:function(_43b,_43c,_43d){if(_43c){this._hideChild(_43c);}var d=this._showChild(_43b);if(_43b.resize){if(this.doLayout){_43b.resize(this._containerContentBox||this._contentBox);}else{_43b.resize();}}return d;},_adjacent:function(_43e){var _43f=this.getChildren();var _440=dojo.indexOf(_43f,this.selectedChildWidget);_440+=_43e?1:_43f.length-1;return _43f[_440%_43f.length];},forward:function(){return this.selectChild(this._adjacent(true),true);},back:function(){return this.selectChild(this._adjacent(false),true);},_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._containerContentBox||this._contentBox);}},_showChild:function(page){var _441=this.getChildren();page.isFirstChild=(page==_441[0]);page.isLastChild=(page==_441[_441.length-1]);page._set("selected",true);dojo.replaceClass(page.domNode,"dijitVisible","dijitHidden");return page._onShow()||true;},_hideChild:function(page){page._set("selected",false);dojo.replaceClass(page.domNode,"dijitHidden","dijitVisible");page.onHide();},closeChild:function(page){var _442=page.onClose(this,page);if(_442){this.removeChild(page);page.destroyRecursive();}},destroyDescendants:function(_443){dojo.forEach(this.getChildren(),function(_444){this.removeChild(_444);_444.destroyRecursive(_443);},this);}});dojo.extend(dijit._Widget,{selected:false,closable:false,iconClass:"",showTitle:true});}if(!dojo._hasResource["dijit.layout.AccordionPane"]){dojo._hasResource["dijit.layout.AccordionPane"]=true;dojo.provide("dijit.layout.AccordionPane");dojo.declare("dijit.layout.AccordionPane",dijit.layout.ContentPane,{constructor:function(){dojo.deprecated("dijit.layout.AccordionPane deprecated, use ContentPane instead","","2.0");},onSelected:function(){}});}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:dijit.defaultDuration,buttonWidget:"dijit.layout._AccordionButton",baseClass:"dijitAccordionContainer",buildRendering:function(){this.inherited(arguments);this.domNode.style.overflow="hidden";dijit.setWaiRole(this.domNode,"tablist");},startup:function(){if(this._started){return;}this.inherited(arguments);if(this.selectedChildWidget){var _445=this.selectedChildWidget.containerNode.style;_445.display="";_445.overflow="auto";this.selectedChildWidget._wrapperWidget.set("selected",true);}},layout:function(){var _446=this.selectedChildWidget;if(!_446){return;}var _447=_446._wrapperWidget.domNode,_448=dojo._getMarginExtents(_447),_449=dojo._getPadBorderExtents(_447),_44a=_446._wrapperWidget.containerNode,_44b=dojo._getMarginExtents(_44a),_44c=dojo._getPadBorderExtents(_44a),_44d=this._contentBox;var _44e=0;dojo.forEach(this.getChildren(),function(_44f){if(_44f!=_446){_44e+=dojo._getMarginSize(_44f._wrapperWidget.domNode).h;}});this._verticalSpace=_44d.h-_44e-_448.h-_449.h-_44b.h-_44c.h-_446._buttonWidget.getTitleHeight();this._containerContentBox={h:this._verticalSpace,w:this._contentBox.w-_448.w-_449.w-_44b.w-_44c.w};if(_446){_446.resize(this._containerContentBox);}},_setupChild:function(_450){_450._wrapperWidget=new dijit.layout._AccordionInnerContainer({contentWidget:_450,buttonWidget:this.buttonWidget,id:_450.id+"_wrapper",dir:_450.dir,lang:_450.lang,parent:this});this.inherited(arguments);},addChild:function(_451,_452){if(this._started){dojo.place(_451.domNode,this.containerNode,_452);if(!_451._started){_451.startup();}this._setupChild(_451);dojo.publish(this.id+"-addChild",[_451,_452]);this.layout();if(!this.selectedChildWidget){this.selectChild(_451);}}else{this.inherited(arguments);}},removeChild:function(_453){if(_453._wrapperWidget){dojo.place(_453.domNode,_453._wrapperWidget.domNode,"after");_453._wrapperWidget.destroy();delete _453._wrapperWidget;}dojo.removeClass(_453.domNode,"dijitHidden");this.inherited(arguments);},getChildren:function(){return dojo.map(this.inherited(arguments),function(_454){return _454.declaredClass=="dijit.layout._AccordionInnerContainer"?_454.contentWidget:_454;},this);},destroy:function(){if(this._animation){this._animation.stop();}dojo.forEach(this.getChildren(),function(_455){if(_455._wrapperWidget){_455._wrapperWidget.destroy();}else{_455.destroyRecursive();}});this.inherited(arguments);},_showChild:function(_456){_456._wrapperWidget.containerNode.style.display="block";return this.inherited(arguments);},_hideChild:function(_457){_457._wrapperWidget.containerNode.style.display="none";this.inherited(arguments);},_transition:function(_458,_459,_45a){if(dojo.isIE<8){_45a=false;}if(this._animation){this._animation.stop(true);delete this._animation;}var self=this;if(_458){_458._wrapperWidget.set("selected",true);var d=this._showChild(_458);if(this.doLayout&&_458.resize){_458.resize(this._containerContentBox);}}if(_459){_459._wrapperWidget.set("selected",false);if(!_45a){this._hideChild(_459);}}if(_45a){var _45b=_458._wrapperWidget.containerNode,_45c=_459._wrapperWidget.containerNode;var _45d=_458._wrapperWidget.containerNode,_45e=dojo._getMarginExtents(_45d),_45f=dojo._getPadBorderExtents(_45d),_460=_45e.h+_45f.h;_45c.style.height=(self._verticalSpace-_460)+"px";this._animation=new dojo.Animation({node:_45b,duration:this.duration,curve:[1,this._verticalSpace-_460-1],onAnimate:function(_461){_461=Math.floor(_461);_45b.style.height=_461+"px";_45c.style.height=(self._verticalSpace-_460-_461)+"px";},onEnd:function(){delete self._animation;_45b.style.height="auto";_459._wrapperWidget.containerNode.style.display="none";_45c.style.height="auto";self._hideChild(_459);}});this._animation.onStop=this._animation.onEnd;this._animation.play();}return d;},_onKeyPress:function(e,_462){if(this.disabled||e.altKey||!(_462||e.ctrlKey)){return;}var k=dojo.keys,c=e.charOrCode;if((_462&&(c==k.LEFT_ARROW||c==k.UP_ARROW))||(e.ctrlKey&&c==k.PAGE_UP)){this._adjacent(false)._buttonWidget._onTitleClick();dojo.stopEvent(e);}else{if((_462&&(c==k.RIGHT_ARROW||c==k.DOWN_ARROW))||(e.ctrlKey&&(c==k.PAGE_DOWN||c==k.TAB))){this._adjacent(true)._buttonWidget._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout._AccordionInnerContainer",[dijit._Widget,dijit._CssStateMixin],{baseClass:"dijitAccordionInnerContainer",isContainer:true,isLayoutContainer:true,buildRendering:function(){this.domNode=dojo.place("<div class='"+this.baseClass+"'>",this.contentWidget.domNode,"after");var _463=this.contentWidget,cls=dojo.getObject(this.buttonWidget);this.button=_463._buttonWidget=(new cls({contentWidget:_463,label:_463.title,title:_463.tooltip,dir:_463.dir,lang:_463.lang,iconClass:_463.iconClass,id:_463.id+"_button",parent:this.parent})).placeAt(this.domNode);this.containerNode=dojo.place("<div class='dijitAccordionChildWrapper' style='display:none'>",this.domNode);dojo.place(this.contentWidget.domNode,this.containerNode);},postCreate:function(){this.inherited(arguments);var _464=this.button;this._contentWidgetWatches=[this.contentWidget.watch("title",dojo.hitch(this,function(name,_465,_466){_464.set("label",_466);})),this.contentWidget.watch("tooltip",dojo.hitch(this,function(name,_467,_468){_464.set("title",_468);})),this.contentWidget.watch("iconClass",dojo.hitch(this,function(name,_469,_46a){_464.set("iconClass",_46a);}))];},_setSelectedAttr:function(_46b){this._set("selected",_46b);this.button.set("selected",_46b);if(_46b){var cw=this.contentWidget;if(cw.onSelected){cw.onSelected();}}},startup:function(){this.contentWidget.startup();},destroy:function(){this.button.destroyRecursive();dojo.forEach(this._contentWidgetWatches||[],function(w){w.unwatch();});delete this.contentWidget._buttonWidget;delete this.contentWidget._wrapperWidget;this.inherited(arguments);},destroyDescendants:function(){this.contentWidget.destroyRecursive();}});dojo.declare("dijit.layout._AccordionButton",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:dojo.cache("dijit.layout","templates/AccordionButton.html","<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' role=\"tab\" aria-expanded=\"false\"\n\t\t><span class='dijitInline dijitAccordionArrow' role=\"presentation\"></span\n\t\t><span class='arrowTextUp' role=\"presentation\">+</span\n\t\t><span class='arrowTextDown' role=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap),{label:{node:"titleTextNode",type:"innerHTML"},title:{node:"titleTextNode",type:"attribute",attribute:"title"},iconClass:{node:"iconNode",type:"class"}}),baseClass:"dijitAccordionTitle",getParent:function(){return this.parent;},buildRendering:function(){this.inherited(arguments);var _46c=this.id.replace(" ","_");dojo.attr(this.titleTextNode,"id",_46c+"_title");dijit.setWaiState(this.focusNode,"labelledby",dojo.attr(this.titleTextNode,"id"));dojo.setSelectable(this.domNode,false);},getTitleHeight:function(){return dojo._getMarginSize(this.domNode).h;},_onTitleClick:function(){var _46d=this.getParent();_46d.selectChild(this.contentWidget,true);dijit.focus(this.focusNode);},_onTitleKeyPress:function(evt){return this.getParent()._onKeyPress(evt,this.contentWidget);},_setSelectedAttr:function(_46e){this._set("selected",_46e);dijit.setWaiState(this.focusNode,"expanded",_46e);dijit.setWaiState(this.focusNode,"selected",_46e);this.focusNode.setAttribute("tabIndex",_46e?"0":"-1");}});}if(!dojo._hasResource["dijit.layout.BorderContainer"]){dojo._hasResource["dijit.layout.BorderContainer"]=true;dojo.provide("dijit.layout.BorderContainer");dojo.declare("dijit.layout.BorderContainer",dijit.layout._LayoutWidget,{design:"headline",gutters:true,liveSplitters:true,persist:false,baseClass:"dijitBorderContainer",_splitterClass:"dijit.layout._Splitter",postMixInProperties:function(){if(!this.gutters){this.baseClass+="NoGutter";}this.inherited(arguments);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),this._setupChild,this);this.inherited(arguments);},_setupChild:function(_46f){var _470=_46f.region;if(_470){this.inherited(arguments);dojo.addClass(_46f.domNode,this.baseClass+"Pane");var ltr=this.isLeftToRight();if(_470=="leading"){_470=ltr?"left":"right";}if(_470=="trailing"){_470=ltr?"right":"left";}if(_470!="center"&&(_46f.splitter||this.gutters)&&!_46f._splitterWidget){var _471=dojo.getObject(_46f.splitter?this._splitterClass:"dijit.layout._Gutter");var _472=new _471({id:_46f.id+"_splitter",container:this,child:_46f,region:_470,live:this.liveSplitters});_472.isSplitter=true;_46f._splitterWidget=_472;dojo.place(_472.domNode,_46f.domNode,"after");_472.startup();}_46f.region=_470;}},layout:function(){this._layoutChildren();},addChild:function(_473,_474){this.inherited(arguments);if(this._started){this.layout();}},removeChild:function(_475){var _476=_475.region;var _477=_475._splitterWidget;if(_477){_477.destroy();delete _475._splitterWidget;}this.inherited(arguments);if(this._started){this._layoutChildren();}dojo.removeClass(_475.domNode,this.baseClass+"Pane");dojo.style(_475.domNode,{top:"auto",bottom:"auto",left:"auto",right:"auto",position:"static"});dojo.style(_475.domNode,_476=="top"||_476=="bottom"?"width":"height","auto");},getChildren:function(){return dojo.filter(this.inherited(arguments),function(_478){return !_478.isSplitter;});},getSplitter:function(_479){return dojo.filter(this.getChildren(),function(_47a){return _47a.region==_479;})[0]._splitterWidget;},resize:function(_47b,_47c){if(!this.cs||!this.pe){var node=this.domNode;this.cs=dojo.getComputedStyle(node);this.pe=dojo._getPadExtents(node,this.cs);this.pe.r=dojo._toPixelValue(node,this.cs.paddingRight);this.pe.b=dojo._toPixelValue(node,this.cs.paddingBottom);dojo.style(node,"padding","0px");}this.inherited(arguments);},_layoutChildren:function(_47d,_47e){if(!this._borderBox||!this._borderBox.h){return;}var _47f=dojo.map(this.getChildren(),function(_480,idx){return {pane:_480,weight:[_480.region=="center"?Infinity:0,_480.layoutPriority,(this.design=="sidebar"?1:-1)*(/top|bottom/.test(_480.region)?1:-1),idx]};},this);_47f.sort(function(a,b){var aw=a.weight,bw=b.weight;for(var i=0;i<aw.length;i++){if(aw[i]!=bw[i]){return aw[i]-bw[i];}}return 0;});var _481=[];dojo.forEach(_47f,function(_482){var pane=_482.pane;_481.push(pane);if(pane._splitterWidget){_481.push(pane._splitterWidget);}});var dim={l:this.pe.l,t:this.pe.t,w:this._borderBox.w-this.pe.w,h:this._borderBox.h-this.pe.h};dijit.layout.layoutChildren(this.domNode,dim,_481,_47d,_47e);},destroyRecursive:function(){dojo.forEach(this.getChildren(),function(_483){var _484=_483._splitterWidget;if(_484){_484.destroy();}delete _483._splitterWidget;});this.inherited(arguments);}});dojo.extend(dijit._Widget,{region:"",layoutPriority:0,splitter:false,minSize:0,maxSize:Infinity});dojo.declare("dijit.layout._Splitter",[dijit._Widget,dijit._Templated],{live:true,templateString:"<div class=\"dijitSplitter\" dojoAttachEvent=\"onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse\" tabIndex=\"0\" role=\"separator\"><div class=\"dijitSplitterThumb\"></div></div>",postMixInProperties:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);this._factor=/top|left/.test(this.region)?1:-1;this._cookieName=this.container.id+"_"+this.region;},buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V"));if(this.container.persist){var _485=dojo.cookie(this._cookieName);if(_485){this.child.domNode.style[this.horizontal?"height":"width"]=_485;}}},_computeMaxSize:function(){var dim=this.horizontal?"h":"w",_486=dojo.marginBox(this.child.domNode)[dim],_487=dojo.filter(this.container.getChildren(),function(_488){return _488.region=="center";})[0],_489=dojo.marginBox(_487.domNode)[dim];return Math.min(this.child.maxSize,_486+_489);},_startDrag:function(e){if(!this.cover){this.cover=dojo.doc.createElement("div");dojo.addClass(this.cover,"dijitSplitterCover");dojo.place(this.cover,this.child.domNode,"after");}dojo.addClass(this.cover,"dijitSplitterCoverActive");if(this.fake){dojo.destroy(this.fake);}if(!(this._resize=this.live)){(this.fake=this.domNode.cloneNode(true)).removeAttribute("id");dojo.addClass(this.domNode,"dijitSplitterShadow");dojo.place(this.fake,this.domNode,"after");}dojo.addClass(this.domNode,"dijitSplitterActive dijitSplitter"+(this.horizontal?"H":"V")+"Active");if(this.fake){dojo.removeClass(this.fake,"dijitSplitterHover dijitSplitter"+(this.horizontal?"H":"V")+"Hover");}var _48a=this._factor,_48b=this.horizontal,axis=_48b?"pageY":"pageX",_48c=e[axis],_48d=this.domNode.style,dim=_48b?"h":"w",_48e=dojo.marginBox(this.child.domNode)[dim],max=this._computeMaxSize(),min=this.child.minSize||20,_48f=this.region,_490=_48f=="top"||_48f=="bottom"?"top":"left",_491=parseInt(_48d[_490],10),_492=this._resize,_493=dojo.hitch(this.container,"_layoutChildren",this.child.id),de=dojo.doc;this._handlers=(this._handlers||[]).concat([dojo.connect(de,"onmousemove",this._drag=function(e,_494){var _495=e[axis]-_48c,_496=_48a*_495+_48e,_497=Math.max(Math.min(_496,max),min);if(_492||_494){_493(_497);}_48d[_490]=_495+_491+_48a*(_497-_496)+"px";}),dojo.connect(de,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent),dojo.connect(de,"onmouseup",this,"_stopDrag")]);dojo.stopEvent(e);},_onMouse:function(e){var o=(e.type=="mouseover"||e.type=="mouseenter");dojo.toggleClass(this.domNode,"dijitSplitterHover",o);dojo.toggleClass(this.domNode,"dijitSplitter"+(this.horizontal?"H":"V")+"Hover",o);},_stopDrag:function(e){try{if(this.cover){dojo.removeClass(this.cover,"dijitSplitterCoverActive");}if(this.fake){dojo.destroy(this.fake);}dojo.removeClass(this.domNode,"dijitSplitterActive dijitSplitter"+(this.horizontal?"H":"V")+"Active dijitSplitterShadow");this._drag(e);this._drag(e,true);}finally{this._cleanupHandlers();delete this._drag;}if(this.container.persist){dojo.cookie(this._cookieName,this.child.domNode.style[this.horizontal?"height":"width"],{expires:365});}},_cleanupHandlers:function(){dojo.forEach(this._handlers,dojo.disconnect);delete this._handlers;},_onKeyPress:function(e){this._resize=true;var _498=this.horizontal;var tick=1;var dk=dojo.keys;switch(e.charOrCode){case _498?dk.UP_ARROW:dk.LEFT_ARROW:tick*=-1;case _498?dk.DOWN_ARROW:dk.RIGHT_ARROW:break;default:return;}var _499=dojo._getMarginSize(this.child.domNode)[_498?"h":"w"]+this._factor*tick;this.container._layoutChildren(this.child.id,Math.max(Math.min(_499,this._computeMaxSize()),this.child.minSize));dojo.stopEvent(e);},destroy:function(){this._cleanupHandlers();delete this.child;delete this.container;delete this.cover;delete this.fake;this.inherited(arguments);}});dojo.declare("dijit.layout._Gutter",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitGutter\" role=\"presentation\"></div>",postMixInProperties:function(){this.inherited(arguments);this.horizontal=/top|bottom/.test(this.region);},buildRendering:function(){this.inherited(arguments);dojo.addClass(this.domNode,"dijitGutter"+(this.horizontal?"H":"V"));}});}if(!dojo._hasResource["dijit.layout._TabContainerBase"]){dojo._hasResource["dijit.layout._TabContainerBase"]=true;dojo.provide("dijit.layout._TabContainerBase");dojo.declare("dijit.layout._TabContainerBase",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",baseClass:"dijitTabContainer",tabStrip:false,nested:false,templateString:dojo.cache("dijit.layout","templates/TabContainer.html","<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" dojoAttachPoint=\"tablistNode\"></div>\n\t<div dojoAttachPoint=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" dojoAttachPoint=\"containerNode\"></div>\n</div>\n"),postMixInProperties:function(){this.baseClass+=this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"");this.srcNodeRef&&dojo.style(this.srcNodeRef,"visibility","hidden");this.inherited(arguments);},buildRendering:function(){this.inherited(arguments);this.tablist=this._makeController(this.tablistNode);if(!this.doLayout){dojo.addClass(this.domNode,"dijitTabContainerNoLayout");}if(this.nested){dojo.addClass(this.domNode,"dijitTabContainerNested");dojo.addClass(this.tablist.containerNode,"dijitTabContainerTabListNested");dojo.addClass(this.tablistSpacer,"dijitTabContainerSpacerNested");dojo.addClass(this.containerNode,"dijitTabPaneWrapperNested");}else{dojo.addClass(this.domNode,"tabStrip-"+(this.tabStrip?"enabled":"disabled"));}},_setupChild:function(tab){dojo.addClass(tab.domNode,"dijitTabPane");this.inherited(arguments);},startup:function(){if(this._started){return;}this.tablist.startup();this.inherited(arguments);},layout:function(){if(!this._contentBox||typeof (this._contentBox.l)=="undefined"){return;}var sc=this.selectedChildWidget;if(this.doLayout){var _49a=this.tabPosition.replace(/-h/,"");this.tablist.layoutAlign=_49a;var _49b=[this.tablist,{domNode:this.tablistSpacer,layoutAlign:_49a},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_49b);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_49b[2]);if(sc&&sc.resize){sc.resize(this._containerContentBox);}}else{if(this.tablist.resize){var s=this.tablist.domNode.style;s.width="0";var _49c=dojo.contentBox(this.domNode).w;s.width="";this.tablist.resize({w:_49c});}if(sc&&sc.resize){sc.resize();}}},destroy:function(){if(this.tablist){this.tablist.destroy();}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.TabController"]){dojo._hasResource["dijit.layout.TabController"]=true;dojo.provide("dijit.layout.TabController");dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>",tabPosition:"top",buttonWidget:"dijit.layout._TabButton",_rectifyRtlTabList:function(){if(0>=this.tabPosition.indexOf("-h")){return;}if(!this.pane2button){return;}var _49d=0;for(var pane in this.pane2button){var ow=this.pane2button[pane].innerDiv.scrollWidth;_49d=Math.max(_49d,ow);}for(pane in this.pane2button){this.pane2button[pane].innerDiv.style.width=_49d+"px";}}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",cssStateNodes:{closeNode:"dijitTabCloseButton"},templateString:dojo.cache("dijit.layout","templates/_TabButton.html","<div role=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n <div role=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <div role=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n \t<div role=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" dojoAttachPoint='iconNode' />\n\t\t <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t \t\tdojoAttachEvent='onclick: onClickCloseButton' role=\"presentation\">\n\t\t <span dojoAttachPoint='closeText' class='dijitTabCloseText'>[x]</span\n\t\t ></span>\n\t\t\t</div>\n </div>\n </div>\n</div>\n"),scrollOnFocus:false,buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.containerNode,false);},startup:function(){this.inherited(arguments);var n=this.domNode;setTimeout(function(){n.className=n.className;},1);},_setCloseButtonAttr:function(disp){this._set("closeButton",disp);dojo.toggleClass(this.innerDiv,"dijitClosable",disp);this.closeNode.style.display=disp?"":"none";if(disp){var _49e=dojo.i18n.getLocalization("dijit","common");if(this.closeNode){dojo.attr(this.closeNode,"title",_49e.itemClose);}var _49e=dojo.i18n.getLocalization("dijit","common");this._closeMenu=new dijit.Menu({id:this.id+"_Menu",dir:this.dir,lang:this.lang,targetNodeIds:[this.domNode]});this._closeMenu.addChild(new dijit.MenuItem({label:_49e.itemClose,dir:this.dir,lang:this.lang,onClick:dojo.hitch(this,"onClickCloseButton")}));}else{if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}}},_setLabelAttr:function(_49f){this.inherited(arguments);if(this.showLabel==false&&!this.params.title){this.iconNode.alt=dojo.trim(this.containerNode.innerText||this.containerNode.textContent||"");}},destroy:function(){if(this._closeMenu){this._closeMenu.destroyRecursive();delete this._closeMenu;}this.inherited(arguments);}});}if(!dojo._hasResource["dijit.layout.ScrollingTabController"]){dojo._hasResource["dijit.layout.ScrollingTabController"]=true;dojo.provide("dijit.layout.ScrollingTabController");dojo.declare("dijit.layout.ScrollingTabController",dijit.layout.TabController,{templateString:dojo.cache("dijit.layout","templates/ScrollingTabController.html","<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" containerId=\"${containerId}\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdropDownPosition=\"below-alt, above-alt\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=\"false\">▼</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=\"false\">◀</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=\"false\">▶</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"),useMenu:true,useSlider:true,tabStripClass:"",widgetsInTemplate:true,_minScroll:5,attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{"class":"containerNode"}),buildRendering:function(){this.inherited(arguments);var n=this.domNode;this.scrollNode=this.tablistWrapper;this._initButtons();if(!this.tabStripClass){this.tabStripClass="dijitTabContainer"+this.tabPosition.charAt(0).toUpperCase()+this.tabPosition.substr(1).replace(/-.*/,"")+"None";dojo.addClass(n,"tabStrip-disabled");}dojo.addClass(this.tablistWrapper,this.tabStripClass);},onStartup:function(){this.inherited(arguments);dojo.style(this.domNode,"visibility","visible");this._postStartup=true;},onAddChild:function(page,_4a0){this.inherited(arguments);dojo.forEach(["label","iconClass"],function(attr){this.pane2watches[page.id].push(this.pane2button[page.id].watch(attr,dojo.hitch(this,function(name,_4a1,_4a2){if(this._postStartup&&this._dim){this.resize(this._dim);}})));},this);dojo.style(this.containerNode,"width",(dojo.style(this.containerNode,"width")+200)+"px");},onRemoveChild:function(page,_4a3){var _4a4=this.pane2button[page.id];if(this._selectedTab===_4a4.domNode){this._selectedTab=null;}this.inherited(arguments);},_initButtons:function(){this._btnWidth=0;this._buttons=dojo.query("> .tabStripButton",this.domNode).filter(function(btn){if((this.useMenu&&btn==this._menuBtn.domNode)||(this.useSlider&&(btn==this._rightBtn.domNode||btn==this._leftBtn.domNode))){this._btnWidth+=dojo._getMarginSize(btn).w;return true;}else{dojo.style(btn,"display","none");return false;}},this);},_getTabsWidth:function(){var _4a5=this.getChildren();if(_4a5.length){var _4a6=_4a5[this.isLeftToRight()?0:_4a5.length-1].domNode,_4a7=_4a5[this.isLeftToRight()?_4a5.length-1:0].domNode;return _4a7.offsetLeft+dojo.style(_4a7,"width")-_4a6.offsetLeft;}else{return 0;}},_enableBtn:function(_4a8){var _4a9=this._getTabsWidth();_4a8=_4a8||dojo.style(this.scrollNode,"width");return _4a9>0&&_4a8<_4a9;},resize:function(dim){if(this.domNode.offsetWidth==0){return;}this._dim=dim;this.scrollNode.style.height="auto";this._contentBox=dijit.layout.marginBox2contentBox(this.domNode,{h:0,w:dim.w});this._contentBox.h=this.scrollNode.offsetHeight;dojo.contentBox(this.domNode,this._contentBox);var _4aa=this._enableBtn(this._contentBox.w);this._buttons.style("display",_4aa?"":"none");this._leftBtn.layoutAlign="left";this._rightBtn.layoutAlign="right";this._menuBtn.layoutAlign=this.isLeftToRight()?"right":"left";dijit.layout.layoutChildren(this.domNode,this._contentBox,[this._menuBtn,this._leftBtn,this._rightBtn,{domNode:this.scrollNode,layoutAlign:"client"}]);if(this._selectedTab){if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var w=this.scrollNode,sl=this._convertToScrollLeft(this._getScrollForSelectedTab());w.scrollLeft=sl;}this._setButtonClass(this._getScroll());this._postResize=true;return {h:this._contentBox.h,w:dim.w};},_getScroll:function(){var sl=(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit)?this.scrollNode.scrollLeft:dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width")+(dojo.isIE==8?-1:1)*this.scrollNode.scrollLeft;return sl;},_convertToScrollLeft:function(val){if(this.isLeftToRight()||dojo.isIE<8||(dojo.isIE&&dojo.isQuirks)||dojo.isWebKit){return val;}else{var _4ab=dojo.style(this.containerNode,"width")-dojo.style(this.scrollNode,"width");return (dojo.isIE==8?-1:1)*(val-_4ab);}},onSelectChild:function(page){var tab=this.pane2button[page.id];if(!tab||!page){return;}var node=tab.domNode;if(this._postResize&&node!=this._selectedTab){this._selectedTab=node;var sl=this._getScroll();if(sl>node.offsetLeft||sl+dojo.style(this.scrollNode,"width")<node.offsetLeft+dojo.style(node,"width")){this.createSmoothScroll().play();}}this.inherited(arguments);},_getScrollBounds:function(){var _4ac=this.getChildren(),_4ad=dojo.style(this.scrollNode,"width"),_4ae=dojo.style(this.containerNode,"width"),_4af=_4ae-_4ad,_4b0=this._getTabsWidth();if(_4ac.length&&_4b0>_4ad){return {min:this.isLeftToRight()?0:_4ac[_4ac.length-1].domNode.offsetLeft,max:this.isLeftToRight()?(_4ac[_4ac.length-1].domNode.offsetLeft+dojo.style(_4ac[_4ac.length-1].domNode,"width"))-_4ad:_4af};}else{var _4b1=this.isLeftToRight()?0:_4af;return {min:_4b1,max:_4b1};}},_getScrollForSelectedTab:function(){var w=this.scrollNode,n=this._selectedTab,_4b2=dojo.style(this.scrollNode,"width"),_4b3=this._getScrollBounds();var pos=(n.offsetLeft+dojo.style(n,"width")/2)-_4b2/2;pos=Math.min(Math.max(pos,_4b3.min),_4b3.max);return pos;},createSmoothScroll:function(x){if(arguments.length>0){var _4b4=this._getScrollBounds();x=Math.min(Math.max(x,_4b4.min),_4b4.max);}else{x=this._getScrollForSelectedTab();}if(this._anim&&this._anim.status()=="playing"){this._anim.stop();}var self=this,w=this.scrollNode,anim=new dojo._Animation({beforeBegin:function(){if(this.curve){delete this.curve;}var oldS=w.scrollLeft,newS=self._convertToScrollLeft(x);anim.curve=new dojo._Line(oldS,newS);},onAnimate:function(val){w.scrollLeft=val;}});this._anim=anim;this._setButtonClass(x);return anim;},_getBtnNode:function(e){var n=e.target;while(n&&!dojo.hasClass(n,"tabStripButton")){n=n.parentNode;}return n;},doSlideRight:function(e){this.doSlide(1,this._getBtnNode(e));},doSlideLeft:function(e){this.doSlide(-1,this._getBtnNode(e));},doSlide:function(_4b5,node){if(node&&dojo.hasClass(node,"dijitTabDisabled")){return;}var _4b6=dojo.style(this.scrollNode,"width");var d=(_4b6*0.75)*_4b5;var to=this._getScroll()+d;this._setButtonClass(to);this.createSmoothScroll(to).play();},_setButtonClass:function(_4b7){var _4b8=this._getScrollBounds();this._leftBtn.set("disabled",_4b7<=_4b8.min);this._rightBtn.set("disabled",_4b7>=_4b8.max);}});dojo.declare("dijit.layout._ScrollingTabControllerButtonMixin",null,{baseClass:"dijitTab tabStripButton",templateString:dojo.cache("dijit.layout","templates/_ScrollingTabControllerButton.html","<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"),tabIndex:"",isFocusable:function(){return false;}});dojo.declare("dijit.layout._ScrollingTabControllerButton",[dijit.form.Button,dijit.layout._ScrollingTabControllerButtonMixin]);dojo.declare("dijit.layout._ScrollingTabControllerMenuButton",[dijit.form.Button,dijit._HasDropDown,dijit.layout._ScrollingTabControllerButtonMixin],{containerId:"",tabIndex:"-1",isLoaded:function(){return false;},loadDropDown:function(_4b9){this.dropDown=new dijit.Menu({id:this.containerId+"_menu",dir:this.dir,lang:this.lang});var _4ba=dijit.byId(this.containerId);dojo.forEach(_4ba.getChildren(),function(page){var _4bb=new dijit.MenuItem({id:page.id+"_stcMi",label:page.title,iconClass:page.iconClass,dir:page.dir,lang:page.lang,onClick:function(){_4ba.selectChild(page);}});this.dropDown.addChild(_4bb);},this);_4b9();},closeDropDown:function(_4bc){this.inherited(arguments);if(this.dropDown){this.dropDown.destroyRecursive();delete this.dropDown;}}});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",dijit.layout._TabContainerBase,{useMenu:true,useSlider:true,controllerWidget:"",_makeController:function(_4bd){var cls=this.baseClass+"-tabs"+(this.doLayout?"":" dijitTabNoLayout"),_4be=dojo.getObject(this.controllerWidget);return new _4be({id:this.id+"_tablist",dir:this.dir,lang:this.lang,tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id,"class":cls,nested:this.nested,useMenu:this.useMenu,useSlider:this.useSlider,tabStripClass:this.tabStrip?this.baseClass+(this.tabStrip?"":"No")+"Strip":null},_4bd);},postMixInProperties:function(){this.inherited(arguments);if(!this.controllerWidget){this.controllerWidget=(this.tabPosition=="top"||this.tabPosition=="bottom")&&!this.nested?"dijit.layout.ScrollingTabController":"dijit.layout.TabController";}}});}if(!dojo._hasResource["dojo.number"]){dojo._hasResource["dojo.number"]=true;dojo.provide("dojo.number");dojo.getObject("number",true,dojo);dojo.number.format=function(_4bf,_4c0){_4c0=dojo.mixin({},_4c0||{});var _4c1=dojo.i18n.normalizeLocale(_4c0.locale),_4c2=dojo.i18n.getLocalization("dojo.cldr","number",_4c1);_4c0.customs=_4c2;var _4c3=_4c0.pattern||_4c2[(_4c0.type||"decimal")+"Format"];if(isNaN(_4bf)||Math.abs(_4bf)==Infinity){return null;}return dojo.number._applyPattern(_4bf,_4c3,_4c0);};dojo.number._numberPatternRE=/[#0,]*[#0](?:\.0*#*)?/;dojo.number._applyPattern=function(_4c4,_4c5,_4c6){_4c6=_4c6||{};var _4c7=_4c6.customs.group,_4c8=_4c6.customs.decimal,_4c9=_4c5.split(";"),_4ca=_4c9[0];_4c5=_4c9[(_4c4<0)?1:0]||("-"+_4ca);if(_4c5.indexOf("%")!=-1){_4c4*=100;}else{if(_4c5.indexOf("‰")!=-1){_4c4*=1000;}else{if(_4c5.indexOf("¤")!=-1){_4c7=_4c6.customs.currencyGroup||_4c7;_4c8=_4c6.customs.currencyDecimal||_4c8;_4c5=_4c5.replace(/\u00a4{1,3}/,function(_4cb){var prop=["symbol","currency","displayName"][_4cb.length-1];return _4c6[prop]||_4c6.currency||"";});}else{if(_4c5.indexOf("E")!=-1){throw new Error("exponential notation not supported");}}}}var _4cc=dojo.number._numberPatternRE;var _4cd=_4ca.match(_4cc);if(!_4cd){throw new Error("unable to find a number expression in pattern: "+_4c5);}if(_4c6.fractional===false){_4c6.places=0;}return _4c5.replace(_4cc,dojo.number._formatAbsolute(_4c4,_4cd[0],{decimal:_4c8,group:_4c7,places:_4c6.places,round:_4c6.round}));};dojo.number.round=function(_4ce,_4cf,_4d0){var _4d1=10/(_4d0||10);return (_4d1*+_4ce).toFixed(_4cf)/_4d1;};if((0.9).toFixed()==0){(function(){var _4d2=dojo.number.round;dojo.number.round=function(v,p,m){var d=Math.pow(10,-p||0),a=Math.abs(v);if(!v||a>=d||a*Math.pow(10,p+1)<5){d=0;}return _4d2(v,p,m)+(v>0?d:-d);};})();}dojo.number._formatAbsolute=function(_4d3,_4d4,_4d5){_4d5=_4d5||{};if(_4d5.places===true){_4d5.places=0;}if(_4d5.places===Infinity){_4d5.places=6;}var _4d6=_4d4.split("."),_4d7=typeof _4d5.places=="string"&&_4d5.places.indexOf(","),_4d8=_4d5.places;if(_4d7){_4d8=_4d5.places.substring(_4d7+1);}else{if(!(_4d8>=0)){_4d8=(_4d6[1]||[]).length;}}if(!(_4d5.round<0)){_4d3=dojo.number.round(_4d3,_4d8,_4d5.round);}var _4d9=String(Math.abs(_4d3)).split("."),_4da=_4d9[1]||"";if(_4d6[1]||_4d5.places){if(_4d7){_4d5.places=_4d5.places.substring(0,_4d7);}var pad=_4d5.places!==undefined?_4d5.places:(_4d6[1]&&_4d6[1].lastIndexOf("0")+1);if(pad>_4da.length){_4d9[1]=dojo.string.pad(_4da,pad,"0",true);}if(_4d8<_4da.length){_4d9[1]=_4da.substr(0,_4d8);}}else{if(_4d9[1]){_4d9.pop();}}var _4db=_4d6[0].replace(",","");pad=_4db.indexOf("0");if(pad!=-1){pad=_4db.length-pad;if(pad>_4d9[0].length){_4d9[0]=dojo.string.pad(_4d9[0],pad);}if(_4db.indexOf("#")==-1){_4d9[0]=_4d9[0].substr(_4d9[0].length-pad);}}var _4dc=_4d6[0].lastIndexOf(","),_4dd,_4de;if(_4dc!=-1){_4dd=_4d6[0].length-_4dc-1;var _4df=_4d6[0].substr(0,_4dc);_4dc=_4df.lastIndexOf(",");if(_4dc!=-1){_4de=_4df.length-_4dc-1;}}var _4e0=[];for(var _4e1=_4d9[0];_4e1;){var off=_4e1.length-_4dd;_4e0.push((off>0)?_4e1.substr(off):_4e1);_4e1=(off>0)?_4e1.slice(0,off):"";if(_4de){_4dd=_4de;delete _4de;}}_4d9[0]=_4e0.reverse().join(_4d5.group||",");return _4d9.join(_4d5.decimal||".");};dojo.number.regexp=function(_4e2){return dojo.number._parseInfo(_4e2).regexp;};dojo.number._parseInfo=function(_4e3){_4e3=_4e3||{};var _4e4=dojo.i18n.normalizeLocale(_4e3.locale),_4e5=dojo.i18n.getLocalization("dojo.cldr","number",_4e4),_4e6=_4e3.pattern||_4e5[(_4e3.type||"decimal")+"Format"],_4e7=_4e5.group,_4e8=_4e5.decimal,_4e9=1;if(_4e6.indexOf("%")!=-1){_4e9/=100;}else{if(_4e6.indexOf("‰")!=-1){_4e9/=1000;}else{var _4ea=_4e6.indexOf("¤")!=-1;if(_4ea){_4e7=_4e5.currencyGroup||_4e7;_4e8=_4e5.currencyDecimal||_4e8;}}}var _4eb=_4e6.split(";");if(_4eb.length==1){_4eb.push("-"+_4eb[0]);}var re=dojo.regexp.buildGroupRE(_4eb,function(_4ec){_4ec="(?:"+dojo.regexp.escapeString(_4ec,".")+")";return _4ec.replace(dojo.number._numberPatternRE,function(_4ed){var _4ee={signed:false,separator:_4e3.strict?_4e7:[_4e7,""],fractional:_4e3.fractional,decimal:_4e8,exponent:false},_4ef=_4ed.split("."),_4f0=_4e3.places;if(_4ef.length==1&&_4e9!=1){_4ef[1]="###";}if(_4ef.length==1||_4f0===0){_4ee.fractional=false;}else{if(_4f0===undefined){_4f0=_4e3.pattern?_4ef[1].lastIndexOf("0")+1:Infinity;}if(_4f0&&_4e3.fractional==undefined){_4ee.fractional=true;}if(!_4e3.places&&(_4f0<_4ef[1].length)){_4f0+=","+_4ef[1].length;}_4ee.places=_4f0;}var _4f1=_4ef[0].split(",");if(_4f1.length>1){_4ee.groupSize=_4f1.pop().length;if(_4f1.length>1){_4ee.groupSize2=_4f1.pop().length;}}return "("+dojo.number._realNumberRegexp(_4ee)+")";});},true);if(_4ea){re=re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g,function(_4f2,_4f3,_4f4,_4f5){var prop=["symbol","currency","displayName"][_4f4.length-1],_4f6=dojo.regexp.escapeString(_4e3[prop]||_4e3.currency||"");_4f3=_4f3?"[\\s\\xa0]":"";_4f5=_4f5?"[\\s\\xa0]":"";if(!_4e3.strict){if(_4f3){_4f3+="*";}if(_4f5){_4f5+="*";}return "(?:"+_4f3+_4f6+_4f5+")?";}return _4f3+_4f6+_4f5;});}return {regexp:re.replace(/[\xa0 ]/g,"[\\s\\xa0]"),group:_4e7,decimal:_4e8,factor:_4e9};};dojo.number.parse=function(_4f7,_4f8){var info=dojo.number._parseInfo(_4f8),_4f9=(new RegExp("^"+info.regexp+"$")).exec(_4f7);if(!_4f9){return NaN;}var _4fa=_4f9[1];if(!_4f9[1]){if(!_4f9[2]){return NaN;}_4fa=_4f9[2];info.factor*=-1;}_4fa=_4fa.replace(new RegExp("["+info.group+"\\s\\xa0"+"]","g"),"").replace(info.decimal,".");return _4fa*info.factor;};dojo.number._realNumberRegexp=function(_4fb){_4fb=_4fb||{};if(!("places" in _4fb)){_4fb.places=Infinity;}if(typeof _4fb.decimal!="string"){_4fb.decimal=".";}if(!("fractional" in _4fb)||/^0/.test(_4fb.places)){_4fb.fractional=[true,false];}if(!("exponent" in _4fb)){_4fb.exponent=[true,false];}if(!("eSigned" in _4fb)){_4fb.eSigned=[true,false];}var _4fc=dojo.number._integerRegexp(_4fb),_4fd=dojo.regexp.buildGroupRE(_4fb.fractional,function(q){var re="";if(q&&(_4fb.places!==0)){re="\\"+_4fb.decimal;if(_4fb.places==Infinity){re="(?:"+re+"\\d+)?";}else{re+="\\d{"+_4fb.places+"}";}}return re;},true);var _4fe=dojo.regexp.buildGroupRE(_4fb.exponent,function(q){if(q){return "([eE]"+dojo.number._integerRegexp({signed:_4fb.eSigned})+")";}return "";});var _4ff=_4fc+_4fd;if(_4fd){_4ff="(?:(?:"+_4ff+")|(?:"+_4fd+"))";}return _4ff+_4fe;};dojo.number._integerRegexp=function(_500){_500=_500||{};if(!("signed" in _500)){_500.signed=[true,false];}if(!("separator" in _500)){_500.separator="";}else{if(!("groupSize" in _500)){_500.groupSize=3;}}var _501=dojo.regexp.buildGroupRE(_500.signed,function(q){return q?"[-+]":"";},true);var _502=dojo.regexp.buildGroupRE(_500.separator,function(sep){if(!sep){return "(?:\\d+)";}sep=dojo.regexp.escapeString(sep);if(sep==" "){sep="\\s";}else{if(sep==" "){sep="\\s\\xa0";}}var grp=_500.groupSize,grp2=_500.groupSize2;if(grp2){var _503="(?:0|[1-9]\\d{0,"+(grp2-1)+"}(?:["+sep+"]\\d{"+grp2+"})*["+sep+"]\\d{"+grp+"})";return ((grp-grp2)>0)?"(?:"+_503+"|(?:0|[1-9]\\d{0,"+(grp-1)+"}))":_503;}return "(?:0|[1-9]\\d{0,"+(grp-1)+"}(?:["+sep+"]\\d{"+grp+"})*)";},true);return _501+_502;};}if(!dojo._hasResource["dijit.ProgressBar"]){dojo._hasResource["dijit.ProgressBar"]=true;dojo.provide("dijit.ProgressBar");dojo.declare("dijit.ProgressBar",[dijit._Widget,dijit._Templated],{progress:"0",value:"",maximum:100,places:0,indeterminate:false,label:"",name:"",templateString:dojo.cache("dijit","templates/ProgressBar.html","<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\" role=\"presentation\"></div\n\t\t><span style=\"visibility:hidden\"> </span\n\t></div\n\t><div dojoAttachPoint=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"),_indeterminateHighContrastImagePath:dojo.moduleUrl("dijit","themes/a11y/indeterminate_progress.gif"),postMixInProperties:function(){this.inherited(arguments);if(!("value" in this.params)){this.value=this.indeterminate?Infinity:this.progress;}},buildRendering:function(){this.inherited(arguments);this.indeterminateHighContrastImage.setAttribute("src",this._indeterminateHighContrastImagePath.toString());this.update();},update:function(_504){dojo.mixin(this,_504||{});var tip=this.internalProgress,ap=this.domNode;var _505=1;if(this.indeterminate){dijit.removeWaiState(ap,"valuenow");dijit.removeWaiState(ap,"valuemin");dijit.removeWaiState(ap,"valuemax");}else{if(String(this.progress).indexOf("%")!=-1){_505=Math.min(parseFloat(this.progress)/100,1);this.progress=_505*this.maximum;}else{this.progress=Math.min(this.progress,this.maximum);_505=this.progress/this.maximum;}dijit.setWaiState(ap,"describedby",this.labelNode.id);dijit.setWaiState(ap,"valuenow",this.progress);dijit.setWaiState(ap,"valuemin",0);dijit.setWaiState(ap,"valuemax",this.maximum);}this.labelNode.innerHTML=this.report(_505);dojo.toggleClass(this.domNode,"dijitProgressBarIndeterminate",this.indeterminate);tip.style.width=(_505*100)+"%";this.onChange();},_setValueAttr:function(v){this._set("value",v);if(v==Infinity){this.update({indeterminate:true});}else{this.update({indeterminate:false,progress:v});}},_setLabelAttr:function(_506){this._set("label",_506);this.update();},_setIndeterminateAttr:function(_507){this.indeterminate=_507;this.update();},report:function(_508){return this.label?this.label:(this.indeterminate?" ":dojo.number.format(_508,{type:"percent",places:this.places,locale:this.lang}));},onChange:function(){}});}if(!dojo._hasResource["dijit.ToolbarSeparator"]){dojo._hasResource["dijit.ToolbarSeparator"]=true;dojo.provide("dijit.ToolbarSeparator");dojo.declare("dijit.ToolbarSeparator",[dijit._Widget,dijit._Templated],{templateString:"<div class=\"dijitToolbarSeparator dijitInline\" role=\"presentation\"></div>",buildRendering:function(){this.inherited(arguments);dojo.setSelectable(this.domNode,false);},isFocusable:function(){return false;}});}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\" role=\"toolbar\" tabIndex=\"${tabIndex}\" dojoAttachPoint=\"containerNode\">"+"</div>",baseClass:"dijitToolbar",postCreate:function(){this.inherited(arguments);this.connectKeyNavHandlers(this.isLeftToRight()?[dojo.keys.LEFT_ARROW]:[dojo.keys.RIGHT_ARROW],this.isLeftToRight()?[dojo.keys.RIGHT_ARROW]:[dojo.keys.LEFT_ARROW]);},startup:function(){if(this._started){return;}this.startupKeyNavChildren();this.inherited(arguments);}});}if(!dojo._hasResource["dojo.DeferredList"]){dojo._hasResource["dojo.DeferredList"]=true;dojo.provide("dojo.DeferredList");dojo.DeferredList=function(list,_509,_50a,_50b,_50c){var _50d=[];dojo.Deferred.call(this);var self=this;if(list.length===0&&!_509){this.resolve([0,[]]);}var _50e=0;dojo.forEach(list,function(item,i){item.then(function(_50f){if(_509){self.resolve([i,_50f]);}else{_510(true,_50f);}},function(_511){if(_50a){self.reject(_511);}else{_510(false,_511);}if(_50b){return null;}throw _511;});function _510(_512,_513){_50d[i]=[_512,_513];_50e++;if(_50e===list.length){self.resolve(_50d);}};});};dojo.DeferredList.prototype=new dojo.Deferred();dojo.DeferredList.prototype.gatherResults=function(_514){var d=new dojo.DeferredList(_514,false,true,false);d.addCallback(function(_515){var ret=[];dojo.forEach(_515,function(_516){ret.push(_516[1]);});return ret;});return d;};}if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){dojo._hasResource["dijit.tree.TreeStoreModel"]=true;dojo.provide("dijit.tree.TreeStoreModel");dojo.declare("dijit.tree.TreeStoreModel",null,{store:null,childrenAttrs:["children"],newItemIdAttr:"id",labelAttr:"",root:null,query:null,deferItemLoadingUntilExpand:false,constructor:function(args){dojo.mixin(this,args);this.connects=[];var _517=this.store;if(!_517.getFeatures()["dojo.data.api.Identity"]){throw new Error("dijit.Tree: store must support dojo.data.Identity");}if(_517.getFeatures()["dojo.data.api.Notification"]){this.connects=this.connects.concat([dojo.connect(_517,"onNew",this,"onNewItem"),dojo.connect(_517,"onDelete",this,"onDeleteItem"),dojo.connect(_517,"onSet",this,"onSetItem")]);}},destroy:function(){dojo.forEach(this.connects,dojo.disconnect);},getRoot:function(_518,_519){if(this.root){_518(this.root);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_51a){if(_51a.length!=1){throw new Error(this.declaredClass+": query "+dojo.toJson(this.query)+" returned "+_51a.length+" items, but must return exactly one item");}this.root=_51a[0];_518(this.root);}),onError:_519});}},mayHaveChildren:function(item){return dojo.some(this.childrenAttrs,function(attr){return this.store.hasAttribute(item,attr);},this);},getChildren:function(_51b,_51c,_51d){var _51e=this.store;if(!_51e.isItemLoaded(_51b)){var _51f=dojo.hitch(this,arguments.callee);_51e.loadItem({item:_51b,onItem:function(_520){_51f(_520,_51c,_51d);},onError:_51d});return;}var _521=[];for(var i=0;i<this.childrenAttrs.length;i++){var vals=_51e.getValues(_51b,this.childrenAttrs[i]);_521=_521.concat(vals);}var _522=0;if(!this.deferItemLoadingUntilExpand){dojo.forEach(_521,function(item){if(!_51e.isItemLoaded(item)){_522++;}});}if(_522==0){_51c(_521);}else{dojo.forEach(_521,function(item,idx){if(!_51e.isItemLoaded(item)){_51e.loadItem({item:item,onItem:function(item){_521[idx]=item;if(--_522==0){_51c(_521);}},onError:_51d});}});}},isItem:function(_523){return this.store.isItem(_523);},fetchItemByIdentity:function(_524){this.store.fetchItemByIdentity(_524);},getIdentity:function(item){return this.store.getIdentity(item);},getLabel:function(item){if(this.labelAttr){return this.store.getValue(item,this.labelAttr);}else{return this.store.getLabel(item);}},newItem:function(args,_525,_526){var _527={parent:_525,attribute:this.childrenAttrs[0]},_528;if(this.newItemIdAttr&&args[this.newItemIdAttr]){this.fetchItemByIdentity({identity:args[this.newItemIdAttr],scope:this,onItem:function(item){if(item){this.pasteItem(item,null,_525,true,_526);}else{_528=this.store.newItem(args,_527);if(_528&&(_526!=undefined)){this.pasteItem(_528,_525,_525,false,_526);}}}});}else{_528=this.store.newItem(args,_527);if(_528&&(_526!=undefined)){this.pasteItem(_528,_525,_525,false,_526);}}},pasteItem:function(_529,_52a,_52b,_52c,_52d){var _52e=this.store,_52f=this.childrenAttrs[0];if(_52a){dojo.forEach(this.childrenAttrs,function(attr){if(_52e.containsValue(_52a,attr,_529)){if(!_52c){var _530=dojo.filter(_52e.getValues(_52a,attr),function(x){return x!=_529;});_52e.setValues(_52a,attr,_530);}_52f=attr;}});}if(_52b){if(typeof _52d=="number"){var _531=_52e.getValues(_52b,_52f).slice();_531.splice(_52d,0,_529);_52e.setValues(_52b,_52f,_531);}else{_52e.setValues(_52b,_52f,_52e.getValues(_52b,_52f).concat(_529));}}},onChange:function(item){},onChildrenChange:function(_532,_533){},onDelete:function(_534,_535){},onNewItem:function(item,_536){if(!_536){return;}this.getChildren(_536.item,dojo.hitch(this,function(_537){this.onChildrenChange(_536.item,_537);}));},onDeleteItem:function(item){this.onDelete(item);},onSetItem:function(item,_538,_539,_53a){if(dojo.indexOf(this.childrenAttrs,_538)!=-1){this.getChildren(item,dojo.hitch(this,function(_53b){this.onChildrenChange(item,_53b);}));}else{this.onChange(item);}}});}if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){dojo._hasResource["dijit.tree.ForestStoreModel"]=true;dojo.provide("dijit.tree.ForestStoreModel");dojo.declare("dijit.tree.ForestStoreModel",dijit.tree.TreeStoreModel,{rootId:"$root$",rootLabel:"ROOT",query:null,constructor:function(_53c){this.root={store:this,root:true,id:_53c.rootId,label:_53c.rootLabel,children:_53c.rootChildren};},mayHaveChildren:function(item){return item===this.root||this.inherited(arguments);},getChildren:function(_53d,_53e,_53f){if(_53d===this.root){if(this.root.children){_53e(this.root.children);}else{this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_540){this.root.children=_540;_53e(_540);}),onError:_53f});}}else{this.inherited(arguments);}},isItem:function(_541){return (_541===this.root)?true:this.inherited(arguments);},fetchItemByIdentity:function(_542){if(_542.identity==this.root.id){var _543=_542.scope?_542.scope:dojo.global;if(_542.onItem){_542.onItem.call(_543,this.root);}}else{this.inherited(arguments);}},getIdentity:function(item){return (item===this.root)?this.root.id:this.inherited(arguments);},getLabel:function(item){return (item===this.root)?this.root.label:this.inherited(arguments);},newItem:function(args,_544,_545){if(_544===this.root){this.onNewRootItem(args);return this.store.newItem(args);}else{return this.inherited(arguments);}},onNewRootItem:function(args){},pasteItem:function(_546,_547,_548,_549,_54a){if(_547===this.root){if(!_549){this.onLeaveRoot(_546);}}dijit.tree.TreeStoreModel.prototype.pasteItem.call(this,_546,_547===this.root?null:_547,_548===this.root?null:_548,_549,_54a);if(_548===this.root){this.onAddToRoot(_546);}},onAddToRoot:function(item){console.log(this,": item ",item," added to root");},onLeaveRoot:function(item){console.log(this,": item ",item," removed from root");},_requeryTop:function(){var _54b=this.root.children||[];this.store.fetch({query:this.query,onComplete:dojo.hitch(this,function(_54c){this.root.children=_54c;if(_54b.length!=_54c.length||dojo.some(_54b,function(item,idx){return _54c[idx]!=item;})){this.onChildrenChange(this.root,_54c);}})});},onNewItem:function(item,_54d){this._requeryTop();this.inherited(arguments);},onDeleteItem:function(item){if(dojo.indexOf(this.root.children,item)!=-1){this._requeryTop();}this.inherited(arguments);},onSetItem:function(item,_54e,_54f,_550){this._requeryTop();this.inherited(arguments);}});}if(!dojo._hasResource["dojo.dnd.Container"]){dojo._hasResource["dojo.dnd.Container"]=true;dojo.provide("dojo.dnd.Container");dojo.declare("dojo.dnd.Container",null,{skipForm:false,constructor:function(node,_551){this.node=dojo.byId(node);if(!_551){_551={};}this.creator=_551.creator||null;this.skipForm=_551.skipForm;this.parent=_551.dropParent&&dojo.byId(_551.dropParent);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");if(!(_551&&_551._skipStartup)){this.startup();}this.events=[dojo.connect(this.node,"onmouseover",this,"onMouseOver"),dojo.connect(this.node,"onmouseout",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",this,"onSelectStart"),dojo.connect(this.node,"onselectstart",this,"onSelectStart")];},creator:function(){},getItem:function(key){return this.map[key];},setItem:function(key,data){this.map[key]=data;},delItem:function(key){delete this.map[key];},forInItems:function(f,o){o=o||dojo.global;var m=this.map,e=dojo.dnd._empty;for(var i in m){if(i in e){continue;}f.call(o,m[i],i,this);}return o;},clearItems:function(){this.map={};},getAllNodes:function(){return dojo.query("> .dojoDndItem",this.parent);},sync:function(){var map={};this.getAllNodes().forEach(function(node){if(node.id){var item=this.getItem(node.id);if(item){map[node.id]=item;return;}}else{node.id=dojo.dnd.getUniqueId();}var type=node.getAttribute("dndType"),data=node.getAttribute("dndData");map[node.id]={data:data||node.innerHTML,type:type?type.split(/\s*,\s*/):["text"]};},this);this.map=map;return this;},insertNodes:function(data,_552,_553){if(!this.parent.firstChild){_553=null;}else{if(_552){if(!_553){_553=this.parent.firstChild;}}else{if(_553){_553=_553.nextSibling;}}}if(_553){for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.insertBefore(t.node,_553);}}else{for(var i=0;i<data.length;++i){var t=this._normalizedCreator(data[i]);this.setItem(t.node.id,{data:t.data,type:t.type});this.parent.appendChild(t.node);}}return this;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.clearItems();this.node=this.parent=this.current=null;},markupFactory:function(_554,node){_554._skipStartup=true;return new dojo.dnd.Container(node,_554);},startup:function(){if(!this.parent){this.parent=this.node;if(this.parent.tagName.toLowerCase()=="table"){var c=this.parent.getElementsByTagName("tbody");if(c&&c.length){this.parent=c[0];}}}this.defaultCreator=dojo.dnd._defaultCreator(this.parent);this.sync();},onMouseOver:function(e){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){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();},onSelectStart:function(e){if(!this.skipForm||!dojo.dnd.isFormElement(e)){dojo.stopEvent(e);}},onOverEvent:function(){},onOutEvent:function(){},_changeState:function(type,_555){var _556="dojoDnd"+type;var _557=type.toLowerCase()+"State";dojo.replaceClass(this.node,_556+_555,_556+this[_557]);this[_557]=_555;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},_getChildByEvent:function(e){var node=e.target;if(node){for(var _558=node.parentNode;_558;node=_558,_558=node.parentNode){if(_558==this.parent&&dojo.hasClass(node,"dojoDndItem")){return node;}}}return null;},_normalizedCreator:function(item,hint){var t=(this.creator||this.defaultCreator).call(this,item,hint);if(!dojo.isArray(t.type)){t.type=["text"];}if(!t.node.id){t.node.id=dojo.dnd.getUniqueId();}dojo.addClass(t.node,"dojoDndItem");return t;}});dojo.dnd._createNode=function(tag){if(!tag){return dojo.dnd._createSpan;}return function(text){return dojo.create(tag,{innerHTML:text});};};dojo.dnd._createTrTd=function(text){var tr=dojo.create("tr");dojo.create("td",{innerHTML:text},tr);return tr;};dojo.dnd._createSpan=function(text){return dojo.create("span",{innerHTML:text});};dojo.dnd._defaultCreatorNodes={ul:"li",ol:"li",div:"div",p:"div"};dojo.dnd._defaultCreator=function(node){var tag=node.tagName.toLowerCase();var c=tag=="tbody"||tag=="thead"?dojo.dnd._createTrTd:dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]);return function(item,hint){var _559=item&&dojo.isObject(item),data,type,n;if(_559&&item.tagName&&item.nodeType&&item.getAttribute){data=item.getAttribute("dndData")||item.innerHTML;type=item.getAttribute("dndType");type=type?type.split(/\s*,\s*/):["text"];n=item;}else{data=(_559&&item.data)?item.data:item;type=(_559&&item.type)?item.type:["text"];n=(hint=="avatar"?dojo.dnd._createSpan:c)(String(data));}if(!n.id){n.id=dojo.dnd.getUniqueId();}return {node:n,data:data,type:type};};};}if(!dojo._hasResource["dijit.tree._dndContainer"]){dojo._hasResource["dijit.tree._dndContainer"]=true;dojo.provide("dijit.tree._dndContainer");dojo.getObject("tree",true,dojo);dijit.tree._compareNodes=function(n1,n2){if(n1===n2){return 0;}if("sourceIndex" in document.documentElement){return n1.sourceIndex-n2.sourceIndex;}else{if("compareDocumentPosition" in document.documentElement){return n1.compareDocumentPosition(n2)&2?1:-1;}else{if(document.createRange){var r1=doc.createRange();r1.setStartBefore(n1);var r2=doc.createRange();r2.setStartBefore(n2);return r1.compareBoundaryPoints(r1.END_TO_END,r2);}else{throw Error("dijit.tree._compareNodes don't know how to compare two different nodes in this browser");}}}};dojo.declare("dijit.tree._dndContainer",null,{constructor:function(tree,_55a){this.tree=tree;this.node=tree.domNode;dojo.mixin(this,_55a);this.map={};this.current=null;this.containerState="";dojo.addClass(this.node,"dojoDndContainer");this.events=[dojo.connect(this.node,"onmouseenter",this,"onOverEvent"),dojo.connect(this.node,"onmouseleave",this,"onOutEvent"),dojo.connect(this.tree,"_onNodeMouseEnter",this,"onMouseOver"),dojo.connect(this.tree,"_onNodeMouseLeave",this,"onMouseOut"),dojo.connect(this.node,"ondragstart",dojo,"stopEvent"),dojo.connect(this.node,"onselectstart",dojo,"stopEvent")];},getItem:function(key){var _55b=this.selection[key],ret={data:_55b,type:["treeNode"]};return ret;},destroy:function(){dojo.forEach(this.events,dojo.disconnect);this.node=this.parent=null;},onMouseOver:function(_55c,evt){this.current=_55c;},onMouseOut:function(_55d,evt){this.current=null;},_changeState:function(type,_55e){var _55f="dojoDnd"+type;var _560=type.toLowerCase()+"State";dojo.replaceClass(this.node,_55f+_55e,_55f+this[_560]);this[_560]=_55e;},_addItemClass:function(node,type){dojo.addClass(node,"dojoDndItem"+type);},_removeItemClass:function(node,type){dojo.removeClass(node,"dojoDndItem"+type);},onOverEvent:function(){this._changeState("Container","Over");},onOutEvent:function(){this._changeState("Container","");}});}if(!dojo._hasResource["dijit.tree._dndSelector"]){dojo._hasResource["dijit.tree._dndSelector"]=true;dojo.provide("dijit.tree._dndSelector");dojo.declare("dijit.tree._dndSelector",dijit.tree._dndContainer,{constructor:function(tree,_561){this.selection={};this.anchor=null;dijit.setWaiState(this.tree.domNode,"multiselect",!this.singular);this.events.push(dojo.connect(this.tree.domNode,"onmousedown",this,"onMouseDown"),dojo.connect(this.tree.domNode,"onmouseup",this,"onMouseUp"),dojo.connect(this.tree.domNode,"onmousemove",this,"onMouseMove"));},singular:false,getSelectedTreeNodes:function(){var _562=[],sel=this.selection;for(var i in sel){_562.push(sel[i]);}return _562;},selectNone:function(){this.setSelection([]);return this;},destroy:function(){this.inherited(arguments);this.selection=this.anchor=null;},addTreeNode:function(node,_563){this.setSelection(this.getSelectedTreeNodes().concat([node]));if(_563){this.anchor=node;}return node;},removeTreeNode:function(node){this.setSelection(this._setDifference(this.getSelectedTreeNodes(),[node]));return node;},isTreeNodeSelected:function(node){return node.id&&!!this.selection[node.id];},setSelection:function(_564){var _565=this.getSelectedTreeNodes();dojo.forEach(this._setDifference(_565,_564),dojo.hitch(this,function(node){node.setSelected(false);if(this.anchor==node){delete this.anchor;}delete this.selection[node.id];}));dojo.forEach(this._setDifference(_564,_565),dojo.hitch(this,function(node){node.setSelected(true);this.selection[node.id]=node;}));this._updateSelectionProperties();},_setDifference:function(xs,ys){dojo.forEach(ys,function(y){y.__exclude__=true;});var ret=dojo.filter(xs,function(x){return !x.__exclude__;});dojo.forEach(ys,function(y){delete y["__exclude__"];});return ret;},_updateSelectionProperties:function(){var _566=this.getSelectedTreeNodes();var _567=[],_568=[];dojo.forEach(_566,function(node){_568.push(node);_567.push(node.getTreePath());});var _569=dojo.map(_568,function(node){return node.item;});this.tree._set("paths",_567);this.tree._set("path",_567[0]||[]);this.tree._set("selectedNodes",_568);this.tree._set("selectedNode",_568[0]||null);this.tree._set("selectedItems",_569);this.tree._set("selectedItem",_569[0]||null);},onMouseDown:function(e){if(!this.current||this.tree.isExpandoNode(e.target,this.current)){return;}if(e.button==dojo.mouseButtons.RIGHT){return;}dojo.stopEvent(e);var _56a=this.current,copy=dojo.isCopyKey(e),id=_56a.id;if(!this.singular&&!e.shiftKey&&this.selection[id]){this._doDeselect=true;return;}else{this._doDeselect=false;}this.userSelect(_56a,copy,e.shiftKey);},onMouseUp:function(e){if(!this._doDeselect){return;}this._doDeselect=false;this.userSelect(this.current,dojo.isCopyKey(e),e.shiftKey);},onMouseMove:function(e){this._doDeselect=false;},userSelect:function(node,_56b,_56c){if(this.singular){if(this.anchor==node&&_56b){this.selectNone();}else{this.setSelection([node]);this.anchor=node;}}else{if(_56c&&this.anchor){var cr=dijit.tree._compareNodes(this.anchor.rowNode,node.rowNode),_56d,end,_56e=this.anchor;if(cr<0){_56d=_56e;end=node;}else{_56d=node;end=_56e;}nodes=[];while(_56d!=end){nodes.push(_56d);_56d=this.tree._getNextNode(_56d);}nodes.push(end);this.setSelection(nodes);}else{if(this.selection[node.id]&&_56b){this.removeTreeNode(node);}else{if(_56b){this.addTreeNode(node,true);}else{this.setSelection([node]);this.anchor=node;}}}}},forInSelectedItems:function(f,o){o=o||dojo.global;for(var id in this.selection){f.call(o,this.getItem(id),id,this);}}});}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,dijit._CssStateMixin],{item:null,isTreeNode:true,label:"",isExpandable:null,isExpanded:false,state:"UNCHECKED",templateString:dojo.cache("dijit","templates/TreeNode.html","<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n"),baseClass:"dijitTreeNode",cssStateNodes:{rowNode:"dijitTreeRow",labelNode:"dijitTreeLabel"},attributeMap:dojo.delegate(dijit._Widget.prototype.attributeMap,{label:{node:"labelNode",type:"innerText"},tooltip:{node:"rowNode",type:"attribute",attribute:"title"}}),buildRendering:function(){this.inherited(arguments);this._setExpando();this._updateItemClasses(this.item);if(this.isExpandable){dijit.setWaiState(this.labelNode,"expanded",this.isExpanded);}this.setSelected(false);},_setIndentAttr:function(_56f){var _570=(Math.max(_56f,0)*this.tree._nodePixelIndent)+"px";dojo.style(this.domNode,"backgroundPosition",_570+" 0px");dojo.style(this.rowNode,this.isLeftToRight()?"paddingLeft":"paddingRight",_570);dojo.forEach(this.getChildren(),function(_571){_571.set("indent",_56f+1);});this._set("indent",_56f);},markProcessing:function(){this.state="LOADING";this._setExpando(true);},unmarkProcessing:function(){this._setExpando(false);},_updateItemClasses:function(item){var tree=this.tree,_572=tree.model;if(tree._v10Compat&&item===_572.root){item=null;}this._applyClassAndStyle(item,"icon","Icon");this._applyClassAndStyle(item,"label","Label");this._applyClassAndStyle(item,"row","Row");},_applyClassAndStyle:function(item,_573,_574){var _575="_"+_573+"Class";var _576=_573+"Node";var _577=this[_575];this[_575]=this.tree["get"+_574+"Class"](item,this.isExpanded);dojo.replaceClass(this[_576],this[_575]||"",_577||"");dojo.style(this[_576],this.tree["get"+_574+"Style"](item,this.isExpanded)||{});},_updateLayout:function(){var _578=this.getParent();if(!_578||_578.rowNode.style.display=="none"){dojo.addClass(this.domNode,"dijitTreeIsRoot");}else{dojo.toggleClass(this.domNode,"dijitTreeIsLast",!this.getNextSibling());}},_setExpando:function(_579){var _57a=["dijitTreeExpandoLoading","dijitTreeExpandoOpened","dijitTreeExpandoClosed","dijitTreeExpandoLeaf"],_57b=["*","-","+","*"],idx=_579?0:(this.isExpandable?(this.isExpanded?1:2):3);dojo.replaceClass(this.expandoNode,_57a[idx],_57a);this.expandoNodeText.innerHTML=_57b[idx];},expand:function(){if(this._expandDeferred){return this._expandDeferred;}this._wipeOut&&this._wipeOut.stop();this.isExpanded=true;dijit.setWaiState(this.labelNode,"expanded","true");if(this.tree.showRoot||this!==this.tree.rootNode){dijit.setWaiRole(this.containerNode,"group");}dojo.addClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","true");}var def,_57c=dojo.fx.wipeIn({node:this.containerNode,duration:dijit.defaultDuration,onEnd:function(){def.callback(true);}});def=(this._expandDeferred=new dojo.Deferred(function(){_57c.stop();}));_57c.play();return def;},collapse:function(){if(!this.isExpanded){return;}if(this._expandDeferred){this._expandDeferred.cancel();delete this._expandDeferred;}this.isExpanded=false;dijit.setWaiState(this.labelNode,"expanded","false");if(this==this.tree.rootNode){dijit.setWaiState(this.tree.domNode,"expanded","false");}dojo.removeClass(this.contentNode,"dijitTreeContentExpanded");this._setExpando();this._updateItemClasses(this.item);if(!this._wipeOut){this._wipeOut=dojo.fx.wipeOut({node:this.containerNode,duration:dijit.defaultDuration});}this._wipeOut.play();},indent:0,setChildItems:function(_57d){var tree=this.tree,_57e=tree.model,defs=[];dojo.forEach(this.getChildren(),function(_57f){dijit._Container.prototype.removeChild.call(this,_57f);},this);this.state="LOADED";if(_57d&&_57d.length>0){this.isExpandable=true;dojo.forEach(_57d,function(item){var id=_57e.getIdentity(item),_580=tree._itemNodesMap[id],node;if(_580){for(var i=0;i<_580.length;i++){if(_580[i]&&!_580[i].getParent()){node=_580[i];node.set("indent",this.indent+1);break;}}}if(!node){node=this.tree._createTreeNode({item:item,tree:tree,isExpandable:_57e.mayHaveChildren(item),label:tree.getLabel(item),tooltip:tree.getTooltip(item),dir:tree.dir,lang:tree.lang,indent:this.indent+1});if(_580){_580.push(node);}else{tree._itemNodesMap[id]=[node];}}this.addChild(node);if(this.tree.autoExpand||this.tree._state(item)){defs.push(tree._expandNode(node));}},this);dojo.forEach(this.getChildren(),function(_581,idx){_581._updateLayout();});}else{this.isExpandable=false;}if(this._setExpando){this._setExpando(false);}this._updateItemClasses(this.item);if(this==tree.rootNode){var fc=this.tree.showRoot?this:this.getChildren()[0];if(fc){fc.setFocusable(true);tree.lastFocused=fc;}else{tree.domNode.setAttribute("tabIndex","0");}}return new dojo.DeferredList(defs);},getTreePath:function(){var node=this;var path=[];while(node&&node!==this.tree.rootNode){path.unshift(node.item);node=node.getParent();}path.unshift(this.tree.rootNode.item);return path;},getIdentity:function(){return this.tree.model.getIdentity(this.item);},removeChild:function(node){this.inherited(arguments);var _582=this.getChildren();if(_582.length==0){this.isExpandable=false;this.collapse();}dojo.forEach(_582,function(_583){_583._updateLayout();});},makeExpandable:function(){this.isExpandable=true;this._setExpando(false);},_onLabelFocus:function(evt){this.tree._onNodeFocus(this);},setSelected:function(_584){dijit.setWaiState(this.labelNode,"selected",_584);dojo.toggleClass(this.rowNode,"dijitTreeRowSelected",_584);},setFocusable:function(_585){this.labelNode.setAttribute("tabIndex",_585?"0":"-1");},_onClick:function(evt){this.tree._onClick(this,evt);},_onDblClick:function(evt){this.tree._onDblClick(this,evt);},_onMouseEnter:function(evt){this.tree._onNodeMouseEnter(this,evt);},_onMouseLeave:function(evt){this.tree._onNodeMouseLeave(this,evt);}});dojo.declare("dijit.Tree",[dijit._Widget,dijit._Templated],{store:null,model:null,query:null,label:"",showRoot:true,childrenAttr:["children"],paths:[],path:[],selectedItems:null,selectedItem:null,openOnClick:false,openOnDblClick:false,templateString:dojo.cache("dijit","templates/Tree.html","<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"),persist:true,autoExpand:false,dndController:"dijit.tree._dndSelector",dndParams:["onDndDrop","itemCreator","onDndCancel","checkAcceptance","checkItemAcceptance","dragThreshold","betweenThreshold"],onDndDrop:null,itemCreator:null,onDndCancel:null,checkAcceptance:null,checkItemAcceptance:null,dragThreshold:5,betweenThreshold:0,_nodePixelIndent:19,_publish:function(_586,_587){dojo.publish(this.id,[dojo.mixin({tree:this,event:_586},_587||{})]);},postMixInProperties:function(){this.tree=this;if(this.autoExpand){this.persist=false;}this._itemNodesMap={};if(!this.cookieName){this.cookieName=this.id+"SaveStateCookie";}this._loadDeferred=new dojo.Deferred();this.inherited(arguments);},postCreate:function(){this._initState();if(!this.model){this._store2model();}this.connect(this.model,"onChange","_onItemChange");this.connect(this.model,"onChildrenChange","_onItemChildrenChange");this.connect(this.model,"onDelete","_onItemDelete");this._load();this.inherited(arguments);if(this.dndController){if(dojo.isString(this.dndController)){this.dndController=dojo.getObject(this.dndController);}var _588={};for(var i=0;i<this.dndParams.length;i++){if(this[this.dndParams[i]]){_588[this.dndParams[i]]=this[this.dndParams[i]];}}this.dndController=new this.dndController(this,_588);}},_store2model:function(){this._v10Compat=true;dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query");var _589={id:this.id+"_ForestStoreModel",store:this.store,query:this.query,childrenAttrs:this.childrenAttr};if(this.params.mayHaveChildren){_589.mayHaveChildren=dojo.hitch(this,"mayHaveChildren");}if(this.params.getItemChildren){_589.getChildren=dojo.hitch(this,function(item,_58a,_58b){this.getItemChildren((this._v10Compat&&item===this.model.root)?null:item,_58a,_58b);});}this.model=new dijit.tree.ForestStoreModel(_589);this.showRoot=Boolean(this.label);},onLoad:function(){},_load:function(){this.model.getRoot(dojo.hitch(this,function(item){var rn=(this.rootNode=this.tree._createTreeNode({item:item,tree:this,isExpandable:true,label:this.label||this.getLabel(item),indent:this.showRoot?0:-1}));if(!this.showRoot){rn.rowNode.style.display="none";dijit.setWaiRole(this.domNode,"presentation");dijit.setWaiRole(rn.labelNode,"presentation");dijit.setWaiRole(rn.containerNode,"tree");}this.domNode.appendChild(rn.domNode);var _58c=this.model.getIdentity(item);if(this._itemNodesMap[_58c]){this._itemNodesMap[_58c].push(rn);}else{this._itemNodesMap[_58c]=[rn];}rn._updateLayout();this._expandNode(rn).addCallback(dojo.hitch(this,function(){this._loadDeferred.callback(true);this.onLoad();}));}),function(err){console.error(this,": error loading root: ",err);});},getNodesByItem:function(item){if(!item){return [];}var _58d=dojo.isString(item)?item:this.model.getIdentity(item);return [].concat(this._itemNodesMap[_58d]);},_setSelectedItemAttr:function(item){this.set("selectedItems",[item]);},_setSelectedItemsAttr:function(_58e){var tree=this;this._loadDeferred.addCallback(dojo.hitch(this,function(){var _58f=dojo.map(_58e,function(item){return (!item||dojo.isString(item))?item:tree.model.getIdentity(item);});var _590=[];dojo.forEach(_58f,function(id){_590=_590.concat(tree._itemNodesMap[id]||[]);});this.set("selectedNodes",_590);}));},_setPathAttr:function(path){if(path.length){return this.set("paths",[path]);}else{return this.set("paths",[]);}},_setPathsAttr:function(_591){var tree=this;return new dojo.DeferredList(dojo.map(_591,function(path){var d=new dojo.Deferred();path=dojo.map(path,function(item){return dojo.isString(item)?item:tree.model.getIdentity(item);});if(path.length){tree._loadDeferred.addCallback(function(){_592(path,[tree.rootNode],d);});}else{d.errback("Empty path");}return d;})).addCallback(_593);function _592(path,_594,def){var _595=path.shift();var _596=dojo.filter(_594,function(node){return node.getIdentity()==_595;})[0];if(!!_596){if(path.length){tree._expandNode(_596).addCallback(function(){_592(path,_596.getChildren(),def);});}else{def.callback(_596);}}else{def.errback("Could not expand path at "+_595);}};function _593(_597){tree.set("selectedNodes",dojo.map(dojo.filter(_597,function(x){return x[0];}),function(x){return x[1];}));};},_setSelectedNodeAttr:function(node){this.set("selectedNodes",[node]);},_setSelectedNodesAttr:function(_598){this._loadDeferred.addCallback(dojo.hitch(this,function(){this.dndController.setSelection(_598);}));},mayHaveChildren:function(item){},getItemChildren:function(_599,_59a){},getLabel:function(item){return this.model.getLabel(item);},getIconClass:function(item,_59b){return (!item||this.model.mayHaveChildren(item))?(_59b?"dijitFolderOpened":"dijitFolderClosed"):"dijitLeaf";},getLabelClass:function(item,_59c){},getRowClass:function(item,_59d){},getIconStyle:function(item,_59e){},getLabelStyle:function(item,_59f){},getRowStyle:function(item,_5a0){},getTooltip:function(item){return "";},_onKeyPress:function(e){if(e.altKey){return;}var dk=dojo.keys;var _5a1=dijit.getEnclosingWidget(e.target);if(!_5a1){return;}var key=e.charOrCode;if(typeof key=="string"&&key!=" "){if(!e.altKey&&!e.ctrlKey&&!e.shiftKey&&!e.metaKey){this._onLetterKeyNav({node:_5a1,key:key.toLowerCase()});dojo.stopEvent(e);}}else{if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}var map=this._keyHandlerMap;if(!map){map={};map[dk.ENTER]="_onEnterKey";map[dk.SPACE]=map[" "]="_onEnterKey";map[this.isLeftToRight()?dk.LEFT_ARROW:dk.RIGHT_ARROW]="_onLeftArrow";map[this.isLeftToRight()?dk.RIGHT_ARROW:dk.LEFT_ARROW]="_onRightArrow";map[dk.UP_ARROW]="_onUpArrow";map[dk.DOWN_ARROW]="_onDownArrow";map[dk.HOME]="_onHomeKey";map[dk.END]="_onEndKey";this._keyHandlerMap=map;}if(this._keyHandlerMap[key]){this[this._keyHandlerMap[key]]({node:_5a1,item:_5a1.item,evt:e});dojo.stopEvent(e);}}},_onEnterKey:function(_5a2){this._publish("execute",{item:_5a2.item,node:_5a2.node});this.dndController.userSelect(_5a2.node,dojo.isCopyKey(_5a2.evt),_5a2.evt.shiftKey);this.onClick(_5a2.item,_5a2.node,_5a2.evt);},_onDownArrow:function(_5a3){var node=this._getNextNode(_5a3.node);if(node&&node.isTreeNode){this.focusNode(node);}},_onUpArrow:function(_5a4){var node=_5a4.node;var _5a5=node.getPreviousSibling();if(_5a5){node=_5a5;while(node.isExpandable&&node.isExpanded&&node.hasChildren()){var _5a6=node.getChildren();node=_5a6[_5a6.length-1];}}else{var _5a7=node.getParent();if(!(!this.showRoot&&_5a7===this.rootNode)){node=_5a7;}}if(node&&node.isTreeNode){this.focusNode(node);}},_onRightArrow:function(_5a8){var node=_5a8.node;if(node.isExpandable&&!node.isExpanded){this._expandNode(node);}else{if(node.hasChildren()){node=node.getChildren()[0];if(node&&node.isTreeNode){this.focusNode(node);}}}},_onLeftArrow:function(_5a9){var node=_5a9.node;if(node.isExpandable&&node.isExpanded){this._collapseNode(node);}else{var _5aa=node.getParent();if(_5aa&&_5aa.isTreeNode&&!(!this.showRoot&&_5aa===this.rootNode)){this.focusNode(_5aa);}}},_onHomeKey:function(){var node=this._getRootOrFirstNode();if(node){this.focusNode(node);}},_onEndKey:function(_5ab){var node=this.rootNode;while(node.isExpanded){var c=node.getChildren();node=c[c.length-1];}if(node&&node.isTreeNode){this.focusNode(node);}},multiCharSearchDuration:250,_onLetterKeyNav:function(_5ac){var cs=this._curSearch;if(cs){cs.pattern=cs.pattern+_5ac.key;clearTimeout(cs.timer);}else{cs=this._curSearch={pattern:_5ac.key,startNode:_5ac.node};}var self=this;cs.timer=setTimeout(function(){delete self._curSearch;},this.multiCharSearchDuration);var node=cs.startNode;do{node=this._getNextNode(node);if(!node){node=this._getRootOrFirstNode();}}while(node!==cs.startNode&&(node.label.toLowerCase().substr(0,cs.pattern.length)!=cs.pattern));if(node&&node.isTreeNode){if(node!==cs.startNode){this.focusNode(node);}}},isExpandoNode:function(node,_5ad){return dojo.isDescendant(node,_5ad.expandoNode);},_onClick:function(_5ae,e){var _5af=e.target,_5b0=this.isExpandoNode(_5af,_5ae);if((this.openOnClick&&_5ae.isExpandable)||_5b0){if(_5ae.isExpandable){this._onExpandoClick({node:_5ae});}}else{this._publish("execute",{item:_5ae.item,node:_5ae,evt:e});this.onClick(_5ae.item,_5ae,e);this.focusNode(_5ae);}dojo.stopEvent(e);},_onDblClick:function(_5b1,e){var _5b2=e.target,_5b3=(_5b2==_5b1.expandoNode||_5b2==_5b1.expandoNodeText);if((this.openOnDblClick&&_5b1.isExpandable)||_5b3){if(_5b1.isExpandable){this._onExpandoClick({node:_5b1});}}else{this._publish("execute",{item:_5b1.item,node:_5b1,evt:e});this.onDblClick(_5b1.item,_5b1,e);this.focusNode(_5b1);}dojo.stopEvent(e);},_onExpandoClick:function(_5b4){var node=_5b4.node;this.focusNode(node);if(node.isExpanded){this._collapseNode(node);}else{this._expandNode(node);}},onClick:function(item,node,evt){},onDblClick:function(item,node,evt){},onOpen:function(item,node){},onClose:function(item,node){},_getNextNode:function(node){if(node.isExpandable&&node.isExpanded&&node.hasChildren()){return node.getChildren()[0];}else{while(node&&node.isTreeNode){var _5b5=node.getNextSibling();if(_5b5){return _5b5;}node=node.getParent();}return null;}},_getRootOrFirstNode:function(){return this.showRoot?this.rootNode:this.rootNode.getChildren()[0];},_collapseNode:function(node){if(node._expandNodeDeferred){delete node._expandNodeDeferred;}if(node.isExpandable){if(node.state=="LOADING"){return;}node.collapse();this.onClose(node.item,node);if(node.item){this._state(node.item,false);this._saveState();}}},_expandNode:function(node,_5b6){if(node._expandNodeDeferred&&!_5b6){return node._expandNodeDeferred;}var _5b7=this.model,item=node.item,_5b8=this;switch(node.state){case "UNCHECKED":node.markProcessing();var def=(node._expandNodeDeferred=new dojo.Deferred());_5b7.getChildren(item,function(_5b9){node.unmarkProcessing();var scid=node.setChildItems(_5b9);var ed=_5b8._expandNode(node,true);scid.addCallback(function(){ed.addCallback(function(){def.callback();});});},function(err){console.error(_5b8,": error loading root children: ",err);});break;default:def=(node._expandNodeDeferred=node.expand());this.onOpen(node.item,node);if(item){this._state(item,true);this._saveState();}}return def;},focusNode:function(node){dijit.focus(node.labelNode);},_onNodeFocus:function(node){if(node&&node!=this.lastFocused){if(this.lastFocused&&!this.lastFocused._destroyed){this.lastFocused.setFocusable(false);}node.setFocusable(true);this.lastFocused=node;}},_onNodeMouseEnter:function(node){},_onNodeMouseLeave:function(node){},_onItemChange:function(item){var _5ba=this.model,_5bb=_5ba.getIdentity(item),_5bc=this._itemNodesMap[_5bb];if(_5bc){var _5bd=this.getLabel(item),_5be=this.getTooltip(item);dojo.forEach(_5bc,function(node){node.set({item:item,label:_5bd,tooltip:_5be});node._updateItemClasses(item);});}},_onItemChildrenChange:function(_5bf,_5c0){var _5c1=this.model,_5c2=_5c1.getIdentity(_5bf),_5c3=this._itemNodesMap[_5c2];if(_5c3){dojo.forEach(_5c3,function(_5c4){_5c4.setChildItems(_5c0);});}},_onItemDelete:function(item){var _5c5=this.model,_5c6=_5c5.getIdentity(item),_5c7=this._itemNodesMap[_5c6];if(_5c7){dojo.forEach(_5c7,function(node){this.dndController.removeTreeNode(node);var _5c8=node.getParent();if(_5c8){_5c8.removeChild(node);}node.destroyRecursive();},this);delete this._itemNodesMap[_5c6];}},_initState:function(){if(this.persist){var _5c9=dojo.cookie(this.cookieName);this._openedItemIds={};if(_5c9){dojo.forEach(_5c9.split(","),function(item){this._openedItemIds[item]=true;},this);}}},_state:function(item,_5ca){if(!this.persist){return false;}var id=this.model.getIdentity(item);if(arguments.length===1){return this._openedItemIds[id];}if(_5ca){this._openedItemIds[id]=true;}else{delete this._openedItemIds[id];}},_saveState:function(){if(!this.persist){return;}var ary=[];for(var id in this._openedItemIds){ary.push(id);}dojo.cookie(this.cookieName,ary.join(","),{expires:365});},destroy:function(){if(this._curSearch){clearTimeout(this._curSearch.timer);delete this._curSearch;}if(this.rootNode){this.rootNode.destroyRecursive();}if(this.dndController&&!dojo.isString(this.dndController)){this.dndController.destroy();}this.rootNode=null;this.inherited(arguments);},destroyRecursive:function(){this.destroy();},resize:function(_5cb){if(_5cb){dojo.marginBox(this.domNode,_5cb);}this._nodePixelIndent=dojo._getMarginSize(this.tree.indentDetector).w;if(this.tree.rootNode){this.tree.rootNode.set("indent",this.showRoot?0:-1);}},_createTreeNode:function(args){return new dijit._TreeNode(args);}});}if(!dojo._hasResource["dojo.dnd.Avatar"]){dojo._hasResource["dojo.dnd.Avatar"]=true;dojo.provide("dojo.dnd.Avatar");dojo.declare("dojo.dnd.Avatar",null,{constructor:function(_5cc){this.manager=_5cc;this.construct();},construct:function(){this.isA11y=dojo.hasClass(dojo.body(),"dijit_a11y");var a=dojo.create("table",{"class":"dojoDndAvatar",style:{position:"absolute",zIndex:"1999",margin:"0px"}}),_5cd=this.manager.source,node,b=dojo.create("tbody",null,a),tr=dojo.create("tr",null,b),td=dojo.create("td",null,tr),icon=this.isA11y?dojo.create("span",{id:"a11yIcon",innerHTML:this.manager.copy?"+":"<"},td):null,span=dojo.create("span",{innerHTML:_5cd.generateText?this._generateText():""},td),k=Math.min(5,this.manager.nodes.length),i=0;dojo.attr(tr,{"class":"dojoDndAvatarHeader",style:{opacity:0.9}});for(;i<k;++i){if(_5cd.creator){node=_5cd._normalizedCreator(_5cd.getItem(this.manager.nodes[i].id).data,"avatar").node;}else{node=this.manager.nodes[i].cloneNode(true);if(node.tagName.toLowerCase()=="tr"){var _5ce=dojo.create("table"),_5cf=dojo.create("tbody",null,_5ce);_5cf.appendChild(node);node=_5ce;}}node.id="";tr=dojo.create("tr",null,b);td=dojo.create("td",null,tr);td.appendChild(node);dojo.attr(tr,{"class":"dojoDndAvatarItem",style:{opacity:(9-i)/10}});}this.node=a;},destroy:function(){dojo.destroy(this.node);this.node=false;},update:function(){dojo[(this.manager.canDropFlag?"add":"remove")+"Class"](this.node,"dojoDndAvatarCanDrop");if(this.isA11y){var icon=dojo.byId("a11yIcon");var text="+";if(this.manager.canDropFlag&&!this.manager.copy){text="< ";}else{if(!this.manager.canDropFlag&&!this.manager.copy){text="o";}else{if(!this.manager.canDropFlag){text="x";}}}icon.innerHTML=text;}dojo.query(("tr.dojoDndAvatarHeader td span"+(this.isA11y?" span":"")),this.node).forEach(function(node){node.innerHTML=this._generateText();},this);},_generateText:function(){return this.manager.nodes.length.toString();}});}if(!dojo._hasResource["dojo.dnd.Manager"]){dojo._hasResource["dojo.dnd.Manager"]=true;dojo.provide("dojo.dnd.Manager");dojo.declare("dojo.dnd.Manager",null,{constructor:function(){this.avatar=null;this.source=null;this.nodes=[];this.copy=true;this.target=null;this.canDropFlag=false;this.events=[];},OFFSET_X:16,OFFSET_Y:16,overSource:function(_5d0){if(this.avatar){this.target=(_5d0&&_5d0.targetState!="Disabled")?_5d0:null;this.canDropFlag=Boolean(this.target);this.avatar.update();}dojo.publish("/dnd/source/over",[_5d0]);},outSource:function(_5d1){if(this.avatar){if(this.target==_5d1){this.target=null;this.canDropFlag=false;this.avatar.update();dojo.publish("/dnd/source/over",[null]);}}else{dojo.publish("/dnd/source/over",[null]);}},startDrag:function(_5d2,_5d3,copy){this.source=_5d2;this.nodes=_5d3;this.copy=Boolean(copy);this.avatar=this.makeAvatar();dojo.body().appendChild(this.avatar.node);dojo.publish("/dnd/start",[_5d2,_5d3,this.copy]);this.events=[dojo.connect(dojo.doc,"onmousemove",this,"onMouseMove"),dojo.connect(dojo.doc,"onmouseup",this,"onMouseUp"),dojo.connect(dojo.doc,"onkeydown",this,"onKeyDown"),dojo.connect(dojo.doc,"onkeyup",this,"onKeyUp"),dojo.connect(dojo.doc,"ondragstart",dojo.stopEvent),dojo.connect(dojo.body(),"onselectstart",dojo.stopEvent)];var c="dojoDnd"+(copy?"Copy":"Move");dojo.addClass(dojo.body(),c);},canDrop:function(flag){var _5d4=Boolean(this.target&&flag);if(this.canDropFlag!=_5d4){this.canDropFlag=_5d4;this.avatar.update();}},stopDrag:function(){dojo.removeClass(dojo.body(),["dojoDndCopy","dojoDndMove"]);dojo.forEach(this.events,dojo.disconnect);this.events=[];this.avatar.destroy();this.avatar=null;this.source=this.target=null;this.nodes=[];},makeAvatar:function(){return new dojo.dnd.Avatar(this);},updateAvatar:function(){this.avatar.update();},onMouseMove:function(e){var a=this.avatar;if(a){dojo.dnd.autoScrollNodes(e);var s=a.node.style;s.left=(e.pageX+this.OFFSET_X)+"px";s.top=(e.pageY+this.OFFSET_Y)+"px";var copy=Boolean(this.source.copyState(dojo.isCopyKey(e)));if(this.copy!=copy){this._setCopyStatus(copy);}}},onMouseUp:function(e){if(this.avatar){if(this.target&&this.canDropFlag){var copy=Boolean(this.source.copyState(dojo.isCopyKey(e))),_5d5=[this.source,this.nodes,copy,this.target,e];dojo.publish("/dnd/drop/before",_5d5);dojo.publish("/dnd/drop",_5d5);}else{dojo.publish("/dnd/cancel");}this.stopDrag();}},onKeyDown:function(e){if(this.avatar){switch(e.keyCode){case dojo.keys.CTRL:var copy=Boolean(this.source.copyState(true));if(this.copy!=copy){this._setCopyStatus(copy);}break;case dojo.keys.ESCAPE:dojo.publish("/dnd/cancel");this.stopDrag();break;}}},onKeyUp:function(e){if(this.avatar&&e.keyCode==dojo.keys.CTRL){var copy=Boolean(this.source.copyState(false));if(this.copy!=copy){this._setCopyStatus(copy);}}},_setCopyStatus:function(copy){this.copy=copy;this.source._markDndStatus(this.copy);this.updateAvatar();dojo.replaceClass(dojo.body(),"dojoDnd"+(this.copy?"Copy":"Move"),"dojoDnd"+(this.copy?"Move":"Copy"));}});dojo.dnd._manager=null;dojo.dnd.manager=function(){if(!dojo.dnd._manager){dojo.dnd._manager=new dojo.dnd.Manager();}return dojo.dnd._manager;};}if(!dojo._hasResource["dijit.tree.dndSource"]){dojo._hasResource["dijit.tree.dndSource"]=true;dojo.provide("dijit.tree.dndSource");dojo.declare("dijit.tree.dndSource",dijit.tree._dndSelector,{isSource:true,accept:["text","treeNode"],copyOnly:false,dragThreshold:5,betweenThreshold:0,constructor:function(tree,_5d6){if(!_5d6){_5d6={};}dojo.mixin(this,_5d6);this.isSource=typeof _5d6.isSource=="undefined"?true:_5d6.isSource;var type=_5d6.accept instanceof Array?_5d6.accept:["text","treeNode"];this.accept=null;if(type.length){this.accept={};for(var i=0;i<type.length;++i){this.accept[type[i]]=1;}}this.isDragging=false;this.mouseDown=false;this.targetAnchor=null;this.targetBox=null;this.dropPosition="";this._lastX=0;this._lastY=0;this.sourceState="";if(this.isSource){dojo.addClass(this.node,"dojoDndSource");}this.targetState="";if(this.accept){dojo.addClass(this.node,"dojoDndTarget");}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")];},checkAcceptance:function(_5d7,_5d8){return true;},copyState:function(_5d9){return this.copyOnly||_5d9;},destroy:function(){this.inherited("destroy",arguments);dojo.forEach(this.topics,dojo.unsubscribe);this.targetAnchor=null;},_onDragMouse:function(e){var m=dojo.dnd.manager(),_5da=this.targetAnchor,_5db=this.current,_5dc=this.dropPosition;var _5dd="Over";if(_5db&&this.betweenThreshold>0){if(!this.targetBox||_5da!=_5db){this.targetBox=dojo.position(_5db.rowNode,true);}if((e.pageY-this.targetBox.y)<=this.betweenThreshold){_5dd="Before";}else{if((e.pageY-this.targetBox.y)>=(this.targetBox.h-this.betweenThreshold)){_5dd="After";}}}if(_5db!=_5da||_5dd!=_5dc){if(_5da){this._removeItemClass(_5da.rowNode,_5dc);}if(_5db){this._addItemClass(_5db.rowNode,_5dd);}if(!_5db){m.canDrop(false);}else{if(_5db==this.tree.rootNode&&_5dd!="Over"){m.canDrop(false);}else{if(m.source==this&&(_5db.id in this.selection)){m.canDrop(false);}else{if(this.checkItemAcceptance(_5db.rowNode,m.source,_5dd.toLowerCase())&&!this._isParentChildDrop(m.source,_5db.rowNode)){m.canDrop(true);}else{m.canDrop(false);}}}}this.targetAnchor=_5db;this.dropPosition=_5dd;}},onMouseMove:function(e){if(this.isDragging&&this.targetState=="Disabled"){return;}this.inherited(arguments);var m=dojo.dnd.manager();if(this.isDragging){this._onDragMouse(e);}else{if(this.mouseDown&&this.isSource&&(Math.abs(e.pageX-this._lastX)>=this.dragThreshold||Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){var _5de=this.getSelectedTreeNodes();if(_5de.length){if(_5de.length>1){var seen=this.selection,i=0,r=[],n,p;nextitem:while((n=_5de[i++])){for(p=n.getParent();p&&p!==this.tree;p=p.getParent()){if(seen[p.id]){continue nextitem;}}r.push(n);}_5de=r;}_5de=dojo.map(_5de,function(n){return n.domNode;});m.startDrag(this,_5de,this.copyState(dojo.isCopyKey(e)));}}}},onMouseDown:function(e){this.mouseDown=true;this.mouseButton=e.button;this._lastX=e.pageX;this._lastY=e.pageY;this.inherited(arguments);},onMouseUp:function(e){if(this.mouseDown){this.mouseDown=false;this.inherited(arguments);}},onMouseOut:function(){this.inherited(arguments);this._unmarkTargetAnchor();},checkItemAcceptance:function(_5df,_5e0,_5e1){return true;},onDndSourceOver:function(_5e2){if(this!=_5e2){this.mouseDown=false;this._unmarkTargetAnchor();}else{if(this.isDragging){var m=dojo.dnd.manager();m.canDrop(false);}}},onDndStart:function(_5e3,_5e4,copy){if(this.isSource){this._changeState("Source",this==_5e3?(copy?"Copied":"Moved"):"");}var _5e5=this.checkAcceptance(_5e3,_5e4);this._changeState("Target",_5e5?"":"Disabled");if(this==_5e3){dojo.dnd.manager().overSource(this);}this.isDragging=true;},itemCreator:function(_5e6,_5e7,_5e8){return dojo.map(_5e6,function(node){return {"id":node.id,"name":node.textContent||node.innerText||""};});},onDndDrop:function(_5e9,_5ea,copy){if(this.containerState=="Over"){var tree=this.tree,_5eb=tree.model,_5ec=this.targetAnchor,_5ed=false;this.isDragging=false;var _5ee=_5ec;var _5ef;var _5f0;_5ef=(_5ee&&_5ee.item)||tree.item;if(this.dropPosition=="Before"||this.dropPosition=="After"){_5ef=(_5ee.getParent()&&_5ee.getParent().item)||tree.item;_5f0=_5ee.getIndexInParent();if(this.dropPosition=="After"){_5f0=_5ee.getIndexInParent()+1;}}else{_5ef=(_5ee&&_5ee.item)||tree.item;}var _5f1;dojo.forEach(_5ea,function(node,idx){var _5f2=_5e9.getItem(node.id);if(dojo.indexOf(_5f2.type,"treeNode")!=-1){var _5f3=_5f2.data,_5f4=_5f3.item,_5f5=_5f3.getParent().item;}if(_5e9==this){if(typeof _5f0=="number"){if(_5ef==_5f5&&_5f3.getIndexInParent()<_5f0){_5f0-=1;}}_5eb.pasteItem(_5f4,_5f5,_5ef,copy,_5f0);}else{if(_5eb.isItem(_5f4)){_5eb.pasteItem(_5f4,_5f5,_5ef,copy,_5f0);}else{if(!_5f1){_5f1=this.itemCreator(_5ea,_5ec.rowNode,_5e9);}_5eb.newItem(_5f1[idx],_5ef,_5f0);}}},this);this.tree._expandNode(_5ee);}this.onDndCancel();},onDndCancel:function(){this._unmarkTargetAnchor();this.isDragging=false;this.mouseDown=false;delete this.mouseButton;this._changeState("Source","");this._changeState("Target","");},onOverEvent:function(){this.inherited(arguments);dojo.dnd.manager().overSource(this);},onOutEvent:function(){this._unmarkTargetAnchor();var m=dojo.dnd.manager();if(this.isDragging){m.canDrop(false);}m.outSource(this);this.inherited(arguments);},_isParentChildDrop:function(_5f6,_5f7){if(!_5f6.tree||_5f6.tree!=this.tree){return false;}var root=_5f6.tree.domNode;var ids=_5f6.selection;var node=_5f7.parentNode;while(node!=root&&!ids[node.id]){node=node.parentNode;}return node.id&&ids[node.id];},_unmarkTargetAnchor:function(){if(!this.targetAnchor){return;}this._removeItemClass(this.targetAnchor.rowNode,this.dropPosition);this.targetAnchor=null;this.targetBox=null;this.dropPosition=null;},_markDndStatus:function(copy){this._changeState("Source",copy?"Copied":"Moved");}});}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(_5f8){this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._jsonFileUrl=_5f8.url;this._ccUrl=_5f8.url;this.url=_5f8.url;this._jsonData=_5f8.data;this.data=null;this._datatypeMap=_5f8.typeMap||{};if(!this._datatypeMap["Date"]){this._datatypeMap["Date"]={type:Date,deserialize:function(_5f9){return dojo.date.stamp.fromISOString(_5f9);}};}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._reverseRefMap="_RRM";this._loadInProgress=false;this._queuedFetches=[];if(_5f8.urlPreventCache!==undefined){this.urlPreventCache=_5f8.urlPreventCache?true:false;}if(_5f8.hierarchical!==undefined){this.hierarchical=_5f8.hierarchical?true:false;}if(_5f8.clearOnClose){this.clearOnClose=true;}if("failOk" in _5f8){this.failOk=_5f8.failOk?true:false;}},url:"",_ccUrl:"",data:null,typeMap:null,clearOnClose:false,urlPreventCache:false,failOk:false,hierarchical:true,_assertIsItem:function(item){if(!this.isItem(item)){throw new Error("dojo.data.ItemFileReadStore: Invalid item argument.");}},_assertIsAttribute:function(_5fa){if(typeof _5fa!=="string"){throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument.");}},getValue:function(item,_5fb,_5fc){var _5fd=this.getValues(item,_5fb);return (_5fd.length>0)?_5fd[0]:_5fc;},getValues:function(item,_5fe){this._assertIsItem(item);this._assertIsAttribute(_5fe);return (item[_5fe]||[]).slice(0);},getAttributes:function(item){this._assertIsItem(item);var _5ff=[];for(var key in item){if((key!==this._storeRefPropName)&&(key!==this._itemNumPropName)&&(key!==this._rootItemPropName)&&(key!==this._reverseRefMap)){_5ff.push(key);}}return _5ff;},hasAttribute:function(item,_600){this._assertIsItem(item);this._assertIsAttribute(_600);return (_600 in item);},containsValue:function(item,_601,_602){var _603=undefined;if(typeof _602==="string"){_603=dojo.data.util.filter.patternToRegExp(_602,false);}return this._containsValue(item,_601,_602,_603);},_containsValue:function(item,_604,_605,_606){return dojo.some(this.getValues(item,_604),function(_607){if(_607!==null&&!dojo.isObject(_607)&&_606){if(_607.toString().match(_606)){return true;}}else{if(_605===_607){return true;}}});},isItem:function(_608){if(_608&&_608[this._storeRefPropName]===this){if(this._arrayOfAllItems[_608[this._itemNumPropName]]===_608){return true;}}return false;},isItemLoaded:function(_609){return this.isItem(_609);},loadItem:function(_60a){this._assertIsItem(_60a.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(_60b,_60c,_60d){var self=this,_60e=function(_60f,_610){var _611=[],i,key;if(_60f.query){var _612,_613=_60f.queryOptions?_60f.queryOptions.ignoreCase:false;var _614={};for(key in _60f.query){_612=_60f.query[key];if(typeof _612==="string"){_614[key]=dojo.data.util.filter.patternToRegExp(_612,_613);}else{if(_612 instanceof RegExp){_614[key]=_612;}}}for(i=0;i<_610.length;++i){var _615=true;var _616=_610[i];if(_616===null){_615=false;}else{for(key in _60f.query){_612=_60f.query[key];if(!self._containsValue(_616,key,_612,_614[key])){_615=false;}}}if(_615){_611.push(_616);}}_60c(_611,_60f);}else{for(i=0;i<_610.length;++i){var item=_610[i];if(item!==null){_611.push(item);}}_60c(_611,_60f);}};if(this._loadFinished){_60e(_60b,this._getItemsArray(_60b.queryOptions));}else{if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_60b,filter:_60e});}else{this._loadInProgress=true;var _617={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _618=dojo.xhrGet(_617);_618.addCallback(function(data){try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;_60e(_60b,self._getItemsArray(_60b.queryOptions));self._handleQueuedFetches();}catch(e){self._loadFinished=true;self._loadInProgress=false;_60d(e,_60b);}});_618.addErrback(function(_619){self._loadInProgress=false;_60d(_619,_60b);});var _61a=null;if(_60b.abort){_61a=_60b.abort;}_60b.abort=function(){var df=_618;if(df&&df.fired===-1){df.cancel();df=null;}if(_61a){_61a.call(_60b);}};}}else{if(this._jsonData){try{this._loadFinished=true;this._getItemsFromLoadedData(this._jsonData);this._jsonData=null;_60e(_60b,this._getItemsArray(_60b.queryOptions));}catch(e){_60d(e,_60b);}}else{_60d(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."),_60b);}}}},_handleQueuedFetches:function(){if(this._queuedFetches.length>0){for(var i=0;i<this._queuedFetches.length;i++){var _61b=this._queuedFetches[i],_61c=_61b.args,_61d=_61b.filter;if(_61d){_61d(_61c,this._getItemsArray(_61c.queryOptions));}else{this.fetchItemByIdentity(_61c);}}this._queuedFetches=[];}},_getItemsArray:function(_61e){if(_61e&&_61e.deep){return this._arrayOfAllItems;}return this._arrayOfTopLevelItems;},close:function(_61f){if(this.clearOnClose&&this._loadFinished&&!this._loadInProgress){if(((this._jsonFileUrl==""||this._jsonFileUrl==null)&&(this.url==""||this.url==null))&&this.data==null){console.debug("dojo.data.ItemFileReadStore: WARNING! Data reload "+" information has not been provided."+" Please set 'url' or 'data' to the appropriate value before"+" the next fetch");}this._arrayOfAllItems=[];this._arrayOfTopLevelItems=[];this._loadFinished=false;this._itemsByIdentity=null;this._loadInProgress=false;this._queuedFetches=[];}},_getItemsFromLoadedData:function(_620){var _621=false,self=this;function _622(_623){var _624=((_623!==null)&&(typeof _623==="object")&&(!dojo.isArray(_623)||_621)&&(!dojo.isFunction(_623))&&(_623.constructor==Object||dojo.isArray(_623))&&(typeof _623._reference==="undefined")&&(typeof _623._type==="undefined")&&(typeof _623._value==="undefined")&&self.hierarchical);return _624;};function _625(_626){self._arrayOfAllItems.push(_626);for(var _627 in _626){var _628=_626[_627];if(_628){if(dojo.isArray(_628)){var _629=_628;for(var k=0;k<_629.length;++k){var _62a=_629[k];if(_622(_62a)){_625(_62a);}}}else{if(_622(_628)){_625(_628);}}}}};this._labelAttr=_620.label;var i,item;this._arrayOfAllItems=[];this._arrayOfTopLevelItems=_620.items;for(i=0;i<this._arrayOfTopLevelItems.length;++i){item=this._arrayOfTopLevelItems[i];if(dojo.isArray(item)){_621=true;}_625(item);item[this._rootItemPropName]=true;}var _62b={},key;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];for(key in item){if(key!==this._rootItemPropName){var _62c=item[key];if(_62c!==null){if(!dojo.isArray(_62c)){item[key]=[_62c];}}else{item[key]=[null];}}_62b[key]=key;}}while(_62b[this._storeRefPropName]){this._storeRefPropName+="_";}while(_62b[this._itemNumPropName]){this._itemNumPropName+="_";}while(_62b[this._reverseRefMap]){this._reverseRefMap+="_";}var _62d;var _62e=_620.identifier;if(_62e){this._itemsByIdentity={};this._features["dojo.data.api.Identity"]=_62e;for(i=0;i<this._arrayOfAllItems.length;++i){item=this._arrayOfAllItems[i];_62d=item[_62e];var _62f=_62d[0];if(!Object.hasOwnProperty.call(this._itemsByIdentity,_62f)){this._itemsByIdentity[_62f]=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: ["+_62e+"]. Value collided: ["+_62f+"]");}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: ["+_62e+"]. Value collided: ["+_62f+"]");}}}}}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){_62d=item[key];for(var j=0;j<_62d.length;++j){_62c=_62d[j];if(_62c!==null&&typeof _62c=="object"){if(("_type" in _62c)&&("_value" in _62c)){var type=_62c._type;var _630=this._datatypeMap[type];if(!_630){throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '"+type+"'");}else{if(dojo.isFunction(_630)){_62d[j]=new _630(_62c._value);}else{if(dojo.isFunction(_630.deserialize)){_62d[j]=_630.deserialize(_62c._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(_62c._reference){var _631=_62c._reference;if(!dojo.isObject(_631)){_62d[j]=this._getItemByIdentity(_631);}else{for(var k=0;k<this._arrayOfAllItems.length;++k){var _632=this._arrayOfAllItems[k],_633=true;for(var _634 in _631){if(_632[_634]!=_631[_634]){_633=false;}}if(_633){_62d[j]=_632;}}}if(this.referenceIntegrity){var _635=_62d[j];if(this.isItem(_635)){this._addReferenceToMap(_635,item,key);}}}else{if(this.isItem(_62c)){if(this.referenceIntegrity){this._addReferenceToMap(_62c,item,key);}}}}}}}},_addReferenceToMap:function(_636,_637,_638){},getIdentity:function(item){var _639=this._features["dojo.data.api.Identity"];if(_639===Number){return item[this._itemNumPropName];}else{var _63a=item[_639];if(_63a){return _63a[0];}}return null;},fetchItemByIdentity:function(_63b){var item,_63c;if(!this._loadFinished){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null&&this._jsonData==null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){if(this._loadInProgress){this._queuedFetches.push({args:_63b});}else{this._loadInProgress=true;var _63d={url:self._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk};var _63e=dojo.xhrGet(_63d);_63e.addCallback(function(data){var _63f=_63b.scope?_63b.scope:dojo.global;try{self._getItemsFromLoadedData(data);self._loadFinished=true;self._loadInProgress=false;item=self._getItemByIdentity(_63b.identity);if(_63b.onItem){_63b.onItem.call(_63f,item);}self._handleQueuedFetches();}catch(error){self._loadInProgress=false;if(_63b.onError){_63b.onError.call(_63f,error);}}});_63e.addErrback(function(_640){self._loadInProgress=false;if(_63b.onError){var _641=_63b.scope?_63b.scope:dojo.global;_63b.onError.call(_641,_640);}});}}else{if(this._jsonData){self._getItemsFromLoadedData(self._jsonData);self._jsonData=null;self._loadFinished=true;item=self._getItemByIdentity(_63b.identity);if(_63b.onItem){_63c=_63b.scope?_63b.scope:dojo.global;_63b.onItem.call(_63c,item);}}}}else{item=this._getItemByIdentity(_63b.identity);if(_63b.onItem){_63c=_63b.scope?_63b.scope:dojo.global;_63b.onItem.call(_63c,item);}}},_getItemByIdentity:function(_642){var item=null;if(this._itemsByIdentity&&Object.hasOwnProperty.call(this._itemsByIdentity,_642)){item=this._itemsByIdentity[_642];}else{if(Object.hasOwnProperty.call(this._arrayOfAllItems,_642)){item=this._arrayOfAllItems[_642];}}if(item===undefined){item=null;}return item;},getIdentityAttributes:function(item){var _643=this._features["dojo.data.api.Identity"];if(_643===Number){return null;}else{return [_643];}},_forceLoad:function(){var self=this;if(this._jsonFileUrl!==this._ccUrl){dojo.deprecated("dojo.data.ItemFileReadStore: ","To change the url, set the url property of the store,"+" not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0");this._ccUrl=this._jsonFileUrl;this.url=this._jsonFileUrl;}else{if(this.url!==this._ccUrl){this._jsonFileUrl=this.url;this._ccUrl=this.url;}}if(this.data!=null){this._jsonData=this.data;this.data=null;}if(this._jsonFileUrl){var _644={url:this._jsonFileUrl,handleAs:"json-comment-optional",preventCache:this.urlPreventCache,failOk:this.failOk,sync:true};var _645=dojo.xhrGet(_644);_645.addCallback(function(data){try{if(self._loadInProgress!==true&&!self._loadFinished){self._getItemsFromLoadedData(data);self._loadFinished=true;}else{if(self._loadInProgress){throw new Error("dojo.data.ItemFileReadStore: Unable to perform a synchronous load, an async load is in progress.");}}}catch(e){console.log(e);throw e;}});_645.addErrback(function(_646){throw _646;});}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["dojo.data.ItemFileWriteStore"]){dojo._hasResource["dojo.data.ItemFileWriteStore"]=true;dojo.provide("dojo.data.ItemFileWriteStore");dojo.declare("dojo.data.ItemFileWriteStore",dojo.data.ItemFileReadStore,{constructor:function(_647){this._features["dojo.data.api.Write"]=true;this._features["dojo.data.api.Notification"]=true;this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};if(!this._datatypeMap["Date"].serialize){this._datatypeMap["Date"].serialize=function(obj){return dojo.date.stamp.toISOString(obj,{zulu:true});};}if(_647&&(_647.referenceIntegrity===false)){this.referenceIntegrity=false;}this._saveInProgress=false;},referenceIntegrity:true,_assert:function(_648){if(!_648){throw new Error("assertion failed in ItemFileWriteStore");}},_getIdentifierAttribute:function(){var _649=this.getFeatures()["dojo.data.api.Identity"];return _649;},newItem:function(_64a,_64b){this._assert(!this._saveInProgress);if(!this._loadFinished){this._forceLoad();}if(typeof _64a!="object"&&typeof _64a!="undefined"){throw new Error("newItem() was passed something other than an object");}var _64c=null;var _64d=this._getIdentifierAttribute();if(_64d===Number){_64c=this._arrayOfAllItems.length;}else{_64c=_64a[_64d];if(typeof _64c==="undefined"){throw new Error("newItem() was not passed an identity for the new item");}if(dojo.isArray(_64c)){throw new Error("newItem() was not passed an single-valued identity");}}if(this._itemsByIdentity){this._assert(typeof this._itemsByIdentity[_64c]==="undefined");}this._assert(typeof this._pending._newItems[_64c]==="undefined");this._assert(typeof this._pending._deletedItems[_64c]==="undefined");var _64e={};_64e[this._storeRefPropName]=this;_64e[this._itemNumPropName]=this._arrayOfAllItems.length;if(this._itemsByIdentity){this._itemsByIdentity[_64c]=_64e;_64e[_64d]=[_64c];}this._arrayOfAllItems.push(_64e);var _64f=null;if(_64b&&_64b.parent&&_64b.attribute){_64f={item:_64b.parent,attribute:_64b.attribute,oldValue:undefined};var _650=this.getValues(_64b.parent,_64b.attribute);if(_650&&_650.length>0){var _651=_650.slice(0,_650.length);if(_650.length===1){_64f.oldValue=_650[0];}else{_64f.oldValue=_650.slice(0,_650.length);}_651.push(_64e);this._setValueOrValues(_64b.parent,_64b.attribute,_651,false);_64f.newValue=this.getValues(_64b.parent,_64b.attribute);}else{this._setValueOrValues(_64b.parent,_64b.attribute,_64e,false);_64f.newValue=_64e;}}else{_64e[this._rootItemPropName]=true;this._arrayOfTopLevelItems.push(_64e);}this._pending._newItems[_64c]=_64e;for(var key in _64a){if(key===this._storeRefPropName||key===this._itemNumPropName){throw new Error("encountered bug in ItemFileWriteStore.newItem");}var _652=_64a[key];if(!dojo.isArray(_652)){_652=[_652];}_64e[key]=_652;if(this.referenceIntegrity){for(var i=0;i<_652.length;i++){var val=_652[i];if(this.isItem(val)){this._addReferenceToMap(val,_64e,key);}}}}this.onNew(_64e,_64f);return _64e;},_removeArrayElement:function(_653,_654){var _655=dojo.indexOf(_653,_654);if(_655!=-1){_653.splice(_655,1);return true;}return false;},deleteItem:function(item){this._assert(!this._saveInProgress);this._assertIsItem(item);var _656=item[this._itemNumPropName];var _657=this.getIdentity(item);if(this.referenceIntegrity){var _658=this.getAttributes(item);if(item[this._reverseRefMap]){item["backup_"+this._reverseRefMap]=dojo.clone(item[this._reverseRefMap]);}dojo.forEach(_658,function(_659){dojo.forEach(this.getValues(item,_659),function(_65a){if(this.isItem(_65a)){if(!item["backupRefs_"+this._reverseRefMap]){item["backupRefs_"+this._reverseRefMap]=[];}item["backupRefs_"+this._reverseRefMap].push({id:this.getIdentity(_65a),attr:_659});this._removeReferenceFromMap(_65a,item,_659);}},this);},this);var _65b=item[this._reverseRefMap];if(_65b){for(var _65c in _65b){var _65d=null;if(this._itemsByIdentity){_65d=this._itemsByIdentity[_65c];}else{_65d=this._arrayOfAllItems[_65c];}if(_65d){for(var _65e in _65b[_65c]){var _65f=this.getValues(_65d,_65e)||[];var _660=dojo.filter(_65f,function(_661){return !(this.isItem(_661)&&this.getIdentity(_661)==_657);},this);this._removeReferenceFromMap(item,_65d,_65e);if(_660.length<_65f.length){this._setValueOrValues(_65d,_65e,_660,true);}}}}}}this._arrayOfAllItems[_656]=null;item[this._storeRefPropName]=null;if(this._itemsByIdentity){delete this._itemsByIdentity[_657];}this._pending._deletedItems[_657]=item;if(item[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,item);}this.onDelete(item);return true;},setValue:function(item,_662,_663){return this._setValueOrValues(item,_662,_663,true);},setValues:function(item,_664,_665){return this._setValueOrValues(item,_664,_665,true);},unsetAttribute:function(item,_666){return this._setValueOrValues(item,_666,[],true);},_setValueOrValues:function(item,_667,_668,_669){this._assert(!this._saveInProgress);this._assertIsItem(item);this._assert(dojo.isString(_667));this._assert(typeof _668!=="undefined");var _66a=this._getIdentifierAttribute();if(_667==_66a){throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier.");}var _66b=this._getValueOrValues(item,_667);var _66c=this.getIdentity(item);if(!this._pending._modifiedItems[_66c]){var _66d={};for(var key in item){if((key===this._storeRefPropName)||(key===this._itemNumPropName)||(key===this._rootItemPropName)){_66d[key]=item[key];}else{if(key===this._reverseRefMap){_66d[key]=dojo.clone(item[key]);}else{_66d[key]=item[key].slice(0,item[key].length);}}}this._pending._modifiedItems[_66c]=_66d;}var _66e=false;if(dojo.isArray(_668)&&_668.length===0){_66e=delete item[_667];_668=undefined;if(this.referenceIntegrity&&_66b){var _66f=_66b;if(!dojo.isArray(_66f)){_66f=[_66f];}for(var i=0;i<_66f.length;i++){var _670=_66f[i];if(this.isItem(_670)){this._removeReferenceFromMap(_670,item,_667);}}}}else{var _671;if(dojo.isArray(_668)){var _672=_668;_671=_668.slice(0,_668.length);}else{_671=[_668];}if(this.referenceIntegrity){if(_66b){var _66f=_66b;if(!dojo.isArray(_66f)){_66f=[_66f];}var map={};dojo.forEach(_66f,function(_673){if(this.isItem(_673)){var id=this.getIdentity(_673);map[id.toString()]=true;}},this);dojo.forEach(_671,function(_674){if(this.isItem(_674)){var id=this.getIdentity(_674);if(map[id.toString()]){delete map[id.toString()];}else{this._addReferenceToMap(_674,item,_667);}}},this);for(var rId in map){var _675;if(this._itemsByIdentity){_675=this._itemsByIdentity[rId];}else{_675=this._arrayOfAllItems[rId];}this._removeReferenceFromMap(_675,item,_667);}}else{for(var i=0;i<_671.length;i++){var _670=_671[i];if(this.isItem(_670)){this._addReferenceToMap(_670,item,_667);}}}}item[_667]=_671;_66e=true;}if(_669){this.onSet(item,_667,_66b,_668);}return _66e;},_addReferenceToMap:function(_676,_677,_678){var _679=this.getIdentity(_677);var _67a=_676[this._reverseRefMap];if(!_67a){_67a=_676[this._reverseRefMap]={};}var _67b=_67a[_679];if(!_67b){_67b=_67a[_679]={};}_67b[_678]=true;},_removeReferenceFromMap:function(_67c,_67d,_67e){var _67f=this.getIdentity(_67d);var _680=_67c[this._reverseRefMap];var _681;if(_680){for(_681 in _680){if(_681==_67f){delete _680[_681][_67e];if(this._isEmpty(_680[_681])){delete _680[_681];}}}if(this._isEmpty(_680)){delete _67c[this._reverseRefMap];}}},_dumpReferenceMap:function(){var i;for(i=0;i<this._arrayOfAllItems.length;i++){var item=this._arrayOfAllItems[i];if(item&&item[this._reverseRefMap]){console.log("Item: ["+this.getIdentity(item)+"] is referenced by: "+dojo.toJson(item[this._reverseRefMap]));}}},_getValueOrValues:function(item,_682){var _683=undefined;if(this.hasAttribute(item,_682)){var _684=this.getValues(item,_682);if(_684.length==1){_683=_684[0];}else{_683=_684;}}return _683;},_flatten:function(_685){if(this.isItem(_685)){var item=_685;var _686=this.getIdentity(item);var _687={_reference:_686};return _687;}else{if(typeof _685==="object"){for(var type in this._datatypeMap){var _688=this._datatypeMap[type];if(dojo.isObject(_688)&&!dojo.isFunction(_688)){if(_685 instanceof _688.type){if(!_688.serialize){throw new Error("ItemFileWriteStore: No serializer defined for type mapping: ["+type+"]");}return {_type:type,_value:_688.serialize(_685)};}}else{if(_685 instanceof _688){return {_type:type,_value:_685.toString()};}}}}return _685;}},_getNewFileContentString:function(){var _689={};var _68a=this._getIdentifierAttribute();if(_68a!==Number){_689.identifier=_68a;}if(this._labelAttr){_689.label=this._labelAttr;}_689.items=[];for(var i=0;i<this._arrayOfAllItems.length;++i){var item=this._arrayOfAllItems[i];if(item!==null){var _68b={};for(var key in item){if(key!==this._storeRefPropName&&key!==this._itemNumPropName&&key!==this._reverseRefMap&&key!==this._rootItemPropName){var _68c=key;var _68d=this.getValues(item,_68c);if(_68d.length==1){_68b[_68c]=this._flatten(_68d[0]);}else{var _68e=[];for(var j=0;j<_68d.length;++j){_68e.push(this._flatten(_68d[j]));_68b[_68c]=_68e;}}}}_689.items.push(_68b);}}var _68f=true;return dojo.toJson(_689,_68f);},_isEmpty:function(_690){var _691=true;if(dojo.isObject(_690)){var i;for(i in _690){_691=false;break;}}else{if(dojo.isArray(_690)){if(_690.length>0){_691=false;}}}return _691;},save:function(_692){this._assert(!this._saveInProgress);this._saveInProgress=true;var self=this;var _693=function(){self._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};self._saveInProgress=false;if(_692&&_692.onComplete){var _694=_692.scope||dojo.global;_692.onComplete.call(_694);}};var _695=function(err){self._saveInProgress=false;if(_692&&_692.onError){var _696=_692.scope||dojo.global;_692.onError.call(_696,err);}};if(this._saveEverything){var _697=this._getNewFileContentString();this._saveEverything(_693,_695,_697);}if(this._saveCustom){this._saveCustom(_693,_695);}if(!this._saveEverything&&!this._saveCustom){_693();}},revert:function(){this._assert(!this._saveInProgress);var _698;for(_698 in this._pending._modifiedItems){var _699=this._pending._modifiedItems[_698];var _69a=null;if(this._itemsByIdentity){_69a=this._itemsByIdentity[_698];}else{_69a=this._arrayOfAllItems[_698];}_699[this._storeRefPropName]=this;for(key in _69a){delete _69a[key];}dojo.mixin(_69a,_699);}var _69b;for(_698 in this._pending._deletedItems){_69b=this._pending._deletedItems[_698];_69b[this._storeRefPropName]=this;var _69c=_69b[this._itemNumPropName];if(_69b["backup_"+this._reverseRefMap]){_69b[this._reverseRefMap]=_69b["backup_"+this._reverseRefMap];delete _69b["backup_"+this._reverseRefMap];}this._arrayOfAllItems[_69c]=_69b;if(this._itemsByIdentity){this._itemsByIdentity[_698]=_69b;}if(_69b[this._rootItemPropName]){this._arrayOfTopLevelItems.push(_69b);}}for(_698 in this._pending._deletedItems){_69b=this._pending._deletedItems[_698];if(_69b["backupRefs_"+this._reverseRefMap]){dojo.forEach(_69b["backupRefs_"+this._reverseRefMap],function(_69d){var _69e;if(this._itemsByIdentity){_69e=this._itemsByIdentity[_69d.id];}else{_69e=this._arrayOfAllItems[_69d.id];}this._addReferenceToMap(_69e,_69b,_69d.attr);},this);delete _69b["backupRefs_"+this._reverseRefMap];}}for(_698 in this._pending._newItems){var _69f=this._pending._newItems[_698];_69f[this._storeRefPropName]=null;this._arrayOfAllItems[_69f[this._itemNumPropName]]=null;if(_69f[this._rootItemPropName]){this._removeArrayElement(this._arrayOfTopLevelItems,_69f);}if(this._itemsByIdentity){delete this._itemsByIdentity[_698];}}this._pending={_newItems:{},_modifiedItems:{},_deletedItems:{}};return true;},isDirty:function(item){if(item){var _6a0=this.getIdentity(item);return new Boolean(this._pending._newItems[_6a0]||this._pending._modifiedItems[_6a0]||this._pending._deletedItems[_6a0]).valueOf();}else{if(!this._isEmpty(this._pending._newItems)||!this._isEmpty(this._pending._modifiedItems)||!this._isEmpty(this._pending._deletedItems)){return true;}return false;}},onSet:function(item,_6a1,_6a2,_6a3){},onNew:function(_6a4,_6a5){},onDelete:function(_6a6){},close:function(_6a7){if(this.clearOnClose){if(!this.isDirty()){this.inherited(arguments);}else{throw new Error("dojo.data.ItemFileWriteStore: There are unsaved changes present in the store. Please save or revert the changes before invoking close.");}}}});}dojo.i18n._preloadLocalizations("dojo.nls.tt-rss-layer",["ROOT","ar","ca","cs","da","de","de-de","el","en","en-gb","en-us","es","es-es","fi","fi-fi","fr","fr-fr","he","he-il","hu","it","it-it","ja","ja-jp","ko","ko-kr","nb","nl","nl-nl","pl","pt","pt-br","pt-pt","ru","sk","sl","sv","th","tr","xx","zh","zh-cn","zh-tw"]); diff --git a/lib/dojo/tt-rss-layer.js.uncompressed.js b/lib/dojo/tt-rss-layer.js.uncompressed.js index fa2e12157..81d4302df 100644 --- a/lib/dojo/tt-rss-layer.js.uncompressed.js +++ b/lib/dojo/tt-rss-layer.js.uncompressed.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -16,6 +16,8 @@ if(!dojo._hasResource["dojo.date.stamp"]){ //_hasResource checks added by build. dojo._hasResource["dojo.date.stamp"] = true; dojo.provide("dojo.date.stamp"); +dojo.getObject("date.stamp", true, dojo); + // Methods to convert dates to or from a wire (string) format using well-known conventions dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/defaultTime){ @@ -94,7 +96,7 @@ dojo.date.stamp.fromISOString = function(/*String*/formattedString, /*Number?*/d } return result; // Date or null -} +}; /*===== dojo.date.stamp.__Options = function(){ @@ -144,13 +146,13 @@ dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__O }else if(options.selector != "time"){ var timezoneOffset = dateObject.getTimezoneOffset(); var absOffset = Math.abs(timezoneOffset); - time += (timezoneOffset > 0 ? "-" : "+") + + time += (timezoneOffset > 0 ? "-" : "+") + _(Math.floor(absOffset/60)) + ":" + _(absOffset%60); } formattedDate.push(time); } return formattedDate.join('T'); // String -} +}; } @@ -159,14 +161,14 @@ dojo._hasResource["dojo.parser"] = true; dojo.provide("dojo.parser"); + new Date("X"); // workaround for #11279, new Date("") == NaN dojo.parser = new function(){ - // summary: The Dom/Widget parsing package + // summary: + // The Dom/Widget parsing package var d = dojo; - this._attrName = d._scopeName + "Type"; - this._query = "[" + this._attrName + "]"; function val2type(/*Object*/ value){ // summary: @@ -191,13 +193,13 @@ dojo.parser = new function(){ case "number": return value.length ? Number(value) : NaN; case "boolean": - // for checked/disabled value might be "" or "checked". interpret as true. + // 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 + // (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)); } @@ -226,7 +228,7 @@ dojo.parser = new function(){ } } - var instanceClasses = { + var dummyClass = {}, instanceClasses = { // map from fully qualified name (like "dijit.Button") to structure like // { cls: dijit.Button, params: {label: "string", disabled: "boolean"} } }; @@ -234,45 +236,70 @@ dojo.parser = new function(){ // Widgets like BorderContainer add properties to _Widget via dojo.extend(). // If BorderContainer is loaded after _Widget's parameter list has been cached, // we need to refresh that parameter list (for _Widget and all widgets that extend _Widget). - dojo.connect(dojo, "extend", function(){ + // TODO: remove this in 2.0, when we stop caching parameters. + d.connect(d, "extend", function(){ instanceClasses = {}; }); - function getClassInfo(/*String*/ className){ + function getProtoInfo(cls, params){ + // cls: A prototype + // The prototype of the class to check props on + // params: Object + // The parameters object to mix found parameters onto. + for(var name in cls){ + if(name.charAt(0)=="_"){ continue; } // skip internal properties + if(name in dummyClass){ continue; } // skip "constructor" and "toString" + params[name] = val2type(cls[name]); + } + return params; + } + + function getClassInfo(/*String*/ className, /*Boolean*/ skipParamsLookup){ + // summary: + // Maps a widget name string like "dijit.form.Button" to the widget constructor itself, + // and a list of that widget's parameters and their types // className: // fully qualified name (like "dijit.form.Button") // returns: // structure like - // { - // cls: dijit.Button, + // { + // cls: dijit.Button, // params: { label: "string", disabled: "boolean"} // } - if(!instanceClasses[className]){ + var c = instanceClasses[className]; + if(!c){ // get pointer to widget class - var cls = d.getObject(className); + var cls = d.getObject(className), params = null; if(!cls){ return null; } // class not defined [yet] - - var proto = cls.prototype; - - // get table of parameter names & types - var params = {}, dummyClass = {}; - for(var name in proto){ - if(name.charAt(0)=="_"){ continue; } // skip internal properties - if(name in dummyClass){ continue; } // skip "constructor" and "toString" - var defVal = proto[name]; - params[name]=val2type(defVal); + if(!skipParamsLookup){ // from fastpath, we don't need to lookup the attrs on the proto because they are explicit + params = getProtoInfo(cls.prototype, {}) } - - instanceClasses[className] = { cls: cls, params: params }; + c = { cls: cls, params: params }; + + }else if(!skipParamsLookup && !c.params){ + // if we're calling getClassInfo and have a cls proto, but no params info, scan that cls for params now + // and update the pointer in instanceClasses[className]. This happens when a widget appears in another + // widget's template which still uses dojoType, but an instance of the widget appears prior with a data-dojo-type, + // skipping this lookup the first time. + c.params = getProtoInfo(c.cls.prototype, {}); } - return instanceClasses[className]; + + return c; } - this._functionFromScript = function(script){ + this._functionFromScript = function(script, attrData){ + // summary: + // Convert a <script type="dojo/method" args="a, b, c"> ... </script> + // into a function + // script: DOMNode + // The <script> DOMNode + // attrData: String + // For HTML5 compliance, searches for attrData + "args" (typically + // "data-dojo-args") instead of "args" var preamble = ""; var suffix = ""; - var argsStr = script.getAttribute("args"); + var argsStr = (script.getAttribute(attrData + "args") || script.getAttribute("args")); if(argsStr){ d.forEach(argsStr.split(/\s*,\s*/), function(part, idx){ preamble += "var "+part+" = arguments["+idx+"]; "; @@ -286,7 +313,7 @@ dojo.parser = new function(){ }); } return new Function(preamble+script.innerHTML+suffix); - } + }; this.instantiate = function(/* Array */nodes, /* Object? */mixin, /* Object? */args){ // summary: @@ -307,69 +334,106 @@ dojo.parser = new function(){ // exist. // args: Object? // An object used to hold kwArgs for instantiation. - // Supports 'noStart' and inherited. - var thelist = [], dp = dojo.parser; + // See parse.args argument for details. + + var thelist = [], mixin = mixin||{}; args = args||{}; - + + // TODO: for 2.0 default to data-dojo- regardless of scopeName (or maybe scopeName won't exist in 2.0) + var attrName = (args.scope || d._scopeName) + "Type", // typically "dojoType" + attrData = "data-" + (args.scope || d._scopeName) + "-"; // typically "data-dojo-" + d.forEach(nodes, function(obj){ if(!obj){ return; } - // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc.s - var node, type, clsInfo, clazz, scripts; + // Get pointers to DOMNode, dojoType string, and clsInfo (metadata about the dojoType), etc. + var node, type, clsInfo, clazz, scripts, fastpath; if(obj.node){ // new format of nodes[] array, object w/lots of properties pre-computed for me node = obj.node; type = obj.type; - clsInfo = obj.clsInfo || (type && getClassInfo(type)); + fastpath = obj.fastpath; + clsInfo = obj.clsInfo || (type && getClassInfo(type, fastpath)); clazz = clsInfo && clsInfo.cls; scripts = obj.scripts; }else{ - // old (backwards compatible) format of nodes[] array, simple array of DOMNodes + // old (backwards compatible) format of nodes[] array, simple array of DOMNodes. no fastpath/data-dojo-type support here. node = obj; - type = dp._attrName in mixin ? mixin[dp._attrName] : node.getAttribute(dp._attrName); + type = attrName in mixin ? mixin[attrName] : node.getAttribute(attrName); clsInfo = type && getClassInfo(type); clazz = clsInfo && clsInfo.cls; - scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : + scripts = (clazz && (clazz._noScript || clazz.prototype._noScript) ? [] : d.query("> script[type^='dojo/']", node)); } if(!clsInfo){ throw new Error("Could not load class '" + type); } - // Setup hash to hold parameter settings for this widget. Start with the parameter + // Setup hash to hold parameter settings for this widget. Start with the parameter // settings inherited from ancestors ("dir" and "lang"). // Inherited setting may later be overridden by explicit settings on node itself. - var params = {}, - attributes = node.attributes; + var params = {}; + if(args.defaults){ // settings for the document itself (or whatever subtree is being parsed) - dojo.mixin(params, args.defaults); + d._mixin(params, args.defaults); } if(obj.inherited){ // settings from dir=rtl or lang=... on a node above this node - dojo.mixin(params, obj.inherited); + d._mixin(params, obj.inherited); } + + // mix things found in data-dojo-props into the params + if(fastpath){ + var extra = node.getAttribute(attrData + "props"); + if(extra && extra.length){ + try{ + extra = d.fromJson.call(args.propsThis, "{" + extra + "}"); + d._mixin(params, extra); + }catch(e){ + // give the user a pointer to their invalid parameters. FIXME: can we kill this in production? + throw new Error(e.toString() + " in data-dojo-props='" + extra + "'"); + } + } - // read parameters (ie, attributes) specified on DOMNode - // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"} - for(var name in clsInfo.params){ - var item = name in mixin?{value:mixin[name],specified:true}: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 = "className" in mixin?mixin.className:node.className; - break; - case "style": - value = "style" in mixin?mixin.style:(node.style && node.style.cssText); // FIXME: Opera? + // For the benefit of _Templated, check if node has data-dojo-attach-point/data-dojo-attach-event + // and mix those in as though they were parameters + var attachPoint = node.getAttribute(attrData + "attach-point"); + if(attachPoint){ + params.dojoAttachPoint = attachPoint; } - var _type = clsInfo.params[name]; - if(typeof value == "string"){ - params[name] = str2obj(value, _type); - }else{ - params[name] = value; + var attachEvent = node.getAttribute(attrData + "attach-event"); + if(attachEvent){ + params.dojoAttachEvent = attachEvent; + } + dojo.mixin(params, mixin); + }else{ + // FIXME: we need something like "deprecateOnce()" to throw dojo.deprecation for something. + // remove this logic in 2.0 + // read parameters (ie, attributes) specified on DOMNode + + var attributes = node.attributes; + + // clsInfo.params lists expected params like {"checked": "boolean", "n": "number"} + for(var name in clsInfo.params){ + var item = name in mixin ? { value:mixin[name], specified:true } : 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 = "className" in mixin ? mixin.className : node.className; + break; + case "style": + value = "style" in mixin ? mixin.style : (node.style && node.style.cssText); // FIXME: Opera? + } + var _type = clsInfo.params[name]; + if(typeof value == "string"){ + params[name] = str2obj(value, _type); + }else{ + params[name] = value; + } } } @@ -384,9 +448,10 @@ dojo.parser = new function(){ d.forEach(scripts, function(script){ node.removeChild(script); - var event = script.getAttribute("event"), + // FIXME: drop event="" support in 2.0. use data-dojo-event="" instead + var event = (script.getAttribute(attrData + "event") || script.getAttribute("event")), type = script.getAttribute("type"), - nf = d.parser._functionFromScript(script); + nf = d.parser._functionFromScript(script, attrData); if(event){ if(type == "dojo/connect"){ connects.push({event: event, func: nf}); @@ -404,7 +469,8 @@ dojo.parser = new function(){ thelist.push(instance); // map it to the JS namespace if that makes sense - var jsname = node.getAttribute("jsId"); + // FIXME: in 2.0, drop jsId support. use data-dojo-id instead + var jsname = (node.getAttribute(attrData + "id") || node.getAttribute("jsId")); if(jsname){ d.setObject(jsname, instance); } @@ -428,9 +494,9 @@ dojo.parser = new function(){ // ContentPane is the parent widget (so that the parse doesn't call startup() on the // ContentPane's children) d.forEach(thelist, function(instance){ - if( !args.noStart && instance && - instance.startup && - !instance._started && + if( !args.noStart && instance && + dojo.isFunction(instance.startup) && + !instance._started && (!instance.getParent || !instance.getParent()) ){ instance.startup(); @@ -440,34 +506,57 @@ dojo.parser = new function(){ return thelist; }; - this.parse = function(/*DomNode?*/ rootNode, /* Object? */ args){ + this.parse = function(rootNode, args){ // summary: // Scan the DOM for class instances, and instantiate them. // // description: // Search specified node (or root node) recursively for class instances, - // and instantiate them Searches for - // dojoType="qualified.class.name" + // and instantiate them. Searches for either data-dojo-type="Class" or + // dojoType="Class" where "Class" is a a fully qualified class name, + // like `dijit.form.Button` + // + // Using `data-dojo-type`: + // Attributes using can be mixed into the parameters used to instantitate the + // Class by using a `data-dojo-props` attribute on the node being converted. + // `data-dojo-props` should be a string attribute to be converted from JSON. + // + // Using `dojoType`: + // Attributes are read from the original domNode and converted to appropriate + // types by looking up the Class prototype values. This is the default behavior + // from Dojo 1.0 to Dojo 1.5. `dojoType` support is deprecated, and will + // go away in Dojo 2.0. // // rootNode: DomNode? // A default starting root node from which to start the parsing. Can be // omitted, defaulting to the entire document. If omitted, the `args` - // object can be passed in this place. If the `args` object has a + // object can be passed in this place. If the `args` object has a // `rootNode` member, that is used. // - // args: + // args: Object // a kwArgs object passed along to instantiate() - // + // // * noStart: Boolean? // when set will prevent the parser from calling .startup() - // when locating the nodes. + // when locating the nodes. // * rootNode: DomNode? // identical to the function's `rootNode` argument, though - // allowed to be passed in via this `args object. + // allowed to be passed in via this `args object. + // * template: Boolean + // If true, ignores ContentPane's stopParser flag and parses contents inside of + // a ContentPane inside of a template. This allows dojoAttachPoint on widgets/nodes + // nested inside the ContentPane to work. // * inherited: Object // Hash possibly containing dir and lang settings to be applied to // parsed widgets, unless there's another setting on a sub-node that overrides - // + // * scope: String + // Root for attribute names to search for. If scopeName is dojo, + // will search for data-dojo-type (or dojoType). For backwards compatibility + // reasons defaults to dojo._scopeName (which is "dojo" except when + // multi-version support is used, when it will be something like dojo16, dojo20, etc.) + // * propsThis: Object + // If specified, "this" referenced from data-dojo-props will refer to propsThis. + // Intended for use from the widgets-in-template feature of `dijit._Templated` // // example: // Parse all widgets on a page: @@ -475,10 +564,10 @@ dojo.parser = new function(){ // // example: // Parse all classes within the node with id="foo" - // | dojo.parser.parse(dojo.byId(foo)); + // | dojo.parser.parse(dojo.byId('foo')); // // example: - // Parse all classes in a page, but do not call .startup() on any + // Parse all classes in a page, but do not call .startup() on any // child // | dojo.parser.parse({ noStart: true }) // @@ -486,7 +575,7 @@ dojo.parser = new function(){ // Parse all classes in a node, but do not call .startup() // | dojo.parser.parse(someNode, { noStart:true }); // | // or - // | dojo.parser.parse({ noStart:true, rootNode: someNode }); + // | dojo.parser.parse({ noStart:true, rootNode: someNode }); // determine the root node based on the passed arguments. var root; @@ -496,8 +585,12 @@ dojo.parser = new function(){ }else{ root = rootNode; } + root = root ? dojo.byId(root) : dojo.body(); + args = args || {}; + + var attrName = (args.scope || d._scopeName) + "Type", // typically "dojoType" + attrData = "data-" + (args.scope || d._scopeName) + "-"; // typically "data-dojo-" - var attrName = this._attrName; function scan(parent, list){ // summary: // Parent is an Object representing a DOMNode, with or without a dojoType specified. @@ -506,7 +599,7 @@ dojo.parser = new function(){ // parent: Object // Object representing the parent node, like // | { - // | node: DomNode, // scan children of this node + // | node: DomNode, // scan children of this node // | inherited: {dir: "rtl"}, // dir/lang setting inherited from above node // | // | // attributes only set if node has dojoType specified @@ -519,6 +612,7 @@ dojo.parser = new function(){ // Effective dir and lang settings on parent node, either set directly or inherited from grandparent var inherited = dojo.clone(parent.inherited); dojo.forEach(["dir", "lang"], function(name){ + // TODO: what if this is a widget and dir/lang are declared in data-dojo-props? var val = parent.node.getAttribute(name); if(val){ inherited[name] = val; @@ -526,20 +620,31 @@ dojo.parser = new function(){ }); // if parent is a widget, then search for <script type=dojo/*> tags and put them in scripts[]. - var scripts = parent.scripts; + var scripts = parent.clsInfo && !parent.clsInfo.cls.prototype._noScript ? parent.scripts : null; // unless parent is a widget with the stopParser flag set, continue search for dojoType, recursively - var recurse = !parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser; + var recurse = (!parent.clsInfo || !parent.clsInfo.cls.prototype.stopParser) || (args && args.template); // scan parent's children looking for dojoType and <script type=dojo/*> for(var child = parent.node.firstChild; child; child = child.nextSibling){ if(child.nodeType == 1){ - var type = recurse && child.getAttribute(attrName); + // FIXME: desupport dojoType in 2.0. use data-dojo-type instead + var type, html5 = recurse && child.getAttribute(attrData + "type"); + if(html5){ + type = html5; + }else{ + // fallback to backward compatible mode, using dojoType. remove in 2.0 + type = recurse && child.getAttribute(attrName); + } + + var fastpath = html5 == type; + if(type){ - // if dojoType specified, add to output array of nodes to instantiate + // if dojoType/data-dojo-type specified, add to output array of nodes to instantiate var params = { "type": type, - clsInfo: getClassInfo(type), // note: won't find classes declared via dojo.Declaration + fastpath: fastpath, + clsInfo: getClassInfo(type, fastpath), // note: won't find classes declared via dojo.Declaration node: child, scripts: [], // <script> nodes that are parent's children inherited: inherited // dir & lang attributes inherited from parent @@ -552,7 +657,7 @@ dojo.parser = new function(){ }else if(scripts && child.nodeName.toLowerCase() == "script"){ // if <script type="dojo/...">, save in scripts[] type = child.getAttribute("type"); - if (type && /^dojo\//i.test(type)) { + if (type && /^dojo\/\w/i.test(type)) { scripts.push(child); } }else if(recurse){ @@ -566,17 +671,24 @@ dojo.parser = new function(){ } } + // Ignore bogus entries in inherited hash like {dir: ""} + var inherited = {}; + if(args && args.inherited){ + for(var key in args.inherited){ + if(args.inherited[key]){ inherited[key] = args.inherited[key]; } + } + } + // Make list of all nodes on page w/dojoType specified var list = []; scan({ - node: root ? dojo.byId(root) : dojo.body(), - inherited: (args && args.inherited) || { - dir: dojo._isBodyLtr() ? "ltr" : "rtl" - } + node: root, + inherited: inherited }, list); // go build the object instances - return this.instantiate(list, null, args); // Array + var mixin = args && args.template ? {template: true} : null; + return this.instantiate(list, mixin, args); // Array }; }(); @@ -584,14 +696,14 @@ dojo.parser = new function(){ //after the a11y test. (function(){ - var parseRunner = function(){ + var parseRunner = function(){ if(dojo.config.parseOnLoad){ - dojo.parser.parse(); + dojo.parser.parse(); } }; // FIXME: need to clobber cross-dependency!! - if(dojo.exists("dijit.wai.onload") && (dijit.wai.onload === dojo._loaders[0])){ + if(dojo.getObject("dijit.wai.onload") === dojo._loaders[0]){ dojo._loaders.splice(1, 0, parseRunner); }else{ dojo._loaders.unshift(parseRunner); @@ -604,6 +716,8 @@ if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do dojo._hasResource["dojo.window"] = true; dojo.provide("dojo.window"); +dojo.getObject("window", true, dojo); + dojo.window.getBox = function(){ // summary: // Returns the dimensions and scroll position of the viewable area of a browser window @@ -657,7 +771,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ return; } var backCompat = doc.compatMode == 'BackCompat', - clientAreaRoot = backCompat? body : html, + clientAreaRoot = (isIE >= 9 && node.ownerDocument.parentWindow.frameElement) + ? ((html.clientHeight > 0 && html.clientWidth > 0 && (body.clientHeight == 0 || body.clientWidth == 0 || body.clientHeight > html.clientHeight || body.clientWidth > html.clientWidth)) ? html : body) + : (backCompat ? body : html), scrollRoot = isWK ? body : clientAreaRoot, rootWidth = clientAreaRoot.clientWidth, rootHeight = clientAreaRoot.clientHeight, @@ -682,14 +798,11 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ }else{ var pb = dojo._getPadBorderExtents(el); elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t; - } - - if(el != scrollRoot){ // body, html sizes already have the scrollbar removed var clientSize = el.clientWidth, scrollBarSize = elPos.w - clientSize; if(clientSize > 0 && scrollBarSize > 0){ elPos.w = clientSize; - if(isIE && rtl){ elPos.x += scrollBarSize; } + elPos.x += (rtl && (isIE || el.clientLeft > pb.l/*Chrome*/)) ? scrollBarSize : 0; } clientSize = el.clientHeight; scrollBarSize = elPos.h - clientSize; @@ -718,8 +831,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ bot = t + nodePos.h - elPos.h; // beyond bottom: > 0 if(r * l > 0){ var s = Math[l < 0? "max" : "min"](l, r); + if(rtl && ((isIE == 8 && !backCompat) || isIE >= 9)){ s = -s; } nodePos.x += el.scrollLeft; - el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s; + el.scrollLeft += s; nodePos.x -= el.scrollLeft; } if(bot * t > 0){ @@ -728,7 +842,7 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ nodePos.y -= el.scrollTop; } el = (el != scrollRoot) && !fixedPos && el.parentNode; - } + } }catch(error){ console.error('scrollIntoView: ' + error); node.scrollIntoView(false); @@ -741,6 +855,7 @@ if(!dojo._hasResource["dijit._base.manager"]){ //_hasResource checks added by bu dojo._hasResource["dijit._base.manager"] = true; dojo.provide("dijit._base.manager"); + dojo.declare("dijit.WidgetSet", null, { // summary: // A set of widgets indexed by id. A default instance of this class is @@ -996,7 +1111,10 @@ dojo.declare("dijit.WidgetSet", null, { if(node.nodeType == 1){ var widgetId = node.getAttribute("widgetId"); if(widgetId){ - outAry.push(hash[widgetId]); + var widget = hash[widgetId]; + if(widget){ // may be null on page w/multiple dojo's loaded + outAry.push(widget); + } }else{ getChildrenHelper(node); } @@ -1086,29 +1204,25 @@ dojo.declare("dijit.WidgetSet", null, { return true; case "iframe": // If it's an editor <iframe> then it's tab navigable. - //TODO: feature detect "designMode" in elem.contentDocument? - if(dojo.isMoz){ - try{ - return elem.contentDocument.designMode == "on"; - }catch(err){ - return false; + var body; + try{ + // non-IE + var contentDocument = elem.contentDocument; + if("designMode" in contentDocument && contentDocument.designMode == "on"){ + return true; } - }else if(dojo.isWebKit){ - var doc = elem.contentDocument, - body = doc && doc.body; - return body && body.contentEditable == 'true'; - }else{ + body = contentDocument.body; + }catch(e1){ // contentWindow.document isn't accessible within IE7/8 // if the iframe.src points to a foreign url and this // page contains an element, that could get focus try{ - doc = elem.contentWindow.document; - body = doc && doc.body; - return body && body.firstChild && body.firstChild.contentEditable == 'true'; - }catch(e){ + body = elem.contentWindow.document.body; + }catch(e2){ return false; } } + return body.contentEditable == 'true' || (body.firstChild && body.firstChild.contentEditable == 'true'); default: return elem.contentEditable == 'true'; } @@ -1144,7 +1258,13 @@ dojo.declare("dijit.WidgetSet", null, { // positive tabIndex value // * the last element in document order with the highest // positive tabIndex value - var first, last, lowest, lowestTabindex, highest, highestTabindex; + var first, last, lowest, lowestTabindex, highest, highestTabindex, radioSelected = {}; + function radioName(node) { + // If this element is part of a radio button group, return the name for that group. + return node && node.tagName.toLowerCase() == "input" && + node.type && node.type.toLowerCase() == "radio" && + node.name && node.name.toLowerCase(); + } var walkTree = function(/*DOMNode*/parent){ dojo.query("> *", parent).forEach(function(child){ // Skip hidden elements, and also non-HTML elements (those in custom namespaces) in IE, @@ -1168,6 +1288,10 @@ dojo.declare("dijit.WidgetSet", null, { highest = child; } } + var rn = radioName(child); + if(dojo.attr(child, "checked") && rn) { + radioSelected[rn] = child; + } } if(child.nodeName.toUpperCase() != 'SELECT'){ walkTree(child); @@ -1175,7 +1299,11 @@ dojo.declare("dijit.WidgetSet", null, { }); }; if(shown(root)){ walkTree(root) } - return { first: first, last: last, lowest: lowest, highest: highest }; + function rs(node) { + // substitute checked radio button for unchecked one, if there is a checked one with the same name. + return radioSelected[radioName(node)] || node; + } + return { first: rs(first), last: rs(last), lowest: rs(lowest), highest: rs(highest) }; } dijit.getFirstInTabbingOrder = function(/*String|DOMNode*/ root){ // summary: @@ -1215,7 +1343,7 @@ dojo._hasResource["dijit._base.focus"] = true; dojo.provide("dijit._base.focus"); - // for dijit.isTabNavigable() + // summary: // These functions are used to query or set the focus and selection. @@ -1271,6 +1399,9 @@ dojo.mixin(dijit, { } } bm = {isCollapsed:true}; + if(sel.rangeCount){ + bm.mark = sel.getRangeAt(0).cloneRange(); + } }else{ rg = sel.getRangeAt(0); bm = {isCollapsed: false, mark: rg.cloneRange()}; @@ -1518,7 +1649,7 @@ dojo.mixin(dijit, { var doc = dojo.isIE ? targetWindow.document.documentElement : targetWindow.document; if(doc){ if(dojo.isIE){ - doc.attachEvent('onmousedown', mousedownListener); + targetWindow.document.body.attachEvent('onmousedown', mousedownListener); var activateListener = function(evt){ // IE reports that nodes like <body> have gotten focus, even though they have tabIndex=-1, // Should consider those more like a mouse-click than a focus.... @@ -1536,13 +1667,13 @@ dojo.mixin(dijit, { doc.attachEvent('ondeactivate', deactivateListener); return function(){ - doc.detachEvent('onmousedown', mousedownListener); + targetWindow.document.detachEvent('onmousedown', mousedownListener); doc.detachEvent('onactivate', activateListener); doc.detachEvent('ondeactivate', deactivateListener); doc = null; // prevent memory leak (apparent circular reference via closure) }; }else{ - doc.addEventListener('mousedown', mousedownListener, true); + doc.body.addEventListener('mousedown', mousedownListener, true); var focusListener = function(evt){ dijit._onFocusNode(effectiveNode || evt.target); }; @@ -1553,7 +1684,7 @@ dojo.mixin(dijit, { doc.addEventListener('blur', blurListener, true); return function(){ - doc.removeEventListener('mousedown', mousedownListener, true); + doc.body.removeEventListener('mousedown', mousedownListener, true); doc.removeEventListener('focus', focusListener, true); doc.removeEventListener('blur', blurListener, true); doc = null; // prevent memory leak (apparent circular reference via closure) @@ -1694,6 +1825,7 @@ dojo.mixin(dijit, { widget = dijit.byId(oldStack[i]); if(widget){ widget._focused = false; + widget.set("focused", false); widget._hasBeenBlurred = true; if(widget._onBlur){ widget._onBlur(by); @@ -1707,6 +1839,7 @@ dojo.mixin(dijit, { widget = dijit.byId(newStack[i]); if(widget){ widget._focused = true; + widget.set("focused", true); if(widget._onFocus){ widget._onFocus(by); } @@ -1733,6 +1866,7 @@ if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by b dojo._hasResource["dojo.AdapterRegistry"] = true; dojo.provide("dojo.AdapterRegistry"); + dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){ // summary: // A registry to make contextual calling/searching easier. @@ -1764,11 +1898,11 @@ dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){ this.pairs = []; this.returnWrappers = returnWrappers || false; // Boolean -} +}; dojo.extend(dojo.AdapterRegistry, { register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){ - // summary: + // summary: // register a check function to determine if the wrap function or // object gets selected // name: @@ -1836,7 +1970,6 @@ dojo.provide("dijit._base.place"); - dijit.getViewport = function(){ // summary: // Returns the dimensions and scroll position of the viewable area of a browser window @@ -1896,16 +2029,22 @@ dijit.placeOnScreen = function( return dijit._place(node, choices); } -dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ layoutNode){ +dijit._place = function(/*DomNode*/ node, choices, layoutNode, /*Object*/ aroundNodeCoords){ // 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, aroundNodeCorner, nodeCorner) + // layoutNode: Function(node, aroundNodeCorner, nodeCorner, size) // 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. + // It also passes in the available size for the popup, which is useful for tooltips to + // tell them that their width is limited to a certain amount. layoutNode() may return a value expressing + // how much the popup had to be modified to fit into the available space. This is used to determine + // what the best placement is. + // aroundNodeCoords: Object + // Size of aroundNode, ex: {w: 200, h: 50} // get {x: 10, y: 10, w: 100, h:100} type obj representing position of // viewport over document @@ -1922,12 +2061,20 @@ dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ la dojo.some(choices, function(choice){ var corner = choice.corner; var pos = choice.pos; + var overflow = 0; + + // calculate amount of space available given specified position of node + var spaceAvailable = { + w: corner.charAt(1) == 'L' ? (view.l + view.w) - pos.x : pos.x - view.l, + h: corner.charAt(1) == 'T' ? (view.t + view.h) - pos.y : pos.y - view.t + }; // 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) + // a tooltip's size changes based on position, due to triangle) if(layoutNode){ - layoutNode(node, choice.aroundCorner, corner); + var res = layoutNode(node, choice.aroundCorner, corner, spaceAvailable, aroundNodeCoords); + overflow = typeof res == "undefined" ? 0 : res; } // get node's size @@ -1947,8 +2094,9 @@ dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ la endX = Math.min(view.l + view.w, corner.charAt(1) == 'L' ? (startX + mb.w) : pos.x), endY = Math.min(view.t + view.h, corner.charAt(0) == 'T' ? (startY + mb.h) : pos.y), width = endX - startX, - height = endY - startY, - overflow = (mb.w - width) + (mb.h - height); + height = endY - startY; + + overflow += (mb.w - width) + (mb.h - height); if(best == null || overflow < best.overflow){ best = { @@ -1958,17 +2106,32 @@ dijit._place = function(/*DomNode*/ node, /* Array */ choices, /* Function */ la y: startY, w: width, h: height, - overflow: overflow + overflow: overflow, + spaceAvailable: spaceAvailable }; } + return !overflow; }); - node.style.left = best.x + "px"; - node.style.top = best.y + "px"; + // In case the best position is not the last one we checked, need to call + // layoutNode() again. if(best.overflow && layoutNode){ - layoutNode(node, best.aroundCorner, best.corner); + layoutNode(node, best.aroundCorner, best.corner, best.spaceAvailable, aroundNodeCoords); } + + // And then position the node. Do this last, after the layoutNode() above + // has sized the node, due to browser quirks when the viewport is scrolled + // (specifically that a Tooltip will shrink to fit as though the window was + // scrolled to the left). + // + // In RTL mode, set style.right rather than style.left so in the common case, + // window resizes move the popup along with the aroundNode. + var l = dojo._isBodyLtr(), + s = node.style; + s.top = best.y + "px"; + s[l ? "left" : "right"] = (l ? best.x : view.w - best.x - best.w) + "px"; + return best; } @@ -2015,11 +2178,7 @@ dijit.placeOnScreenAroundNode = function( // 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 aroundNodePos = dojo.position(aroundNode, true); - aroundNode.style.display=oldDisplay; // place the node around the calculated rectangle return dijit._placeOnScreenAroundRect(node, @@ -2090,7 +2249,7 @@ dijit._placeOnScreenAroundRect = function( }); } - return dijit._place(node, choices, layoutNode); + return dijit._place(node, choices, layoutNode, {w: width, h: height}); }; dijit.placementRegistry= new dojo.AdapterRegistry(); @@ -2150,11 +2309,17 @@ dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToR case "before": align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL"; break; + case "below-alt": + leftToRight = !leftToRight; + // fall through case "below": // first try to align left borders, next try to align right borders (or reverse for RTL mode) align[leftToRight ? "BL" : "BR"] = leftToRight ? "TL" : "TR"; align[leftToRight ? "BR" : "BL"] = leftToRight ? "TR" : "TL"; break; + case "above-alt": + leftToRight = !leftToRight; + // fall through case "above": default: // first try to align left borders, next try to align right borders (or reverse for RTL mode) @@ -2259,48 +2424,77 @@ dijit.popup = { _idGen: 1, - moveOffScreen: function(/*DomNode*/ node){ + _createWrapper: function(/*Widget || DomNode*/ widget){ // summary: - // Initialization for nodes that will be used as popups - // - // description: - // Puts node inside a wrapper <div>, and - // positions wrapper div off screen, but not display:none, so that - // the widget doesn't appear in the page flow and/or cause a blank - // area at the bottom of the viewport (making scrollbar longer), but - // initialization of contained widgets works correctly - - var wrapper = node.parentNode; - - // Create a wrapper widget for when this node (in the future) will be used as a popup. - // This is done early because of IE bugs where creating/moving DOM nodes causes focus - // to go wonky, see tests/robot/Toolbar.html to reproduce - if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){ + // Initialization for widgets that will be used as popups. + // Puts widget inside a wrapper DIV (if not already in one), + // and returns pointer to that wrapper DIV. + + var wrapper = widget.declaredClass ? widget._popupWrapper : (widget.parentNode && dojo.hasClass(widget.parentNode, "dijitPopup")), + node = widget.domNode || widget; + + if(!wrapper){ + // Create wrapper <div> for when this widget [in the future] will be used as a popup. + // This is done early because of IE bugs where creating/moving DOM nodes causes focus + // to go wonky, see tests/robot/Toolbar.html to reproduce wrapper = dojo.create("div",{ "class":"dijitPopup", - style:{ - visibility:"hidden", - top: "-9999px" - } + style:{ display: "none"}, + role: "presentation" }, dojo.body()); - dijit.setWaiRole(wrapper, "presentation"); wrapper.appendChild(node); + + var s = node.style; + s.display = ""; + s.visibility = ""; + s.position = ""; + s.top = "0px"; + + if(widget.declaredClass){ // TODO: in 2.0 change signature to always take widget, then remove if() + widget._popupWrapper = wrapper; + dojo.connect(widget, "destroy", function(){ + dojo.destroy(wrapper); + delete widget._popupWrapper; + }); + } } + + return wrapper; + }, + moveOffScreen: function(/*Widget || DomNode*/ widget){ + // summary: + // Moves the popup widget off-screen. + // Do not use this method to hide popups when not in use, because + // that will create an accessibility issue: the offscreen popup is + // still in the tabbing order. - var s = node.style; - s.display = ""; - s.visibility = ""; - s.position = ""; - s.top = "0px"; + // Create wrapper if not already there + var wrapper = this._createWrapper(widget); dojo.style(wrapper, { visibility: "hidden", - // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111) - top: "-9999px" + top: "-9999px", // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111) + display: "" }); }, + hide: function(/*dijit._Widget*/ widget){ + // summary: + // Hide this popup widget (until it is ready to be shown). + // Initialization for widgets that will be used as popups + // + // Also puts widget inside a wrapper DIV (if not already in one) + // + // If popup widget needs to layout it should + // do so when it is made visible, and popup._onShow() is called. + + // Create wrapper if not already there + var wrapper = this._createWrapper(widget); + + dojo.style(wrapper, "display", "none"); + }, + getTopPopup: function(){ // summary: // Compute the closest ancestor popup that's *not* a child of another popup. @@ -2337,14 +2531,17 @@ dijit.popup = { around = args.around, id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+this._idGen++); - - // The wrapper may have already been created, but in case it wasn't, create here - var wrapper = widget.domNode.parentNode; - if(!wrapper || !dojo.hasClass(wrapper, "dijitPopup")){ - this.moveOffScreen(widget.domNode); - wrapper = widget.domNode.parentNode; + // If we are opening a new popup that isn't a child of a currently opened popup, then + // close currently opened popup(s). This should happen automatically when the old popups + // gets the _onBlur() event, except that the _onBlur() event isn't reliable on IE, see [22198]. + while(stack.length && (!args.parent || !dojo.isDescendant(args.parent.domNode, stack[stack.length-1].widget.domNode))){ + dijit.popup.close(stack[stack.length-1].widget); } + // Get pointer to popup wrapper, and create wrapper if it doesn't exist + var wrapper = this._createWrapper(widget); + + dojo.attr(wrapper, { id: id, style: { @@ -2355,9 +2552,9 @@ dijit.popup = { }); if(dojo.isIE || dojo.isMoz){ - var iframe = wrapper.childNodes[1]; - if(!iframe){ - iframe = new dijit.BackgroundIframe(wrapper); + if(!widget.bgIframe){ + // setting widget.bgIframe triggers cleanup in _Widget.destroy() + widget.bgIframe = new dijit.BackgroundIframe(wrapper); } } @@ -2366,6 +2563,7 @@ dijit.popup = { 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'], args.padding); + wrapper.style.display = ""; wrapper.style.visibility = "visible"; widget.domNode.style.visibility = "visible"; // counteract effects from _HasDropDown @@ -2400,8 +2598,6 @@ dijit.popup = { })); stack.push({ - wrapper: wrapper, - iframe: iframe, widget: widget, parent: args.parent, onExecute: args.onExecute, @@ -2418,9 +2614,10 @@ dijit.popup = { return best; }, - close: function(/*dijit._Widget*/ popup){ + close: function(/*dijit._Widget?*/ popup){ // summary: - // Close specified popup and any popups that it parented + // Close specified popup and any popups that it parented. + // If no popup is specified, closes all popups. var stack = this._stack; @@ -2429,10 +2626,9 @@ dijit.popup = { // a popup would cause others to close too. Thus if we are trying to close B in [A,B,C] // closing C might close B indirectly and then the while() condition will run where stack==[A]... // so the while condition is constructed defensively. - while(dojo.some(stack, function(elem){return elem.widget == popup;})){ + while((popup && dojo.some(stack, function(elem){return elem.widget == popup;})) || + (!popup && stack.length)){ var top = stack.pop(), - wrapper = top.wrapper, - iframe = top.iframe, widget = top.widget, onClose = top.onClose; @@ -2442,11 +2638,9 @@ dijit.popup = { } dojo.forEach(top.handlers, dojo.disconnect); - // Move the widget plus it's wrapper off screen, unless it has already been destroyed in above onClose() etc. + // Hide the widget and it's wrapper unless it has already been destroyed in above onClose() etc. if(widget && widget.domNode){ - this.moveOffScreen(widget.domNode); - }else{ - dojo.destroy(wrapper); + this.hide(widget); } if(onClose){ @@ -2456,9 +2650,12 @@ dijit.popup = { } }; +// TODO: remove dijit._frames, it isn't being used much, since popups never release their +// iframes (see [22236]) dijit._frames = new function(){ // summary: // cache of iframes + var queue = []; this.pop = function(){ @@ -2467,7 +2664,7 @@ dijit._frames = new function(){ iframe = queue.pop(); iframe.style.display=""; }else{ - if(dojo.isIE){ + if(dojo.isIE < 9){ var burl = dojo.config["dojoBlankHtmlUrl"] || (dojo.moduleUrl("dojo", "resources/blank.html")+"") || "javascript:\"\""; var html="<iframe src='" + burl + "'" + " style='position: absolute; left: 0px; top: 0px;" @@ -2479,7 +2676,7 @@ dijit._frames = new function(){ iframe.className = "dijitBackgroundIframe"; dojo.style(iframe, "opacity", 0.1); } - iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didnt work. + iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didn't work. dijit.setWaiRole(iframe,"presentation"); } return iframe; @@ -2492,7 +2689,7 @@ dijit._frames = new function(){ }(); -dijit.BackgroundIframe = function(/* DomNode */node){ +dijit.BackgroundIframe = function(/*DomNode*/ node){ // summary: // For IE/FF z-index schenanigans. id attribute is required. // @@ -2503,9 +2700,9 @@ dijit.BackgroundIframe = function(/* DomNode */node){ if(!node.id){ throw new Error("no id"); } if(dojo.isIE || dojo.isMoz){ - var iframe = dijit._frames.pop(); + var iframe = (this.iframe = dijit._frames.pop()); node.appendChild(iframe); - if(dojo.isIE<7){ + if(dojo.isIE<7 || dojo.isQuirks){ this.resize(node); this._conn = dojo.connect(node, 'onresize', this, function(){ this.resize(node); @@ -2516,19 +2713,15 @@ dijit.BackgroundIframe = function(/* DomNode */node){ height: '100%' }); } - this.iframe = iframe; } }; dojo.extend(dijit.BackgroundIframe, { resize: function(node){ // summary: - // resize the iframe so its the same size as node - // description: - // this function is a no-op in all browsers except - // IE6, which does not support 100% width/height - // of absolute positioned iframes - if(this.iframe && dojo.isIE<7){ + // Resize the iframe so it's the same size as node. + // Needed on IE6 and IE/quirks because height:100% doesn't work right. + if(this.iframe){ dojo.style(this.iframe, { width: node.offsetWidth + 'px', height: node.offsetHeight + 'px' @@ -2571,6 +2764,7 @@ if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do n dojo._hasResource["dojo.uacss"] = true; dojo.provide("dojo.uacss"); + (function(){ // summary: // Applies pre-set CSS classes to the top-level HTML node, based on: @@ -2595,6 +2789,7 @@ dojo.provide("dojo.uacss"); dj_ie6: maj(ie) == 6, dj_ie7: maj(ie) == 7, dj_ie8: maj(ie) == 8, + dj_ie9: maj(ie) == 9, dj_quirks: d.isQuirks, dj_iequirks: ie && d.isQuirks, @@ -2623,7 +2818,7 @@ dojo.provide("dojo.uacss"); html.className = d.trim(html.className + " " + classStr); // If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension. - // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl). + // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl). // Unshift() is to run sniff code before the parser. dojo._loaders.unshift(function(){ if(!dojo._isBodyLtr()){ @@ -2637,6 +2832,10 @@ dojo.provide("dojo.uacss"); 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"); + + + // summary: // Applies pre-set CSS classes to the top-level HTML node, see // `dojo.uacss` for details. @@ -2644,16 +2843,13 @@ dojo._hasResource["dijit._base.sniff"] = true; // Simply doing a require on this module will // establish this CSS. Modified version of Morris' CSS hack. -dojo.provide("dijit._base.sniff"); - - - } 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 @@ -2838,6 +3034,7 @@ if(!dojo._hasResource["dijit._base.wai"]){ //_hasResource checks added by build. dojo._hasResource["dijit._base.wai"] = true; dojo.provide("dijit._base.wai"); + dijit.wai = { onload: function(){ // summary: @@ -2883,26 +3080,24 @@ if(dojo.isIE || dojo.isMoz){ // NOTE: checking in Safari messes things up } dojo.mixin(dijit, { - _XhtmlRoles: /banner|contentinfo|definition|main|navigation|search|note|secondary|seealso/, - - hasWaiRole: function(/*Element*/ elem, /*String*/ role){ + hasWaiRole: function(/*Element*/ elem, /*String?*/ role){ // summary: - // Determines if an element has a particular non-XHTML role. + // Determines if an element has a particular role. // returns: - // True if elem has the specific non-XHTML role attribute and false if not. + // True if elem has the specific role attribute and false if not. // For backwards compatibility if role parameter not provided, - // returns true if has non XHTML role + // returns true if has a role var waiRole = this.getWaiRole(elem); return role ? (waiRole.indexOf(role) > -1) : (waiRole.length > 0); }, getWaiRole: function(/*Element*/ elem){ // summary: - // Gets the non-XHTML role for an element (which should be a wai role). + // Gets the role for an element (which should be a wai role). // returns: - // The non-XHTML role of elem or an empty string if elem + // The role of elem or an empty string if elem // does not have a role. - return dojo.trim((dojo.attr(elem, "role") || "").replace(this._XhtmlRoles,"").replace("wairole:","")); + return dojo.trim((dojo.attr(elem, "role") || "").replace("wairole:","")); }, setWaiRole: function(/*Element*/ elem, /*String*/ role){ @@ -2910,24 +3105,13 @@ dojo.mixin(dijit, { // Sets the role on an element. // description: // Replace existing role attribute with new role. - // If elem already has an XHTML role, append this role to XHTML role - // and remove other ARIA roles. - var curRole = dojo.attr(elem, "role") || ""; - if(!this._XhtmlRoles.test(curRole)){ dojo.attr(elem, "role", role); - }else{ - if((" "+ curRole +" ").indexOf(" " + role + " ") < 0){ - var clearXhtml = dojo.trim(curRole.replace(this._XhtmlRoles, "")); - var cleanRole = dojo.trim(curRole.replace(clearXhtml, "")); - dojo.attr(elem, "role", cleanRole + (cleanRole ? ' ' : '') + role); - } - } }, removeWaiRole: function(/*Element*/ elem, /*String*/ role){ // summary: - // Removes the specified non-XHTML role from an element. + // Removes the specified role from an element. // Removes role attribute if no specific role provided (for backwards compat.) var roleValue = dojo.attr(elem, "role"); @@ -2999,73 +3183,157 @@ dojo.provide("dijit._base"); -} -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" ); +if(!dojo._hasResource["dojo.Stateful"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.Stateful"] = true; +dojo.provide("dojo.Stateful"); -// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets' -// DOM nodes) until someone actually needs to monitor that event. -dojo.connect(dojo, "_connect", - function(/*dijit._Widget*/ widget, /*String*/ event){ - if(widget && dojo.isFunction(widget._onConnect)){ - widget._onConnect(event); +dojo.declare("dojo.Stateful", null, { + // summary: + // Base class for objects that provide named properties with optional getter/setter + // control and the ability to watch for property changes + // example: + // | var obj = new dojo.Stateful(); + // | obj.watch("foo", function(){ + // | console.log("foo changed to " + this.get("foo")); + // | }); + // | obj.set("foo","bar"); + postscript: function(mixin){ + if(mixin){ + dojo.mixin(this, mixin); } - }); - -dijit._connectOnUseEventHandler = function(/*Event*/ event){}; - -// Keep track of where the last keydown event was, to help avoid generating -// spurious ondijitclick events when: -// 1. focus is on a <button> or <a> -// 2. user presses then releases the ENTER key -// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler -// 4. onkeyup event fires, causing the ondijitclick handler to fire -dijit._lastKeyDownNode = null; -if(dojo.isIE){ - (function(){ - var keydownCallback = function(evt){ - dijit._lastKeyDownNode = evt.srcElement; + }, + + get: function(/*String*/name){ + // summary: + // Get a property on a Stateful instance. + // name: + // The property to get. + // description: + // Get a named property on a Stateful object. The property may + // potentially be retrieved via a getter method in subclasses. In the base class + // this just retrieves the object's property. + // For example: + // | stateful = new dojo.Stateful({foo: 3}); + // | stateful.get("foo") // returns 3 + // | stateful.foo // returns 3 + + return this[name]; + }, + set: function(/*String*/name, /*Object*/value){ + // summary: + // Set a property on a Stateful instance + // name: + // The property to set. + // value: + // The value to set in the property. + // description: + // Sets named properties on a stateful object and notifies any watchers of + // the property. A programmatic setter may be defined in subclasses. + // For example: + // | stateful = new dojo.Stateful(); + // | stateful.watch(function(name, oldValue, value){ + // | // this will be called on the set below + // | } + // | stateful.set(foo, 5); + // + // set() may also be called with a hash of name/value pairs, ex: + // | myObj.set({ + // | foo: "Howdy", + // | bar: 3 + // | }) + // This is equivalent to calling set(foo, "Howdy") and set(bar, 3) + if(typeof name === "object"){ + for(var x in name){ + this.set(x, name[x]); + } + return this; + } + var oldValue = this[name]; + this[name] = value; + if(this._watchCallbacks){ + this._watchCallbacks(name, oldValue, value); + } + return this; + }, + watch: function(/*String?*/name, /*Function*/callback){ + // summary: + // Watches a property for changes + // name: + // Indicates the property to watch. This is optional (the callback may be the + // only parameter), and if omitted, all the properties will be watched + // returns: + // An object handle for the watch. The unwatch method of this object + // can be used to discontinue watching this property: + // | var watchHandle = obj.watch("foo", callback); + // | watchHandle.unwatch(); // callback won't be called now + // callback: + // The function to execute when the property changes. This will be called after + // the property has been changed. The callback will be called with the |this| + // set to the instance, the first argument as the name of the property, the + // second argument as the old value and the third argument as the new value. + + var callbacks = this._watchCallbacks; + if(!callbacks){ + var self = this; + callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){ + var notify = function(propertyCallbacks){ + if(propertyCallbacks){ + propertyCallbacks = propertyCallbacks.slice(); + for(var i = 0, l = propertyCallbacks.length; i < l; i++){ + try{ + propertyCallbacks[i].call(self, name, oldValue, value); + }catch(e){ + console.error(e); + } + } + } + }; + notify(callbacks['_' + name]); + if(!ignoreCatchall){ + notify(callbacks["*"]); // the catch-all + } + }; // we use a function instead of an object so it will be ignored by JSON conversion + } + if(!callback && typeof name === "function"){ + callback = name; + name = "*"; + }else{ + // prepend with dash to prevent name conflicts with function (like "name" property) + name = '_' + name; + } + var propertyCallbacks = callbacks[name]; + if(typeof propertyCallbacks !== "object"){ + propertyCallbacks = callbacks[name] = []; + } + propertyCallbacks.push(callback); + return { + unwatch: function(){ + propertyCallbacks.splice(dojo.indexOf(propertyCallbacks, callback), 1); + } }; - dojo.doc.attachEvent('onkeydown', keydownCallback); - dojo.addOnWindowUnload(function(){ - dojo.doc.detachEvent('onkeydown', keydownCallback); - }); - })(); -}else{ - dojo.doc.addEventListener('keydown', function(evt){ - dijit._lastKeyDownNode = evt.target; - }, true); + } + +}); + } -(function(){ +if(!dojo._hasResource["dijit._WidgetBase"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit._WidgetBase"] = true; +dojo.provide("dijit._WidgetBase"); + + -var _attrReg = {}, // cached results from getSetterAttributes - getSetterAttributes = function(widget){ - // summary: - // Returns list of attributes with custom setters for specified widget - var dc = widget.declaredClass; - if(!_attrReg[dc]){ - var r = [], - attrs, - proto = widget.constructor.prototype; - for(var fxName in proto){ - if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){ - r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1)); - } - } - _attrReg[dc] = r; - } - return _attrReg[dc] || []; // String[] - }; -dojo.declare("dijit._Widget", null, { +(function(){ + +dojo.declare("dijit._WidgetBase", dojo.Stateful, { // summary: - // Base class for all Dijit widgets. + // Future base class for all Dijit widgets. + // _Widget extends this class adding support for various features needed by desktop. // id: [const] String // A unique, opaque ID string that can be assigned by users or by the @@ -3163,7 +3431,7 @@ dojo.declare("dijit._Widget", null, { // Changes to widget attributes listed in attributeMap will be // reflected into the DOM. // - // For example, calling attr('title', 'hello') + // For example, calling set('title', 'hello') // on a TitlePane will automatically cause the TitlePane's DOM to update // with the new title. // @@ -3195,166 +3463,14 @@ dojo.declare("dijit._Widget", null, { // - "" --> { node: "domNode", type: "attribute" } attributeMap: {id:"", dir:"", lang:"", "class":"", style:"", title:""}, - // _deferredConnects: [protected] Object - // attributeMap addendum for event handlers that should be connected only on first use - _deferredConnects: { - onClick: "", - onDblClick: "", - onKeyDown: "", - onKeyPress: "", - onKeyUp: "", - onMouseMove: "", - onMouseDown: "", - onMouseOut: "", - onMouseOver: "", - onMouseLeave: "", - onMouseEnter: "", - onMouseUp: "" - }, + // _blankGif: [protected] String + // Path to a blank 1x1 image. + // Used by <img> nodes in templates that really get their image via CSS background-image. + _blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(), - onClick: dijit._connectOnUseEventHandler, - /*===== - onClick: function(event){ - // summary: - // Connect to this function to receive notifications of mouse click events. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onDblClick: dijit._connectOnUseEventHandler, - /*===== - onDblClick: function(event){ - // summary: - // Connect to this function to receive notifications of mouse double click events. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onKeyDown: dijit._connectOnUseEventHandler, - /*===== - onKeyDown: function(event){ - // summary: - // Connect to this function to receive notifications of keys being pressed down. - // event: - // key Event - // tags: - // callback - }, - =====*/ - onKeyPress: dijit._connectOnUseEventHandler, - /*===== - onKeyPress: function(event){ - // summary: - // Connect to this function to receive notifications of printable keys being typed. - // event: - // key Event - // tags: - // callback - }, - =====*/ - onKeyUp: dijit._connectOnUseEventHandler, - /*===== - onKeyUp: function(event){ - // summary: - // Connect to this function to receive notifications of keys being released. - // event: - // key Event - // tags: - // callback - }, - =====*/ - onMouseDown: dijit._connectOnUseEventHandler, - /*===== - onMouseDown: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse button is pressed down. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onMouseMove: dijit._connectOnUseEventHandler, - /*===== - onMouseMove: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onMouseOut: dijit._connectOnUseEventHandler, - /*===== - onMouseOut: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onMouseOver: dijit._connectOnUseEventHandler, - /*===== - onMouseOver: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onMouseLeave: dijit._connectOnUseEventHandler, - /*===== - onMouseLeave: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse moves off of this widget. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onMouseEnter: dijit._connectOnUseEventHandler, - /*===== - onMouseEnter: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse moves onto this widget. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onMouseUp: dijit._connectOnUseEventHandler, - /*===== - onMouseUp: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse button is released. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - - // Constants used in templates - - // _blankGif: [protected] String - // Path to a blank 1x1 image. - // Used by <img> nodes in templates that really get their image via CSS background-image. - _blankGif: (dojo.config.blankGif || dojo.moduleUrl("dojo", "resources/blank.gif")).toString(), - - //////////// INITIALIZATION METHODS /////////////////////////////////////// - - postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){ + //////////// INITIALIZATION METHODS /////////////////////////////////////// + + postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){ // summary: // Kicks off widget instantiation. See create() for details. // tags: @@ -3397,25 +3513,11 @@ dojo.declare("dijit._Widget", null, { // The handle returned from Widget.subscribe() is the handle returned from dojo.subscribe() this._subscribes = []; - // To avoid double-connects, remove entries from _deferredConnects - // that have been setup manually by a subclass (ex, by dojoAttachEvent). - // If a subclass has redefined a callback (ex: onClick) then assume it's being - // connected to manually. - this._deferredConnects = dojo.clone(this._deferredConnects); - for(var attr in this.attributeMap){ - delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects - } - for(attr in this._deferredConnects){ - if(this[attr] !== dijit._connectOnUseEventHandler){ - delete this._deferredConnects[attr]; // redefined, probably dojoAttachEvent exists - } - } - - //mixin our passed parameters + // mix in our passed parameters if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; } if(params){ this.params = params; - dojo.mixin(this,params); + dojo._mixin(this, params); } this.postMixInProperties(); @@ -3431,22 +3533,22 @@ dojo.declare("dijit._Widget", null, { if(this.domNode){ // Copy attributes listed in attributeMap into the [newly created] DOM for the widget. + // Also calls custom setters for all attributes with custom setters. this._applyAttributes(); + // If srcNodeRef was specified, then swap out original srcNode for this widget's DOM tree. + // For 2.0, move this after postCreate(). postCreate() shouldn't depend on the + // widget being attached to the DOM since it isn't when a widget is created programmatically like + // new MyWidget({}). See #11635. var source = this.srcNodeRef; - if(source && source.parentNode){ + if(source && source.parentNode && this.domNode !== source){ source.parentNode.replaceChild(this.domNode, source); } - - // If the developer has specified a handler as a widget parameter - // (ex: new Button({onClick: ...}) - // then naturally need to connect from DOM node to that handler immediately, - for(attr in this.params){ - this._onConnect(attr); - } } if(this.domNode){ + // Note: for 2.0 may want to rename widgetId to dojo._scopeName + "_widgetId", + // assuming that dojo._scopeName even exists in 2.0 this.domNode.setAttribute("widgetId", this.id); } this.postCreate(); @@ -3485,13 +3587,30 @@ dojo.declare("dijit._Widget", null, { } // And also any attributes with custom setters - dojo.forEach(getSetterAttributes(this), function(a){ + dojo.forEach(this._getSetterAttributes(), function(a){ if(!(a in this.attributeMap)){ condAttrApply(a, this); } }, this); }, + _getSetterAttributes: function(){ + // summary: + // Returns list of attributes with custom setters for this widget + var ctor = this.constructor; + if(!ctor._setterAttrs){ + var r = (ctor._setterAttrs = []), + attrs, + proto = ctor.prototype; + for(var fxName in proto){ + if(dojo.isFunction(proto[fxName]) && (attrs = fxName.match(/^_set([a-zA-Z]*)Attr$/)) && attrs[1]){ + r.push(attrs[1].charAt(0).toLowerCase() + attrs[1].substr(1)); + } + } + } + return ctor._setterAttrs; // String[] + }, + postMixInProperties: function(){ // summary: // Called after the parameters to the widget have been read-in, @@ -3510,7 +3629,22 @@ dojo.declare("dijit._Widget", null, { // method. // tags: // protected - this.domNode = this.srcNodeRef || dojo.create('div'); + + if(!this.domNode){ + // Create root node if it wasn't created by _Templated + this.domNode = this.srcNodeRef || dojo.create('div'); + } + + // baseClass is a single class name or occasionally a space-separated list of names. + // Add those classes to the DOMNode. If RTL mode then also add with Rtl suffix. + // TODO: make baseClass custom setter + if(this.baseClass){ + var classes = this.baseClass.split(" "); + if(!this.isLeftToRight()){ + classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; })); + } + dojo.addClass(this.domNode, classes); + } }, postCreate: function(){ @@ -3522,16 +3656,6 @@ dojo.declare("dijit._Widget", null, { // node dimensions or placement. // tags: // protected - - // baseClass is a single class name or occasionally a space-separated list of names. - // Add those classes to the DOMNod. If RTL mode then also add with Rtl suffix. - if(this.baseClass){ - var classes = this.baseClass.split(" "); - if(!this.isLeftToRight()){ - classes = classes.concat( dojo.map(classes, function(name){ return name+"Rtl"; })); - } - dojo.addClass(this.domNode, classes); - } }, startup: function(){ @@ -3647,7 +3771,6 @@ dojo.declare("dijit._Widget", null, { }); }, - uninitialize: function(){ // summary: // Stub function. Override to implement custom widget tear-down @@ -3657,60 +3780,7 @@ dojo.declare("dijit._Widget", null, { return false; }, - ////////////////// MISCELLANEOUS METHODS /////////////////// - - onFocus: function(){ - // summary: - // Called when the widget becomes "active" because - // it or a widget inside of it either has focus, or has recently - // been clicked. - // tags: - // callback - }, - - onBlur: function(){ - // summary: - // Called when the widget stops being "active" because - // focus moved to something outside of it, or the user - // clicked somewhere outside of it, or the widget was - // hidden. - // tags: - // callback - }, - - _onFocus: function(e){ - // summary: - // This is where widgets do processing for when they are active, - // such as changing CSS classes. See onFocus() for more details. - // tags: - // protected - this.onFocus(); - }, - - _onBlur: function(){ - // summary: - // This is where widgets do processing for when they stop being active, - // such as changing CSS classes. See onBlur() for more details. - // tags: - // protected - this.onBlur(); - }, - - _onConnect: function(/*String*/ event){ - // summary: - // Called when someone connects to one of my handlers. - // "Turn on" that handler if it isn't active yet. - // - // This is also called for every single initialization parameter - // so need to do nothing for parameters like "id". - // tags: - // private - if(event in this._deferredConnects){ - var mapNode = this[this._deferredConnects[event] || 'domNode']; - this.connect(mapNode, event.toLowerCase(), event); - delete this._deferredConnects[event]; - } - }, + ////////////////// GET/SET, CUSTOM SETTERS, ETC. /////////////////// _setClassAttr: function(/*String*/ value){ // summary: @@ -3718,14 +3788,13 @@ dojo.declare("dijit._Widget", null, { // tags: // protected var mapNode = this[this.attributeMap["class"] || 'domNode']; - dojo.removeClass(mapNode, this["class"]) - this["class"] = value; - dojo.addClass(mapNode, value); + dojo.replaceClass(mapNode, value, this["class"]); + this._set("class", value); }, _setStyleAttr: function(/*String||Object*/ value){ // summary: - // Sets the style attribut of the widget according to value, + // Sets the style attribute of the widget according to value, // which is either a hash like {height: "5px", width: "3px"} // or a plain string // description: @@ -3749,25 +3818,13 @@ dojo.declare("dijit._Widget", null, { } } - this.style = value; - }, - - setAttribute: function(/*String*/ attr, /*anything*/ value){ - // summary: - // Deprecated. Use set() instead. - // tags: - // deprecated - dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0"); - this.set(attr, value); + this._set("style", value); }, _attrToDom: function(/*String*/ attr, /*String*/ value){ // summary: // Reflect a widget attribute (title, tabIndex, duration etc.) to // the widget DOM, as specified in attributeMap. - // - // description: - // Also sets this["attr"] to the new value. // Note some attributes like "type" // cannot be processed this way as they are not mutable. // @@ -3803,47 +3860,13 @@ dojo.declare("dijit._Widget", null, { mapNode.innerHTML = value; break; case "class": - dojo.removeClass(mapNode, this[attr]); - dojo.addClass(mapNode, value); + dojo.replaceClass(mapNode, value, this[attr]); break; } }, this); - this[attr] = value; }, - attr: function(/*String|Object*/name, /*Object?*/value){ - // summary: - // Set or get properties on a widget instance. - // name: - // The property to get or set. If an object is passed here and not - // a string, its keys are used as names of attributes to be set - // and the value of the object as values to set in the widget. - // value: - // Optional. If provided, attr() operates as a setter. If omitted, - // the current value of the named property is returned. - // description: - // This method is deprecated, use get() or set() directly. - - // Print deprecation warning but only once per calling function - if(dojo.config.isDebug){ - var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}), - caller = (arguments.callee.caller || "unknown caller").toString(); - if(!alreadyCalledHash[caller]){ - dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " + - caller, "", "2.0"); - alreadyCalledHash[caller] = true; - } - } - - var args = arguments.length; - if(args >= 2 || typeof name === "object"){ // setter - return this.set.apply(this, arguments); - }else{ // getter - return this.get(name); - } - }, - - get: function(name){ + get: function(name){ // summary: // Get a property from a widget. // name: @@ -3851,7 +3874,7 @@ dojo.declare("dijit._Widget", null, { // description: // Get a named property from a widget. The property may // potentially be retrieved via a getter method. If no getter is defined, this - // just retrieves the object's property. + // just retrieves the object's property. // For example, if the widget has a properties "foo" // and "bar" and a method named "_getFooAttr", calling: // | myWidget.get("foo"); @@ -3869,11 +3892,11 @@ dojo.declare("dijit._Widget", null, { // summary: // Set a property on a widget // name: - // The property to set. + // The property to set. // value: // The value to set in the property. // description: - // Sets named properties on a widget which may potentially be handled by a + // Sets named properties on a widget which may potentially be handled by a // setter in the widget. // For example, if the widget has a properties "foo" // and "bar" and a method named "_setFooAttr", calling: @@ -3894,7 +3917,7 @@ dojo.declare("dijit._Widget", null, { if(typeof name === "object"){ for(var x in name){ - this.set(x, name[x]); + this.set(x, name[x]); } return this; } @@ -3907,9 +3930,7 @@ dojo.declare("dijit._Widget", null, { if(name in this.attributeMap){ this._attrToDom(name, value); } - var oldValue = this[name]; - // FIXME: what about function assignments? Any way to connect() here? - this[name] = value; + this._set(name, value); } return result || this; }, @@ -3932,6 +3953,17 @@ dojo.declare("dijit._Widget", null, { }); }, + _set: function(/*String*/ name, /*anything*/ value){ + // summary: + // Helper function to set new value for specified attribute, and call handlers + // registered with watch() if the value has changed. + var oldValue = this[name]; + this[name] = value; + if(this._watchCallbacks && this._created && value !== oldValue){ + this._watchCallbacks(name, oldValue, value); + } + }, + toString: function(){ // summary: // Returns a string that represents the widget @@ -3958,11 +3990,6 @@ dojo.declare("dijit._Widget", null, { return this.containerNode ? dijit.findWidgets(this.containerNode) : []; // dijit._Widget[] }, - // nodesWithKeyClick: [private] String[] - // List of nodes that correctly handle click events via native browser support, - // and don't need dijit's help - nodesWithKeyClick: ["input", "button"], - connect: function( /*Object|null*/ obj, /*String|Function*/ event, @@ -3973,8 +4000,8 @@ dojo.declare("dijit._Widget", null, { // description: // Provide widget-specific analog to dojo.connect, except with the // implicit use of this widget as the target object. - // This version of connect also provides a special "ondijitclick" - // event which triggers on a click or space or enter keyup + // Events connected with `this.connect` are disconnected upon + // destruction. // returns: // A handle that can be passed to `disconnect` in order to disconnect before // the widget is destroyed. @@ -3988,41 +4015,7 @@ dojo.declare("dijit._Widget", null, { // tags: // protected - var d = dojo, - dc = d._connect, - handles = []; - if(event == "ondijitclick"){ - // add key based click activation for unsupported nodes. - // do all processing onkey up to prevent spurious clicks - // for details see comments at top of this file where _lastKeyDownNode is defined - if(dojo.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button - var m = d.hitch(this, method); - handles.push( - dc(obj, "onkeydown", this, function(e){ - //console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode)); - if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) && - !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){ - // needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work - dijit._lastKeyDownNode = e.target; - e.preventDefault(); // stop event to prevent scrolling on space key in IE - } - }), - dc(obj, "onkeyup", this, function(e){ - //console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode)); - if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) && - e.target === dijit._lastKeyDownNode && - !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){ - //need reset here or have problems in FF when focus returns to trigger element after closing popup/alert - dijit._lastKeyDownNode = null; - return m(e); - } - }) - ); - } - event = "onclick"; - } - handles.push(dc(obj, event, this, method)); - + var handles = [dojo._connect(obj, event, this, method)]; this._connects.push(handles); return handles; // _Widget.Handle }, @@ -4058,8 +4051,7 @@ dojo.declare("dijit._Widget", null, { // | btn.subscribe("/my/topic", function(v){ // | this.set("label", v); // | }); - var d = dojo, - handle = d.subscribe(topic, this, method); + var handle = dojo.subscribe(topic, this, method); // return handles for Any widget that may need them this._subscribes.push(handle); @@ -4087,13 +4079,6 @@ dojo.declare("dijit._Widget", null, { return this.dir ? (this.dir == "ltr") : dojo._isBodyLtr(); //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"); - }, - placeAt: function(/* String|DomNode|_Widget */reference, /* String?|Int? */position){ // summary: // Place this widget's domNode reference somewhere in the DOM based @@ -4149,49 +4134,6 @@ dojo.declare("dijit._Widget", null, { dojo.place(this.domNode, reference, position); } return this; - }, - - _onShow: function(){ - // summary: - // Internal method called when this widget is made visible. - // See `onShow` for details. - this.onShow(); - }, - - onShow: function(){ - // summary: - // Called when this widget becomes the selected pane in a - // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`, - // `dijit.layout.AccordionContainer`, etc. - // - // Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`. - // tags: - // callback - }, - - onHide: function(){ - // summary: - // Called when another widget becomes the selected pane in a - // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`, - // `dijit.layout.AccordionContainer`, etc. - // - // Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`. - // tags: - // callback - }, - - onClose: function(){ - // summary: - // Called when this widget is being displayed as a popup (ex: a Calendar popped - // up from a DateTextBox), and it is hidden. - // This is called from the dijit.popup code, and should not be called directly. - // - // Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses. - // Callback if a user tries to close the child. Child will be closed if this function returns true. - // tags: - // extension - - return true; // Boolean } }); @@ -4199,146 +4141,634 @@ dojo.declare("dijit._Widget", null, { } -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"); +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.string = { - // summary: String utilities for Dojo -}; -=====*/ -dojo.string.rep = function(/*String*/str, /*Integer*/num){ - // summary: - // Efficiently replicate a string `n` times. - // str: - // the string to replicate - // num: - // number of times to replicate the string - - if(num <= 0 || !str){ return ""; } - - var buf = []; - for(;;){ - if(num & 1){ - buf.push(str); - } - if(!(num >>= 1)){ break; } - str += str; - } - return buf.join(""); // String -}; -dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){ - // summary: - // Pad a string to guarantee that it is at least `size` length by - // filling with the character `ch` 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 - // example: - // | // Fill the string to length 10 with "+" characters on the right. Yields "Dojo++++++". - // | dojo.string.pad("Dojo", 10, "+", true); - if(!ch){ - ch = '0'; - } - var out = String(text), - pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length)); - return end ? out + pad : pad + out; // String -}; -dojo.string.substitute = function( /*String*/ template, - /*Object|Array*/map, - /*Function?*/ transform, - /*Object?*/ thisObject){ - // summary: - // Performs parameterized substitutions on a string. Throws an - // exception if any parameter is unmatched. - // template: - // a string with expressions in the form `${key}` to be replaced or - // `${key:format}` which specifies a format function. keys are case-sensitive. - // map: - // hash to search for substitutions - // transform: - // a function to process all parameters before substitution takes - // place, e.g. mylib.encodeXML - // thisObject: - // where to look for optional format function; default to the global - // namespace - // example: - // Substitutes two expressions in a string from an Array or Object - // | // returns "File 'foo.html' is not found in directory '/temp'." - // | // by providing substitution data in an Array - // | dojo.string.substitute( - // | "File '${0}' is not found in directory '${1}'.", - // | ["foo.html","/temp"] - // | ); - // | - // | // also returns "File 'foo.html' is not found in directory '/temp'." - // | // but provides substitution data in an Object structure. Dotted - // | // notation may be used to traverse the structure. - // | dojo.string.substitute( - // | "File '${name}' is not found in directory '${info.dir}'.", - // | { name: "foo.html", info: { dir: "/temp" } } - // | ); - // example: - // Use a transform function to modify the values: - // | // returns "file 'foo.html' is not found in directory '/temp'." - // | dojo.string.substitute( - // | "${0} is not found in ${1}.", - // | ["foo.html","/temp"], - // | function(str){ - // | // try to figure out the type - // | var prefix = (str.charAt(0) == "/") ? "directory": "file"; - // | return prefix + " '" + str + "'"; - // | } - // | ); - // example: - // Use a formatter - // | // returns "thinger -- howdy" - // | dojo.string.substitute( - // | "${0:postfix}", ["thinger"], null, { - // | postfix: function(value, key){ - // | return value + " -- howdy"; - // | } - // | } - // | ); +////////////////// DEFERRED CONNECTS /////////////////// - thisObject = thisObject || dojo.global; - transform = transform ? - dojo.hitch(thisObject, transform) : function(v){ return v; }; +// This code is to assist deferring dojo.connect() calls in widgets (connecting to events on the widgets' +// DOM nodes) until someone actually needs to monitor that event. +dojo.connect(dojo, "_connect", + function(/*dijit._Widget*/ widget, /*String*/ event){ + if(widget && dojo.isFunction(widget._onConnect)){ + widget._onConnect(event); + } + }); - 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).call(thisObject, value, key); - } - return transform(value, key).toString(); - }); // String -}; +dijit._connectOnUseEventHandler = function(/*Event*/ event){}; -/*===== -dojo.string.trim = function(str){ - // summary: - // Trims whitespace from both sides of the string - // str: String - // String to be trimmed - // returns: String - // Returns the trimmed string - // description: - // This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript). - // The short yet performant version of this function is dojo.trim(), - // which is part of Dojo base. Uses String.prototype.trim instead, if available. - return ""; // String +////////////////// ONDIJITCLICK SUPPORT /////////////////// + +// Keep track of where the last keydown event was, to help avoid generating +// spurious ondijitclick events when: +// 1. focus is on a <button> or <a> +// 2. user presses then releases the ENTER key +// 3. onclick handler fires and shifts focus to another node, with an ondijitclick handler +// 4. onkeyup event fires, causing the ondijitclick handler to fire +dijit._lastKeyDownNode = null; +if(dojo.isIE){ + (function(){ + var keydownCallback = function(evt){ + dijit._lastKeyDownNode = evt.srcElement; + }; + dojo.doc.attachEvent('onkeydown', keydownCallback); + dojo.addOnWindowUnload(function(){ + dojo.doc.detachEvent('onkeydown', keydownCallback); + }); + })(); +}else{ + dojo.doc.addEventListener('keydown', function(evt){ + dijit._lastKeyDownNode = evt.target; + }, true); +} + +(function(){ + +dojo.declare("dijit._Widget", dijit._WidgetBase, { + // summary: + // Base class for all Dijit widgets. + // + // Extends _WidgetBase, adding support for: + // - deferred connections + // A call like dojo.connect(myWidget, "onMouseMove", func) + // will essentially do a dojo.connect(myWidget.domNode, "onMouseMove", func) + // - ondijitclick + // Support new dojoAttachEvent="ondijitclick: ..." that is triggered by a mouse click or a SPACE/ENTER keypress + // - focus related functions + // In particular, the onFocus()/onBlur() callbacks. Driven internally by + // dijit/_base/focus.js. + // - deprecated methods + // - onShow(), onHide(), onClose() + // + // Also, by loading code in dijit/_base, turns on: + // - browser sniffing (putting browser id like .dj_ie on <html> node) + // - high contrast mode sniffing (add .dijit_a11y class to <body> if machine is in high contrast mode) + + + ////////////////// DEFERRED CONNECTS /////////////////// + + // _deferredConnects: [protected] Object + // attributeMap addendum for event handlers that should be connected only on first use + _deferredConnects: { + onClick: "", + onDblClick: "", + onKeyDown: "", + onKeyPress: "", + onKeyUp: "", + onMouseMove: "", + onMouseDown: "", + onMouseOut: "", + onMouseOver: "", + onMouseLeave: "", + onMouseEnter: "", + onMouseUp: "" + }, + + onClick: dijit._connectOnUseEventHandler, + /*===== + onClick: function(event){ + // summary: + // Connect to this function to receive notifications of mouse click events. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onDblClick: dijit._connectOnUseEventHandler, + /*===== + onDblClick: function(event){ + // summary: + // Connect to this function to receive notifications of mouse double click events. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onKeyDown: dijit._connectOnUseEventHandler, + /*===== + onKeyDown: function(event){ + // summary: + // Connect to this function to receive notifications of keys being pressed down. + // event: + // key Event + // tags: + // callback + }, + =====*/ + onKeyPress: dijit._connectOnUseEventHandler, + /*===== + onKeyPress: function(event){ + // summary: + // Connect to this function to receive notifications of printable keys being typed. + // event: + // key Event + // tags: + // callback + }, + =====*/ + onKeyUp: dijit._connectOnUseEventHandler, + /*===== + onKeyUp: function(event){ + // summary: + // Connect to this function to receive notifications of keys being released. + // event: + // key Event + // tags: + // callback + }, + =====*/ + onMouseDown: dijit._connectOnUseEventHandler, + /*===== + onMouseDown: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse button is pressed down. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onMouseMove: dijit._connectOnUseEventHandler, + /*===== + onMouseMove: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse moves over nodes contained within this widget. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onMouseOut: dijit._connectOnUseEventHandler, + /*===== + onMouseOut: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse moves off of nodes contained within this widget. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onMouseOver: dijit._connectOnUseEventHandler, + /*===== + onMouseOver: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse moves onto nodes contained within this widget. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onMouseLeave: dijit._connectOnUseEventHandler, + /*===== + onMouseLeave: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse moves off of this widget. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onMouseEnter: dijit._connectOnUseEventHandler, + /*===== + onMouseEnter: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse moves onto this widget. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + onMouseUp: dijit._connectOnUseEventHandler, + /*===== + onMouseUp: function(event){ + // summary: + // Connect to this function to receive notifications of when the mouse button is released. + // event: + // mouse Event + // tags: + // callback + }, + =====*/ + + create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){ + // To avoid double-connects, remove entries from _deferredConnects + // that have been setup manually by a subclass (ex, by dojoAttachEvent). + // If a subclass has redefined a callback (ex: onClick) then assume it's being + // connected to manually. + this._deferredConnects = dojo.clone(this._deferredConnects); + for(var attr in this.attributeMap){ + delete this._deferredConnects[attr]; // can't be in both attributeMap and _deferredConnects + } + for(attr in this._deferredConnects){ + if(this[attr] !== dijit._connectOnUseEventHandler){ + delete this._deferredConnects[attr]; // redefined, probably dojoAttachEvent exists + } + } + + this.inherited(arguments); + + if(this.domNode){ + // If the developer has specified a handler as a widget parameter + // (ex: new Button({onClick: ...}) + // then naturally need to connect from DOM node to that handler immediately, + for(attr in this.params){ + this._onConnect(attr); + } + } + }, + + _onConnect: function(/*String*/ event){ + // summary: + // Called when someone connects to one of my handlers. + // "Turn on" that handler if it isn't active yet. + // + // This is also called for every single initialization parameter + // so need to do nothing for parameters like "id". + // tags: + // private + if(event in this._deferredConnects){ + var mapNode = this[this._deferredConnects[event] || 'domNode']; + this.connect(mapNode, event.toLowerCase(), event); + delete this._deferredConnects[event]; + } + }, + + ////////////////// FOCUS RELATED /////////////////// + // _onFocus() and _onBlur() are called by the focus manager + + // focused: [readonly] Boolean + // This widget or a widget it contains has focus, or is "active" because + // it was recently clicked. + focused: false, + + 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"); + }, + + onFocus: function(){ + // summary: + // Called when the widget becomes "active" because + // it or a widget inside of it either has focus, or has recently + // been clicked. + // tags: + // callback + }, + + onBlur: function(){ + // summary: + // Called when the widget stops being "active" because + // focus moved to something outside of it, or the user + // clicked somewhere outside of it, or the widget was + // hidden. + // tags: + // callback + }, + + _onFocus: function(e){ + // summary: + // This is where widgets do processing for when they are active, + // such as changing CSS classes. See onFocus() for more details. + // tags: + // protected + this.onFocus(); + }, + + _onBlur: function(){ + // summary: + // This is where widgets do processing for when they stop being active, + // such as changing CSS classes. See onBlur() for more details. + // tags: + // protected + this.onBlur(); + }, + + ////////////////// DEPRECATED METHODS /////////////////// + + setAttribute: function(/*String*/ attr, /*anything*/ value){ + // summary: + // Deprecated. Use set() instead. + // tags: + // deprecated + dojo.deprecated(this.declaredClass+"::setAttribute(attr, value) is deprecated. Use set() instead.", "", "2.0"); + this.set(attr, value); + }, + + attr: function(/*String|Object*/name, /*Object?*/value){ + // summary: + // Set or get properties on a widget instance. + // name: + // The property to get or set. If an object is passed here and not + // a string, its keys are used as names of attributes to be set + // and the value of the object as values to set in the widget. + // value: + // Optional. If provided, attr() operates as a setter. If omitted, + // the current value of the named property is returned. + // description: + // This method is deprecated, use get() or set() directly. + + // Print deprecation warning but only once per calling function + if(dojo.config.isDebug){ + var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}), + caller = (arguments.callee.caller || "unknown caller").toString(); + if(!alreadyCalledHash[caller]){ + dojo.deprecated(this.declaredClass + "::attr() is deprecated. Use get() or set() instead, called from " + + caller, "", "2.0"); + alreadyCalledHash[caller] = true; + } + } + + var args = arguments.length; + if(args >= 2 || typeof name === "object"){ // setter + return this.set.apply(this, arguments); + }else{ // getter + return this.get(name); + } + }, + + ////////////////// ONDIJITCLICK SUPPORT /////////////////// + + // nodesWithKeyClick: [private] String[] + // List of nodes that correctly handle click events via native browser support, + // and don't need dijit's help + nodesWithKeyClick: ["input", "button"], + + connect: function( + /*Object|null*/ obj, + /*String|Function*/ event, + /*String|Function*/ method){ + // summary: + // Connects specified obj/event to specified method of this object + // and registers for disconnect() on widget destroy. + // description: + // Provide widget-specific analog to dojo.connect, except with the + // implicit use of this widget as the target object. + // This version of connect also provides a special "ondijitclick" + // event which triggers on a click or space or enter keyup. + // Events connected with `this.connect` are disconnected upon + // destruction. + // returns: + // A handle that can be passed to `disconnect` in order to disconnect before + // the widget is destroyed. + // example: + // | var btn = new dijit.form.Button(); + // | // when foo.bar() is called, call the listener we're going to + // | // provide in the scope of btn + // | btn.connect(foo, "bar", function(){ + // | console.debug(this.toString()); + // | }); + // tags: + // protected + + var d = dojo, + dc = d._connect, + handles = this.inherited(arguments, [obj, event == "ondijitclick" ? "onclick" : event, method]); + + if(event == "ondijitclick"){ + // add key based click activation for unsupported nodes. + // do all processing onkey up to prevent spurious clicks + // for details see comments at top of this file where _lastKeyDownNode is defined + if(d.indexOf(this.nodesWithKeyClick, obj.nodeName.toLowerCase()) == -1){ // is NOT input or button + var m = d.hitch(this, method); + handles.push( + dc(obj, "onkeydown", this, function(e){ + //console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode)); + if((e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) && + !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){ + // needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work + dijit._lastKeyDownNode = e.target; + + // Stop event to prevent scrolling on space key in IE. + // But don't do this for _HasDropDown because it surpresses the onkeypress + // event needed to open the drop down when the user presses the SPACE key. + if(!("openDropDown" in this && obj == this._buttonNode)){ + e.preventDefault(); + } + } + }), + dc(obj, "onkeyup", this, function(e){ + //console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", dijit._lastKeyDownNode, ", equality is ", (e.target === dijit._lastKeyDownNode)); + if( (e.keyCode == d.keys.ENTER || e.keyCode == d.keys.SPACE) && + e.target == dijit._lastKeyDownNode && // === breaks greasemonkey + !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){ + //need reset here or have problems in FF when focus returns to trigger element after closing popup/alert + dijit._lastKeyDownNode = null; + return m(e); + } + }) + ); + } + } + + return handles; // _Widget.Handle + }, + + ////////////////// MISCELLANEOUS METHODS /////////////////// + + _onShow: function(){ + // summary: + // Internal method called when this widget is made visible. + // See `onShow` for details. + this.onShow(); + }, + + onShow: function(){ + // summary: + // Called when this widget becomes the selected pane in a + // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`, + // `dijit.layout.AccordionContainer`, etc. + // + // Also called to indicate display of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`. + // tags: + // callback + }, + + onHide: function(){ + // summary: + // Called when another widget becomes the selected pane in a + // `dijit.layout.TabContainer`, `dijit.layout.StackContainer`, + // `dijit.layout.AccordionContainer`, etc. + // + // Also called to indicate hide of a `dijit.Dialog`, `dijit.TooltipDialog`, or `dijit.TitlePane`. + // tags: + // callback + }, + + onClose: function(){ + // summary: + // Called when this widget is being displayed as a popup (ex: a Calendar popped + // up from a DateTextBox), and it is hidden. + // This is called from the dijit.popup code, and should not be called directly. + // + // Also used as a parameter for children of `dijit.layout.StackContainer` or subclasses. + // Callback if a user tries to close the child. Child will be closed if this function returns true. + // tags: + // extension + + return true; // Boolean + } +}); + +})(); + +} + +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.getObject("string", true, dojo); + +/*===== +dojo.string = { + // summary: String utilities for Dojo +}; +=====*/ + +dojo.string.rep = function(/*String*/str, /*Integer*/num){ + // summary: + // Efficiently replicate a string `n` times. + // str: + // the string to replicate + // num: + // number of times to replicate the string + + if(num <= 0 || !str){ return ""; } + + var buf = []; + for(;;){ + if(num & 1){ + buf.push(str); + } + if(!(num >>= 1)){ break; } + str += str; + } + return buf.join(""); // String +}; + +dojo.string.pad = function(/*String*/text, /*Integer*/size, /*String?*/ch, /*Boolean?*/end){ + // summary: + // Pad a string to guarantee that it is at least `size` length by + // filling with the character `ch` 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 + // example: + // | // Fill the string to length 10 with "+" characters on the right. Yields "Dojo++++++". + // | dojo.string.pad("Dojo", 10, "+", true); + + if(!ch){ + ch = '0'; + } + var out = String(text), + pad = dojo.string.rep(ch, Math.ceil((size - out.length) / ch.length)); + return end ? out + pad : pad + out; // String +}; + +dojo.string.substitute = function( /*String*/ template, + /*Object|Array*/map, + /*Function?*/ transform, + /*Object?*/ thisObject){ + // summary: + // Performs parameterized substitutions on a string. Throws an + // exception if any parameter is unmatched. + // template: + // a string with expressions in the form `${key}` to be replaced or + // `${key:format}` which specifies a format function. keys are case-sensitive. + // map: + // hash to search for substitutions + // transform: + // a function to process all parameters before substitution takes + // place, e.g. mylib.encodeXML + // thisObject: + // where to look for optional format function; default to the global + // namespace + // example: + // Substitutes two expressions in a string from an Array or Object + // | // returns "File 'foo.html' is not found in directory '/temp'." + // | // by providing substitution data in an Array + // | dojo.string.substitute( + // | "File '${0}' is not found in directory '${1}'.", + // | ["foo.html","/temp"] + // | ); + // | + // | // also returns "File 'foo.html' is not found in directory '/temp'." + // | // but provides substitution data in an Object structure. Dotted + // | // notation may be used to traverse the structure. + // | dojo.string.substitute( + // | "File '${name}' is not found in directory '${info.dir}'.", + // | { name: "foo.html", info: { dir: "/temp" } } + // | ); + // example: + // Use a transform function to modify the values: + // | // returns "file 'foo.html' is not found in directory '/temp'." + // | dojo.string.substitute( + // | "${0} is not found in ${1}.", + // | ["foo.html","/temp"], + // | function(str){ + // | // try to figure out the type + // | var prefix = (str.charAt(0) == "/") ? "directory": "file"; + // | return prefix + " '" + str + "'"; + // | } + // | ); + // example: + // Use a formatter + // | // returns "thinger -- howdy" + // | dojo.string.substitute( + // | "${0:postfix}", ["thinger"], null, { + // | postfix: function(value, key){ + // | return value + " -- howdy"; + // | } + // | } + // | ); + + thisObject = thisObject || dojo.global; + transform = transform ? + dojo.hitch(thisObject, transform) : function(v){ return v; }; + + 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).call(thisObject, value, key); + } + return transform(value, key).toString(); + }); // String +}; + +/*===== +dojo.string.trim = function(str){ + // summary: + // Trims whitespace from both sides of the string + // str: String + // String to be trimmed + // returns: String + // Returns the trimmed string + // description: + // This version of trim() was taken from [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript). + // The short yet performant version of this function is dojo.trim(), + // which is part of Dojo base. Uses String.prototype.trim instead, if available. + return ""; // String } =====*/ @@ -4361,14 +4791,14 @@ if(!dojo._hasResource["dojo.cache"]){ //_hasResource checks added by build. Do n dojo._hasResource["dojo.cache"] = true; dojo.provide("dojo.cache"); + /*===== -dojo.cache = { +dojo.cache = { // summary: // A way to cache string content that is fetchable via `dojo.moduleUrl`. }; =====*/ -(function(){ var cache = {}; dojo.cache = function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){ // summary: @@ -4407,7 +4837,7 @@ dojo.cache = { // | var text = dojo["cache"]("my.module", "template.html"); // example: // To ask dojo.cache to fetch content and store it in the cache, and sanitize the input - // (the dojo["cache"] style of call is used to avoid an issue with the build system + // (the dojo["cache"] style of call is used to avoid an issue with the build system // erroneously trying to intern this example. To get the build system to intern your // dojo.cache calls, use the "dojo.cache" style of call): // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the @@ -4457,7 +4887,7 @@ dojo.cache = { }; dojo.cache._sanitize = function(/*String*/val){ - // summary: + // 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. @@ -4474,7 +4904,6 @@ dojo.cache = { } return val; //String }; -})(); } @@ -4527,15 +4956,23 @@ dojo.declare("dijit._Templated", // 'true' to re-enable to previous, arguably broken, behavior. _earlyTemplatedStartup: false, +/*===== // _attachPoints: [private] String[] // List of widget attribute names associated with dojoAttachPoint=... in the // template, ex: ["containerNode", "labelNode"] -/*===== _attachPoints: [], =====*/ +/*===== + // _attachEvents: [private] Handle[] + // List of connections associated with dojoAttachEvent=... in the + // template + _attachEvents: [], + =====*/ + constructor: function(){ this._attachPoints = []; + this._attachEvents = []; }, _stringRepl: function(tmpl){ @@ -4560,7 +4997,6 @@ dojo.declare("dijit._Templated", }, this); }, - // method over-ride buildRendering: function(){ // summary: // Construct the UI for this widget from a template, setting this.domNode. @@ -4586,33 +5022,24 @@ dojo.declare("dijit._Templated", this.domNode = node; + // Call down to _Widget.buildRendering() to get base classes assigned + // TODO: change the baseClass assignment to attributeMap + this.inherited(arguments); + // recurse through the node, looking for, and attaching to, our // attachment points and events, which should be defined on the template node. this._attachTemplateNodes(node); if(this.widgetsInTemplate){ - // Make sure dojoType is used for parsing widgets in template. - // The dojo.parser.query could be changed from multiversion support. - var parser = dojo.parser, qry, attr; - if(parser._query != "[dojoType]"){ - qry = parser._query; - attr = parser._attrName; - parser._query = "[dojoType]"; - parser._attrName = "dojoType"; - } - // Store widgets that we need to start at a later point in time var cw = (this._startupWidgets = dojo.parser.parse(node, { noStart: !this._earlyTemplatedStartup, - inherited: {dir: this.dir, lang: this.lang} + template: true, + inherited: {dir: this.dir, lang: this.lang}, + propsThis: this, // so data-dojo-props of widgets in the template can reference "this" to refer to me + scope: "dojo" // even in multi-version mode templates use dojoType/data-dojo-type })); - // Restore the query. - if(qry){ - parser._query = qry; - parser._attrName = attr; - } - this._supportingWidgets = dijit.findWidgets(node); this._attachTemplateNodes(cw, function(n,p){ @@ -4640,6 +5067,8 @@ dojo.declare("dijit._Templated", _attachTemplateNodes: function(rootNode, getAttrFunc){ // summary: // Iterate through the template and attach functions and nodes accordingly. + // Alternately, if rootNode is an array of widgets, then will process dojoAttachPoint + // etc. for those widgets. // description: // Map widget properties and functions to the handlers specified in // the dom node and it's descendants. This function iterates over all @@ -4662,11 +5091,11 @@ dojo.declare("dijit._Templated", 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")){ + if(this.widgetsInTemplate && (getAttrFunc(baseNode, "dojoType") || getAttrFunc(baseNode, "data-dojo-type"))){ continue; } // Process dojoAttachPoint - var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint"); + var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint") || getAttrFunc(baseNode, "data-dojo-attach-point"); if(attachPoint){ var point, points = attachPoint.split(/\s*,\s*/); while((point = points.shift())){ @@ -4680,7 +5109,7 @@ dojo.declare("dijit._Templated", } // Process dojoAttachEvent - var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent"); + var attachEvent = getAttrFunc(baseNode, "dojoAttachEvent") || getAttrFunc(baseNode, "data-dojo-attach-event");; if(attachEvent){ // NOTE: we want to support attributes that have the form // "domEvent: nativeEvent; ..." @@ -4700,12 +5129,13 @@ dojo.declare("dijit._Templated", if(!thisFunc){ thisFunc = event; } - this.connect(baseNode, event, thisFunc); + this._attachEvents.push(this.connect(baseNode, event, thisFunc)); } } } // waiRole, waiState + // TODO: remove this in 2.0, templates are now using role=... and aria-XXX=... attributes directicly var role = getAttrFunc(baseNode, "waiRole"); if(role){ dijit.setWaiRole(baseNode, role); @@ -4738,6 +5168,10 @@ dojo.declare("dijit._Templated", }, this); this._attachPoints = []; + // And same for event handlers + dojo.forEach(this._attachEvents, this.disconnect, this); + this._attachEvents = []; + this.inherited(arguments); } } @@ -4822,6 +5256,7 @@ if(!dojo._hasResource["dijit._Container"]){ //_hasResource checks added by build dojo._hasResource["dijit._Container"] = true; dojo.provide("dijit._Container"); + dojo.declare("dijit._Container", null, { @@ -4884,7 +5319,7 @@ dojo.declare("dijit._Container", // not destroy it. You can also pass in an integer indicating // the index within the container to remove - if(typeof widget == "number" && widget > 0){ + if(typeof widget == "number"){ widget = this.getChildren()[widget]; } @@ -4959,6 +5394,7 @@ if(!dojo._hasResource["dijit._Contained"]){ //_hasResource checks added by build dojo._hasResource["dijit._Contained"] = true; dojo.provide("dijit._Contained"); + dojo.declare("dijit._Contained", null, { @@ -5022,7 +5458,6 @@ dojo.declare("dijit._Contained", } ); - } if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -5051,10 +5486,9 @@ dojo.declare("dijit.layout._LayoutWidget", // children widgets, setting their size, when they become visible. isLayoutContainer: true, - postCreate: function(){ - dojo.addClass(this.domNode, "dijitContainer"); - + buildRendering: function(){ this.inherited(arguments); + dojo.addClass(this.domNode, "dijitContainer"); }, startup: function(){ @@ -5188,10 +5622,9 @@ dojo.declare("dijit.layout._LayoutWidget", // tags: // protected extension - dojo.addClass(child.domNode, this.baseClass+"-child"); - if(child.baseClass){ - dojo.addClass(child.domNode, this.baseClass+"-"+child.baseClass); - } + var cls = this.baseClass + "-child " + + (child.baseClass ? this.baseClass + "-" + child.baseClass : ""); + dojo.addClass(child.domNode, cls); }, addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){ @@ -5204,10 +5637,11 @@ dojo.declare("dijit.layout._LayoutWidget", removeChild: function(/*dijit._Widget*/ child){ // Overrides _Container.removeChild() to remove class added by _setupChild() - dojo.removeClass(child.domNode, this.baseClass+"-child"); - if(child.baseClass){ - dojo.removeClass(child.domNode, this.baseClass+"-"+child.baseClass); - } + var cls = this.baseClass + "-child" + + (child.baseClass ? + " " + this.baseClass + "-" + child.baseClass : ""); + dojo.removeClass(child.domNode, cls); + this.inherited(arguments); } } @@ -5236,15 +5670,22 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){ var size = function(widget, dim){ // size the child - widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim); + var newSize = 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); + // record child's size + if(newSize){ + // if the child returned it's new size then use that + dojo.mixin(widget, newSize); + }else{ + // otherwise, call marginBox(), 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){ + dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Widget[]*/ children, + /*String?*/ changedRegionId, /*Number?*/ changedRegionSize){ // summary // Layout a bunch of child dom nodes within a parent dom node // container: @@ -5252,7 +5693,16 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){ // 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"} ] + // an array of Widgets or at least objects containing: + // * domNode: pointer to DOM node to position + // * region or layoutAlign: position to place DOM node + // * resize(): (optional) method to set size of node + // * id: (optional) Id of widgets, referenced from resize object, below. + // changedRegionId: + // If specified, the slider for the region with the specified id has been dragged, and thus + // the region's height or width should be adjusted according to changedRegionSize + // changedRegionSize: + // See changedRegionId. // copy dim because we are going to modify it dim = dojo.mixin({}, dim); @@ -5261,27 +5711,37 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){ // 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"; })); + // client be last. TODO: move these lines to LayoutContainer? Unneeded other places I think. + children = dojo.filter(children, function(item){ return item.region != "center" && item.layoutAlign != "client"; }) + .concat(dojo.filter(children, function(item){ return item.region == "center" || item.layoutAlign == "client"; })); // set positions/sizes dojo.forEach(children, function(child){ var elm = child.domNode, - pos = child.layoutAlign; + pos = (child.region || 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"; + elmStyle.position = "absolute"; dojo.addClass(elm, "dijitAlign" + capitalize(pos)); + // Size adjustments to make to this child widget + var sizeSetting = {}; + + // Check for optional size adjustment due to splitter drag (height adjustment for top/bottom align + // panes and width adjustment for left/right align panes. + if(changedRegionId && changedRegionId == child.id){ + sizeSetting[child.region == "top" || child.region == "bottom" ? "h" : "w"] = changedRegionSize; + } + // set size && adjust record of remaining space. // note that setting the width of a <div> may affect its height. if(pos == "top" || pos == "bottom"){ - size(child, { w: dim.w }); + sizeSetting.w = dim.w; + size(child, sizeSetting); dim.h -= child.h; if(pos == "top"){ dim.t += child.h; @@ -5289,14 +5749,15 @@ dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){ elmStyle.top = dim.t + dim.h + "px"; } }else if(pos == "left" || pos == "right"){ - size(child, { h: dim.h }); + sizeSetting.h = dim.h; + size(child, sizeSetting); dim.w -= child.w; if(pos == "left"){ dim.l += child.w; }else{ elmStyle.left = dim.l + dim.w + "px"; } - }else if(pos == "client"){ + }else if(pos == "client" || pos == "center"){ size(child, dim); } }); @@ -5340,7 +5801,19 @@ dojo.declare("dijit._CssStateMixin", [], { // is hovered, etc. cssStateNodes: {}, - postCreate: function(){ + // hovering: [readonly] Boolean + // True if cursor is over this widget + hovering: false, + + // active: [readonly] Boolean + // True if mouse was pressed while over this widget, and hasn't been released yet + active: false, + + _applyAttributes: function(){ + // This code would typically be in postCreate(), but putting in _applyAttributes() for + // performance: so the class changes happen before DOM is inserted into the document. + // Change back to postCreate() in 2.0. See #11635. + this.inherited(arguments); // Automatically monitor mouse events (essentially :hover and :active) on this.domNode @@ -5349,15 +5822,8 @@ dojo.declare("dijit._CssStateMixin", [], { }, this); // Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node - this.connect(this, "set", function(name, value){ - if(arguments.length >= 2 && {disabled: true, readOnly: true, checked:true, selected:true}[name]){ - this._setStateClass(); - } - }); - - // The widget coming in/out of the focus change affects it's state - dojo.forEach(["_onFocus", "_onBlur"], function(ap){ - this.connect(this, ap, "_setStateClass"); + dojo.forEach(["disabled", "readOnly", "checked", "selected", "focused", "state", "hovering", "active"], function(attr){ + this.watch(attr, dojo.hitch(this, "_setStateClass")); }, this); // Events on sub nodes within the widget @@ -5365,44 +5831,42 @@ dojo.declare("dijit._CssStateMixin", [], { this._trackMouseState(this[ap], this.cssStateNodes[ap]); } // Set state initially; there's probably no hover/active/focus state but widget might be - // disabled/readonly so we want to set CSS classes for those conditions. + // disabled/readonly/checked/selected so we want to set CSS classes for those conditions. this._setStateClass(); }, _cssMouseEvent: function(/*Event*/ event){ // summary: - // Sets _hovering and _active properties depending on mouse state, - // then calls _setStateClass() to set appropriate CSS classes for this.domNode. + // Sets hovering and active properties depending on mouse state, + // which triggers _setStateClass() to set appropriate CSS classes for this.domNode. if(!this.disabled){ switch(event.type){ case "mouseenter": case "mouseover": // generated on non-IE browsers even though we connected to mouseenter - this._hovering = true; - this._active = this._mouseDown; + this._set("hovering", true); + this._set("active", this._mouseDown); break; case "mouseleave": case "mouseout": // generated on non-IE browsers even though we connected to mouseleave - this._hovering = false; - this._active = false; + this._set("hovering", false); + this._set("active", false); break; case "mousedown" : - this._active = true; + this._set("active", true); this._mouseDown = true; // Set a global event to handle mouseup, so it fires properly // even if the cursor leaves this.domNode before the mouse up event. // Alternately could set active=false on mouseout. var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){ - this._active = false; this._mouseDown = false; - this._setStateClass(); + this._set("active", false); this.disconnect(mouseUpConnector); }); break; } - this._setStateClass(); } }, @@ -5421,11 +5885,12 @@ dojo.declare("dijit._CssStateMixin", [], { // 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 + // - Incomplete - ValidationTextBox sets this.state to "Incomplete" if the current input value is not finished yet // - 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 one or more of the following states, - // based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused): + // based on this.disabled and flags set in _onMouse (this.active, this.hovering) and from focus manager (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 @@ -5458,9 +5923,9 @@ dojo.declare("dijit._CssStateMixin", [], { }else if(this.readOnly){ multiply("ReadOnly"); }else{ - if(this._active){ + if(this.active){ multiply("Active"); - }else if(this._hovering){ + }else if(this.hovering){ multiply("Hover"); } } @@ -5553,11 +6018,8 @@ dojo.declare("dijit._CssStateMixin", [], { // Just in case widget is enabled/disabled while it has focus/hover/active state. // Maybe this is overkill. - this.connect(this, "set", function(name, value){ - if(name == "disabled" || name == "readOnly"){ - setClass(); - } - }); + this.watch("disabled", setClass); + this.watch("readOnly", setClass); } }); @@ -5572,7 +6034,6 @@ dojo.provide("dijit.form._FormWidget"); - dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._CssStateMixin], { // summary: @@ -5586,7 +6047,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ // // They also share some common methods. - // name: String + // name: [const] String // Name used when submitting form; same as "name" attribute or plain HTML elements name: "", @@ -5643,7 +6104,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ }, _setDisabledAttr: function(/*Boolean*/ value){ - this.disabled = value; + this._set("disabled", value); dojo.attr(this.focusNode, 'disabled', value); if(this.valueNode){ dojo.attr(this.valueNode, 'disabled', value); @@ -5653,8 +6114,8 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ if(value){ // reset these, because after the domNode is disabled, we can no longer receive // mouse related events, see #4200 - this._hovering = false; - this._active = false; + this._set("hovering", false); + this._set("active", false); // clear tab stop(s) on this widget's focusable node(s) (ComboBox has two focusable nodes) var attachPointNames = "tabIndex" in this.attributeMap ? this.attributeMap.tabIndex : "focusNode"; @@ -5664,17 +6125,19 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ if(dojo.isWebKit || dijit.hasDefaultTabStop(node)){ // see #11064 about webkit bug node.setAttribute('tabIndex', "-1"); }else{ - node.removeAttribute('tabIndex'); + node.removeAttribute('tabIndex'); } }, this); }else{ - this.focusNode.setAttribute('tabIndex', this.tabIndex); + if(this.tabIndex != ""){ + this.focusNode.setAttribute('tabIndex', this.tabIndex); + } } }, setDisabled: function(/*Boolean*/ disabled){ // summary: - // Deprecated. Use set('disabled', ...) instead. + // Deprecated. Use set('disabled', ...) instead. dojo.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0"); this.set('disabled', disabled); }, @@ -5688,21 +6151,23 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ isFocusable: function(){ // summary: - // Tells if this widget is focusable or not. Used internally by dijit. + // Tells if this widget is focusable or not. Used internally by dijit. // tags: // protected - return !this.disabled && !this.readOnly && this.focusNode && (dojo.style(this.domNode, "display") != "none"); + return !this.disabled && this.focusNode && (dojo.style(this.domNode, "display") != "none"); }, focus: function(){ // summary: // Put focus on this widget - dijit.focus(this.focusNode); + if(!this.disabled){ + dijit.focus(this.focusNode); + } }, - compare: function(/*anything*/val1, /*anything*/val2){ + compare: function(/*anything*/ val1, /*anything*/ val2){ // summary: - // Compare 2 values (as returned by attr('value') for this widget). + // Compare 2 values (as returned by get('value') for this widget). // tags: // protected if(typeof val1 == "number" && typeof val2 == "number"){ @@ -5729,27 +6194,28 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ // when the initial value is set. _onChangeActive: false, - _handleOnChange: function(/*anything*/ newValue, /* Boolean? */ priorityChange){ + _handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){ // summary: // Called when the value of the widget is set. Calls onChange() if appropriate // newValue: // the new value // priorityChange: // For a slider, for example, dragging the slider is priorityChange==false, - // but on mouse up, it's priorityChange==true. If intermediateChanges==true, + // but on mouse up, it's priorityChange==true. If intermediateChanges==false, // onChange is only called form priorityChange=true events. // tags: // private - this._lastValue = newValue; if(this._lastValueReported == undefined && (priorityChange === null || !this._onChangeActive)){ // this block executes not for a change, but during initialization, // and is used to store away the original value (or for ToggleButton, the original checked state) this._resetValue = this._lastValueReported = newValue; } - if((this.intermediateChanges || priorityChange || priorityChange === undefined) && - ((typeof newValue != typeof this._lastValueReported) || - this.compare(newValue, this._lastValueReported) != 0)){ + this._pendingOnChange = this._pendingOnChange + || (typeof newValue != typeof this._lastValueReported) + || (this.compare(newValue, this._lastValueReported) != 0); + if((this.intermediateChanges || priorityChange || priorityChange === undefined) && this._pendingOnChange){ this._lastValueReported = newValue; + this._pendingOnChange = false; if(this._onChangeActive){ if(this._onChangeHandle){ clearTimeout(this._onChangeHandle); @@ -5781,14 +6247,14 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ setValue: function(/*String*/ value){ // summary: - // Deprecated. Use set('value', ...) instead. + // Deprecated. Use set('value', ...) instead. dojo.deprecated("dijit.form._FormWidget:setValue("+value+") is deprecated. Use set('value',"+value+") instead.", "", "2.0"); this.set('value', value); }, getValue: function(){ // summary: - // Deprecated. Use get('value') instead. + // Deprecated. Use get('value') instead. dojo.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0"); return this.get('value'); }, @@ -5798,7 +6264,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated, dijit._ // this button should get focus (to mimics native browser buttons). // This is also needed on chrome because otherwise buttons won't get focus at all, // which leads to bizarre focus restore on Dialog close etc. - if(!e.ctrlKey && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac + if(!e.ctrlKey && dojo.mouseButtons.isLeft(e) && this.isFocusable()){ // !e.ctrlKey to ignore right-click on mac // Set a global event to handle mouseup, so it fires properly // even if the cursor leaves this.domNode before the mouse up event. var mouseUpConnector = this.connect(dojo.body(), "onmouseup", function(){ @@ -5822,7 +6288,7 @@ dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget, // 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. See #8484, #8660. + // require the 'name' attribute at element creation time. See #8484, #8660. // TODO: unclear what that {value: ""} is for; FormWidget.attributeMap copies value to focusNode, // so maybe {value: ""} is so the value *doesn't* get copied to focusNode? // Seems like we really want value removed from attributeMap altogether @@ -5840,39 +6306,40 @@ dojo.declare("dijit.form._FormValueWidget", dijit.form._FormWidget, }), _setReadOnlyAttr: function(/*Boolean*/ value){ - this.readOnly = value; dojo.attr(this.focusNode, 'readOnly', value); dijit.setWaiState(this.focusNode, "readonly", value); + this._set("readOnly", value); }, postCreate: function(){ this.inherited(arguments); - if(dojo.isIE){ // IE won't stop the event with keypress + if(dojo.isIE < 9 || (dojo.isIE && dojo.isQuirks)){ // IE won't stop the event with keypress this.connect(this.focusNode || this.domNode, "onkeydown", this._onKeyDown); } // Update our reset value if it hasn't yet been set (because this.set() // is only called when there *is* a value) if(this._resetValue === undefined){ - this._resetValue = this.value; + this._lastValueReported = this._resetValue = this.value; } }, - _setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){ + _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){ // summary: - // Hook so attr('value', value) works. + // Hook so set('value', value) works. // description: // Sets the value of the widget. // If the value has changed, then fire onChange event, unless priorityChange // is specified as null (or false?) - this.value = newValue; this._handleOnChange(newValue, priorityChange); }, - _getValueAttr: function(){ + _handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){ // summary: - // Hook so attr('value') works. - return this._lastValue; + // Called when the value of the widget has changed. Saves the new value in this.value, + // and calls onChange() if appropriate. See _FormWidget._handleOnChange() for details. + this._set("value", newValue); + this.inherited(arguments); }, undo: function(){ @@ -5933,6 +6400,14 @@ if(!dojo._hasResource["dijit.dijit"]){ //_hasResource checks added by build. Do dojo._hasResource["dijit.dijit"] = true; dojo.provide("dijit.dijit"); + + + + + + + + /*===== dijit.dijit = { // summary: @@ -5949,21 +6424,15 @@ 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 - - - - - - } if(!dojo._hasResource["dojo.fx.Toggler"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dojo.fx.Toggler"] = true; dojo.provide("dojo.fx.Toggler"); + dojo.declare("dojo.fx.Toggler", null, { // summary: // A simple `dojo.Animation` toggler API. @@ -5971,16 +6440,16 @@ dojo.declare("dojo.fx.Toggler", null, { // description: // 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. All available members are mixed into - // these animations from the constructor (for example, `node`, - // `showDuration`, `hideDuration`). + // direction, duration, etc. All available members are mixed into + // these animations from the constructor (for example, `node`, + // `showDuration`, `hideDuration`). // // example: // | var t = new dojo.fx.Toggler({ // | node: "nodeId", // | showDuration: 500, // | // hideDuration will default to "200" - // | showFunc: dojo.fx.wipeIn, + // | showFunc: dojo.fx.wipeIn, // | // hideFunc will default to "fadeOut" // | }); // | t.show(100); // delay showing for 100ms @@ -5995,7 +6464,7 @@ dojo.declare("dojo.fx.Toggler", null, { // The function that returns the `dojo.Animation` to show the node showFunc: dojo.fadeIn, - // hideFunc: Function + // hideFunc: Function // The function that returns the `dojo.Animation` to hide the node hideFunc: dojo.fadeOut, @@ -6011,7 +6480,7 @@ dojo.declare("dojo.fx.Toggler", null, { // time show/hide are called if we're stopped somewhere in the // middle. // FIXME: also would be nice to specify individual showArgs/hideArgs mixed into - // each animation individually. + // each animation individually. // FIXME: also would be nice to have events from the animations exposed/bridged /*===== @@ -6064,7 +6533,9 @@ dojo.declare("dojo.fx.Toggler", null, { 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"); - // FIXME: remove this back-compat require in 2.0 + + + /*===== dojo.fx = { // summary: Effects library on top of Base animations @@ -6072,7 +6543,7 @@ dojo.fx = { =====*/ (function(){ - var d = dojo, + var d = dojo, _baseObj = { _fire: function(evt, args){ if(this[evt]){ @@ -6191,14 +6662,14 @@ dojo.fx = { d.extend(_chain, _baseObj); dojo.fx.chain = function(/*dojo.Animation[]*/ animations){ - // summary: + // summary: // Chain a list of `dojo.Animation`s to run in sequence // // description: // Return a `dojo.Animation` which will play all passed // `dojo.Animation` instances in sequence, firing its own // synthesized events simulating a single animation. (eg: - // onEnd of this animation means the end of the chain, + // onEnd of this animation means the end of the chain, // not the individual animations within) // // example: @@ -6226,7 +6697,7 @@ dojo.fx = { this._pseudoAnimation = new d.Animation({curve: [0, 1], duration: this.duration}); var self = this; - d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], + d.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], function(evt){ self._connects.push(d.connect(self._pseudoAnimation, evt, function(){ self._fire(evt, arguments); } @@ -6284,11 +6755,11 @@ dojo.fx = { d.extend(_combine, _baseObj); dojo.fx.combine = function(/*dojo.Animation[]*/ animations){ - // summary: + // summary: // Combine a list of `dojo.Animation`s to run in parallel // // description: - // Combine an array of `dojo.Animation`s to run in parallel, + // Combine an array of `dojo.Animation`s to run in parallel, // providing a new `dojo.Animation` instance encompasing each // animation, firing standard animation events. // @@ -6359,17 +6830,17 @@ dojo.fx = { } }, args)); - d.connect(anim, "onEnd", function(){ + d.connect(anim, "onEnd", function(){ s.height = "auto"; s.overflow = o; }); return anim; // dojo.Animation - } + }; dojo.fx.wipeOut = function(/*Object*/ args){ // summary: - // Shrink a node to nothing and hide it. + // Shrink a node to nothing and hide it. // // description: // Returns an animation that will shrink node defined in "args" @@ -6378,7 +6849,7 @@ dojo.fx = { // args: Object // A hash-map of standard `dojo.Animation` constructor properties // (such as easing: node: duration: and so on) - // + // // example: // | dojo.fx.wipeOut({ node:"someId" }).play() @@ -6404,14 +6875,14 @@ dojo.fx = { }); return anim; // dojo.Animation - } + }; dojo.fx.slideTo = function(/*Object*/ args){ // summary: // Slide a node to a new top/left position // // description: - // Returns an animation that will slide "node" + // Returns an animation that will slide "node" // defined in args Object from its current position to // the position defined by (args.left, args.top). // @@ -6423,7 +6894,7 @@ dojo.fx = { // example: // | dojo.fx.slideTo({ node: node, left:"40", top:"50", units:"px" }).play() - var node = args.node = d.byId(args.node), + var node = args.node = d.byId(args.node), top = null, left = null; var init = (function(n){ @@ -6453,7 +6924,7 @@ dojo.fx = { d.connect(anim, "beforeBegin", anim, init); return anim; // dojo.Animation - } + }; })(); @@ -6464,6 +6935,7 @@ dojo._hasResource["dojo.NodeList-fx"] = true; dojo.provide("dojo.NodeList-fx"); + /*===== dojo["NodeList-fx"] = { // summary: Adds dojo.fx animation support to dojo.query() @@ -6479,7 +6951,7 @@ dojo.extend(dojo.NodeList, { dojo.mixin(tmpArgs, args); return obj[method](tmpArgs); }) - ); + ); return args.auto ? a.play() && this : a; // dojo.Animation|dojo.NodeList }, @@ -6488,7 +6960,7 @@ dojo.extend(dojo.NodeList, { // wipe in all elements of this NodeList via `dojo.fx.wipeIn` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -6512,7 +6984,7 @@ dojo.extend(dojo.NodeList, { // wipe out all elements of this NodeList via `dojo.fx.wipeOut` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -6531,7 +7003,7 @@ dojo.extend(dojo.NodeList, { // slide all elements of the node list to the specified place via `dojo.fx.slideTo` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -6554,7 +7026,7 @@ dojo.extend(dojo.NodeList, { // fade in all elements of this NodeList via `dojo.fadeIn` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -6573,7 +7045,7 @@ dojo.extend(dojo.NodeList, { // fade out all elements of this NodeList via `dojo.fadeOut` // // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of + // Additional dojo.Animation arguments to mix into this set with the addition of // an `auto` parameter. // // returns: dojo.Animation|dojo.NodeList @@ -6609,14 +7081,14 @@ dojo.extend(dojo.NodeList, { // example: // | dojo.query(".zork").animateProperty({ // | duration: 500, - // | properties: { + // | properties: { // | color: { start: "black", end: "white" }, - // | left: { end: 300 } - // | } + // | left: { end: 300 } + // | } // | }).play(); // // example: - // | dojo.query(".grue").animateProperty({ + // | dojo.query(".grue").animateProperty({ // | auto:true, // | properties: { // | height:240 @@ -6625,9 +7097,9 @@ dojo.extend(dojo.NodeList, { return this._anim(dojo, "animateProperty", args); // dojo.Animation|dojo.NodeList }, - anim: function( /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, + anim: function( /*Object*/ properties, + /*Integer?*/ duration, + /*Function?*/ easing, /*Function?*/ onEnd, /*Integer?*/ delay){ // summary: @@ -6635,8 +7107,8 @@ dojo.extend(dojo.NodeList, { // The returned animation object will already be playing when it // is returned. See the docs for `dojo.anim` for full details. // properties: Object - // the properties to animate. does NOT support the `auto` parameter like other - // NodeList-fx methods. + // the properties to animate. does NOT support the `auto` parameter like other + // NodeList-fx methods. // duration: Integer? // Optional. The time to run the animations for // easing: Function? @@ -6661,7 +7133,7 @@ dojo.extend(dojo.NodeList, { easing: easing }); }) - ); + ); if(onEnd){ dojo.connect(canim, "onEnd", onEnd); } @@ -6675,6 +7147,8 @@ if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do dojo._hasResource["dojo.colors"] = true; dojo.provide("dojo.colors"); +dojo.getObject("colors", true, dojo); + //TODO: this module appears to break naming conventions /*===== @@ -6721,9 +7195,9 @@ dojo.colors = { 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, + // 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, @@ -6905,13 +7379,16 @@ if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do no dojo._hasResource["dojo.i18n"] = true; dojo.provide("dojo.i18n"); +dojo.getObject("i18n", true, dojo); + /*===== dojo.i18n = { // summary: Utility classes to enable loading of resources for internationalization (i18n) }; =====*/ -dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){ +// when using a real AMD loader, dojo.i18n.getLocalization is already defined by dojo/lib/backCompat +dojo.i18n.getLocalization = 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. @@ -6939,7 +7416,7 @@ dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName // look for nearest locale match var elements = locale.split('-'); var module = [packageName,"nls",bundleName].join('.'); - var bundle = dojo._loadedModules[module]; + var bundle = dojo._loadedModules[module]; if(bundle){ var localization; for(var i = elements.length; i > 0; i--){ @@ -6989,7 +7466,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle var targetLocale = dojo.i18n.normalizeLocale(locale); var bundlePackage = [moduleName, "nls", bundleName].join("."); - // NOTE: + // 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. @@ -6999,7 +7476,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle // 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){ @@ -7016,7 +7493,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle } if(!bestLocale){ bestLocale = "ROOT"; - } + } } //See if the desired locale is already loaded. @@ -7048,6 +7525,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle module.push(bundleName); var filespec = module.join("/") + '.js'; loaded = dojo._loadPath(filespec, null, function(hash){ + hash = hash.root || hash; // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath var clazz = function(){}; clazz.prototype = parent; @@ -7062,7 +7540,7 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle }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. @@ -7080,8 +7558,8 @@ dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundle (function(){ // If other locales are used, dojo.requireLocalization should load them as - // well, by default. - // + // 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. @@ -7158,6 +7636,7 @@ dojo._hasResource["dijit._PaletteMixin"] = true; dojo.provide("dijit._PaletteMixin"); + dojo.declare("dijit._PaletteMixin", [dijit._CssStateMixin], { @@ -7184,23 +7663,23 @@ dojo.declare("dijit._PaletteMixin", // Index of the currently selected cell. Initially, none selected _selectedCell: -1, +/*===== // _currentFocus: [private] DomNode // The currently focused cell (if the palette itself has focus), or otherwise // the cell to be focused when the palette itself gets focus. // Different from value, which represents the selected (i.e. clicked) cell. -/*===== _currentFocus: null, =====*/ +/*===== // _xDim: [protected] Integer // This is the number of cells horizontally across. -/*===== _xDim: null, =====*/ +/*===== // _yDim: [protected] Integer // This is the number of cells vertically down. -/*===== _yDim: null, =====*/ @@ -7217,7 +7696,7 @@ dojo.declare("dijit._PaletteMixin", // dyeClass should implements dijit.Dye interface dyeClass: '', - _preparePalette: function(choices, titles) { + _preparePalette: function(choices, titles, dyeClassObj) { // summary: // Subclass must call _preparePalette() from postCreate(), passing in the tooltip // for each cell @@ -7225,18 +7704,20 @@ dojo.declare("dijit._PaletteMixin", // id's for each cell of the palette, used to create Dye JS object for each cell // titles: String[] // Localized tooltip for each cell + // dyeClassObj: Constructor? + // If specified, use this constructor rather than this.dyeClass this._cells = []; var url = this._blankGif; - var dyeClassObj = dojo.getObject(this.dyeClass); + dyeClassObj = dyeClassObj || dojo.getObject(this.dyeClass); for(var row=0; row < choices.length; row++){ var rowNode = dojo.create("tr", {tabIndex: "-1"}, this.gridNode); for(var col=0; col < choices[row].length; col++){ var value = choices[row][col]; if(value){ - var cellObject = new dyeClassObj(value); + var cellObject = new dyeClassObj(value, row, col); var cellNode = dojo.create("td", { "class": this.cellClass, @@ -7316,7 +7797,7 @@ dojo.declare("dijit._PaletteMixin", // tags: // private - var target = evt.currentTarget, + var target = evt.currentTarget, value = this._getDye(target).getValue(); // First focus the clicked cell, and then send onChange() notification. @@ -7326,8 +7807,8 @@ dojo.declare("dijit._PaletteMixin", // Use setTimeout because IE doesn't like changing focus inside of an event handler. this._setCurrent(target); setTimeout(dojo.hitch(this, function(){ - dijit.focus(target); - this._setValueAttr(value, true); + dijit.focus(target); + this._setValueAttr(value, true); })); // workaround bug where hover class is not removed on popup because the popup is @@ -7371,8 +7852,7 @@ dojo.declare("dijit._PaletteMixin", // Optional parameter used to tell the select whether or not to fire // onChange event. - // clear old value and selected cell - this.value = null; + // clear old selected cell if(this._selectedCell >= 0){ dojo.removeClass(this._cells[this._selectedCell].node, "dijitPaletteCellSelected"); } @@ -7383,18 +7863,18 @@ dojo.declare("dijit._PaletteMixin", for(var i = 0; i < this._cells.length; i++){ if(value == this._cells[i].dye.getValue()){ this._selectedCell = i; - this.value = value; - dojo.addClass(this._cells[i].node, "dijitPaletteCellSelected"); - - if(priorityChange || priorityChange === undefined){ - this.onChange(value); - } - break; } } } + + // record new value, or null if no matching cell + this._set("value", this._selectedCell >= 0 ? value : null); + + if(priorityChange || priorityChange === undefined){ + this.onChange(value); + } }, onChange: function(value){ @@ -7444,7 +7924,7 @@ dojo.declare("dijit.Dye", // summary: // Interface for the JS Object associated with a palette cell (i.e. DOMNode) - constructor: function(alias){ + constructor: function(alias, row, col){ // summary: // Initialize according to value or alias like "white" // alias: String @@ -7483,7 +7963,6 @@ dojo.provide("dijit.ColorPalette"); - dojo.declare("dijit.ColorPalette", [dijit._Widget, dijit._Templated, dijit._PaletteMixin], { @@ -7501,7 +7980,7 @@ dojo.declare("dijit.ColorPalette", // | picker.startup(); - // palette: String + // palette: [const] String // Size of grid, either "7x10" or "3x4". palette: "7x10", @@ -7523,65 +8002,88 @@ dojo.declare("dijit.ColorPalette", ["gray", "red", "purple", "black"]] }, - // _imagePaths: [protected] Map - // This is stores the path to the palette images - _imagePaths: { - "7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"), - "3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png"), - "7x10-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors7x10-rtl.png"), - "3x4-rtl": dojo.moduleUrl("dijit.themes", "a11y/colors3x4-rtl.png") - }, - // templateString: String // The template of this widget. - templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<img class=\"dijitColorPaletteUnder\" dojoAttachPoint=\"imageNode\" waiRole=\"presentation\" alt=\"\"/>\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"), + templateString: dojo.cache("dijit", "templates/ColorPalette.html", "<div class=\"dijitInline dijitColorPalette\">\n\t<table class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\">\n\t\t<tbody dojoAttachPoint=\"gridNode\"></tbody>\n\t</table>\n</div>\n"), baseClass: "dijitColorPalette", - dyeClass: 'dijit._Color', - buildRendering: function(){ // Instantiate the template, which makes a skeleton into which we'll insert a bunch of // <img> nodes - this.inherited(arguments); - this.imageNode.setAttribute("src", this._imagePaths[this.palette + (this.isLeftToRight() ? "" : "-rtl")].toString()); - - var i18nColorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang); + // Creates <img> nodes in each cell of the template. + // Pass in "customized" dijit._Color constructor for specified palette and high-contrast vs. normal mode this._preparePalette( this._palettes[this.palette], - i18nColorNames + dojo.i18n.getLocalization("dojo", "colors", this.lang), + dojo.declare(dijit._Color, { + hc: dojo.hasClass(dojo.body(), "dijit_a11y"), + palette: this.palette + }) ); } }); -dojo.declare("dijit._Color", dojo.Color, +dojo.declare("dijit._Color", dojo.Color, { // summary: // Object associated with each cell in a ColorPalette palette. // Implements dijit.Dye. - { - constructor: function(/*String*/alias){ - this._alias = alias; - this.setColor(dojo.Color.named[alias]); - }, - getValue: function(){ - // summary: - // Note that although dijit._Color is initialized with a value like "white" getValue() always - // returns a hex value - return this.toHex(); - }, + // Template for each cell in normal (non-high-contrast mode). Each cell contains a wrapper + // node for showing the border (called dijitPaletteImg for back-compat), and dijitColorPaletteSwatch + // for showing the color. + template: + "<span class='dijitInline dijitPaletteImg'>" + + "<img src='${blankGif}' alt='${alt}' class='dijitColorPaletteSwatch' style='background-color: ${color}'/>" + + "</span>", + + // Template for each cell in high contrast mode. Each cell contains an image with the whole palette, + // but scrolled and clipped to show the correct color only + hcTemplate: + "<span class='dijitInline dijitPaletteImg' style='position: relative; overflow: hidden; height: 12px; width: 14px;'>" + + "<img src='${image}' alt='${alt}' style='position: absolute; left: ${left}px; top: ${top}px; ${size}'/>" + + "</span>", - fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){ - dojo.create("img", { - src: blankGif, - "class": "dijitPaletteImg", - alt: this._alias - }, cell); - } + // _imagePaths: [protected] Map + // This is stores the path to the palette images used for high-contrast mode display + _imagePaths: { + "7x10": dojo.moduleUrl("dijit.themes", "a11y/colors7x10.png"), + "3x4": dojo.moduleUrl("dijit.themes", "a11y/colors3x4.png") + }, + + constructor: function(/*String*/alias, /*Number*/ row, /*Number*/ col){ + this._alias = alias; + this._row = row; + this._col = col; + this.setColor(dojo.Color.named[alias]); + }, + + getValue: function(){ + // summary: + // Note that although dijit._Color is initialized with a value like "white" getValue() always + // returns a hex value + return this.toHex(); + }, + + fillCell: function(/*DOMNode*/ cell, /*String*/ blankGif){ + var html = dojo.string.substitute(this.hc ? this.hcTemplate : this.template, { + // substitution variables for normal mode + color: this.toHex(), + blankGif: blankGif, + alt: this._alias, + + // variables used for high contrast mode + image: this._imagePaths[this.palette].toString(), + left: this._col * -20 - 5, + top: this._row * -20 - 5, + size: this.palette == "7x10" ? "height: 145px; width: 206px" : "height: 64px; width: 86px" + }); + + dojo.place(html, cell); } -); +}); } @@ -7589,6 +8091,8 @@ if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build. dojo._hasResource["dojo.dnd.common"] = true; dojo.provide("dojo.dnd.common"); +dojo.getObject("dnd", true, dojo); + dojo.dnd.getCopyKeyState = dojo.isCopyKey; dojo.dnd._uniqueId = 0; @@ -7620,25 +8124,10 @@ if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by bu 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) - - // TODO: remove this when getViewport() moved to dojo core, see #7028 - - // 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.getObject("dnd", true, dojo); + +dojo.dnd.getViewport = dojo.window.getBox; dojo.dnd.V_TRIGGER_AUTOSCROLL = 32; dojo.dnd.H_TRIGGER_AUTOSCROLL = 32; @@ -7654,7 +8143,7 @@ dojo.dnd.autoScroll = function(e){ // onmousemove event // FIXME: needs more docs! - var v = dojo.dnd.getViewport(), dx = 0, dy = 0; + var v = dojo.window.getBox(), 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){ @@ -7685,14 +8174,15 @@ dojo.dnd.autoScrollNodes = function(e){ if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){ var b = dojo._getContentBox(n, s), t = dojo.position(n, true); //console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop); - var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2), + 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 - t.x, ry = e.pageY - t.y, dx = 0, dy = 0; if(dojo.isWebKit || dojo.isOpera){ - // FIXME: this code should not be here, it should be taken into account + // FIXME: this code should not be here, it should be taken into account // either by the event fixing code, or the dojo.position() // FIXME: this code doesn't work on Opera 9.5 Beta - rx += dojo.body().scrollLeft, ry += dojo.body().scrollTop; + rx += dojo.body().scrollLeft; + ry += dojo.body().scrollTop; } if(rx > 0 && rx < b.w){ if(rx < w){ @@ -7736,7 +8226,7 @@ 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. + // an object which makes a node follow the mouse, or touch-drag on touch devices. // Used as a default mover, and as a base class for custom movers. // node: Node // a node (or node's id) to be moved @@ -7747,17 +8237,27 @@ dojo.declare("dojo.dnd.Mover", null, { // 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}; + var pos = e.touches ? e.touches[0] : e; + this.marginBox = {l: pos.pageX, t: pos.pageY}; this.mouseButton = e.button; - var h = this.host = host, d = node.ownerDocument, - firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove"); + var h = (this.host = host), d = node.ownerDocument; this.events = [ + // At the start of a drag, onFirstMove is called, and then the following two + // connects are disconnected + dojo.connect(d, "onmousemove", this, "onFirstMove"), + dojo.connect(d, "ontouchmove", this, "onFirstMove"), + + // These are called continually during the drag dojo.connect(d, "onmousemove", this, "onMouseMove"), + dojo.connect(d, "ontouchmove", this, "onMouseMove"), + + // And these are called at the end of the drag dojo.connect(d, "onmouseup", this, "onMouseUp"), + dojo.connect(d, "ontouchend", this, "onMouseUp"), + // cancel text selection and text dragging dojo.connect(d, "ondragstart", dojo.stopEvent), - dojo.connect(d.body, "onselectstart", dojo.stopEvent), - firstEvent + dojo.connect(d.body, "onselectstart", dojo.stopEvent) ]; // notify that the move has started if(h && h.onMoveStart){ @@ -7767,17 +8267,18 @@ dojo.declare("dojo.dnd.Mover", null, { // mouse event processors onMouseMove: function(e){ // summary: - // event processor for onmousemove + // event processor for onmousemove/ontouchmove // e: Event - // mouse event + // mouse/touch event dojo.dnd.autoScroll(e); - var m = this.marginBox; - this.host.onMove(this, {l: m.l + e.pageX, t: m.t + e.pageY}, e); + var m = this.marginBox, + pos = e.touches ? e.touches[0] : e; + this.host.onMove(this, {l: m.l + pos.pageX, t: m.t + pos.pageY}, e); dojo.stopEvent(e); }, onMouseUp: function(e){ - if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ? - e.button == 0 : this.mouseButton == e.button){ + if(dojo.isWebKit && dojo.isMac && this.mouseButton == 2 ? + e.button == 0 : this.mouseButton == e.button){ // TODO Should condition be met for touch devices, too? this.destroy(); } dojo.stopEvent(e); @@ -7785,7 +8286,7 @@ dojo.declare("dojo.dnd.Mover", null, { // utilities onFirstMove: function(e){ // summary: - // makes the node absolute; it is meant to be called only once. + // makes the node absolute; it is meant to be called only once. // relative and absolutely positioned nodes are assumed to use pixel units var s = this.node.style, l, t, h = this.host; switch(s.position){ @@ -7805,7 +8306,7 @@ dojo.declare("dojo.dnd.Mover", null, { // space into account - so we need to subtract the combined // padding and margin. We use getComputedStyle and // _getMarginBox/_getContentBox to avoid the extra lookup of - // the computed style. + // the computed style. var b = dojo.doc.body; var bs = dojo.getComputedStyle(b); var bm = dojo._getMarginBox(b, bs); @@ -7819,7 +8320,10 @@ dojo.declare("dojo.dnd.Mover", null, { if(h && h.onFirstMove){ h.onFirstMove(this, e); } - dojo.disconnect(this.events.pop()); + + // Disconnect onmousemove and ontouchmove events that call this function + dojo.disconnect(this.events.shift()); + dojo.disconnect(this.events.shift()); }, destroy: function(){ // summary: @@ -7886,6 +8390,7 @@ dojo.declare("dojo.dnd.Moveable", null, { this.mover = params.mover ? params.mover : dojo.dnd.Mover; this.events = [ dojo.connect(this.handle, "onmousedown", this, "onMouseDown"), + dojo.connect(this.handle, "ontouchstart", this, "onMouseDown"), // cancel text selection and text dragging dojo.connect(this.handle, "ondragstart", this, "onSelectStart"), dojo.connect(this.handle, "onselectstart", this, "onSelectStart") @@ -7908,17 +8413,20 @@ dojo.declare("dojo.dnd.Moveable", null, { // mouse event processors onMouseDown: function(e){ // summary: - // event processor for onmousedown, creates a Mover for the node + // event processor for onmousedown/ontouchstart, creates a Mover for the node // e: Event - // mouse event + // mouse/touch event if(this.skip && dojo.dnd.isFormElement(e)){ return; } if(this.delay){ this.events.push( dojo.connect(this.handle, "onmousemove", this, "onMouseMove"), - dojo.connect(this.handle, "onmouseup", this, "onMouseUp") + dojo.connect(this.handle, "ontouchmove", this, "onMouseMove"), + dojo.connect(this.handle, "onmouseup", this, "onMouseUp"), + dojo.connect(this.handle, "ontouchend", this, "onMouseUp") ); - this._lastX = e.pageX; - this._lastY = e.pageY; + var pos = e.touches ? e.touches[0] : e; + this._lastX = pos.pageX; + this._lastY = pos.pageY; }else{ this.onDragDetected(e); } @@ -7926,10 +8434,11 @@ dojo.declare("dojo.dnd.Moveable", null, { }, onMouseMove: function(e){ // summary: - // event processor for onmousemove, used only for delayed drags + // event processor for onmousemove/ontouchmove, 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){ + // mouse/touch event + var pos = e.touches ? e.touches[0] : e; + if(Math.abs(pos.pageX - this._lastX) > this.delay || Math.abs(pos.pageY - this._lastY) > this.delay){ this.onMouseUp(e); this.onDragDetected(e); } @@ -7966,8 +8475,8 @@ dojo.declare("dojo.dnd.Moveable", null, { // summary: // called before every move operation dojo.publish("/dnd/move/start", [mover]); - dojo.addClass(dojo.body(), "dojoMove"); - dojo.addClass(this.node, "dojoMoveItem"); + dojo.addClass(dojo.body(), "dojoMove"); + dojo.addClass(this.node, "dojoMoveItem"); }, onMoveStop: function(/* dojo.dnd.Mover */ mover){ // summary: @@ -8059,7 +8568,7 @@ dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, { c.r = c.l + c.w; c.b = c.t + c.h; if(this.within){ - var mb = dojo.marginBox(mover.node); + var mb = dojo._getMarginSize(mover.node); c.r -= mb.w; c.b -= mb.h; } @@ -8069,8 +8578,12 @@ dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, { // called during every move notification; // should actually move the node; can be overwritten. var c = this.constraintBox, s = mover.node.style; - s.left = (leftTop.l < c.l ? c.l : c.r < leftTop.l ? c.r : leftTop.l) + "px"; - s.top = (leftTop.t < c.t ? c.t : c.b < leftTop.t ? c.b : leftTop.t) + "px"; + this.onMoving(mover, leftTop); + 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; + s.left = leftTop.l + "px"; + s.top = leftTop.t + "px"; + this.onMoved(mover, leftTop); } }); @@ -8132,8 +8645,8 @@ dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constraine // an optional object with parameters var area = params && params.area; this.constraints = function(){ - var n = this.node.parentNode, - s = dojo.getComputedStyle(n), + var n = this.node.parentNode, + s = dojo.getComputedStyle(n), mb = dojo._getMarginBox(n, s); if(area == "margin"){ return mb; // Object @@ -8155,100 +8668,6 @@ dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constraine } }); -// 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 - - dojo.deprecated("dojo.dnd.move.constrainedMover, use dojo.dnd.move.constrainedMoveable instead"); - 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); - c.r = c.l + c.w; - c.b = c.t + c.h; - if(within){ - var mb = dojo.marginBox(this.node); - c.r -= mb.w; - c.b -= mb.h; - } - } - }); - 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 - - dojo.deprecated("dojo.dnd.move.boxConstrainedMover, use dojo.dnd.move.boxConstrainedMoveable instead"); - 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 within the rectangle, - // otherwise the constraint is applied to the left-top corner - - dojo.deprecated("dojo.dnd.move.parentConstrainedMover, use dojo.dnd.move.parentConstrainedMoveable instead"); - 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; @@ -8279,7 +8698,7 @@ dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], { dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, { // summary: // A specialized version of Moveable to support an FPS throttling. - // This class puts an upper restriction on FPS, which may reduce + // This class puts an upper restriction on FPS, which may reduce // the CPU load. The additional parameter "timeout" regulates // the delay before actually moving the moveable object. @@ -8338,8 +8757,7 @@ dojo.provide("dijit.form._FormMixin"); -dojo.declare("dijit.form._FormMixin", null, - { +dojo.declare("dijit.form._FormMixin", null, { // summary: // Mixin for containers of form widgets (i.e. widgets that represent a single value // and can be children of a <form> node or dijit.form.Form widget) @@ -8350,10 +8768,10 @@ dojo.declare("dijit.form._FormMixin", null, // form widgets /*===== - // value: Object + // value: Object // Name/value hash for each child widget with a name and value. // Child widgets without names are not part of the hash. - // + // // If there are multiple child widgets w/the same name, value is an array, // unless they are radio buttons in which case value is a scalar (since only // one radio button can be checked at a time). @@ -8364,6 +8782,12 @@ dojo.declare("dijit.form._FormMixin", null, // | { name: "John Smith", interests: ["sports", "movies"] } =====*/ + // state: [readonly] String + // Will be "Error" if one or more of the child widgets has an invalid value, + // "Incomplete" if not all of the required child widgets are filled in. Otherwise, "", + // which indicates that the form is ready to be submitted. + state: "", + // TODO: // * Repeater // * better handling for arrays. Often form elements have names with [] like @@ -8382,11 +8806,11 @@ dojo.declare("dijit.form._FormMixin", null, validate: function(){ // summary: // returns if the form is valid - same as isValid - but - // provides a few additional (ui-specific) features. - // 1 - it will highlight any sub-widgets that are not - // valid - // 2 - it will call focus() on the first invalid - // sub-widget + // provides a few additional (ui-specific) features. + // 1 - it will highlight any sub-widgets that are not + // valid + // 2 - it will call focus() on the first invalid + // sub-widget var didFocus = false; return dojo.every(dojo.map(this.getDescendants(), function(widget){ // Need to set this so that "required" widgets get their @@ -8407,9 +8831,9 @@ dojo.declare("dijit.form._FormMixin", null, dojo.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.", "", "2.0"); return this.set('value', val); }, - _setValueAttr: function(/*object*/obj){ + _setValueAttr: function(/*Object*/ obj){ // summary: - // Fill in form values from according to an Object (in the format returned by attr('value')) + // Fill in form values from according to an Object (in the format returned by get('value')) // generate map from name --> [list of widgets with that name] var map = { }; @@ -8487,7 +8911,7 @@ dojo.declare("dijit.form._FormMixin", null, return; // like "continue" } - // TODO: widget values (just call attr('value', ...) on the widget) + // TODO: widget values (just call set('value', ...) on the widget) // TODO: maybe should call dojo.getNodeProp() instead switch(element.type){ @@ -8519,6 +8943,9 @@ dojo.declare("dijit.form._FormMixin", null, } }); */ + + // Note: no need to call this._set("value", ...) as the child updates will trigger onChange events + // which I am monitoring. }, getValues: function(){ @@ -8527,17 +8954,18 @@ dojo.declare("dijit.form._FormMixin", null, }, _getValueAttr: function(){ // summary: - // Returns Object representing form values. + // Returns Object representing form values. See description of `value` for details. // description: - // Returns name/value hash for each form element. - // If there are multiple elements w/the same name, value is an array, - // unless they are radio buttons in which case value is a scalar since only - // one can be checked at a time. + + // The value is updated into this.value every time a child has an onChange event, + // so in the common case this function could just return this.value. However, + // that wouldn't work when: // - // If the name is a dot separated list (like a.b.c.d), creates a nested structure. - // Only works on widget form elements. - // example: - // | { name: "John Smith", interests: ["sports", "movies"] } + // 1. User presses return key to submit a form. That doesn't fire an onchange event, + // and even if it did it would come too late due to the setTimout(..., 0) in _handleOnChange() + // + // 2. app for some reason calls this.get("value") while the user is typing into a + // form field. Not sure if that case needs to be supported or not. // get widget values var obj = { }; @@ -8545,7 +8973,7 @@ dojo.declare("dijit.form._FormMixin", null, var name = widget.name; if(!name || widget.disabled){ return; } - // Single value widget (checkbox, radio, or plain <input> type widget + // Single value widget (checkbox, radio, or plain <input> type widget) var value = widget.get('value'); // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays @@ -8648,98 +9076,132 @@ dojo.declare("dijit.form._FormMixin", null, return obj; }, - // TODO: ComboBox might need time to process a recently input value. This should be async? isValid: function(){ // summary: - // Returns true if all of the widgets are valid + // Returns true if all of the widgets are valid. + // Deprecated, will be removed in 2.0. Use get("state") instead. - // This also populate this._invalidWidgets[] array with list of invalid widgets... - // TODO: put that into separate function? It's confusing to have that as a side effect - // of a method named isValid(). - - this._invalidWidgets = dojo.filter(this.getDescendants(), function(widget){ - return !widget.disabled && widget.isValid && !widget.isValid(); - }); - return !this._invalidWidgets.length; + return this.state == ""; }, - onValidStateChange: function(isValid){ // summary: // Stub function to connect to if you want to do something // (like disable/enable a submit button) when the valid // state changes on the form as a whole. + // + // Deprecated. Will be removed in 2.0. Use watch("state", ...) instead. }, - _widgetChange: function(widget){ + _getState: function(){ // summary: - // Connected to a widget's onChange function - update our - // valid state, if needed. - var isValid = this._lastValidState; - if(!widget || this._lastValidState === undefined){ - // We have passed a null widget, or we haven't been validated - // yet - let's re-check all our children - // This happens when we connect (or reconnect) our children - isValid = this.isValid(); - if(this._lastValidState === undefined){ - // Set this so that we don't fire an onValidStateChange - // the first time - this._lastValidState = isValid; - } - }else if(widget.isValid){ - this._invalidWidgets = dojo.filter(this._invalidWidgets || [], function(w){ - return (w != widget); - }, this); - if(!widget.isValid() && !widget.get("disabled")){ - this._invalidWidgets.push(widget); - } - isValid = (this._invalidWidgets.length === 0); - } - if(isValid !== this._lastValidState){ - this._lastValidState = isValid; - this.onValidStateChange(isValid); - } + // Compute what this.state should be based on state of children + var states = dojo.map(this._descendants, function(w){ + return w.get("state") || ""; + }); + + return dojo.indexOf(states, "Error") >= 0 ? "Error" : + dojo.indexOf(states, "Incomplete") >= 0 ? "Incomplete" : ""; }, - connectChildren: function(){ + disconnectChildren: function(){ // summary: - // Connects to the onChange function of all children to - // track valid state changes. You can call this function - // directly, ex. in the event that you programmatically - // add a widget to the form *after* the form has been + // Remove connections to monitor changes to children's value, error state, and disabled state, + // in order to update Form.value and Form.state. + dojo.forEach(this._childConnections || [], dojo.hitch(this, "disconnect")); + dojo.forEach(this._childWatches || [], function(w){ w.unwatch(); }); + }, + + connectChildren: function(/*Boolean*/ inStartup){ + // summary: + // Setup connections to monitor changes to children's value, error state, and disabled state, + // in order to update Form.value and Form.state. + // + // You can call this function directly, ex. in the event that you + // programmatically add a widget to the form *after* the form has been // initialized. - dojo.forEach(this._changeConnections, dojo.hitch(this, "disconnect")); + var _this = this; - // we connect to validate - so that it better reflects the states - // of the widgets - also, we only connect if it has a validate - // function (to avoid too many unneeded connections) - var conns = (this._changeConnections = []); - dojo.forEach(dojo.filter(this.getDescendants(), + // Remove old connections, if any + this.disconnectChildren(); + + this._descendants = this.getDescendants(); + + // (Re)set this.value and this.state. Send watch() notifications but not on startup. + var set = inStartup ? function(name, val){ _this[name] = val; } : dojo.hitch(this, "_set"); + set("value", this.get("value")); + set("state", this._getState()); + + // Monitor changes to error state and disabled state in order to update + // Form.state + var conns = (this._childConnections = []), + watches = (this._childWatches = []); + dojo.forEach(dojo.filter(this._descendants, function(item){ return item.validate; } ), function(widget){ - // We are interested in whenever the widget is validated - or - // whenever the disabled attribute on that widget is changed - conns.push(_this.connect(widget, "validate", - dojo.hitch(_this, "_widgetChange", widget))); - conns.push(_this.connect(widget, "_setDisabledAttr", - dojo.hitch(_this, "_widgetChange", widget))); + // We are interested in whenever the widget changes validity state - or + // whenever the disabled attribute on that widget is changed. + dojo.forEach(["state", "disabled"], function(attr){ + watches.push(widget.watch(attr, function(attr, oldVal, newVal){ + _this.set("state", _this._getState()); + })); + }); }); - // Call the widget change function to update the valid state, in - // case something is different now. - this._widgetChange(null); + // And monitor calls to child.onChange so we can update this.value + var onChange = function(){ + // summary: + // Called when child's value or disabled state changes + + // Use setTimeout() to collapse value changes in multiple children into a single + // update to my value. Multiple updates will occur on: + // 1. Form.set() + // 2. Form.reset() + // 3. user selecting a radio button (which will de-select another radio button, + // causing two onChange events) + if(_this._onChangeDelayTimer){ + clearTimeout(_this._onChangeDelayTimer); + } + _this._onChangeDelayTimer = setTimeout(function(){ + delete _this._onChangeDelayTimer; + _this._set("value", _this.get("value")); + }, 10); + }; + dojo.forEach( + dojo.filter(this._descendants, function(item){ return item.onChange; } ), + function(widget){ + // When a child widget's value changes, + // the efficient thing to do is to just update that one attribute in this.value, + // but that gets a little complicated when a checkbox is checked/unchecked + // since this.value["checkboxName"] contains an array of all the checkboxes w/the same name. + // Doing simple thing for now. + conns.push(_this.connect(widget, "onChange", onChange)); + + // Disabling/enabling a child widget should remove it's value from this.value. + // Again, this code could be more efficient, doing simple thing for now. + watches.push(widget.watch("disabled", onChange)); + } + ); }, startup: function(){ this.inherited(arguments); - // Initialize our valid state tracking. Needs to be done in startup - // because it's not guaranteed that our children are initialized - // yet. - this._changeConnections = []; - this.connectChildren(); + + // Initialize value and valid/invalid state tracking. Needs to be done in startup() + // so that children are initialized. + this.connectChildren(true); + + // Make state change call onValidStateChange(), will be removed in 2.0 + this.watch("state", function(attr, oldVal, newVal){ this.onValidStateChange(newVal == ""); }); + }, + + destroy: function(){ + this.disconnectChildren(); + this.inherited(arguments); } + }); } @@ -8802,22 +9264,16 @@ dojo.declare("dijit._DialogMixin", null, this.execute(this.get('value')); }, - _getFocusItems: function(/*Node*/ dialogNode){ + _getFocusItems: function(){ // summary: - // Find focusable Items each time a dialog is opened, - // setting _firstFocusItem and _lastFocusItem + // Finds focusable items in dialog, + // and sets this._firstFocusItem and this._lastFocusItem // tags: // protected - var elems = dijit._getTabNavigable(dojo.byId(dialogNode)); - this._firstFocusItem = elems.lowest || elems.first || dialogNode; + var elems = dijit._getTabNavigable(this.containerNode); + this._firstFocusItem = elems.lowest || elems.first || this.closeButtonNode || this.domNode; this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem; - if(dojo.isMoz && this._firstFocusItem.tagName.toLowerCase() == "input" && - dojo.getNodeProp(this._firstFocusItem, "type").toLowerCase() == "file"){ - // FF doesn't behave well when first element is input type=file, set first focusable to dialog container - dojo.attr(dialogNode, "tabIndex", "0"); - this._firstFocusItem = dialogNode; - } } } ); @@ -8832,7 +9288,6 @@ dojo.provide("dijit.DialogUnderlay"); - dojo.declare( "dijit.DialogUnderlay", [dijit._Widget, dijit._Templated], @@ -8851,87 +9306,337 @@ dojo.declare( // In the case of `dijit.Dialog`, this id is based on the id of the Dialog, // suffixed with _underlay. - // 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'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>", + // 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'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>", + + // Parameters on creation or updatable later + + // dialogId: String + // Id of the dialog.... DialogUnderlay's id is based on this id + dialogId: "", + + // class: String + // This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay + "class": "", + + attributeMap: { id: "domNode" }, + + _setDialogIdAttr: function(id){ + dojo.attr(this.node, "id", id + "_underlay"); + this._set("dialogId", id); + }, + + _setClassAttr: function(clazz){ + this.node.className = "dijitDialogUnderlay " + clazz; + this._set("class", clazz); + }, + + postCreate: function(){ + // summary: + // Append the underlay to the body + dojo.body().appendChild(this.domNode); + }, + + layout: function(){ + // summary: + // Sets the background to the size of the viewport + // + // description: + // 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. + // tags: + // private + + var is = this.node.style, + os = this.domNode.style; + + // hide the background temporarily, so that the background itself isn't + // causing scrollbars to appear (might happen when user shrinks browser + // window and then we are called to resize) + os.display = "none"; + + // then resize and show + var viewport = dojo.window.getBox(); + os.top = viewport.t + "px"; + os.left = viewport.l + "px"; + is.width = viewport.w + "px"; + is.height = viewport.h + "px"; + os.display = "block"; + }, + + show: function(){ + // summary: + // Show the dialog underlay + this.domNode.style.display = "block"; + this.layout(); + this.bgIframe = new dijit.BackgroundIframe(this.domNode); + }, + + hide: function(){ + // summary: + // Hides the dialog underlay + this.bgIframe.destroy(); + delete this.bgIframe; + this.domNode.style.display = "none"; + } + } +); + +} + +if(!dojo._hasResource["dijit.layout._ContentPaneResizeMixin"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout._ContentPaneResizeMixin"] = true; +dojo.provide("dijit.layout._ContentPaneResizeMixin"); + + + + +dojo.declare("dijit.layout._ContentPaneResizeMixin", null, { + // summary: + // Resize() functionality of ContentPane. If there's a single layout widget + // child then it will call resize() with the same dimensions as the ContentPane. + // Otherwise just calls resize on each child. + // + // Also implements basic startup() functionality, where starting the parent + // will start the children + + // doLayout: Boolean + // - false - don't adjust size of children + // - true - if there is a single visible child widget, set it's size to + // however big the ContentPane is + doLayout: true, + + // isContainer: [protected] Boolean + // Indicates that this widget acts as a "parent" to the descendant widgets. + // When the parent is started it will call startup() on the child widgets. + // See also `isLayoutContainer`. + isContainer: true, + + // isLayoutContainer: [protected] Boolean + // Indicates that this widget will call resize() on it's child widgets + // when they become visible. + isLayoutContainer: true, + + _startChildren: function(){ + // summary: + // Call startup() on all children including non _Widget ones like dojo.dnd.Source objects + + // This starts all the widgets + dojo.forEach(this.getChildren(), function(child){ + child.startup(); + child._started = true; + }); + }, + + startup: function(){ + // summary: + // See `dijit.layout._LayoutWidget.startup` for description. + // Although ContentPane doesn't extend _LayoutWidget, it does implement + // the same API. + + if(this._started){ return; } + + var parent = dijit._Contained.prototype.getParent.call(this); + this._childOfLayoutWidget = parent && parent.isLayoutContainer; + + // I need to call resize() on my child/children (when I become visible), unless + // I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then. + this._needLayout = !this._childOfLayoutWidget; + + this.inherited(arguments); + + this._startChildren(); + + if(this._isShown()){ + this._onShow(); + } + + if(!this._childOfLayoutWidget){ + // If my parent isn't a layout container, since my style *may be* width=height=100% + // or something similar (either set directly or via a CSS class), + // monitor when my size changes so that I can re-layout. + // For browsers where I can't directly monitor when my size changes, + // monitor when the viewport changes size, which *may* indicate a size change for me. + this.connect(dojo.isIE ? this.domNode : dojo.global, 'onresize', function(){ + // Using function(){} closure to ensure no arguments to resize. + this._needLayout = !this._childOfLayoutWidget; + this.resize(); + }); + } + }, + + _checkIfSingleChild: function(){ + // summary: + // Test if we have exactly one visible widget as a child, + // and if so assume that we are a container for that widget, + // and should propagate startup() and resize() calls to it. + // Skips over things like data stores since they aren't visible. + + var childNodes = dojo.query("> *", this.containerNode).filter(function(node){ + return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc.. + }), + childWidgetNodes = childNodes.filter(function(node){ + return dojo.hasAttr(node, "data-dojo-type") || dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId"); + }), + candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){ + return widget && widget.domNode && widget.resize; + }); + + if( + // all child nodes are widgets + childNodes.length == childWidgetNodes.length && + + // all but one are invisible (like dojo.data) + candidateWidgets.length == 1 + ){ + this._singleChild = candidateWidgets[0]; + }else{ + delete this._singleChild; + } + + // So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449) + dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild); + }, + + resize: function(changeSize, resultSize){ + // summary: + // See `dijit.layout._LayoutWidget.resize` for description. + // Although ContentPane doesn't extend _LayoutWidget, it does implement + // the same API. + + // For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is + // never called, so resize() is our trigger to do the initial href download (see [20099]). + // However, don't load href for closed TitlePanes. + if(!this._wasShown && this.open !== false){ + this._onShow(); + } - // Parameters on creation or updatable later + this._resizeCalled = true; - // dialogId: String - // Id of the dialog.... DialogUnderlay's id is based on this id - dialogId: "", + this._scheduleLayout(changeSize, resultSize); + }, - // class: String - // This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay - "class": "", + _scheduleLayout: function(changeSize, resultSize){ + // summary: + // Resize myself, and call resize() on each of my child layout widgets, either now + // (if I'm currently visible) or when I become visible + if(this._isShown()){ + this._layout(changeSize, resultSize); + }else{ + this._needLayout = true; + this._changeSize = changeSize; + this._resultSize = resultSize; + } + }, - attributeMap: { id: "domNode" }, + _layout: function(changeSize, resultSize){ + // summary: + // Resize myself according to optional changeSize/resultSize parameters, like a layout widget. + // Also, since I am a Container widget, each of my children expects me to + // call resize() or layout() on them. + // + // Should be called on initialization and also whenever we get new content + // (from an href, or from set('content', ...))... but deferred until + // the ContentPane is visible - _setDialogIdAttr: function(id){ - dojo.attr(this.node, "id", id + "_underlay"); - }, + // Set margin box size, unless it wasn't specified, in which case use current size. + if(changeSize){ + dojo.marginBox(this.domNode, changeSize); + } - _setClassAttr: function(clazz){ - this.node.className = "dijitDialogUnderlay " + clazz; - }, + // Compute content box size of containerNode in case we [later] need to size our single child. + var cn = this.containerNode; + if(cn === this.domNode){ + // If changeSize or resultSize was passed to this method and this.containerNode == + // this.domNode then we can compute the content-box size without querying the node, + // which is more reliable (similar to LayoutWidget.resize) (see for example #9449). + var mb = resultSize || {}; + dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize + if(!("h" in mb) || !("w" in mb)){ + mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values + } + this._contentBox = dijit.layout.marginBox2contentBox(cn, mb); + }else{ + this._contentBox = dojo.contentBox(cn); + } - postCreate: function(){ - // summary: - // Append the underlay to the body - dojo.body().appendChild(this.domNode); - }, + this._layoutChildren(); - layout: function(){ - // summary: - // Sets the background to the size of the viewport - // - // description: - // 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. - // tags: - // private + delete this._needLayout; + }, + + _layoutChildren: function(){ + // Call _checkIfSingleChild() again in case app has manually mucked w/the content + // of the ContentPane (rather than changing it through the set("content", ...) API. + if(this.doLayout){ + this._checkIfSingleChild(); + } - var is = this.node.style, - os = this.domNode.style; + if(this._singleChild && this._singleChild.resize){ + var cb = this._contentBox || dojo.contentBox(this.containerNode); - // hide the background temporarily, so that the background itself isn't - // causing scrollbars to appear (might happen when user shrinks browser - // window and then we are called to resize) - os.display = "none"; + // note: if widget has padding this._contentBox will have l and t set, + // but don't pass them to resize() or it will doubly-offset the child + this._singleChild.resize({w: cb.w, h: cb.h}); + }else{ + // All my child widgets are independently sized (rather than matching my size), + // but I still need to call resize() on each child to make it layout. + dojo.forEach(this.getChildren(), function(widget){ + if(widget.resize){ + widget.resize(); + } + }); + } + }, - // then resize and show - var viewport = dojo.window.getBox(); - os.top = viewport.t + "px"; - os.left = viewport.l + "px"; - is.width = viewport.w + "px"; - is.height = viewport.h + "px"; - os.display = "block"; - }, + _isShown: function(){ + // summary: + // Returns true if the content is currently shown. + // description: + // If I am a child of a layout widget then it actually returns true if I've ever been visible, + // not whether I'm currently visible, since that's much faster than tracing up the DOM/widget + // tree every call, and at least solves the performance problem on page load by deferring loading + // hidden ContentPanes until they are first shown - show: function(){ - // summary: - // Show the dialog underlay - this.domNode.style.display = "block"; - this.layout(); - this.bgIframe = new dijit.BackgroundIframe(this.domNode); - }, + if(this._childOfLayoutWidget){ + // If we are TitlePane, etc - we return that only *IF* we've been resized + if(this._resizeCalled && "open" in this){ + return this.open; + } + return this._resizeCalled; + }else if("open" in this){ + return this.open; // for TitlePane, etc. + }else{ + var node = this.domNode, parent = this.domNode.parentNode; + return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden") && + parent && parent.style && (parent.style.display != 'none'); + } + }, - hide: function(){ - // summary: - // Hides the dialog underlay - this.bgIframe.destroy(); - this.domNode.style.display = "none"; - }, + _onShow: function(){ + // summary: + // Called when the ContentPane is made visible + // description: + // For a plain ContentPane, this is called on initialization, from startup(). + // If the ContentPane is a hidden pane of a TabContainer etc., then it's + // called whenever the pane is made visible. + // + // Does layout/resize of child widget(s) - uninitialize: function(){ - if(this.bgIframe){ - this.bgIframe.destroy(); - } - this.inherited(arguments); + if(this._needLayout){ + // If a layout has been scheduled for when we become visible, do it now + this._layout(this._changeSize, this._resultSize); } + + this.inherited(arguments); + + // Need to keep track of whether ContentPane has been shown (which is different than + // whether or not it's currently visible). + this._wasShown = true; } -); +}); } @@ -8939,24 +9644,25 @@ if(!dojo._hasResource["dojo.html"]){ //_hasResource checks added by build. Do no dojo._hasResource["dojo.html"] = true; dojo.provide("dojo.html"); -// the parser might be needed.. - +dojo.getObject("html", true, dojo); + +// the parser might be needed.. (function(){ // private scope, sort of a namespace // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes - var idCounter = 0, + var idCounter = 0, d = dojo; dojo.html._secureForInnerHtml = function(/*String*/ cont){ // summary: // removes !DOCTYPE and title elements from the html string. - // + // // khtml is picky about dom faults, you can't attach a style or <title> node as child of body // must go into head, so we need to cut out those tags // cont: // An html string for insertion into the dom - // + // return cont.replace(/(?:\s*<!DOCTYPE\s[^>]+>|<title[^>]*>[\s\S]*?<\/title>)/ig, ""); // String }; @@ -8976,7 +9682,7 @@ dojo.provide("dojo.html"); // node: // the parent element // content: - // the content to be set on the parent element. + // the content to be set on the parent element. // This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes // always empty @@ -9002,7 +9708,7 @@ dojo.provide("dojo.html"); }; // we wrap up the content-setting operation in a object - dojo.declare("dojo.html._ContentSetter", null, + dojo.declare("dojo.html._ContentSetter", null, { // node: DomNode|String // An node which will be the parent element that we set content into @@ -9013,11 +9719,11 @@ dojo.provide("dojo.html"); content: "", // id: String? - // Usually only used internally, and auto-generated with each instance + // Usually only used internally, and auto-generated with each instance id: "", // cleanContent: Boolean - // Should the content be treated as a full html document, + // Should the content be treated as a full html document, // and the real content stripped of <html>, <body> wrapper before injection cleanContent: false, @@ -9028,6 +9734,17 @@ dojo.provide("dojo.html"); // parseContent: Boolean // Should the node by passed to the parser after the new content is set parseContent: false, + + // parserScope: String + // Flag passed to parser. Root for attribute names to search for. If scopeName is dojo, + // will search for data-dojo-type (or dojoType). For backwards compatibility + // reasons defaults to dojo._scopeName (which is "dojo" except when + // multi-version support is used, when it will be something like dojo16, dojo20, etc.) + parserScope: dojo._scopeName, + + // startup: Boolean + // Start the child widgets after parsing them. Only obeyed if parseContent is true. + startup: true, // lifecyle methods constructor: function(/* Object */params, /* String|DomNode */node){ @@ -9045,14 +9762,14 @@ dojo.provide("dojo.html"); if(!this.id){ this.id = [ "Setter", - (node) ? node.id || node.tagName : "", + (node) ? node.id || node.tagName : "", idCounter++ ].join("_"); } }, set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){ // summary: - // front-end to the set-content sequence + // front-end to the set-content sequence // cont: // An html string, node or enumerable list of nodes for insertion into the dom // If not provided, the object's content property will be used @@ -9072,9 +9789,9 @@ dojo.provide("dojo.html"); }, setContent: function(){ // summary: - // sets the content on the node + // sets the content on the node - var node = this.node; + var node = this.node; if(!node) { // can't proceed throw new Error(this.declaredClass + ": setContent given no node"); @@ -9086,7 +9803,7 @@ dojo.provide("dojo.html"); // like for instance if domNode is a UL and we try append a DIV // FIXME: need to allow the user to provide a content error message string - var errMess = this.onContentError(e); + var errMess = this.onContentError(e); try{ node.innerHTML = errMess; }catch(e){ @@ -9102,7 +9819,7 @@ dojo.provide("dojo.html"); // cleanly empty out existing content // destroy any widgets from a previous run - // NOTE: if you dont want this you'll need to empty + // NOTE: if you dont want this you'll need to empty // the parseResults array property yourself to avoid bad things happenning if(this.parseResults && this.parseResults.length) { dojo.forEach(this.parseResults, function(w) { @@ -9112,17 +9829,17 @@ dojo.provide("dojo.html"); }); delete this.parseResults; } - // this is fast, but if you know its already empty or safe, you could + // this is fast, but if you know its already empty or safe, you could // override empty to skip this step dojo.html._emptyNode(this.node); }, onBegin: function(){ // summary - // Called after instantiation, but before set(); - // It allows modification of any of the object properties + // Called after instantiation, but before set(); + // It allows modification of any of the object properties // - including the node and content provided - before the set operation actually takes place - // This default implementation checks for cleanContent and extractContent flags to + // This default implementation checks for cleanContent and extractContent flags to // optionally pre-process html string content var cont = this.content; @@ -9160,21 +9877,21 @@ dojo.provide("dojo.html"); // summary // manually reset the Setter instance if its being re-used for example for another set() // description - // tearDown() is not called automatically. + // tearDown() is not called automatically. // In normal use, the Setter instance properties are simply allowed to fall out of scope // but the tearDown method can be called to explicitly reset this instance. - delete this.parseResults; - delete this.node; - delete this.content; + delete this.parseResults; + delete this.node; + delete this.content; }, onContentError: function(err){ - return "Error occured setting content: " + err; + return "Error occured setting content: " + err; }, _mixin: function(params){ // mix properties/methods into the instance - // TODO: the intention with tearDown is to put the Setter's state + // TODO: the intention with tearDown is to put the Setter's state // back to that of the original constructor (vs. deleting/resetting everything regardless of ctor params) // so we could do something here to move the original properties aside for later restoration var empty = {}, key; @@ -9182,21 +9899,28 @@ dojo.provide("dojo.html"); if(key in empty){ continue; } // TODO: here's our opportunity to mask the properties we dont consider configurable/overridable // .. but history shows we'll almost always guess wrong - this[key] = params[key]; + this[key] = params[key]; } }, _parse: function(){ - // summary: + // summary: // runs the dojo parser over the node contents, storing any results in this.parseResults // Any errors resulting from parsing are passed to _onError for handling var rootNode = this.node; try{ // store the results (widgets, whatever) for potential retrieval + var inherited = {}; + dojo.forEach(["dir", "lang", "textDir"], function(name){ + if(this[name]){ + inherited[name] = this[name]; + } + }, this); this.parseResults = dojo.parser.parse({ rootNode: rootNode, - dir: this.dir, - lang: this.lang + noStart: !this.startup, + inherited: inherited, + scope: this.parserScope }); }catch(e){ this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id); @@ -9229,29 +9953,29 @@ dojo.provide("dojo.html"); // node: // the parent element that will receive the content // cont: - // the content to be set on the parent element. + // the content to be set on the parent element. // This can be an html string, a node reference or a NodeList, dojo.NodeList, Array or other enumerable list of nodes - // params: + // params: // Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter // example: // A safe string/node/nodelist content replacement/injection with hooks for extension - // Example Usage: - // dojo.html.set(node, "some string"); - // dojo.html.set(node, contentNode, {options}); - // dojo.html.set(node, myNode.childNodes, {options}); + // Example Usage: + // dojo.html.set(node, "some string"); + // dojo.html.set(node, contentNode, {options}); + // dojo.html.set(node, myNode.childNodes, {options}); if(undefined == cont){ console.warn("dojo.html.set: no cont argument provided, using empty string"); cont = ""; - } + } if(!params){ // simple and fast return dojo.html._setNodeContent(node, cont, true); - }else{ + }else{ // more options but slower // note the arguments are reversed in order, to match the convention for instantiation via the parser - var op = new dojo.html._ContentSetter(dojo.mixin( - params, - { content: cont, node: node } + var op = new dojo.html._ContentSetter(dojo.mixin( + params, + { content: cont, node: node } )); return op.set(); } @@ -9266,35 +9990,39 @@ dojo.provide("dijit.layout.ContentPane"); - // for dijit.layout.marginBox2contentBox() - - dojo.declare( - "dijit.layout.ContentPane", dijit._Widget, + "dijit.layout.ContentPane", [dijit._Widget, dijit.layout._ContentPaneResizeMixin], { // summary: - // A widget that acts as a container for mixed HTML and widgets, and includes an Ajax interface + // A widget containing an HTML fragment, specified inline + // or by uri. Fragment may include widgets. + // // description: - // A widget that can be used as a stand alone widget - // or as a base class for other widgets. + // This widget embeds a document fragment in the page, specified + // either by uri, javascript generated markup or DOM reference. + // Any widgets within this content are instantiated and managed, + // but laid out according to the HTML structure. Unlike IFRAME, + // ContentPane embeds a document fragment as would be found + // inside the BODY tag of a full HTML document. It should not + // contain the HTML, HEAD, or BODY tags. + // For more advanced functionality with scripts and + // stylesheets, see dojox.layout.ContentPane. This widget may be + // used stand alone or as a base class for other widgets. + // ContentPane is useful as a child of other layout containers + // such as BorderContainer or TabContainer, but note that those + // widgets can contain any widget as a child. // - // 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 .set('content', '<b>new content</b>') + // To change the innerHTML: cp.set('content', '<b>new content</b>') // - // Or you can send it a NodeList, .set('content', dojo.query('div [class=selected]', userSelection)) - // please note that the nodes in NodeList will copied, not moved + // Or you can send it a NodeList: cp.set('content', dojo.query('div [class=selected]', userSelection)) // - // To do a ajax update use .set('href', url) + // To do an ajax update: cp.set('href', url) // href: String // The href of the content that displays now. @@ -9306,7 +10034,7 @@ dojo.declare( /*===== // content: String || DomNode || NodeList || dijit._Widget // The innerHTML of the ContentPane. - // Note that the initialization parameter / argument to attr("content", ...) + // Note that the initialization parameter / argument to set("content", ...) // can be a String, DomNode, Nodelist, or _Widget. content: "", =====*/ @@ -9320,6 +10048,13 @@ dojo.declare( // Parse content and create the widgets, if any. parseOnLoad: true, + // parserScope: String + // Flag passed to parser. Root for attribute names to search for. If scopeName is dojo, + // will search for data-dojo-type (or dojoType). For backwards compatibility + // reasons defaults to dojo._scopeName (which is "dojo" except when + // multi-version support is used, when it will be something like dojo16, dojo20, etc.) + parserScope: dojo._scopeName, + // preventCache: Boolean // Prevent caching of data from href's by appending a timestamp to the href. preventCache: false, @@ -9343,7 +10078,7 @@ dojo.declare( // isLoaded: [readonly] Boolean // True if the ContentPane has data in it, either specified // during initialization (via href or inline content), or set - // via attr('content', ...) / attr('href', ...) + // via set('content', ...) / set('href', ...) // // False if it doesn't have any content, or if ContentPane is // still in the process of downloading href. @@ -9351,35 +10086,19 @@ dojo.declare( baseClass: "dijitContentPane", - // doLayout: Boolean - // - false - don't adjust size of children - // - true - if there is a single visible child widget, set it's size to - // however big the ContentPane is - doLayout: true, - // ioArgs: Object // Parameters to pass to xhrGet() request, for example: // | <div dojoType="dijit.layout.ContentPane" href="./bar" ioArgs="{timeout: 500}"> ioArgs: {}, - // isContainer: [protected] Boolean - // Indicates that this widget acts as a "parent" to the descendant widgets. - // When the parent is started it will call startup() on the child widgets. - // See also `isLayoutContainer`. - isContainer: true, - - // isLayoutContainer: [protected] Boolean - // Indicates that this widget will call resize() on it's child widgets - // when they become visible. - isLayoutContainer: true, - // onLoadDeferred: [readonly] dojo.Deferred - // This is the `dojo.Deferred` returned by attr('href', ...) and refresh(). + // This is the `dojo.Deferred` returned by set('href', ...) and refresh(). // Calling onLoadDeferred.addCallback() or addErrback() registers your - // callback to be called only once, when the prior attr('href', ...) call or + // callback to be called only once, when the prior set('href', ...) call or // the initial href parameter to the constructor finishes loading. // - // This is different than an onLoad() handler which gets called any time any href is loaded. + // This is different than an onLoad() handler which gets called any time any href + // or content is loaded. onLoadDeferred: null, // Override _Widget's attributeMap because we don't want the title attribute (used to specify @@ -9389,99 +10108,71 @@ dojo.declare( title: [] }), + // Flag to parser that I'll parse my contents, so it shouldn't. + stopParser: true, + + // template: [private] Boolean + // Flag from the parser that this ContentPane is inside a template + // so the contents are pre-parsed. + // (TODO: this declaration can be commented out in 2.0) + template: false, + + create: function(params, srcNodeRef){ + // Convert a srcNodeRef argument into a content parameter, so that the original contents are + // processed in the same way as contents set via set("content", ...), calling the parser etc. + // Avoid modifying original params object since that breaks NodeList instantiation, see #11906. + if((!params || !params.template) && srcNodeRef && !("href" in params) && !("content" in params)){ + var df = dojo.doc.createDocumentFragment(); + srcNodeRef = dojo.byId(srcNodeRef) + while(srcNodeRef.firstChild){ + df.appendChild(srcNodeRef.firstChild); + } + params = dojo.delegate(params, {content: df}); + } + this.inherited(arguments, [params, srcNodeRef]); + }, + postMixInProperties: function(){ this.inherited(arguments); 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); - - // Detect if we were initialized with data - if(!this.href && this.srcNodeRef && this.srcNodeRef.innerHTML){ - this.isLoaded = true; - } }, buildRendering: function(){ - // Overrides Widget.buildRendering(). - // Since we have no template we need to set this.containerNode ourselves. - // For subclasses of ContentPane do have a template, does nothing. this.inherited(arguments); + + // Since we have no template we need to set this.containerNode ourselves, to make getChildren() work. + // For subclasses of ContentPane that do have a template, does nothing. if(!this.containerNode){ - // make getDescendants() work this.containerNode = this.domNode; } - }, - postCreate: function(){ // remove the title attribute so it doesn't show up when hovering - // over a node + // over a node (TODO: remove in 2.0, no longer needed after #11490) this.domNode.title = ""; if(!dojo.attr(this.domNode,"role")){ dijit.setWaiRole(this.domNode, "group"); } - - dojo.addClass(this.domNode, this.baseClass); }, - startup: function(){ + _startChildren: function(){ // summary: - // See `dijit.layout._LayoutWidget.startup` for description. - // Although ContentPane doesn't extend _LayoutWidget, it does implement - // the same API. - if(this._started){ return; } - - var parent = dijit._Contained.prototype.getParent.call(this); - this._childOfLayoutWidget = parent && parent.isLayoutContainer; - - // I need to call resize() on my child/children (when I become visible), unless - // I'm the child of a layout widget in which case my parent will call resize() on me and I'll do it then. - this._needLayout = !this._childOfLayoutWidget; - - if(this.isLoaded){ - dojo.forEach(this.getChildren(), function(child){ - child.startup(); - }); - } - - if(this._isShown() || this.preload){ - this._onShow(); - } + // Call startup() on all children including non _Widget ones like dojo.dnd.Source objects + // This starts all the widgets this.inherited(arguments); - }, - - _checkIfSingleChild: function(){ - // summary: - // Test if we have exactly one visible 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. - // Skips over things like data stores since they aren't visible. - - var childNodes = dojo.query("> *", this.containerNode).filter(function(node){ - return node.tagName !== "SCRIPT"; // or a regexp for hidden elements like script|area|map|etc.. - }), - childWidgetNodes = childNodes.filter(function(node){ - return dojo.hasAttr(node, "dojoType") || dojo.hasAttr(node, "widgetId"); - }), - candidateWidgets = dojo.filter(childWidgetNodes.map(dijit.byNode), function(widget){ - return widget && widget.domNode && widget.resize; - }); - - if( - // all child nodes are widgets - childNodes.length == childWidgetNodes.length && - - // all but one are invisible (like dojo.data) - candidateWidgets.length == 1 - ){ - this._singleChild = candidateWidgets[0]; - }else{ - delete this._singleChild; - } - // So we can set overflow: hidden to avoid a safari bug w/scrollbars showing up (#9449) - dojo.toggleClass(this.containerNode, this.baseClass + "SingleChild", !!this._singleChild); + // And this catches stuff like dojo.dnd.Source + if(this._contentSetter){ + dojo.forEach(this._contentSetter.parseResults, function(obj){ + if(!obj._started && !obj._destroyed && dojo.isFunction(obj.startup)){ + obj.startup(); + obj._started = true; + } + }, this); + } }, setHref: function(/*String|Uri*/ href){ @@ -9492,23 +10183,25 @@ dojo.declare( }, _setHrefAttr: function(/*String|Uri*/ href){ // summary: - // Hook so attr("href", ...) works. + // Hook so set("href", ...) works. // description: // 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 - // Cancel any in-flight requests (an attr('href') will cancel any in-flight attr('href', ...)) + // Cancel any in-flight requests (a set('href', ...) will cancel any in-flight set('href', ...)) this.cancel(); this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel")); + this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad")); - this.href = href; + this._set("href", href); // _setHrefAttr() is called during creation and by the user, after creation. - // only in the second case do we actually load the URL; otherwise it's done in startup() - if(this._created && (this.preload || this._isShown())){ + // Assuming preload == false, only in the second case do we actually load the URL; + // otherwise it's done in startup(), and only if this widget is shown. + if(this.preload || (this._created && this._isShown())){ this._load(); }else{ // Set flag to indicate that href needs to be loaded the next time the @@ -9527,7 +10220,7 @@ dojo.declare( }, _setContentAttr: function(/*String|DomNode|Nodelist*/data){ // summary: - // Hook to make attr("content", ...) work. + // Hook to make set("content", ...) work. // Replaces old content with data content, include style classes from old content // data: // the new Content may be String, DomNode or NodeList @@ -9537,24 +10230,30 @@ dojo.declare( // clear href so we can't run refresh and clear content // refresh should only work if we downloaded the content - this.href = ""; + this._set("href", ""); - // Cancel any in-flight requests (an attr('content') will cancel any in-flight attr('href', ...)) + // Cancel any in-flight requests (a set('content', ...) will cancel any in-flight set('href', ...)) this.cancel(); // Even though user is just setting content directly, still need to define an onLoadDeferred // because the _onLoadHandler() handler is still getting called from setContent() this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel")); + if(this._created){ + // For back-compat reasons, call onLoad() for set('content', ...) + // calls but not for content specified in srcNodeRef (ie: <div dojoType=ContentPane>...</div>) + // or as initialization parameter (ie: new ContentPane({content: ...}) + this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad")); + } this._setContent(data || ""); - this._isDownloaded = false; // mark that content is from a attr('content') not an attr('href') + this._isDownloaded = false; // mark that content is from a set('content') not a set('href') return this.onLoadDeferred; // dojo.Deferred }, _getContentAttr: function(){ // summary: - // Hook to make attr("content") work + // Hook to make get("content") work return this.containerNode.innerHTML; }, @@ -9587,69 +10286,6 @@ dojo.declare( this.inherited(arguments); }, - resize: function(changeSize, resultSize){ - // summary: - // See `dijit.layout._LayoutWidget.resize` for description. - // Although ContentPane doesn't extend _LayoutWidget, it does implement - // the same API. - - // For the TabContainer --> BorderContainer --> ContentPane case, _onShow() is - // never called, so resize() is our trigger to do the initial href download. - if(!this._wasShown){ - this._onShow(); - } - - this._resizeCalled = true; - - // Set margin box size, unless it wasn't specified, in which case use current size. - if(changeSize){ - dojo.marginBox(this.domNode, changeSize); - } - - // Compute content box size of containerNode in case we [later] need to size our single child. - var cn = this.containerNode; - if(cn === this.domNode){ - // If changeSize or resultSize was passed to this method and this.containerNode == - // this.domNode then we can compute the content-box size without querying the node, - // which is more reliable (similar to LayoutWidget.resize) (see for example #9449). - var mb = resultSize || {}; - dojo.mixin(mb, changeSize || {}); // changeSize overrides resultSize - if(!("h" in mb) || !("w" in mb)){ - mb = dojo.mixin(dojo.marginBox(cn), mb); // just use dojo.marginBox() to fill in missing values - } - this._contentBox = dijit.layout.marginBox2contentBox(cn, mb); - }else{ - this._contentBox = dojo.contentBox(cn); - } - - // Make my children layout, or size my single child widget - this._layoutChildren(); - }, - - _isShown: function(){ - // summary: - // Returns true if the content is currently shown. - // description: - // If I am a child of a layout widget then it actually returns true if I've ever been visible, - // not whether I'm currently visible, since that's much faster than tracing up the DOM/widget - // tree every call, and at least solves the performance problem on page load by deferring loading - // hidden ContentPanes until they are first shown - - if(this._childOfLayoutWidget){ - // If we are TitlePane, etc - we return that only *IF* we've been resized - if(this._resizeCalled && "open" in this){ - return this.open; - } - return this._resizeCalled; - }else if("open" in this){ - return this.open; // for TitlePane, etc. - }else{ - // TODO: with _childOfLayoutWidget check maybe this branch no longer necessary? - var node = this.domNode; - return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !dojo.hasClass(node, "dijitHidden"); - } - }, - _onShow: function(){ // summary: // Called when the ContentPane is made visible @@ -9661,26 +10297,15 @@ dojo.declare( // Does necessary processing, including href download and layout/resize of // child widget(s) + this.inherited(arguments); + if(this.href){ if(!this._xhrDfd && // if there's an href that isn't already being loaded (!this.isLoaded || this._hrefChanged || this.refreshOnShow) ){ - this.refresh(); - } - }else{ - // If we are the child of a layout widget then the layout widget will call resize() on - // us, and then we will size our child/children. Otherwise, we need to do it now. - if(!this._childOfLayoutWidget && this._needLayout){ - // If a layout has been scheduled for when we become visible, do it now - this._layoutChildren(); + return this.refresh(); // If child has an href, promise that fires when the load is complete } } - - this.inherited(arguments); - - // Need to keep track of whether ContentPane has been shown (which is different than - // whether or not it's currently visible). - this._wasShown = true; }, refresh: function(){ @@ -9695,8 +10320,9 @@ dojo.declare( this.cancel(); this.onLoadDeferred = new dojo.Deferred(dojo.hitch(this, "cancel")); + this.onLoadDeferred.addCallback(dojo.hitch(this, "onLoad")); this._load(); - return this.onLoadDeferred; + return this.onLoadDeferred; // If child has an href, promise that fires when refresh is complete }, _load: function(){ @@ -9746,10 +10372,9 @@ dojo.declare( _onLoadHandler: function(data){ // summary: // This is called whenever new content is being loaded - this.isLoaded = true; + this._set("isLoaded", true); try{ this.onLoadDeferred.callback(data); - this.onLoad(data); }catch(e){ console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message); } @@ -9758,7 +10383,7 @@ dojo.declare( _onUnloadHandler: function(){ // summary: // This is called whenever the content is being unloaded - this.isLoaded = false; + this._set("isLoaded", false); try{ this.onUnload(); }catch(e){ @@ -9804,7 +10429,7 @@ dojo.declare( delete this._singleChild; }, - _setContent: function(cont, isFakeContent){ + _setContent: function(/*String|DocumentFragment*/ cont, /*Boolean*/ isFakeContent){ // summary: // Insert the content into the container node @@ -9839,31 +10464,31 @@ dojo.declare( cleanContent: this.cleanContent, extractContent: this.extractContent, parseContent: this.parseOnLoad, + parserScope: this.parserScope, + startup: false, dir: this.dir, lang: this.lang }, this._contentSetterParams || {}); - dojo.mixin(setter, setterParams); - - setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont ); + setter.set( (dojo.isObject(cont) && cont.domNode) ? cont.domNode : cont, setterParams ); // setter params must be pulled afresh from the ContentPane each time delete this._contentSetterParams; - if(!isFakeContent){ - // Startup each top level child widget (and they will start their children, recursively) - dojo.forEach(this.getChildren(), function(child){ - // The parser has already called startup on all widgets *without* a getParent() method - if(!this.parseOnLoad || child.getParent){ - child.startup(); - } - }, this); + if(this.doLayout){ + this._checkIfSingleChild(); + } - // Call resize() on each of my child layout widgets, - // or resize() on my single child layout widget... - // either now (if I'm currently visible) - // or when I become visible - this._scheduleLayout(); + if(!isFakeContent){ + if(this._started){ + // Startup each top level child widget (and they will start their children, recursively) + this._startChildren(); + + // Call resize() on each of my child layout widgets, + // or resize() on my single child layout widget... + // either now (if I'm currently visible) or when I become visible + this._scheduleLayout(); + } this._onLoadHandler(cont); } @@ -9873,7 +10498,7 @@ dojo.declare( this.onLoadDeferred.errback(err); // shows user the string that is returned by on[type]Error - // overide on[type]Error and return your own string to customize + // override 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); @@ -9882,48 +10507,6 @@ dojo.declare( } }, - _scheduleLayout: function(){ - // summary: - // Call resize() on each of my child layout widgets, either now - // (if I'm currently visible) or when I become visible - if(this._isShown()){ - this._layoutChildren(); - }else{ - this._needLayout = true; - } - }, - - _layoutChildren: function(){ - // summary: - // Since I am a Container widget, each of my children expects me to - // call resize() or layout() on them. - // description: - // Should be called on initialization and also whenever we get new content - // (from an href, or from attr('content', ...))... but deferred until - // the ContentPane is visible - - if(this.doLayout){ - this._checkIfSingleChild(); - } - - if(this._singleChild && this._singleChild.resize){ - var cb = this._contentBox || dojo.contentBox(this.containerNode); - - // note: if widget has padding this._contentBox will have l and t set, - // but don't pass them to resize() or it will doubly-offset the child - this._singleChild.resize({w: cb.w, h: cb.h}); - }else{ - // All my child widgets are independently sized (rather than matching my size), - // but I still need to call resize() on each child to make it layout. - dojo.forEach(this.getChildren(), function(widget){ - if(widget.resize){ - widget.resize(); - } - }); - } - delete this._needLayout; - }, - // EVENT's, should be overide-able onLoad: function(data){ // summary: @@ -10035,12 +10618,16 @@ dojo.declare( // Set by `dijit._DialogMixin._getFocusItems`. _lastFocusItem: null, - templateString: dojo.cache("dijit", "templates/TooltipDialog.html", "<div waiRole=\"presentation\">\n\t<div class=\"dijitTooltipContainer\" waiRole=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" tabindex=\"-1\" waiRole=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" waiRole=\"presentation\"></div>\n</div>\n"), + templateString: dojo.cache("dijit", "templates/TooltipDialog.html", "<div role=\"presentation\" tabIndex=\"-1\">\n\t<div class=\"dijitTooltipContainer\" role=\"presentation\">\n\t\t<div class =\"dijitTooltipContents dijitTooltipFocusNode\" dojoAttachPoint=\"containerNode\" role=\"dialog\"></div>\n\t</div>\n\t<div class=\"dijitTooltipConnector\" role=\"presentation\"></div>\n</div>\n"), + + _setTitleAttr: function(/*String*/ title){ + this.containerNode.title = title; + this._set("title", title) + }, postCreate: function(){ this.inherited(arguments); this.connect(this.containerNode, "onkeypress", "_onKey"); - this.containerNode.title = this.title; }, orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ corner){ @@ -10050,13 +10637,19 @@ dojo.declare( // directly. // tags: // protected - var c = this._currentOrientClass; - if(c){ - dojo.removeClass(this.domNode, c); - } - c = "dijitTooltipAB"+(corner.charAt(1) == 'L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0) == 'T' ? "Below" : "Above"); - dojo.addClass(this.domNode, c); - this._currentOrientClass = c; + var newC = "dijitTooltipAB" + (corner.charAt(1) == 'L' ? "Left" : "Right") + + " dijitTooltip" + + (corner.charAt(0) == 'T' ? "Below" : "Above"); + + dojo.replaceClass(this.domNode, newC, this._currentOrientClass || ""); + this._currentOrientClass = newC; + }, + + focus: function(){ + // summary: + // Focus on first field + this._getFocusItems(this.containerNode); + dijit.focus(this._firstFocusItem); }, onOpen: function(/*Object*/ pos){ @@ -10068,11 +10661,6 @@ dojo.declare( this.orient(this.domNode,pos.aroundCorner, pos.corner); this._onShow(); // lazy load trigger - - if(this.autofocus){ - this._getFocusItems(this.containerNode); - dijit.focus(this._firstFocusItem); - } }, onClose: function(){ @@ -10141,6 +10729,8 @@ dojo.provide("dijit.Dialog"); +// dijit/TooltipDialog required for back-compat. TODO: remove in 2.0 + /*===== dijit._underlay = function(kwArgs){ // summary: @@ -10152,7 +10742,6 @@ dijit._underlay = function(kwArgs){ // or subclass thereof is shown. }; =====*/ - dojo.declare( "dijit._DialogBase", [dijit._Templated, dijit.form._FormMixin, dijit._DialogMixin, dijit._CssStateMixin], @@ -10173,7 +10762,7 @@ dojo.declare( // | dojo.body().appendChild(foo.domNode); // | foo.startup(); - templateString: dojo.cache("dijit", "templates/Dialog.html", "<div class=\"dijitDialog\" tabindex=\"-1\" waiRole=\"dialog\" waiState=\"labelledby-${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"onclick: onCancel\" title=\"${buttonCancel}\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"), + templateString: dojo.cache("dijit", "templates/Dialog.html", "<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div dojoAttachPoint=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span dojoAttachPoint=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span dojoAttachPoint=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" dojoAttachEvent=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span dojoAttachPoint=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div dojoAttachPoint=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"), baseClass: "dijitDialog", @@ -10189,7 +10778,7 @@ dojo.declare( "aria-describedby":"" }), - // open: Boolean + // open: [readonly] Boolean // True if Dialog is currently displayed on screen. open: false, @@ -10209,12 +10798,12 @@ dojo.declare( // False will disable autofocusing. Default: true autofocus: true, - // _firstFocusItem: [private] [readonly] DomNode + // _firstFocusItem: [private readonly] DomNode // The pointer to the first focusable node in the dialog. // Set by `dijit._DialogMixin._getFocusItems`. _firstFocusItem: null, - // _lastFocusItem: [private] [readonly] DomNode + // _lastFocusItem: [private readonly] DomNode // The pointer to which node has focus prior to our dialog. // Set by `dijit._DialogMixin._getFocusItems`. _lastFocusItem: null, @@ -10266,14 +10855,14 @@ dojo.declare( // summary: // Called when data has been loaded from an href. // Unlike most other callbacks, this function can be connected to (via `dojo.connect`) - // but should *not* be overriden. + // but should *not* be overridden. // tags: // callback // when href is specified we need to reposition the dialog after the data is loaded // and find the focusable elements this._position(); - if(this.autofocus){ + if(this.autofocus && dijit._DialogLevelManager.isTop(this)){ this._getFocusItems(this.domNode); dijit.focus(this._firstFocusItem); } @@ -10304,7 +10893,7 @@ dojo.declare( this._moveable = (dojo.isIE == 6) ? new dojo.dnd.TimedMoveable(node, { handle: this.titleBar }) : // prevent overload, see #5285 new dojo.dnd.Moveable(node, { handle: this.titleBar, timeout: 0 }); - dojo.subscribe("/dnd/move/stop",this,"_endDrag"); + this._dndListener = dojo.subscribe("/dnd/move/stop",this,"_endDrag"); }else{ dojo.addClass(node,"dijitDialogFixed"); } @@ -10313,95 +10902,6 @@ dojo.declare( dialogId: this.id, "class": dojo.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ") }; - - this._fadeIn = dojo.fadeIn({ - node: node, - duration: this.duration, - beforeBegin: dojo.hitch(this, function(){ - var underlay = dijit._underlay; - if(!underlay){ - underlay = dijit._underlay = new dijit.DialogUnderlay(this.underlayAttrs); - }else{ - underlay.set(this.underlayAttrs); - } - - var ds = dijit._dialogStack, - zIndex = 948 + ds.length*2; - if(ds.length == 1){ // first dialog - underlay.show(); - } - dojo.style(dijit._underlay.domNode, 'zIndex', zIndex); - dojo.style(this.domNode, 'zIndex', zIndex + 1); - }), - onEnd: dojo.hitch(this, function(){ - if(this.autofocus){ - // find focusable Items each time dialog is shown since if dialog contains a widget the - // first focusable items can change - this._getFocusItems(this.domNode); - dijit.focus(this._firstFocusItem); - } - }) - }); - - this._fadeOut = dojo.fadeOut({ - node: node, - duration: this.duration, - onEnd: dojo.hitch(this, function(){ - node.style.display = "none"; - - // Restore the previous dialog in the stack, or if this is the only dialog - // then restore to original page - var ds = dijit._dialogStack; - if(ds.length == 0){ - dijit._underlay.hide(); - }else{ - dojo.style(dijit._underlay.domNode, 'zIndex', 948 + ds.length*2); - dijit._underlay.set(ds[ds.length-1].underlayAttrs); - } - - // Restore focus to wherever it was before this dialog was displayed - if(this.refocus){ - var focus = this._savedFocus; - - // If we are returning control to a previous dialog but for some reason - // that dialog didn't have a focused field, set focus to first focusable item. - // This situation could happen if two dialogs appeared at nearly the same time, - // since a dialog doesn't set it's focus until the fade-in is finished. - if(ds.length > 0){ - var pd = ds[ds.length-1]; - if(!dojo.isDescendant(focus.node, pd.domNode)){ - pd._getFocusItems(pd.domNode); - focus = pd._firstFocusItem; - } - } - - dijit.focus(focus); - } - }) - }); - }, - - uninitialize: function(){ - var wasPlaying = false; - if(this._fadeIn && this._fadeIn.status() == "playing"){ - wasPlaying = true; - this._fadeIn.stop(); - } - if(this._fadeOut && this._fadeOut.status() == "playing"){ - wasPlaying = true; - this._fadeOut.stop(); - } - - // Hide the underlay, unless the underlay widget has already been destroyed - // because we are being called during page unload (when all widgets are destroyed) - if((this.open || wasPlaying) && !dijit._underlay._destroyed){ - dijit._underlay.hide(); - } - - if(this._moveable){ - this._moveable.destroy(); - } - this.inherited(arguments); }, _size: function(){ @@ -10427,7 +10927,7 @@ dojo.declare( }); } - var mb = dojo.marginBox(this.domNode); + var mb = dojo._getMarginSize(this.domNode); var viewport = dojo.window.getBox(); if(mb.w >= viewport.w || mb.h >= viewport.h){ // Reduce size of dialog contents so that dialog fits in viewport @@ -10482,12 +10982,6 @@ dojo.declare( // tags: // private - var ds = dijit._dialogStack; - if(ds[ds.length-1] != this){ - // console.debug(this.id + ': skipping because', this, 'is not the active dialog'); - return; - } - if(evt.charOrCode){ var dk = dojo.keys; var node = evt.target; @@ -10534,16 +11028,23 @@ dojo.declare( show: function(){ // summary: // Display the dialog + // returns: dojo.Deferred + // Deferred object that resolves when the display animation is complete + if(this.open){ return; } + if(!this._started){ + this.startup(); + } + // 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(); + if(this._fadeOutDeferred){ + this._fadeOutDeferred.cancel(); } this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout")); @@ -10558,43 +11059,81 @@ dojo.declare( this._oldViewport = viewport; } })); - this._modalconnects.push(dojo.connect(dojo.doc.documentElement, "onkeypress", this, "_onKey")); + this._modalconnects.push(dojo.connect(this.domNode, "onkeypress", this, "_onKey")); dojo.style(this.domNode, { opacity:0, display:"" }); - this.open = true; + this._set("open", true); this._onShow(); // lazy load trigger this._size(); this._position(); - dijit._dialogStack.push(this); - this._fadeIn.play(); - this._savedFocus = dijit.getFocus(this); + // fade-in Animation object, setup below + var fadeIn; + + this._fadeInDeferred = new dojo.Deferred(dojo.hitch(this, function(){ + fadeIn.stop(); + delete this._fadeInDeferred; + })); + + fadeIn = dojo.fadeIn({ + node: this.domNode, + duration: this.duration, + beforeBegin: dojo.hitch(this, function(){ + dijit._DialogLevelManager.show(this, this.underlayAttrs); + }), + onEnd: dojo.hitch(this, function(){ + if(this.autofocus && dijit._DialogLevelManager.isTop(this)){ + // find focusable items each time dialog is shown since if dialog contains a widget the + // first focusable items can change + this._getFocusItems(this.domNode); + dijit.focus(this._firstFocusItem); + } + this._fadeInDeferred.callback(true); + delete this._fadeInDeferred; + }) + }).play(); + + return this._fadeInDeferred; }, hide: function(){ // summary: // Hide the dialog + // returns: dojo.Deferred + // Deferred object that resolves when the hide animation is complete // if we haven't been initialized yet then we aren't showing and we can just return - // or if we aren't the active dialog, don't allow us to close yet - var ds = dijit._dialogStack; - if(!this._alreadyInitialized || this != ds[ds.length-1]){ + if(!this._alreadyInitialized){ return; } - - if(this._fadeIn.status() == "playing"){ - this._fadeIn.stop(); + if(this._fadeInDeferred){ + this._fadeInDeferred.cancel(); } - // throw away current active dialog from stack -- making the previous dialog or the node on the original page active - ds.pop(); + // fade-in Animation object, setup below + var fadeOut; + + this._fadeOutDeferred = new dojo.Deferred(dojo.hitch(this, function(){ + fadeOut.stop(); + delete this._fadeOutDeferred; + })); - this._fadeOut.play(); + fadeOut = dojo.fadeOut({ + node: this.domNode, + duration: this.duration, + onEnd: dojo.hitch(this, function(){ + this.domNode.style.display = "none"; + dijit._DialogLevelManager.hide(this); + this.onHide(); + this._fadeOutDeferred.callback(true); + delete this._fadeOutDeferred; + }) + }).play(); if(this._scrollConnected){ this._scrollConnected = false; @@ -10605,9 +11144,9 @@ dojo.declare( if(this._relativePosition){ delete this._relativePosition; } - this.open = false; + this._set("open", false); - this.onHide(); + return this._fadeOutDeferred; }, layout: function(){ @@ -10619,31 +11158,161 @@ dojo.declare( if(dijit._underlay){ // avoid race condition during show() dijit._underlay.layout(); } - this._position(); + this._position(); + } + }, + + destroy: function(){ + if(this._fadeInDeferred){ + this._fadeInDeferred.cancel(); + } + if(this._fadeOutDeferred){ + this._fadeOutDeferred.cancel(); + } + if(this._moveable){ + this._moveable.destroy(); + } + if(this._dndListener){ + dojo.unsubscribe(this._dndListener); + } + dojo.forEach(this._modalconnects, dojo.disconnect); + + dijit._DialogLevelManager.hide(this); + + this.inherited(arguments); + } + } +); + +dojo.declare( + "dijit.Dialog", + [dijit.layout.ContentPane, dijit._DialogBase], + {} +); + +dijit._DialogLevelManager = { + // summary: + // Controls the various active "levels" on the page, starting with the + // stuff initially visible on the page (at z-index 0), and then having an entry for + // each Dialog shown. + + show: function(/*dijit._Widget*/ dialog, /*Object*/ underlayAttrs){ + // summary: + // Call right before fade-in animation for new dialog. + // Saves current focus, displays/adjusts underlay for new dialog, + // and sets the z-index of the dialog itself. + // + // New dialog will be displayed on top of all currently displayed dialogs. + // + // Caller is responsible for setting focus in new dialog after the fade-in + // animation completes. + + var ds = dijit._dialogStack; + + // Save current focus + ds[ds.length-1].focus = dijit.getFocus(dialog); + + // Display the underlay, or if already displayed then adjust for this new dialog + var underlay = dijit._underlay; + if(!underlay || underlay._destroyed){ + underlay = dijit._underlay = new dijit.DialogUnderlay(underlayAttrs); + }else{ + underlay.set(dialog.underlayAttrs); + } + + // Set z-index a bit above previous dialog + var zIndex = ds[ds.length-1].dialog ? ds[ds.length-1].zIndex + 2 : 950; + if(ds.length == 1){ // first dialog + underlay.show(); + } + dojo.style(dijit._underlay.domNode, 'zIndex', zIndex - 1); + + // Dialog + dojo.style(dialog.domNode, 'zIndex', zIndex); + + ds.push({dialog: dialog, underlayAttrs: underlayAttrs, zIndex: zIndex}); + }, + + hide: function(/*dijit._Widget*/ dialog){ + // summary: + // Called when the specified dialog is hidden/destroyed, after the fade-out + // animation ends, in order to reset page focus, fix the underlay, etc. + // If the specified dialog isn't open then does nothing. + // + // Caller is responsible for either setting display:none on the dialog domNode, + // or calling dijit.popup.hide(), or removing it from the page DOM. + + var ds = dijit._dialogStack; + + if(ds[ds.length-1].dialog == dialog){ + // Removing the top (or only) dialog in the stack, return focus + // to previous dialog + + ds.pop(); + + var pd = ds[ds.length-1]; // the new active dialog (or the base page itself) + + // Adjust underlay + if(ds.length == 1){ + // Returning to original page. + // Hide the underlay, unless the underlay widget has already been destroyed + // because we are being called during page unload (when all widgets are destroyed) + if(!dijit._underlay._destroyed){ + dijit._underlay.hide(); + } + }else{ + // Popping back to previous dialog, adjust underlay + dojo.style(dijit._underlay.domNode, 'zIndex', pd.zIndex - 1); + dijit._underlay.set(pd.underlayAttrs); + } + + // Adjust focus + if(dialog.refocus){ + // If we are returning control to a previous dialog but for some reason + // that dialog didn't have a focused field, set focus to first focusable item. + // This situation could happen if two dialogs appeared at nearly the same time, + // since a dialog doesn't set it's focus until the fade-in is finished. + var focus = pd.focus; + if(!focus || (pd.dialog && !dojo.isDescendant(focus.node, pd.dialog.domNode))){ + pd.dialog._getFocusItems(pd.dialog.domNode); + focus = pd.dialog._firstFocusItem; + } + + try{ + dijit.focus(focus); + }catch(e){ + /* focus() will fail if user opened the dialog by clicking a non-focusable element */ + } } - }, - - destroy: function(){ - dojo.forEach(this._modalconnects, dojo.disconnect); - if(this.refocus && this.open){ - setTimeout(dojo.hitch(dijit,"focus",this._savedFocus), 25); + }else{ + // Removing a dialog out of order (#9944, #10705). + // Don't need to mess with underlay or z-index or anything. + var idx = dojo.indexOf(dojo.map(ds, function(elem){return elem.dialog}), dialog); + if(idx != -1){ + ds.splice(idx, 1); } - this.inherited(arguments); } - } -); - -dojo.declare( - "dijit.Dialog", - [dijit.layout.ContentPane, dijit._DialogBase], - {} -); - -// Stack of currenctly displayed dialogs, layered on top of each other -dijit._dialogStack = []; + }, -// For back-compat. TODO: remove in 2.0 + isTop: function(/*dijit._Widget*/ dialog){ + // summary: + // Returns true if specified Dialog is the top in the task + var ds = dijit._dialogStack; + return ds[ds.length-1].dialog == dialog; + } +}; +// Stack representing the various active "levels" on the page, starting with the +// stuff initially visible on the page (at z-index 0), and then having an entry for +// each Dialog shown. +// Each element in stack has form { +// dialog: dialogWidget, +// focus: returnFromGetFocus(), +// underlayAttrs: attributes to set on underlay (when this widget is active) +// } +dijit._dialogStack = [ + {dialog: null, focus: null, underlayAttrs: null} // entry for stuff at z-index: 0 +]; } @@ -10653,7 +11322,6 @@ dojo.provide("dijit._HasDropDown"); - dojo.declare("dijit._HasDropDown", null, { @@ -10702,8 +11370,9 @@ dojo.declare("dijit._HasDropDown", forceWidth: false, // maxHeight: [protected] Integer - // The max height for our dropdown. Set to 0 for no max height. - // any dropdown taller than this will have scrollbars + // The max height for our dropdown. + // Any dropdown taller than this will have scrollbars. + // Set to 0 for no max height, or -1 to limit height to available space in viewport maxHeight: 0, // dropDownPosition: [const] String[] @@ -10733,6 +11402,8 @@ dojo.declare("dijit._HasDropDown", if(this.disabled || this.readOnly){ return; } + dojo.stopEvent(e); + this._docHandler = this.connect(dojo.doc, "onmouseup", "_onDropDownMouseUp"); this.toggleDropDown(); @@ -10786,7 +11457,7 @@ dojo.declare("dijit._HasDropDown", } } } - if(this._opened && dropDown.focus){ + if(this._opened && dropDown.focus && dropDown.autoFocus !== false){ // Focus the dropdown widget - do it on a delay so that we // don't steal our own focus. window.setTimeout(dojo.hitch(dropDown, "focus"), 1); @@ -10797,27 +11468,14 @@ dojo.declare("dijit._HasDropDown", // the drop down was already opened on mousedown/keydown; just need to call stopEvent() if(this._stopClickEvents){ dojo.stopEvent(e); - } + } }, - _setupDropdown: function(){ - // summary: - // set up nodes and connect our mouse and keypress events + buildRendering: function(){ + this.inherited(arguments); + this._buttonNode = this._buttonNode || this.focusNode || this.domNode; this._popupStateNode = this._popupStateNode || this.focusNode || this._buttonNode; - this._aroundNode = this._aroundNode || this.domNode; - this.connect(this._buttonNode, "onmousedown", "_onDropDownMouseDown"); - this.connect(this._buttonNode, "onclick", "_onDropDownClick"); - this.connect(this._buttonNode, "onkeydown", "_onDropDownKeydown"); - this.connect(this._buttonNode, "onkeyup", "_onKey"); - - // If we have a _setStateClass function (which happens when - // we are a form widget), then we need to connect our open/close - // functions to it - if(this._setStateClass){ - this.connect(this, "openDropDown", "_setStateClass"); - this.connect(this, "closeDropDown", "_setStateClass"); - } // Add a class to the "dijitDownArrowButton" type class to _buttonNode so theme can set direction of arrow // based on where drop down will normally appear @@ -10833,11 +11491,18 @@ dojo.declare("dijit._HasDropDown", }, postCreate: function(){ - this._setupDropdown(); + // summary: + // set up nodes and connect our mouse and keypress events + this.inherited(arguments); + + this.connect(this._buttonNode, "onmousedown", "_onDropDownMouseDown"); + this.connect(this._buttonNode, "onclick", "_onDropDownClick"); + this.connect(this.focusNode, "onkeypress", "_onKey"); + this.connect(this.focusNode, "onkeyup", "_onKeyUp"); }, - destroyDescendants: function(){ + destroy: function(){ if(this.dropDown){ // Destroy the drop down, unless it's already been destroyed. This can happen because // the drop down is a direct child of <body> even though it's logically my child. @@ -10849,27 +11514,43 @@ dojo.declare("dijit._HasDropDown", this.inherited(arguments); }, - _onDropDownKeydown: function(/*Event*/ e){ - if(e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE){ - e.preventDefault(); // stop IE screen jump - } - }, - _onKey: function(/*Event*/ e){ // summary: // Callback when the user presses a key while focused on the button node if(this.disabled || this.readOnly){ return; } - var d = this.dropDown; + + var d = this.dropDown, target = e.target; if(d && this._opened && d.handleKey){ - if(d.handleKey(e) === false){ return; } + if(d.handleKey(e) === false){ + /* false return code means that the drop down handled the key */ + dojo.stopEvent(e); + return; + } } - if(d && this._opened && e.keyCode == dojo.keys.ESCAPE){ - this.toggleDropDown(); - }else if(d && !this._opened && - (e.keyCode == dojo.keys.DOWN_ARROW || e.keyCode == dojo.keys.ENTER || e.keyCode == dojo.keys.SPACE)){ + if(d && this._opened && e.charOrCode == dojo.keys.ESCAPE){ + this.closeDropDown(); + dojo.stopEvent(e); + }else if(!this._opened && + (e.charOrCode == dojo.keys.DOWN_ARROW || + ( (e.charOrCode == dojo.keys.ENTER || e.charOrCode == " ") && + //ignore enter and space if the event is for a text input + ((target.tagName || "").toLowerCase() !== 'input' || + (target.type && target.type.toLowerCase() !== 'text'))))){ + // Toggle the drop down, but wait until keyup so that the drop down doesn't + // get a stray keyup event, or in the case of key-repeat (because user held + // down key for too long), stray keydown events + this._toggleOnKeyUp = true; + dojo.stopEvent(e); + } + }, + + _onKeyUp: function(){ + if(this._toggleOnKeyUp){ + delete this._toggleOnKeyUp; this.toggleDropDown(); - if(d.focus){ + var d = this.dropDown; // drop down may not exist until toggleDropDown() call + if(d && d.focus){ setTimeout(dojo.hitch(d, "focus"), 1); } } @@ -10879,8 +11560,14 @@ dojo.declare("dijit._HasDropDown", // 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. + // Don't focus on button if the user has explicitly focused on something else (happens + // when user clicks another control causing the current popup to close).. + // But if focus is inside of the drop down then reset focus to me, because IE doesn't like + // it when you display:none a node with focus. + var focusMe = dijit._curFocus && this.dropDown && dojo.isDescendant(dijit._curFocus, this.dropDown.domNode); + + this.closeDropDown(focusMe); + this.inherited(arguments); }, @@ -10897,7 +11584,8 @@ dojo.declare("dijit._HasDropDown", loadDropDown: function(/* Function */ loadCallback){ // summary: // Loads the data for the dropdown, and at some point, calls - // the given callback + // the given callback. This is basically a callback when the + // user presses the down arrow button to open the drop down. // tags: // protected @@ -10906,14 +11594,13 @@ dojo.declare("dijit._HasDropDown", toggleDropDown: function(){ // summary: + // Callback when the user presses the down arrow button or presses + // the down arrow key to open/close the drop down. // Toggle the drop-down widget; if it is up, close it, if not, open it // tags: // protected if(this.disabled || this.readOnly){ return; } - this.focus(); - var dropDown = this.dropDown; - if(!dropDown){ return; } if(!this._opened){ // If we aren't loaded, load it first so there isn't a flicker if(!this.isLoaded()){ @@ -10929,14 +11616,17 @@ dojo.declare("dijit._HasDropDown", openDropDown: function(){ // summary: - // Opens the dropdown for this widget - it returns the - // return value of dijit.popup.open + // Opens the dropdown for this widget. To be called only when this.dropDown + // has been created and is ready to display (ie, it's data is loaded). + // returns: + // return value of dijit.popup.open() // tags: // protected - var dropDown = this.dropDown; - var ddNode = dropDown.domNode; - var self = this; + var dropDown = this.dropDown, + ddNode = dropDown.domNode, + aroundNode = this._aroundNode || this.domNode, + self = this; // Prepare our popup's height and honor maxHeight if it exists. @@ -10944,8 +11634,7 @@ dojo.declare("dijit._HasDropDown", // ie, dependent on how much space is available (BK) if(!this._preparedNode){ - dijit.popup.moveOffScreen(ddNode); - this._preparedNode = true; + this._preparedNode = true; // Check if we have explicitly set width and height on the dropdown widget dom node if(ddNode.style.width){ this._explicitDDWidth = true; @@ -10969,29 +11658,44 @@ dojo.declare("dijit._HasDropDown", } dojo.style(ddNode, myStyle); + // Figure out maximum height allowed (if there is a height restriction) + var maxHeight = this.maxHeight; + if(maxHeight == -1){ + // limit height to space available in viewport either above or below my domNode + // (whichever side has more room) + var viewport = dojo.window.getBox(), + position = dojo.position(aroundNode, false); + maxHeight = Math.floor(Math.max(position.y, viewport.h - (position.y + position.h))); + } + + // Attach dropDown to DOM and make make visibility:hidden rather than display:none + // so we call startup() and also get the size + if(dropDown.startup && !dropDown._started){ + dropDown.startup(); + } + + dijit.popup.moveOffScreen(dropDown); // Get size of drop down, and determine if vertical scroll bar needed - var mb = dojo.marginBox(ddNode); - var overHeight = (this.maxHeight && mb.h > this.maxHeight); + var mb = dojo._getMarginSize(ddNode); + var overHeight = (maxHeight && mb.h > maxHeight); dojo.style(ddNode, { overflowX: "hidden", overflowY: overHeight ? "auto" : "hidden" }); if(overHeight){ - mb.h = this.maxHeight; + mb.h = maxHeight; if("w" in mb){ mb.w += 16; // room for vertical scrollbar } }else{ delete mb.h; } - delete mb.t; - delete mb.l; // Adjust dropdown width to match or be larger than my width if(this.forceWidth){ - mb.w = this.domNode.offsetWidth; + mb.w = aroundNode.offsetWidth; }else if(this.autoWidth){ - mb.w = Math.max(mb.w, this.domNode.offsetWidth); + mb.w = Math.max(mb.w, aroundNode.offsetWidth); }else{ delete mb.w; } @@ -11007,7 +11711,7 @@ dojo.declare("dijit._HasDropDown", var retVal = dijit.popup.open({ parent: this, popup: dropDown, - around: this._aroundNode, + around: aroundNode, orient: dijit.getPopupAroundAlignment((this.dropDownPosition && this.dropDownPosition.length) ? this.dropDownPosition : ["below"],this.isLeftToRight()), onExecute: function(){ self.closeDropDown(true); @@ -11019,13 +11723,12 @@ dojo.declare("dijit._HasDropDown", dojo.attr(self._popupStateNode, "popupActive", false); dojo.removeClass(self._popupStateNode, "dijitHasDropDownOpen"); self._opened = false; - self.state = ""; } }); dojo.attr(this._popupStateNode, "popupActive", "true"); dojo.addClass(self._popupStateNode, "dijitHasDropDownOpen"); this._opened=true; - this.state="Opened"; + // TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown return retVal; }, @@ -11033,6 +11736,8 @@ dojo.declare("dijit._HasDropDown", closeDropDown: function(/*Boolean*/ focus){ // summary: // Closes the drop down on this widget + // focus: + // If true, refocuses the button widget // tags: // protected @@ -11040,7 +11745,6 @@ dojo.declare("dijit._HasDropDown", if(focus){ this.focus(); } dijit.popup.close(this.dropDown); this._opened = false; - this.state = ""; } } @@ -11099,14 +11803,12 @@ dojo.declare("dijit.form.Button", baseClass: "dijitButton", - templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">●</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"), + templateString: dojo.cache("dijit.form", "templates/Button.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\"></span\n\t\t\t><span class=\"dijitReset dijitToggleButtonIconChar\">●</span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t\tdojoAttachPoint=\"containerNode\"\n\t\t\t></span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"), attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, { - value: "valueNode", - iconClass: { node: "iconNode", type: "class" } + value: "valueNode" }), - _onClick: function(/*Event*/ e){ // summary: // Internal function to handle click actions @@ -11136,25 +11838,26 @@ dojo.declare("dijit.form.Button", } }, + buildRendering: function(){ + this.inherited(arguments); + dojo.setSelectable(this.focusNode, false); + }, + _fillContent: function(/*DomNode*/ source){ // Overrides _Templated._fillContent(). // If button label is specified as srcNodeRef.innerHTML rather than // this.params.label, handle it here. + // TODO: remove the method in 2.0, parser will do it all for me if(source && (!this.params || !("label" in this.params))){ this.set('label', source.innerHTML); } }, - postCreate: function(){ - dojo.setSelectable(this.focusNode, false); - this.inherited(arguments); - }, - _setShowLabelAttr: function(val){ if(this.containerNode){ dojo.toggleClass(this.containerNode, "dijitDisplayNone", !val); } - this.showLabel = val; + this._set("showLabel", val); }, onClick: function(/*Event*/ e){ @@ -11180,13 +11883,24 @@ dojo.declare("dijit.form.Button", _setLabelAttr: function(/*String*/ content){ // summary: - // Hook for attr('label', ...) to work. + // Hook for set('label', ...) to work. // description: // Set the label (text) of the button; takes an HTML string. - this.containerNode.innerHTML = this.label = content; + this._set("label", content); + this.containerNode.innerHTML = content; if(this.showLabel == false && !this.params.title){ this.titleNode.title = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || ''); } + }, + + _setIconClassAttr: function(/*String*/ val){ + // Custom method so that icon node is hidden when not in use, to avoid excess padding/margin + // appearing around it (even if it's a 0x0 sized <img> node) + + var oldVal = this.iconClass || "dijitNoIcon", + newVal = val || "dijitNoIcon"; + dojo.replaceClass(this.iconNode, newVal, oldVal); + this._set("iconClass", val); } }); @@ -11207,7 +11921,7 @@ dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, baseClass : "dijitDropDownButton", - templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true,labelledby-${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">▼</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"), + templateString: dojo.cache("dijit.form", "templates/DropDownButton.html", "<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdojoAttachEvent=\"ondijitclick:_onButtonClick\" dojoAttachPoint=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"focusNode,titleNode,_arrowWrapperNode\"\n\t\t\trole=\"button\" aria-haspopup=\"true\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\"\n\t\t\t\tdojoAttachPoint=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdojoAttachPoint=\"containerNode,_popupStateNode\"\n\t\t\t\tid=\"${id}_label\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonInner\"></span\n\t\t\t><span class=\"dijitReset dijitInline dijitArrowButtonChar\">▼</span\n\t\t></span\n\t></span\n\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" class=\"dijitOffScreen\" tabIndex=\"-1\"\n\t\tdojoAttachPoint=\"valueNode\"\n/></span>\n"), _fillContent: function(){ // Overrides Button._fillContent(). @@ -11232,12 +11946,14 @@ dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, // 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){ + if(!this.dropDown && this.dropDownContainer){ var dropDownNode = dojo.query("[widgetId]", this.dropDownContainer)[0]; this.dropDown = dijit.byNode(dropDownNode); delete this.dropDownContainer; } - dijit.popup.moveOffScreen(this.dropDown.domNode); + if(this.dropDown){ + dijit.popup.hide(this.dropDown); + } this.inherited(arguments); }, @@ -11246,7 +11962,7 @@ dojo.declare("dijit.form.DropDownButton", [dijit.form.Button, dijit._Container, // Returns whether or not we are loaded - if our dropdown has an href, // then we want to check that. var dropDown = this.dropDown; - return (!dropDown.href || dropDown.isLoaded); + return (!!dropDown && (!dropDown.href || dropDown.isLoaded)); }, loadDropDown: function(){ @@ -11288,7 +12004,7 @@ dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, { // | dojo.body().appendChild(button1.domNode); // - templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' waiRole=\"presentation\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\twaiRole=\"button\" waiState=\"labelledby-${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" waiRole=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\twaiRole=\"button\" waiState=\"haspopup-true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">▼</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"), + templateString: dojo.cache("dijit.form", "templates/ComboButton.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tcellspacing='0' cellpadding='0' role=\"presentation\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonNode\" dojoAttachPoint=\"buttonNode\" dojoAttachEvent=\"ondijitclick:_onButtonClick,onkeypress:_onButtonKeyPress\"\n\t\t><div id=\"${id}_button\" class=\"dijitReset dijitButtonContents\"\n\t\t\tdojoAttachPoint=\"titleNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><div class=\"dijitReset dijitInline dijitIcon\" dojoAttachPoint=\"iconNode\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitInline dijitButtonText\" id=\"${id}_label\" dojoAttachPoint=\"containerNode\" role=\"presentation\"></div\n\t\t></div\n\t\t></td\n\t\t><td id=\"${id}_arrow\" class='dijitReset dijitRight dijitButtonNode dijitArrowButton'\n\t\t\tdojoAttachPoint=\"_popupStateNode,focusNode,_buttonNode\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onArrowKeyPress\"\n\t\t\ttitle=\"${optionsTitle}\"\n\t\t\trole=\"button\" aria-haspopup=\"true\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">▼</div\n\t\t></td\n\t\t><td style=\"display:none !important;\"\n\t\t\t><input ${!nameAttrSetting} type=\"${type}\" value=\"${value}\" dojoAttachPoint=\"valueNode\"\n\t\t/></td></tr></tbody\n></table>\n"), attributeMap: dojo.mixin(dojo.clone(dijit.form.Button.prototype.attributeMap), { id: "", @@ -11336,8 +12052,9 @@ dojo.declare("dijit.form.ComboButton", dijit.form.DropDownButton, { // otherwise on arrow node // position: // "start" or "end" - - dijit.focus(position == "start" ? this.titleNode : this._popupStateNode); + if(!this.disabled){ + dijit.focus(position == "start" ? this.titleNode : this._popupStateNode); + } } }); @@ -11363,8 +12080,8 @@ dojo.declare("dijit.form.ToggleButton", dijit.form.Button, { this.set('checked', !this.checked); }, - _setCheckedAttr: function(/*Boolean*/ value, /* Boolean? */ priorityChange){ - this.checked = value; + _setCheckedAttr: function(/*Boolean*/ value, /*Boolean?*/ priorityChange){ + this._set("checked", value); dojo.attr(this.focusNode || this.domNode, "checked", value); dijit.setWaiState(this.focusNode || this.domNode, "pressed", value); this._handleOnChange(value, priorityChange); @@ -11372,7 +12089,7 @@ dojo.declare("dijit.form.ToggleButton", dijit.form.Button, { setChecked: function(/*Boolean*/ checked){ // summary: - // Deprecated. Use set('checked', true/false) instead. + // Deprecated. Use set('checked', true/false) instead. dojo.deprecated("setChecked("+checked+") is deprecated. Use set('checked',"+checked+") instead.", "", "2.0"); this.set('checked', checked); }, @@ -11395,6 +12112,8 @@ dojo._hasResource["dijit.form.ToggleButton"] = true; dojo.provide("dijit.form.ToggleButton"); + + } if(!dojo._hasResource["dijit.form.CheckBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -11424,26 +12143,26 @@ dojo.declare( // 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: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" waiRole=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"), + templateString: dojo.cache("dijit.form", "templates/CheckBox.html", "<div class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><input\n\t \t${!nameAttrSetting} type=\"${type}\" ${checkedAttrSetting}\n\t\tclass=\"dijitReset dijitCheckBoxInput\"\n\t\tdojoAttachPoint=\"focusNode\"\n\t \tdojoAttachEvent=\"onclick:_onClick\"\n/></div>\n"), baseClass: "dijitCheckBox", // type: [private] String // type attribute on <input> node. - // Overrides `dijit.form.Button.type`. Users should not change this value. + // Overrides `dijit.form.Button.type`. Users should not change this value. type: "checkbox", // value: String // As an initialization parameter, equivalent to value field on normal checkbox // (if checked, the value is passed as the value when form is submitted). // - // However, attr('value') will return either the string or false depending on + // However, get('value') will return either the string or false depending on // whether or not the checkbox is checked. // - // attr('value', string) will check the checkbox and change the value to the + // set('value', string) will check the checkbox and change the value to the // specified string // - // attr('value', boolean) will change the checked state. + // set('value', boolean) will change the checked state. value: "on", // readOnly: Boolean @@ -11452,22 +12171,22 @@ dojo.declare( // Similar to disabled except readOnly form values are submitted. readOnly: false, - // the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap + // the attributeMap should inherit from dijit.form._FormWidget.prototype.attributeMap // instead of ToggleButton as the icon mapping has no meaning for a CheckBox attributeMap: dojo.delegate(dijit.form._FormWidget.prototype.attributeMap, { readOnly: "focusNode" }), _setReadOnlyAttr: function(/*Boolean*/ value){ - this.readOnly = value; + this._set("readOnly", value); dojo.attr(this.focusNode, 'readOnly', value); dijit.setWaiState(this.focusNode, "readonly", value); }, - _setValueAttr: function(/*String or Boolean*/ newValue, /*Boolean*/ priorityChange){ + _setValueAttr: function(/*String|Boolean*/ newValue, /*Boolean*/ priorityChange){ // summary: // Handler for value= attribute to constructor, and also calls to - // attr('value', val). + // set('value', val). // description: // During initialization, just saves as attribute to the <input type=checkbox>. // @@ -11477,7 +12196,7 @@ dojo.declare( // specified as "value" when the CheckBox was constructed (ex: <input // dojoType="dijit.CheckBox" value="chicken">) if(typeof newValue == "string"){ - this.value = newValue; + this._set("value", newValue); dojo.attr(this.focusNode, 'value', newValue); newValue = true; } @@ -11487,7 +12206,7 @@ dojo.declare( }, _getValueAttr: function(){ // summary: - // Hook so attr('value') works. + // Hook so get('value') works. // description: // If the CheckBox is checked, returns the value attribute. // Otherwise returns false. @@ -11524,7 +12243,7 @@ dojo.declare( this.set('checked', this.params.checked || false); // Handle unlikely event that the <input type=checkbox> value attribute has changed - this.value = this.params.value || "on"; + this._set("value", this.params.value || "on"); dojo.attr(this.focusNode, 'value', this.value); }, @@ -11547,6 +12266,7 @@ dojo.declare( // Internal function to handle click actions - need to check // readOnly, since button no longer does that check. if(this.readOnly){ + dojo.stopEvent(e); return false; } return this.inherited(arguments); @@ -11600,12 +12320,15 @@ dojo.provide("dijit.form.DropDownButton"); + } 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.getObject("regexp", true, dojo); + /*===== dojo.regexp = { // summary: Regular expressions and Builder resources @@ -11624,7 +12347,7 @@ dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){ } return "\\" + ch; }); // String -} +}; dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){ // summary: @@ -11639,7 +12362,7 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole // A single value or an array of values. // re: // A function. Takes one parameter and converts it to a regular - // expression. + // expression. // nonCapture: // If true, uses non-capturing match, otherwise matches are retained // by regular expression. Defaults to false @@ -11658,16 +12381,16 @@ dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boole // 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. + // by regular expression. return "(" + (nonCapture ? "?:":"") + expression + ")"; // String -} +}; } @@ -11675,11 +12398,13 @@ if(!dojo._hasResource["dojo.data.util.sorter"]){ //_hasResource checks added by dojo._hasResource["dojo.data.util.sorter"] = true; dojo.provide("dojo.data.util.sorter"); -dojo.data.util.sorter.basicComparator = function( /*anything*/ a, +dojo.getObject("data.util.sorter", true, dojo); + +dojo.data.util.sorter.basicComparator = function( /*anything*/ a, /*anything*/ b){ - // summary: + // summary: // Basic comparision function that compares if an item is greater or less than another item - // description: + // description: // returns 1 if a > b, -1 if a < b, 0 if equal. // 'null' values (null, undefined) are treated as larger values so that they're pushed to the end of the list. // And compared to each other, null is equivalent to undefined. @@ -11696,18 +12421,18 @@ dojo.data.util.sorter.basicComparator = function( /*anything*/ a, b = undefined; } if(a == b){ - r = 0; + r = 0; }else if(a > b || a == null){ - r = 1; + r = 1; } return r; //int {-1,0,1} }; dojo.data.util.sorter.createSortFunction = function( /* attributes array */sortSpec, /*dojo.data.core.Read*/ store){ - // summary: + // summary: // Helper function to generate the sorting function based off the list of sort attributes. - // description: + // 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. @@ -11749,7 +12474,7 @@ dojo.data.util.sorter.createSortFunction = function( /* attributes array */sortS } comp = map[attr] || bc; } - sortFunctions.push(createSortFunction(attr, + sortFunctions.push(createSortFunction(attr, dir, comp, store)); } } @@ -11761,7 +12486,7 @@ dojo.data.util.sorter.createSortFunction = function( /* attributes array */sortS return ret;//int } } - return 0; //int + return 0; //int }; // Function }; @@ -11772,30 +12497,32 @@ dojo._hasResource["dojo.data.util.simpleFetch"] = true; dojo.provide("dojo.data.util.simpleFetch"); +dojo.getObject("data.util.simpleFetch", true, dojo); + 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() + // 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 + // 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 + // 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. + // 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 + // 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() @@ -11862,12 +12589,14 @@ if(!dojo._hasResource["dojo.data.util.filter"]){ //_hasResource checks added by dojo._hasResource["dojo.data.util.filter"] = true; dojo.provide("dojo.data.util.filter"); +dojo.getObject("data.util.filter", true, dojo); + dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){ - // summary: + // 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: + // For example: // ca* -> /^ca.*$/ // *ca* -> /^.*ca.*$/ // *c\*a* -> /^.*c\*a.*$/ @@ -11879,7 +12608,7 @@ dojo.data.util.filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ // * 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 + // 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: @@ -11957,20 +12686,20 @@ dojo.declare( // Converts the first character of each word to uppercase if true. propercase: false, - // maxLength: String + // maxLength: String // HTML INPUT tag maxLength declaration. maxLength: "", - // selectOnClick: [const] Boolean + // selectOnClick: [const] Boolean // If true, all text will be selected when focused with mouse selectOnClick: false, - // placeHolder: String + // placeHolder: String // Defines a hint to help users fill out the input field (as defined in HTML 5). // This should only contain plain text (no html markup). placeHolder: "", - templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"), + templateString: dojo.cache("dijit.form", "templates/TextBox.html", "<div class=\"dijit dijitReset dijitInline dijitLeft\" id=\"widget_${id}\" role=\"presentation\"\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"), _singleNodeTemplate: '<input class="dijit dijitReset dijitLeft dijitInputField" dojoAttachPoint="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />', _buttonInputDisabled: dojo.isIE ? "disabled" : "", // allows IE to disallow focus, but Firefox cannot be disabled for mousedown events @@ -11983,14 +12712,14 @@ dojo.declare( postMixInProperties: function(){ var type = this.type.toLowerCase(); - if(this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){ + if(this.templateString && this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == dijit.form.TextBox.prototype.templateString)){ this.templateString = this._singleNodeTemplate; } this.inherited(arguments); }, _setPlaceHolderAttr: function(v){ - this.placeHolder = v; + this._set("placeHolder", v); if(!this._phspan){ this._attachPoints.push('_phspan'); /* dijitInputField class gives placeHolder same padding as the input field @@ -12013,7 +12742,7 @@ dojo.declare( _getValueAttr: function(){ // summary: - // Hook so attr('value') works as we like. + // Hook so get('value') works as we like. // description: // For `dijit.form.TextBox` this basically returns the value of the <input>. // @@ -12026,7 +12755,7 @@ dojo.declare( _setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){ // summary: - // Hook so attr('value', ...) works. + // Hook so set('value', ...) works. // // description: // Sets the value of the widget to "value" which can be of @@ -12057,6 +12786,7 @@ dojo.declare( } if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){ this.textbox.value = formattedValue; + this._set("displayedValue", this.get("displayedValue")); } this._updatePlaceHolder(); @@ -12069,7 +12799,7 @@ dojo.declare( // (ex: Kentucky) and the serialized value (ex: KY) are different, // this represents the displayed value. // - // Setting 'displayedValue' through attr('displayedValue', ...) + // Setting 'displayedValue' through set('displayedValue', ...) // updates 'value', and vice-versa. Otherwise 'value' is updated // from 'displayedValue' periodically, like onBlur etc. // @@ -12080,7 +12810,7 @@ dojo.declare( getDisplayedValue: function(){ // summary: - // Deprecated. Use set('displayedValue') instead. + // Deprecated. Use get('displayedValue') instead. // tags: // deprecated dojo.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.", "", "2.0"); @@ -12089,7 +12819,7 @@ dojo.declare( _getDisplayedValueAttr: function(){ // summary: - // Hook so attr('displayedValue') works. + // Hook so get('displayedValue') works. // description: // Returns the displayed value (what the user sees on the screen), // after filtering (ie, trimming spaces etc.). @@ -12098,21 +12828,24 @@ dojo.declare( // is different from the serialized value that's actually // sent to the server (see dijit.form.ValidationTextBox.serialize) + // TODO: maybe we should update this.displayedValue on every keystroke so that we don't need + // this method + // TODO: this isn't really the displayed value when the user is typing return this.filter(this.textbox.value); }, - setDisplayedValue: function(/*String*/value){ + setDisplayedValue: function(/*String*/ value){ // summary: - // Deprecated. Use set('displayedValue', ...) instead. + // Deprecated. Use set('displayedValue', ...) instead. // tags: // deprecated dojo.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.", "", "2.0"); this.set('displayedValue', value); }, - _setDisplayedValueAttr: function(/*String*/value){ + _setDisplayedValueAttr: function(/*String*/ value){ // summary: - // Hook so attr('displayedValue', ...) works. + // Hook so set('displayedValue', ...) works. // description: // Sets the value of the visual element to the string "value". // The widget value is also set to a corresponding, @@ -12120,11 +12853,18 @@ dojo.declare( if(value === null || value === undefined){ value = '' } else if(typeof value != "string"){ value = String(value) } + this.textbox.value = value; - this._setValueAttr(this.get('value'), undefined, value); + + // sets the serialized value to something corresponding to specified displayedValue + // (if possible), and also updates the textbox.value, for example converting "123" + // to "123.00" + this._setValueAttr(this.get('value'), undefined); + + this._set("displayedValue", this.get('displayedValue')); }, - format: function(/* String */ value, /* Object */ constraints){ + format: function(/*String*/ value, /*Object*/ constraints){ // summary: // Replacable function to convert a value to a properly formatted string. // tags: @@ -12132,7 +12872,7 @@ dojo.declare( return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value)); }, - parse: function(/* String */ value, /* Object */ constraints){ + parse: function(/*String*/ value, /*Object*/ constraints){ // summary: // Replacable function to convert a formatted string to a value // tags: @@ -12166,12 +12906,15 @@ dojo.declare( setTimeout(function(){ _this._handleOnChange(_this.get('value'), false); }, 0); } this._refreshState(); + + // In case someone is watch()'ing for changes to displayedValue + this._set("displayedValue", this.get("displayedValue")); }, 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 if(dojo.isIE){ // IE INPUT tag fontFamily has to be set directly using STYLE + // the setTimeout gives IE a chance to render the TextBox and to deal with font inheritance + setTimeout(dojo.hitch(this, function(){ var s = dojo.getComputedStyle(this.domNode); if(s){ var ff = s.fontFamily; @@ -12184,16 +12927,22 @@ dojo.declare( } } } + }), 0); } - this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values shuld be the same + + // 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.textbox.value); // DOM and JS values should be the same + this.inherited(arguments); + if(dojo.isMoz || dojo.isOpera){ - this.connect(this.textbox, "oninput", this._onInput); + this.connect(this.textbox, "oninput", "_onInput"); }else{ - this.connect(this.textbox, "onkeydown", this._onInput); - this.connect(this.textbox, "onkeyup", this._onInput); - this.connect(this.textbox, "onpaste", this._onInput); - this.connect(this.textbox, "oncut", this._onInput); + this.connect(this.textbox, "onkeydown", "_onInput"); + this.connect(this.textbox, "onkeyup", "_onInput"); + this.connect(this.textbox, "onpaste", "_onInput"); + this.connect(this.textbox, "oncut", "_onInput"); } }, @@ -12205,8 +12954,8 @@ dojo.declare( // description: // For MappedTextBox subclasses, this is called twice // - once with the display value - // - once the value as set/returned by attr('value', ...) - // and attr('value'), ex: a Number for NumberTextBox. + // - once the value as set/returned by set('value', ...) + // and get('value'), ex: a Number for NumberTextBox. // // In the latter case it does corrections like converting null to NaN. In // the former case the NumberTextBox.filter() method calls this.inherited() @@ -12284,8 +13033,11 @@ dojo.declare( this._updatePlaceHolder(); - this._refreshState(); + // call this.inherited() before refreshState(), since this.inherited() will possibly scroll the viewport + // (to scroll the TextBox into view), which will affect how _refreshState() positions the tooltip this.inherited(arguments); + + this._refreshState(); }, reset: function(){ @@ -12297,7 +13049,7 @@ dojo.declare( } ); -dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number?*/ stop){ +dijit.selectInputText = function(/*DomNode*/ element, /*Number?*/ start, /*Number?*/ stop){ // summary: // Select text in the input element argument, from start (default 0), to stop (default end). @@ -12310,14 +13062,12 @@ dijit.selectInputText = function(/*DomNode*/element, /*Number?*/ start, /*Number dijit.focus(element); if(_document["selection"] && dojo.body()["createTextRange"]){ // IE if(element.createTextRange){ - var range = element.createTextRange(); - with(range){ - collapse(true); - moveStart("character", -99999); // move to 0 - moveStart("character", start); // delta from 0 is the correct position - moveEnd("character", stop-start); - select(); - } + var r = element.createTextRange(); + r.collapse(true); + r.moveStart("character", -99999); // move to 0 + r.moveStart("character", start); // delta from 0 is the correct position + r.moveEnd("character", stop-start); + r.select(); } }else if(_window["getSelection"]){ if(element.setSelectionRange){ @@ -12351,7 +13101,7 @@ dojo.declare( // Milliseconds to fade in/fade out duration: dijit.defaultDuration, - templateString: dojo.cache("dijit", "templates/Tooltip.html", "<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"), + templateString: dojo.cache("dijit", "templates/Tooltip.html", "<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" dojoAttachPoint=\"containerNode\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" dojoAttachPoint=\"connectorNode\"></div\n></div>\n"), postCreate: function(){ dojo.body().appendChild(this.domNode); @@ -12361,7 +13111,6 @@ dojo.declare( // 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, /*String[]?*/ position, /*Boolean*/ rtl){ @@ -12373,6 +13122,9 @@ dojo.declare( return; } + // reset width; it may have been set by orient() on a previous tooltip show() + this.domNode.width = "auto"; + if(this.fadeOut.status() == "playing"){ // previous tooltip is being hidden; wait until the hide completes then show new one this._onDeck=arguments; @@ -12389,12 +13141,17 @@ dojo.declare( this.aroundNode = aroundNode; }, - orient: function(/* DomNode */ node, /* String */ aroundCorner, /* String */ tooltipCorner){ + orient: function(/*DomNode*/ node, /*String*/ aroundCorner, /*String*/ tooltipCorner, /*Object*/ spaceAvailable, /*Object*/ aroundNodeCoords){ // summary: // Private function to set CSS for tooltip node based on which position it's in. - // This is called by the dijit popup code. + // This is called by the dijit popup code. It will also reduce the tooltip's + // width to whatever width is available // tags: // protected + this.connectorNode.style.top = ""; //reset to default + + //Adjust the spaceAvailable width, without changing the spaceAvailable object + var tooltipSpaceAvaliableWidth = spaceAvailable.w - this.connectorNode.offsetWidth; node.className = "dijitTooltip " + { @@ -12405,6 +13162,52 @@ dojo.declare( "BR-BL": "dijitTooltipRight", "BL-BR": "dijitTooltipLeft" }[aroundCorner + "-" + tooltipCorner]; + + // reduce tooltip's width to the amount of width available, so that it doesn't overflow screen + this.domNode.style.width = "auto"; + var size = dojo.contentBox(this.domNode); + + var width = Math.min((Math.max(tooltipSpaceAvaliableWidth,1)), size.w); + var widthWasReduced = width < size.w; + + this.domNode.style.width = width+"px"; + + //Adjust width for tooltips that have a really long word or a nowrap setting + if(widthWasReduced){ + this.containerNode.style.overflow = "auto"; //temp change to overflow to detect if our tooltip needs to be wider to support the content + var scrollWidth = this.containerNode.scrollWidth; + this.containerNode.style.overflow = "visible"; //change it back + if(scrollWidth > width){ + scrollWidth = scrollWidth + dojo.style(this.domNode,"paddingLeft") + dojo.style(this.domNode,"paddingRight"); + this.domNode.style.width = scrollWidth + "px"; + } + } + + // Reposition the tooltip connector. + if(tooltipCorner.charAt(0) == 'B' && aroundCorner.charAt(0) == 'B'){ + var mb = dojo.marginBox(node); + var tooltipConnectorHeight = this.connectorNode.offsetHeight; + if(mb.h > spaceAvailable.h){ + // The tooltip starts at the top of the page and will extend past the aroundNode + var aroundNodePlacement = spaceAvailable.h - (aroundNodeCoords.h / 2) - (tooltipConnectorHeight / 2); + this.connectorNode.style.top = aroundNodePlacement + "px"; + this.connectorNode.style.bottom = ""; + }else{ + // Align center of connector with center of aroundNode, except don't let bottom + // of connector extend below bottom of tooltip content, or top of connector + // extend past top of tooltip content + this.connectorNode.style.bottom = Math.min( + Math.max(aroundNodeCoords.h/2 - tooltipConnectorHeight/2, 0), + mb.h - tooltipConnectorHeight) + "px"; + this.connectorNode.style.top = ""; + } + }else{ + // reset the tooltip back to the defaults + this.connectorNode.style.top = ""; + this.connectorNode.style.bottom = ""; + } + + return Math.max(0, size.w - tooltipSpaceAvaliableWidth); }, _onShow: function(){ @@ -12421,6 +13224,7 @@ dojo.declare( hide: function(aroundNode){ // summary: // Hide the tooltip + if(this._onDeck && this._onDeck[1] == aroundNode){ // this hide request is for a show() that hasn't even started yet; // just cancel the pending show() @@ -12487,69 +13291,70 @@ dojo.declare( // the tooltip is displayed. showDelay: 400, - // connectId: [const] String[] - // Id's of domNodes to attach the tooltip to. - // When user hovers over any of the specified dom nodes, the tooltip will appear. - // - // Note: Currently connectId can only be specified on initialization, it cannot - // be changed via attr('connectId', ...) - // - // Note: in 2.0 this will be renamed to connectIds for less confusion. + // connectId: String|String[] + // Id of domNode(s) to attach the tooltip to. + // When user hovers over specified dom node, the tooltip will appear. connectId: [], // position: String[] // See description of `dijit.Tooltip.defaultPosition` for details on position parameter. position: [], - constructor: function(){ - // Map id's of nodes I'm connected to to a list of the this.connect() handles - this._nodeConnectionsById = {}; - }, + _setConnectIdAttr: function(/*String*/ newId){ + // summary: + // Connect to node(s) (specified by id) - _setConnectIdAttr: function(newIds){ - for(var oldId in this._nodeConnectionsById){ - this.removeTarget(oldId); - } - dojo.forEach(dojo.isArrayLike(newIds) ? newIds : [newIds], this.addTarget, this); - }, + // Remove connections to old nodes (if there are any) + dojo.forEach(this._connections || [], function(nested){ + dojo.forEach(nested, dojo.hitch(this, "disconnect")); + }, this); - _getConnectIdAttr: function(){ - var ary = []; - for(var id in this._nodeConnectionsById){ - ary.push(id); - } - return ary; + // Make connections to nodes in newIds. + var ary = dojo.isArrayLike(newId) ? newId : (newId ? [newId] : []); + this._connections = dojo.map(ary, function(id){ + var node = dojo.byId(id); + return node ? [ + this.connect(node, "onmouseenter", "_onTargetMouseEnter"), + this.connect(node, "onmouseleave", "_onTargetMouseLeave"), + this.connect(node, "onfocus", "_onTargetFocus"), + this.connect(node, "onblur", "_onTargetBlur") + ] : []; + }, this); + + this._set("connectId", newId); + + this._connectIds = ary; // save as array }, - addTarget: function(/*DOMNODE || String*/ id){ + addTarget: function(/*DOMNODE || String*/ node){ // summary: - // Attach tooltip to specified node, if it's not already connected - var node = dojo.byId(id); - if(!node){ return; } - if(node.id in this._nodeConnectionsById){ return; }//Already connected - - this._nodeConnectionsById[node.id] = [ - this.connect(node, "onmouseenter", "_onTargetMouseEnter"), - this.connect(node, "onmouseleave", "_onTargetMouseLeave"), - this.connect(node, "onfocus", "_onTargetFocus"), - this.connect(node, "onblur", "_onTargetBlur") - ]; + // Attach tooltip to specified node if it's not already connected + + // TODO: remove in 2.0 and just use set("connectId", ...) interface + + var id = node.id || node; + if(dojo.indexOf(this._connectIds, id) == -1){ + this.set("connectId", this._connectIds.concat(id)); + } }, removeTarget: function(/*DOMNODE || String*/ node){ // summary: // Detach tooltip from specified node - // map from DOMNode back to plain id string - var id = node.id || node; - - if(id in this._nodeConnectionsById){ - dojo.forEach(this._nodeConnectionsById[id], this.disconnect, this); - delete this._nodeConnectionsById[id]; + // TODO: remove in 2.0 and just use set("connectId", ...) interface + + var id = node.id || node, // map from DOMNode back to plain id string + idx = dojo.indexOf(this._connectIds, id); + if(idx >= 0){ + // remove id (modifies original this._connectIds but that's OK in this case) + this._connectIds.splice(idx, 1); + this.set("connectId", this._connectIds); } }, - postCreate: function(){ + buildRendering: function(){ + this.inherited(arguments); dojo.addClass(this.domNode,"dijitTooltipData"); }, @@ -12716,8 +13521,6 @@ dojo.provide("dijit.form.ValidationTextBox"); - - /*===== dijit.form.ValidationTextBox.__Constraints = function(){ // locale: String @@ -12738,7 +13541,7 @@ dojo.declare( // tags: // protected - templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" waiRole=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"), + templateString: dojo.cache("dijit.form", "templates/ValidationTextBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\" role=\"presentation\"\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class=\"dijitReset dijitInputInner\" dojoAttachPoint='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"), baseClass: "dijitTextBox dijitValidationTextBox", // required: Boolean @@ -12747,6 +13550,7 @@ dojo.declare( // promptMessage: String // If defined, display this hint string immediately on focus to the textbox, if empty. + // Also displays if the textbox value is Incomplete (not yet valid but will be with additional input). // Think of this like a tooltip that tells the user what to do, not an error message // that tells the user what they've done wrong. // @@ -12765,6 +13569,12 @@ dojo.declare( // Set to "" to use the invalidMessage instead. missingMessage: "$_unset_$", + // message: String + // Currently error/prompt message. + // When using the default tooltip implementation, this will only be + // displayed when the field is focused. + message: "", + // constraints: dijit.form.ValidationTextBox.__Constraints // user-defined object needed to pass parameters to the validator functions constraints: {}, @@ -12774,7 +13584,7 @@ dojo.declare( // Do not specify both regExp and regExpGen regExp: ".*", - regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/constraints){ + regExpGen: function(/*dijit.form.ValidationTextBox.__Constraints*/ constraints){ // summary: // Overridable function used to generate regExp when dependent on constraints. // Do not specify both regExp and regExpGen. @@ -12784,7 +13594,7 @@ dojo.declare( }, // state: [readonly] String - // Shows current state (ie, validation result) of input (Normal, Warning, or Error) + // Shows current state (ie, validation result) of input (""=Normal, Incomplete, or Error) state: "", // tooltipPosition: String[] @@ -12793,12 +13603,12 @@ dojo.declare( _setValueAttr: function(){ // summary: - // Hook so attr('value', ...) works. + // Hook so set('value', ...) works. this.inherited(arguments); this.validate(this._focused); }, - validator: function(/*anything*/value, /*dijit.form.ValidationTextBox.__Constraints*/constraints){ + validator: function(/*anything*/ value, /*dijit.form.ValidationTextBox.__Constraints*/ constraints){ // summary: // Overridable function used to validate the text input against the regular expression. // tags: @@ -12827,7 +13637,7 @@ dojo.declare( _isEmpty: function(value){ // summary: // Checks for whitespace - return /^\s*$/.test(value); // Boolean + return (this.trim ? /^\s*$/ : /^$/).test(value); // Boolean }, getErrorMessage: function(/*Boolean*/ isFocused){ @@ -12858,37 +13668,32 @@ dojo.declare( var isValid = this.disabled || this.isValid(isFocused); if(isValid){ this._maskValidSubsetError = true; } var isEmpty = this._isEmpty(this.textbox.value); - var isValidSubset = !isValid && !isEmpty && isFocused && this._isValidSubset(); - this.state = ((isValid || ((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "" : "Error"; - if(this.state == "Error"){ this._maskValidSubsetError = isFocused; } // we want the error to show up afer a blur and refocus - this._setStateClass(); + var isValidSubset = !isValid && isFocused && this._isValidSubset(); + this._set("state", isValid ? "" : (((((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "Incomplete" : "Error")); dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true"); - if(isFocused){ - if(this.state == "Error"){ - message = this.getErrorMessage(true); - }else{ - message = this.getPromptMessage(true); // show the prompt whever there's no error - } - this._maskValidSubsetError = true; // since we're focused, always mask warnings + + if(this.state == "Error"){ + this._maskValidSubsetError = isFocused && isValidSubset; // we want the error to show up after a blur and refocus + message = this.getErrorMessage(isFocused); + }else if(this.state == "Incomplete"){ + message = this.getPromptMessage(isFocused); // show the prompt whenever the value is not yet complete + this._maskValidSubsetError = !this._hasBeenBlurred || isFocused; // no Incomplete warnings while focused + }else if(isEmpty){ + message = this.getPromptMessage(isFocused); // show the prompt whenever there's no error and no text } - this.displayMessage(message); + this.set("message", message); + return isValid; }, - // _message: String - // Currently displayed message - _message: "", - displayMessage: function(/*String*/ message){ // summary: // Overridable method to display validation errors/hints. // By default uses a tooltip. // tags: // extension - if(this._message == message){ return; } - this._message = message; dijit.hideTooltip(this.domNode); - if(message){ + if(message && this._focused){ dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight()); } }, @@ -12905,11 +13710,11 @@ dojo.declare( this.constraints = {}; }, - _setConstraintsAttr: function(/* Object */ constraints){ + _setConstraintsAttr: function(/*Object*/ constraints){ if(!constraints.locale && this.lang){ constraints.locale = this.lang; } - this.constraints = constraints; + this._set("constraints", constraints); this._computePartialRE(); }, @@ -12966,11 +13771,16 @@ dojo.declare( }, _setRequiredAttr: function(/*Boolean*/ value){ - this.required = value; + this._set("required", value); dijit.setWaiState(this.focusNode, "required", value); this._refreshState(); }, + _setMessageAttr: function(/*String*/ message){ + this._set("message", message); + this.displayMessage(message); + }, + reset:function(){ // Overrides dijit.form.TextBox.reset() by also // hiding errors about partial matches @@ -12979,7 +13789,10 @@ dojo.declare( }, _onBlur: function(){ + // the message still exists but for back-compat, and to erase the tooltip + // (if the message is being displayed as a tooltip), call displayMessage('') this.displayMessage(''); + this.inherited(arguments); } } @@ -13010,9 +13823,9 @@ dojo.declare( this.nameAttrSetting = ""; }, - serialize: function(/*anything*/val, /*Object?*/options){ + serialize: function(/*anything*/ val, /*Object?*/ options){ // summary: - // Overridable function used to convert the attr('value') result to a canonical + // Overridable function used to convert the get('value') result to a canonical // (non-localized) string. For example, will print dates in ISO format, and // numbers the same way as they are represented in javascript. // tags: @@ -13044,10 +13857,10 @@ dojo.declare( // (as opposed to the displayed value). // Passing in name as markup rather than calling dojo.create() with an attrs argument // to make dojo.query(input[name=...]) work on IE. (see #8660) - this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name + "'" : "") + ">", this.textbox, "after"); + this.valueNode = dojo.place("<input type='hidden'" + (this.name ? " name='" + this.name.replace(/'/g, """) + "'" : "") + "/>", this.textbox, "after"); }, - reset:function(){ + reset: function(){ // Overrides `dijit.form.ValidationTextBox.reset` to // reset the hidden textbox value to '' this.valueNode.value = ''; @@ -13151,7 +13964,7 @@ dojo.declare( } }, - _setConstraintsAttr: function(/* Object */ constraints){ + _setConstraintsAttr: function(/*Object*/ constraints){ this.inherited(arguments); if(this.focusNode){ // not set when called from postMixInProperties if(this.constraints.min !== undefined){ @@ -13169,7 +13982,7 @@ dojo.declare( _setValueAttr: function(/*Number*/ value, /*Boolean?*/ priorityChange){ // summary: - // Hook so attr('value', ...) works. + // Hook so set('value', ...) works. dijit.setWaiState(this.focusNode, "valuenow", value); this.inherited(arguments); @@ -13193,10 +14006,9 @@ dojo.provide("dijit.form.ComboBox"); - dojo.declare( "dijit.form.ComboBoxMixin", - null, + dijit._HasDropDown, { // summary: // Implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect` @@ -13215,14 +14027,14 @@ dojo.declare( // Specifies number of search results per page (before hitting "next" button) pageSize: Infinity, - // store: Object + // store: [const] Object // Reference to data provider object used by this ComboBox store: null, // fetchProperties: Object // Mixin to the dojo.data store's fetch. // For example, to set the sort order of the ComboBox menu, pass: - // | { sort: {attribute:"name",descending: true} } + // | { sort: [{attribute:"name",descending: true}] } // To override the default queryOptions so that deep=false, do: // | { queryOptions: {ignoreCase: true, deep: false} } fetchProperties:{}, @@ -13275,7 +14087,7 @@ dojo.declare( // This specifies what query ComboBox/FilteringSelect sends to the data store, // based on what the user has typed. Changing this expression will modify // whether the drop down shows only exact matches, a "starting with" match, - // etc. Use it in conjunction with highlightMatch. + // etc. Use it in conjunction with highlightMatch. // dojo.data query expression pattern. // `${0}` will be substituted for the user text. // `*` is used for wildcards. @@ -13286,21 +14098,32 @@ dojo.declare( // Set true if the ComboBox/FilteringSelect should ignore case when matching possible items ignoreCase: true, - // hasDownArrow: [const] Boolean + // hasDownArrow: Boolean // Set this textbox to have a down arrow button, to display the drop down list. // Defaults to true. hasDownArrow: true, - templateString: dojo.cache("dijit.form", "templates/ComboBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"▼ \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"), + templateString: dojo.cache("dijit.form", "templates/DropDownBox.html", "<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"_buttonNode, _popupStateNode\" role=\"presentation\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"▼ \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"Χ \" type=\"text\" tabIndex=\"-1\" readonly=\"readonly\" role=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"), baseClass: "dijitTextBox dijitComboBox", + // dropDownClass: [protected extension] String + // Name of the dropdown widget class used to select a date/time. + // Subclasses should specify this. + dropDownClass: "dijit.form._ComboBoxMenu", + // Set classes like dijitDownArrowButtonHover depending on // mouse action over button node cssStateNodes: { - "downArrowNode": "dijitDownArrowButton" + "_buttonNode": "dijitDownArrowButton" }, + // Flags to _HasDropDown to limit height of drop down to make it fit in viewport + maxHeight: -1, + + // For backwards compatibility let onClick events propagate, even clicks on the down arrow button + _stopClickEvents: false, + _getCaretPos: function(/*DomNode*/ element){ // khtml 3.5.2 has selection* methods as does webkit nightlies from 2005-06-22 var pos = 0; @@ -13317,7 +14140,7 @@ dojo.declare( tr.move("character",0); ntr.move("character",0); try{ - // If control doesnt have focus, you get an exception. + // If control doesn't 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); @@ -13338,7 +14161,7 @@ dojo.declare( // Additional code to set disabled state of ComboBox node. // Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr(). this.inherited(arguments); - dijit.setWaiState(this.comboNode, "disabled", value); + dijit.setWaiState(this.domNode, "disabled", value); }, _abortQuery: function(){ @@ -13358,29 +14181,39 @@ dojo.declare( // Handles paste events if(!this.searchTimer && (evt.type == 'paste'/*IE|WebKit*/ || evt.type == 'input'/*Firefox*/) && this._lastInput != this.textbox.value){ this.searchTimer = setTimeout(dojo.hitch(this, function(){ - this._onKeyPress({charOrCode: 229}); // fake IME key to cause a search + this._onKey({charOrCode: 229}); // fake IME key to cause a search }), 100); // long delay that will probably be preempted by keyboard input } this.inherited(arguments); }, - _onKeyPress: function(/*Event*/ evt){ + _onKey: function(/*Event*/ evt){ // summary: // Handles keyboard events + var key = evt.charOrCode; + // except for cutting/pasting case - ctrl + x/v if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == dojo.keys.SHIFT){ return; // throw out weird key combinations and spurious events } + var doSearch = false; - var searchFunction = "_startSearchFromInput"; - var pw = this._popupWidget; + var pw = this.dropDown; var dk = dojo.keys; var highlighted = null; this._prev_key_backspace = false; this._abortQuery(); - if(this._isShowingNow){ - pw.handleKey(key); + + // _HasDropDown will do some of the work: + // 1. when drop down is not yet shown: + // - if user presses the down arrow key, call loadDropDown() + // 2. when drop down is already displayed: + // - on ESC key, call closeDropDown() + // - otherwise, call dropDown.handleKey() to process the keystroke + this.inherited(arguments); + + if(this._opened){ highlighted = pw.getHighlightedOption(); } switch(key){ @@ -13388,10 +14221,9 @@ dojo.declare( case dk.DOWN_ARROW: case dk.PAGE_UP: case dk.UP_ARROW: - if(!this._isShowingNow){ - doSearch = true; - searchFunction = "_startSearchAll"; - }else{ + // Keystroke caused ComboBox_menu to move to a different item. + // Copy new item to <input> box. + if(this._opened){ this._announceOption(highlighted); } dojo.stopEvent(evt); @@ -13418,8 +14250,12 @@ dojo.declare( this._setCaretPos(this.focusNode, this.focusNode.value.length); // move cursor to end and cancel highlighting } // default case: + // if enter pressed while drop down is open, or for FilteringSelect, + // if we are in the middle of a query to convert a directly typed in value to an item, // prevent submit, but allow event to bubble + if(this._opened || this._fetchHandle){ evt.preventDefault(); + } // fall through case dk.TAB: @@ -13435,29 +14271,24 @@ dojo.declare( if(highlighted){ this._selectOption(); } - if(this._isShowingNow){ + if(this._opened){ this._lastQuery = null; // in case results come back later - this._hideResultList(); + this.closeDropDown(); } break; case ' ': if(highlighted){ + // user is effectively clicking a choice in the drop down menu dojo.stopEvent(evt); this._selectOption(); - this._hideResultList(); + this.closeDropDown(); }else{ + // user typed a space into the input box, treat as normal character doSearch = true; } break; - case dk.ESCAPE: - if(this._isShowingNow){ - dojo.stopEvent(evt); - this._hideResultList(); - } - break; - case dk.DELETE: case dk.BACKSPACE: this._prev_key_backspace = true; @@ -13467,15 +14298,14 @@ dojo.declare( default: // Non char keys (F1-F12 etc..) shouldn't open list. // Ascii characters and IME input (Chinese, Japanese etc.) should. - // On IE and safari, IME input produces keycode == 229, and we simulate - // it on firefox by attaching to compositionend event (see compositionend method) + //IME input produces keycode == 229. doSearch = typeof key == 'string' || key == 229; } if(doSearch){ // need to wait a tad before start search so that the event // bubbles through DOM and we have value visible this.item = undefined; // undefined means item needs to be set - this.searchTimer = setTimeout(dojo.hitch(this, searchFunction),1); + this.searchTimer = setTimeout(dojo.hitch(this, "_startSearchFromInput"),1); } }, @@ -13511,6 +14341,12 @@ dojo.declare( }, _openResultList: function(/*Object*/ results, /*Object*/ dataObject){ + // summary: + // Callback when a search completes. + // description: + // 1. generates drop-down list and calls _showResultList() to display it + // 2. if this result list is from user pressing "more choices"/"previous choices" + // then tell screen reader to announce new option this._fetchHandle = null; if( this.disabled || this.readOnly || @@ -13518,13 +14354,13 @@ dojo.declare( ){ return; } - this._popupWidget.clearResultList(); - if(!results.length && !this._maxOptions){ // this condition needs to match !this._isvalid set in FilteringSelect::_openResultList - this._hideResultList(); + var wasSelected = this.dropDown._highlighted_option && dojo.hasClass(this.dropDown._highlighted_option, "dijitMenuItemSelected"); + this.dropDown.clearResultList(); + if(!results.length && !this._maxOptions){ // if no results and not just the previous choices button + this.closeDropDown(); 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 @@ -13532,7 +14368,7 @@ dojo.declare( // highlighted. dataObject._maxOptions = this._maxOptions; - var nodes = this._popupWidget.createOptions( + var nodes = this.dropDown.createOptions( results, dataObject, dojo.hitch(this, "_getMenuLabelFromItem") @@ -13546,12 +14382,14 @@ dojo.declare( // shouting the next choice if(dataObject.direction){ if(1 == dataObject.direction){ - this._popupWidget.highlightFirstOption(); + this.dropDown.highlightFirstOption(); }else if(-1 == dataObject.direction){ - this._popupWidget.highlightLastOption(); + this.dropDown.highlightLastOption(); + } + if(wasSelected){ + this._announceOption(this.dropDown.getHighlightedOption()); } - this._announceOption(this._popupWidget.getHighlightedOption()); - }else if(this.autoComplete && !this._prev_key_backspace /*&& !dataObject.direction*/ + }else if(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 @@ -13562,62 +14400,42 @@ dojo.declare( }, _showResultList: function(){ - this._hideResultList(); + // summary: + // Display the drop down if not already displayed, or if it is displayed, then + // reposition it if necessary (reposition may be necessary if drop down's height changed). + + this.closeDropDown(true); + // 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 - // and - // http://trac.dojotoolkit.org/ticket/4108 - - - // 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) - dojo.style(this._popupWidget.domNode, {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) - }); + this.openDropDown(); + + dijit.setWaiState(this.domNode, "expanded", "true"); + }, + + loadDropDown: function(/*Function*/ callback){ + // Overrides _HasDropDown.loadDropDown(). + // This is called when user has pressed button icon or pressed the down arrow key + // to open the drop down. - // If we increased the width of drop down to match the width of ComboBox.domNode, - // then need to reposition the drop down (wrapper) so (all of) the drop down still - // appears underneath the ComboBox.domNode - if(newwidth < this.domNode.offsetWidth){ - this._popupWidget.domNode.parentNode.style.left = dojo.position(this.domNode, true).x + "px"; - } + this._startSearchAll(); + }, - dijit.setWaiState(this.comboNode, "expanded", "true"); + isLoaded: function(){ + // signal to _HasDropDown that it needs to call loadDropDown() to load the + // drop down asynchronously before displaying it + return false; }, - _hideResultList: function(){ + closeDropDown: function(){ + // Overrides _HasDropDown.closeDropDown(). Closes the drop down (assuming that it's open). + // This method is the callback when the user types ESC or clicking + // the button icon while the drop down is open. It's also called by other code. this._abortQuery(); - if(this._isShowingNow){ - dijit.popup.close(this._popupWidget); - this._isShowingNow=false; - dijit.setWaiState(this.comboNode, "expanded", "false"); + if(this._opened){ + this.inherited(arguments); + dijit.setWaiState(this.domNode, "expanded", "false"); dijit.removeWaiState(this.focusNode,"activedescendant"); } }, @@ -13629,7 +14447,7 @@ dojo.declare( // if value is now more choices or previous choices, revert // the value var newvalue = this.get('displayedValue'); - var pw = this._popupWidget; + var pw = this.dropDown; if(pw && ( newvalue == pw._messages["previousMessage"] || newvalue == pw._messages["nextMessage"] @@ -13651,23 +14469,25 @@ dojo.declare( _onBlur: function(){ // summary: // Called magically when focus has shifted away from this widget and it's drop down - this._hideResultList(); + this.closeDropDown(); this.inherited(arguments); }, _setItemAttr: function(/*item*/ item, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){ // summary: - // Set the displayed valued in the input box, and the hidden value - // that gets submitted, based on a dojo.data store item. + // Set the displayed valued in the input box, and the hidden value + // that gets submitted, based on a dojo.data store item. // description: - // Users shouldn't call this function; they should be calling - // attr('item', value) + // Users shouldn't call this function; they should be calling + // set('item', value) // tags: - // private - if(!displayedValue){ displayedValue = this.labelFunc(item, this.store); } - this.value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue; - this.item = item; - dijit.form.ComboBox.superclass._setValueAttr.call(this, this.value, priorityChange, displayedValue); + // private + if(!displayedValue){ + displayedValue = this.store.getValue(item, this.searchAttr); + } + var value = this._getValueField() != this.searchAttr? this.store.getIdentity(item) : displayedValue; + this._set("item", item); + dijit.form.ComboBox.superclass._setValueAttr.call(this, value, priorityChange, displayedValue); }, _announceOption: function(/*Node*/ node){ @@ -13681,13 +14501,13 @@ dojo.declare( } // pull the text value from the item attached to the DOM node var newValue; - if(node == this._popupWidget.nextButton || - node == this._popupWidget.previousButton){ + if(node == this.dropDown.nextButton || + node == this.dropDown.previousButton){ newValue = node.innerHTML; this.item = undefined; this.value = ''; }else{ - newValue = this.labelFunc(node.item, this.store); + newValue = this.store.getValue(node.item, this.searchAttr).toString(); this.set('item', node.item, false, newValue); } // get the text that the user manually entered (cut off autocompleted text) @@ -13704,28 +14524,11 @@ dojo.declare( if(evt){ this._announceOption(evt.target); } - this._hideResultList(); + this.closeDropDown(); this._setCaretPos(this.focusNode, this.focusNode.value.length); dijit.form._FormValueWidget.prototype._setValueAttr.call(this, this.value, true); // set this.value and fire onChange }, - _onArrowMouseDown: function(evt){ - // summary: - // Callback when arrow is clicked - if(this.disabled || this.readOnly){ - 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._startSearchAll(); - } - }, - _startSearchAll: function(){ this._startSearch(''); }, @@ -13739,9 +14542,13 @@ dojo.declare( }, _startSearch: function(/*String*/ key){ - if(!this._popupWidget){ - var popupId = this.id + "_popup"; - this._popupWidget = new dijit.form._ComboBoxMenu({ + // summary: + // Starts a search for elements matching key (key=="" means to return all items), + // and calls _openResultList() when the search completes, to display the results. + if(!this.dropDown){ + var popupId = this.id + "_popup", + dropDownConstructor = dojo.getObject(this.dropDownClass, false); + this.dropDown = new dropDownConstructor({ onChange: dojo.hitch(this, this._selectOption), id: popupId, dir: this.dir @@ -13770,7 +14577,7 @@ dojo.declare( onError: function(errText){ _this._fetchHandle = null; console.error('dijit.form.ComboBox: ' + errText); - dojo.hitch(_this, "_hideResultList")(); + _this.closeDropDown(); }, start: 0, count: this.pageSize @@ -13785,8 +14592,9 @@ dojo.declare( // reader knows which menu option to shout dataObject.direction = direction; this._fetchHandle = this.store.fetch(dataObject); + this.focus(); }; - this._nextSearch = this._popupWidget.onPage = dojo.hitch(this, nextSearch, this._fetchHandle); + this._nextSearch = this.dropDown.onPage = dojo.hitch(this, nextSearch, this._fetchHandle); }, query, this), this.searchDelay); }, @@ -13795,29 +14603,12 @@ dojo.declare( }, _getValueField: function(){ - // summmary: + // summary: // Helper for postMixInProperties() to set this.value based on data inlined into the markup. // Returns the attribute name in the item (in dijit.form._ComboBoxDataStore) to use as the value. return this.searchAttr; }, - /////////////// Event handlers ///////////////////// - - // FIXME: For 2.0, rename to "_compositionEnd" - 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/safari) - // tags: - // private - - // 229 is the code produced by IE and safari while pressing keys during - // IME input mode - this._onKeyPress({charOrCode: 229}); - }, - //////////// INITIALIZATION METHODS /////////////////////////////////////// constructor: function(){ @@ -13841,13 +14632,14 @@ dojo.declare( // by the selected attribute of an option tag // IE6 does not set value, Opera sets value = selectedIndex if(!("value" in this.params)){ - var item = this.store.fetchSelectedItem(); + var item = (this.item = this.store.fetchSelectedItem()); if(item){ var valueField = this._getValueField(); - this.value = valueField != this.searchAttr? this.store.getValue(item, valueField) : this.labelFunc(item, this.store); + this.value = this.store.getValue(item, valueField); } } } + this.inherited(arguments); }, @@ -13857,32 +14649,24 @@ dojo.declare( // tags: // protected - if(!this.hasDownArrow){ - this.downArrowNode.style.display = "none"; - } - // find any associated label element and add to ComboBox node. var label=dojo.query('label[for="'+this.id+'"]'); if(label.length){ label[0].id = (this.id+"_label"); - var cn=this.comboNode; - dijit.setWaiState(cn, "labelledby", label[0].id); + dijit.setWaiState(this.domNode, "labelledby", label[0].id); } this.inherited(arguments); }, - uninitialize: function(){ - if(this._popupWidget && !this._popupWidget._destroyed){ - this._hideResultList(); - this._popupWidget.destroy(); - } - this.inherited(arguments); + _setHasDownArrowAttr: function(val){ + this.hasDownArrow = val; + this._buttonNode.style.display = val ? "" : "none"; }, _getMenuLabelFromItem: function(/*Item*/ item){ - var label = this.labelAttr? this.store.getValue(item, this.labelAttr) : this.labelFunc(item, this.store); - var labelType = this.labelType; + var label = this.labelFunc(item, this.store), + labelType = this.labelType; // If labelType is not "text" we don't want to screw any markup ot whatever. if(this.highlightMatch != "none" && this.labelType == "text" && this._lastInput){ label = this.doHighlight(label, this._escapeHtml(this._lastInput)); @@ -13891,24 +14675,27 @@ dojo.declare( return {html: labelType == "html", label: label}; }, - doHighlight: function(/*String*/label, /*String*/find){ + doHighlight: function(/*String*/ label, /*String*/ find){ // summary: // Highlights the string entered by the user in the menu. By default this - // highlights the first occurence found. Override this method - // to implement your custom highlighing. + // highlights the first occurrence found. Override this method + // to implement your custom highlighting. // tags: // protected - // Add greedy when this.highlightMatch == "all" - var modifiers = "i"+(this.highlightMatch == "all"?"g":""); - var escapedLabel = this._escapeHtml(label); + var + // Add (g)lobal modifier when this.highlightMatch == "all" and (i)gnorecase when this.ignoreCase == true + modifiers = (this.ignoreCase ? "i" : "") + (this.highlightMatch == "all" ? "g" : ""), + i = this.queryExpr.indexOf("${0}"); find = dojo.regexp.escapeString(find); // escape regexp special chars - var ret = escapedLabel.replace(new RegExp("(^|\\s)("+ find +")", modifiers), - '$1<span class="dijitComboBoxHighlightMatch">$2</span>'); - return ret;// returns String, (almost) valid HTML (entities encoded) + return this._escapeHtml(label).replace( + // prepend ^ when this.queryExpr == "${0}*" and append $ when this.queryExpr == "*${0}" + new RegExp((i == 0 ? "^" : "") + "("+ find +")" + (i == (this.queryExpr.length - 4) ? "$" : ""), modifiers), + '<span class="dijitComboBoxHighlightMatch">$1</span>' + ); // returns String, (almost) valid HTML (entities encoded) }, - _escapeHtml: function(/*string*/str){ + _escapeHtml: function(/*String*/ str){ // TODO Should become dojo.html.entities(), when exists use instead // summary: // Adds escape sequences for special characters in XML: &<>"' @@ -13917,19 +14704,6 @@ dojo.declare( return str; // string }, - open: function(){ - // summary: - // Opens the drop down menu. TODO: rename to _open. - // tags: - // private - this._isShowingNow=true; - return dijit.popup.open({ - popup: this._popupWidget, - around: this.domNode, - parent: this - }); - }, - reset: function(){ // Overrides the _FormWidget.reset(). // Additionally reset the .item (to clean up). @@ -13939,15 +14713,15 @@ dojo.declare( labelFunc: function(/*item*/ item, /*dojo.data.store*/ store){ // summary: - // Computes the label to display based on the dojo.data store item. + // Computes the label to display based on the dojo.data store item. // returns: - // The label that the ComboBox should display + // The label that the ComboBox should display // tags: - // private + // private // Use toString() because XMLStore returns an XMLItem whereas this // method is expected to return a String (#9354) - return store.getValue(item, this.searchAttr).toString(); // String + return store.getValue(item, this.labelAttr || this.searchAttr).toString(); // String } } ); @@ -13961,9 +14735,9 @@ dojo.declare( // tags: // private - templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>" - +"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>" - +"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>" + templateString: "<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' style='overflow: \"auto\"; overflow-x: \"hidden\";'>" + +"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' role='option'></li>" + +"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' role='option'></li>" +"</ul>", // _messages: Object @@ -13973,8 +14747,16 @@ dojo.declare( baseClass: "dijitComboBoxMenu", postMixInProperties: function(){ + this.inherited(arguments); this._messages = dojo.i18n.getLocalization("dijit.form", "ComboBox", this.lang); + }, + + buildRendering: function(){ this.inherited(arguments); + + // fill in template with i18n messages + this.previousButton.innerHTML = this._messages["previousMessage"]; + this.nextButton.innerHTML = this._messages["nextMessage"]; }, _setValueAttr: function(/*Object*/ value){ @@ -13997,13 +14779,6 @@ dojo.declare( // callback }, - postCreate: function(){ - // fill in template with i18n messages - this.previousButton.innerHTML = this._messages["previousMessage"]; - this.nextButton.innerHTML = this._messages["nextMessage"]; - this.inherited(arguments); - }, - onClose: function(){ // summary: // Callback from dijit.popup code to this widget, notifying it that it closed @@ -14017,9 +14792,11 @@ dojo.declare( // Creates an option to appear on the popup menu subclassed by // `dijit.form.FilteringSelect`. + var menuitem = dojo.create("li", { + "class": "dijitReset dijitMenuItem" +(this.isLeftToRight() ? "" : " dijitMenuItemRtl"), + role: "option" + }); var labelObject = labelFunc(item); - var menuitem = dojo.doc.createElement("li"); - dijit.setWaiRole(menuitem, "option"); if(labelObject.html){ menuitem.innerHTML = labelObject.label; }else{ @@ -14056,8 +14833,6 @@ dojo.declare( // iterate over cache nondestructively dojo.forEach(results, function(item, i){ var menuitem = this._createOption(item, labelFunc); - menuitem.className = "dijitReset dijitMenuItem" + - (this.isLeftToRight() ? "" : " dijitMenuItemRtl"); dojo.attr(menuitem, "id", this.id + i); this.domNode.insertBefore(menuitem, this.nextButton); }, this); @@ -14090,6 +14865,7 @@ dojo.declare( while(this.domNode.childNodes.length>2){ this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]); } + this._blurOptionNode(); }, _onMouseDown: function(/*Event*/ evt){ @@ -14098,10 +14874,14 @@ dojo.declare( _onMouseUp: function(/*Event*/ evt){ if(evt.target === this.domNode || !this._highlighted_option){ + // !this._highlighted_option check to prevent immediate selection when menu appears on top + // of <input>, see #9898. Note that _HasDropDown also has code to prevent this. return; }else if(evt.target == this.previousButton){ + this._blurOptionNode(); this.onPage(-1); }else if(evt.target == this.nextButton){ + this._blurOptionNode(); this.onPage(1); }else{ var tgt = evt.target; @@ -14268,20 +15048,25 @@ dojo.declare( return (ho && ho.parentNode) ? ho : null; }, - handleKey: function(key){ - switch(key){ + handleKey: function(evt){ + // summary: + // Handle keystroke event forwarded from ComboBox, returning false if it's + // a keystroke I recognize and process, true otherwise. + switch(evt.charOrCode){ case dojo.keys.DOWN_ARROW: this._highlightNextOption(); - break; + return false; case dojo.keys.PAGE_DOWN: this.pageDown(); - break; + return false; case dojo.keys.UP_ARROW: this._highlightPrevOption(); - break; + return false; case dojo.keys.PAGE_UP: this.pageUp(); - break; + return false; + default: + return true; } } } @@ -14309,10 +15094,10 @@ dojo.declare( _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue){ // summary: - // Hook so attr('value', value) works. + // Hook so set('value', value) works. // description: // Sets the value of the select. - this.item = null; // value not looked up in store + this._set("item", null); // value not looked up in store if(!value){ value = ''; } // null translates to blank dijit.form.ValidationTextBox.prototype._setValueAttr.call(this, value, priorityChange, displayedValue); } @@ -14356,13 +15141,13 @@ dojo.declare("dijit.form._ComboBoxDataStore", null, { }, - getValue: function( /* item */ item, - /* attribute-name-string */ attribute, - /* value? */ defaultValue){ + getValue: function( /*item*/ item, + /*attribute-name-string*/ attribute, + /*value?*/ defaultValue){ return (attribute == "value") ? item.value : (item.innerText || item.textContent || ''); }, - isItemLoaded: function(/* anything */ something){ + isItemLoaded: function(/*anything*/ something){ return true; }, @@ -14370,9 +15155,9 @@ dojo.declare("dijit.form._ComboBoxDataStore", null, { return {"dojo.data.api.Read": true, "dojo.data.api.Identity": true}; }, - _fetchItems: function( /* Object */ args, - /* Function */ findCallback, - /* Function */ errorCallback){ + _fetchItems: function( /*Object*/ args, + /*Function*/ findCallback, + /*Function*/ errorCallback){ // summary: // See dojo.data.util.simpleFetch.fetch() if(!args.query){ args.query = {}; } @@ -14388,19 +15173,19 @@ dojo.declare("dijit.form._ComboBoxDataStore", null, { findCallback(items, args); }, - close: function(/*dojo.data.api.Request || args || null */ request){ + close: function(/*dojo.data.api.Request || args || null*/ request){ return; }, - getLabel: function(/* item */ item){ + getLabel: function(/*item*/ item){ return item.innerHTML; }, - getIdentity: function(/* item */ item){ + getIdentity: function(/*item*/ item){ return dojo.attr(item, "value"); }, - fetchItemByIdentity: function(/* Object */ args){ + fetchItemByIdentity: function(/*Object*/ args){ // summary: // Given the identity of an item, this method returns the item that has // that identity through the onItem callback. @@ -14468,17 +15253,19 @@ dojo.declare( // - List can be specified either as a static list or via a javascript // function (that can get the list from a server) - _isvalid: true, - // required: Boolean // True (default) if user is required to enter a value into this field. required: true, _lastDisplayedValue: "", + _isValidSubset: function(){ + return this._opened; + }, + isValid: function(){ // Overrides ValidationTextBox.isValid() - return this._isvalid || (!this.required && this.get('displayedValue') == ""); // #5974 + return this.item || (!this.required && this.get('displayedValue') == ""); // #5974 }, _refreshState: function(){ @@ -14487,12 +15274,12 @@ dojo.declare( } }, - _callbackSetLabel: function( /*Array*/ result, + _callbackSetLabel: function( + /*Array*/ result, /*Object*/ dataObject, /*Boolean?*/ priorityChange){ // summary: - // Callback function that dynamically sets the label of the - // ComboBox + // Callback from dojo.data after lookup of user entered value finishes // setValue does a synchronous lookup, // so it calls _callbackSetLabel directly, @@ -14502,35 +15289,38 @@ dojo.declare( return; } if(!result.length){ - //#3268: do nothing on bad input + //#3268: don't modify display value on bad input //#3285: change CSS to indicate error this.valueNode.value = ""; dijit.form.TextBox.superclass._setValueAttr.call(this, "", priorityChange || (priorityChange === undefined && !this._focused)); - this._isvalid = false; + this._set("item", null); this.validate(this._focused); - this.item = null; }else{ this.set('item', result[0], priorityChange); } }, _openResultList: function(/*Object*/ results, /*Object*/ dataObject){ + // Callback when a data store query completes. // Overrides ComboBox._openResultList() // #3285: tap into search callback to see if user's query resembles a match if(dataObject.query[this.searchAttr] != this._lastQuery){ return; } + dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments); + if(this.item === undefined){ // item == undefined for keyboard search - this._isvalid = results.length != 0 || this._maxOptions != 0; // result.length==0 && maxOptions != 0 implies the nextChoices item selected but then the datastore returned 0 more entries + // If the search returned no items that means that the user typed + // in something invalid (and they can't make it valid by typing more characters), + // so flag the FilteringSelect as being in an invalid state this.validate(true); } - dijit.form.ComboBoxMixin.prototype._openResultList.apply(this, arguments); }, _getValueAttr: function(){ // summary: - // Hook for attr('value') to work. + // Hook for get('value') to work. // don't get the textbox value but rather the previously set hidden value. // Use this.valueNode.value which isn't always set for other MappedTextBox widgets until blur @@ -14544,7 +15334,7 @@ dojo.declare( _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange){ // summary: - // Hook so attr('value', value) works. + // Hook so set('value', value) works. // description: // Sets the value of the select. // Also sets the label to the corresponding value by reverse lookup. @@ -14572,10 +15362,9 @@ dojo.declare( // that gets submitted, based on a dojo.data store item. // description: // Users shouldn't call this function; they should be calling - // attr('item', value) + // set('item', value) // tags: // private - this._isvalid = true; this.inherited(arguments); this.valueNode.value = this.value; this._lastDisplayedValue = this.textbox.value; @@ -14587,30 +15376,38 @@ dojo.declare( _setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){ // summary: - // Hook so attr('displayedValue', label) works. + // Hook so set('displayedValue', label) works. // description: // Sets textbox to display label. Also performs reverse lookup - // to set the hidden value. + // to set the hidden value. label should corresponding to item.searchAttr. - // When this is called during initialization it'll ping the datastore - // for reverse lookup, and when that completes (after an XHR request) - // will call setValueAttr()... but that shouldn't trigger an onChange() - // event, even when it happens after creation has finished + if(label == null){ label = ''; } + + // This is called at initialization along with every custom setter. + // Usually (or always?) the call can be ignored. If it needs to be + // processed then at least make sure that the XHR request doesn't trigger an onChange() + // event, even if it returns after creation has finished if(!this._created){ + if(!("displayedValue" in this.params)){ + return; + } priorityChange = false; } + // Do a reverse lookup to map the specified displayedValue to the hidden value. + // Note that if there's a custom labelFunc() this code if(this.store){ - this._hideResultList(); + this.closeDropDown(); var query = dojo.clone(this.query); // #6196: populate query with user-specifics // escape meta characters of dojo.data.util.filter.patternToRegExp(). this._lastQuery = query[this.searchAttr] = this._getDisplayQueryString(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 + // 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._set("displayedValue", label); // for watch("displayedValue") notification var _this = this; var fetch = { query: query, @@ -14633,11 +15430,6 @@ dojo.declare( } }, - postMixInProperties: function(){ - this.inherited(arguments); - this._isvalid = !this.required; - }, - undo: function(){ this.set('displayedValue', this._lastDisplayedValue); } @@ -14654,9 +15446,10 @@ dojo.provide("dijit.form.Form"); + dojo.declare( "dijit.form.Form", - [dijit._Widget, dijit._Templated, dijit.form._FormMixin], + [dijit._Widget, dijit._Templated, dijit.form._FormMixin, dijit.layout._ContentPaneResizeMixin], { // summary: // Widget corresponding to HTML form tag, for validation and serialization @@ -14740,7 +15533,7 @@ dojo.declare( postCreate: function(){ // IE tries to hide encType - // TODO: this code should be in parser, not here. + // TODO: remove in 2.0, no longer necessary with data-dojo-params if(dojo.isIE && this.srcNodeRef && this.srcNodeRef.attributes){ var item = this.srcNodeRef.attributes.getNamedItem('encType'); if(item && !item.specified && (typeof item.value == "string")){ @@ -14761,8 +15554,8 @@ dojo.declare( preventDefault: function(){ // not IE this.returnValue = false; }, - stopPropagation: function(){}, - currentTarget: e ? e.target : this.domNode, + stopPropagation: function(){}, + currentTarget: e ? e.target : this.domNode, target: e ? e.target : this.domNode }; // if return value is not exactly false, and haven't called preventDefault(), then reset @@ -14801,7 +15594,7 @@ dojo.declare( } }, - onSubmit: function(/*Event?*/e){ + onSubmit: function(/*Event?*/ e){ // summary: // Callback when user submits the form. // description: @@ -14833,6 +15626,7 @@ dojo._hasResource["dijit.form.RadioButton"] = true; dojo.provide("dijit.form.RadioButton"); + // TODO: for 2.0, move the RadioButton code into this file } @@ -14851,7 +15645,7 @@ dijit.form.__SelectOption = function(){ // place a separator at that location // label: String // The label for our option. It can contain html tags. - // selected: Boolean + // selected: Boolean // Whether or not we are a selected option // disabled: Boolean // Whether or not this specific option is disabled @@ -14869,13 +15663,13 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { // This also provides the mechanism for reading the elements from // a store, if desired. - // multiple: Boolean + // multiple: [const] Boolean // Whether or not we are multi-valued multiple: false, // options: dijit.form.__SelectOption[] // The set of options for our select item. Roughly corresponds to - // the html <option> tag. + // the html <option> tag. options: null, // store: dojo.data.api.Identity @@ -14897,20 +15691,20 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { // iterated over (i.e. to filter even futher what you want to add) onFetch: null, - // sortByLabel: boolean + // sortByLabel: Boolean // Flag to sort the options returned from a store by the label of // the store. sortByLabel: true, - // loadChildrenOnOpen: boolean + // loadChildrenOnOpen: Boolean // By default loadChildren is called when the items are fetched from the // store. This property allows delaying loadChildren (and the creation - // of the options/menuitems) until the user opens the click the button. - // dropdown + // of the options/menuitems) until the user clicks the button to open the + // dropdown. loadChildrenOnOpen: false, - getOptions: function(/* anything */ valueOrIdx){ + getOptions: function(/*anything*/ valueOrIdx){ // summary: // Returns a given option (or options). // valueOrIdx: @@ -14976,7 +15770,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { return null; // null }, - addOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ option){ + addOption: function(/*dijit.form.__SelectOption|dijit.form.__SelectOption[]*/ option){ // summary: // Adds an option or options to the end of the select. If value // of the option is empty or missing, a separator is created instead. @@ -14991,7 +15785,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { this._loadChildren(); }, - removeOption: function(/* string, dijit.form.__SelectOption, number, or array */ valueOrIdx){ + removeOption: function(/*String|dijit.form.__SelectOption|Number|Array*/ valueOrIdx){ // summary: // Removes the given option or options. You can remove by string // (in which case the value is removed), number (in which case the @@ -15006,7 +15800,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { // that case, we don't want to blow up... if(i){ this.options = dojo.filter(this.options, function(node, idx){ - return (node.value !== i.value); + return (node.value !== i.value || node.label !== i.label); }); this._removeOptionItem(i); } @@ -15014,7 +15808,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { this._loadChildren(); }, - updateOption: function(/* dijit.form.__SelectOption, dijit.form.__SelectOption[] */ newOption){ + updateOption: function(/*dijit.form.__SelectOption|dijit.form.__SelectOption[]*/ newOption){ // summary: // Updates the values of the given option. The option to update // is matched based on the value of the entered option. Passing @@ -15030,9 +15824,9 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { this._loadChildren(); }, - setStore: function(/* dojo.data.api.Identity */ store, - /* anything? */ selectedValue, - /* Object? */ fetchArgs){ + setStore: function(/*dojo.data.api.Identity*/ store, + /*anything?*/ selectedValue, + /*Object?*/ fetchArgs){ // summary: // Sets the store you would like to use with this select widget. // The selected value is the value of the new store to set. This @@ -15059,7 +15853,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { dojo.connect(store, "onSet", this, "_onSetItem") ]; } - this.store = store; + this._set("store", store); } // Turn off change notifications while we make all these changes @@ -15072,48 +15866,52 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { // Add our new options if(store){ - var cb = function(items){ - if(this.sortByLabel && !fetchArgs.sort && items.length){ - items.sort(dojo.data.util.sorter.createSortFunction([{ - attribute: store.getLabelAttributes(items[0])[0] - }], store)); - } - - if(fetchArgs.onFetch){ - items = fetchArgs.onFetch(items); - } - // TODO: Add these guys as a batch, instead of separately - dojo.forEach(items, function(i){ - this._addOptionForItem(i); - }, this); - - // Set our value (which might be undefined), and then tweak - // it to send a change event with the real value - this._loadingStore = false; - this.set("value", (("_pendingValue" in this) ? this._pendingValue : selectedValue)); - delete this._pendingValue; - - if(!this.loadChildrenOnOpen){ - this._loadChildren(); - }else{ - this._pseudoLoadChildren(items); - } - this._fetchedWith = opts; - this._lastValueReported = this.multiple ? [] : null; - this._onChangeActive = true; - this.onSetStore(); - this._handleOnChange(this.value); - }; - var opts = dojo.mixin({onComplete:cb, scope: this}, fetchArgs); this._loadingStore = true; - store.fetch(opts); + store.fetch(dojo.delegate(fetchArgs, { + onComplete: function(items, opts){ + if(this.sortByLabel && !fetchArgs.sort && items.length){ + items.sort(dojo.data.util.sorter.createSortFunction([{ + attribute: store.getLabelAttributes(items[0])[0] + }], store)); + } + + if(fetchArgs.onFetch){ + items = fetchArgs.onFetch.call(this, items, opts); + } + // TODO: Add these guys as a batch, instead of separately + dojo.forEach(items, function(i){ + this._addOptionForItem(i); + }, this); + + // Set our value (which might be undefined), and then tweak + // it to send a change event with the real value + this._loadingStore = false; + this.set("value", "_pendingValue" in this ? this._pendingValue : selectedValue); + delete this._pendingValue; + + if(!this.loadChildrenOnOpen){ + this._loadChildren(); + }else{ + this._pseudoLoadChildren(items); + } + this._fetchedWith = opts; + this._lastValueReported = this.multiple ? [] : null; + this._onChangeActive = true; + this.onSetStore(); + this._handleOnChange(this.value); + }, + scope: this + })); }else{ delete this._fetchedWith; } return oStore; // dojo.data.api.Identity }, - _setValueAttr: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){ + // TODO: implement set() and watch() for store and query, although not sure how to handle + // setting them individually rather than together (as in setStore() above) + + _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){ // summary: // set the value of the widget. // If a string is passed, then we set our value from looking it up. @@ -15149,7 +15947,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { var val = dojo.map(newValue, function(i){ return i.value; }), disp = dojo.map(newValue, function(i){ return i.label; }); - this.value = this.multiple ? val : val[0]; + this._set("value", this.multiple ? val : val[0]); this._setDisplay(this.multiple ? disp : disp[0]); this._updateSelection(); this._handleOnChange(this.value, priorityChange); @@ -15173,23 +15971,10 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { return this.multiple ? ret : ret[0]; }, - _getValueDeprecated: false, // remove when _FormWidget:getValue is removed - 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._setValueAttr(this._lastValueReported, false); - }, - _loadChildren: function(){ // summary: // Loads the children represented by this widget's options. - // reset the menu to make it "populatable on the next click + // reset the menu to make it populatable on the next click if(this._loadingStore){ return; } dojo.forEach(this._getChildren(), function(child){ child.destroyRecursive(); @@ -15204,7 +15989,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { _updateSelection: function(){ // summary: // Sets the "selected" class on the item for styling purposes - this.value = this._getValueFromOpts(); + this._set("value", this._getValueFromOpts()); var val = this.value; if(!dojo.isArray(val)){ val = [val]; @@ -15218,7 +16003,6 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { dijit.setWaiState(child.domNode, "selected", isSelected); }, this); } - this._handleOnChange(this.value); }, _getValueFromOpts: function(){ @@ -15249,17 +16033,17 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { }, // Internal functions to call when we have store notifications come in - _onNewItem: function(/* item */ item, /* Object? */ parentInfo){ + _onNewItem: function(/*item*/ item, /*Object?*/ parentInfo){ if(!parentInfo || !parentInfo.parent){ // Only add it if we are top-level this._addOptionForItem(item); } }, - _onDeleteItem: function(/* item */ item){ + _onDeleteItem: function(/*item*/ item){ var store = this.store; this.removeOption(store.getIdentity(item)); }, - _onSetItem: function(/* item */ item){ + _onSetItem: function(/*item*/ item){ this.updateOption(this._getOptionObjForItem(item)); }, @@ -15274,7 +16058,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { return {value: value, label: label, item:item}; // dijit.form.__SelectOption }, - _addOptionForItem: function(/* item */ item){ + _addOptionForItem: function(/*item*/ item){ // summary: // Creates (and adds) the option for the given item var store = this.store; @@ -15290,13 +16074,18 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { this.addOption(newOpt); }, - constructor: function(/* Object */ keywordArgs){ + constructor: function(/*Object*/ keywordArgs){ // summary: // Saves off our value, if we have an initial one set so we // can use it if we have a store as well (see startup()) this._oValue = (keywordArgs || {}).value || null; }, + buildRendering: function(){ + this.inherited(arguments); + dojo.setSelectable(this.focusNode, false); + }, + _fillContent: function(){ // summary: // Loads our options and sets up our dropdown correctly. We @@ -15309,16 +16098,21 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { if(node.getAttribute("type") === "separator"){ return { value: "", label: "", selected: false, disabled: false }; } - return { value: node.getAttribute("value"), + return { + value: (node.getAttribute("data-" + dojo._scopeName + "-value") || node.getAttribute("value")), label: String(node.innerHTML), + // FIXME: disabled and selected are not valid on complex markup children (which is why we're + // looking for data-dojo-value above. perhaps we should data-dojo-props="" this whole thing?) + // decide before 1.6 selected: node.getAttribute("selected") || false, - disabled: node.getAttribute("disabled") || false }; + disabled: node.getAttribute("disabled") || false + }; }, this) : []; } if(!this.value){ - this.value = this._getValueFromOpts(); + this._set("value", this._getValueFromOpts()); }else if(this.multiple && typeof this.value == "string"){ - this.value = this.value.split(","); + this_set("value", this.value.split(",")); } }, @@ -15326,7 +16120,6 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { // summary: // sets up our event handling that we need for functioning // as a select - dojo.setSelectable(this.focusNode, false); this.inherited(arguments); // Make our event connections for updating state @@ -15362,7 +16155,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { this.inherited(arguments); }, - _addOptionItem: function(/* dijit.form.__SelectOption */ option){ + _addOptionItem: function(/*dijit.form.__SelectOption*/ option){ // summary: // User-overridable function which, for the given option, adds an // item to the select. If the option doesn't have a value, then a @@ -15370,7 +16163,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { // in the created option widget. }, - _removeOptionItem: function(/* dijit.form.__SelectOption */ option){ + _removeOptionItem: function(/*dijit.form.__SelectOption*/ option){ // summary: // User-overridable function which, for the given option, removes // its item from the select. @@ -15396,7 +16189,7 @@ dojo.declare("dijit.form._FormSelectWidget", dijit.form._FormValueWidget, { return this.getOptions(this.get("value")); }, - _pseudoLoadChildren: function(/* item[] */ items){ + _pseudoLoadChildren: function(/*item[]*/ items){ // summary: // a function that will "fake" loading children, if needed, and // if we have set to not load children until the widget opens. @@ -15419,6 +16212,7 @@ dojo._hasResource["dijit._KeyNavContainer"] = true; dojo.provide("dijit._KeyNavContainer"); + dojo.declare("dijit._KeyNavContainer", dijit._Container, { @@ -15460,6 +16254,8 @@ dojo.declare("dijit._KeyNavContainer", var next = dojo.hitch(this, this.focusNext); dojo.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; }); dojo.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; }); + keyCodes[dojo.keys.HOME] = dojo.hitch(this, "focusFirstChild"); + keyCodes[dojo.keys.END] = dojo.hitch(this, "focusLastChild"); this.connect(this.domNode, "onkeypress", "_onContainerKeypress"); this.connect(this.domNode, "onfocus", "_onContainerFocus"); }, @@ -15496,6 +16292,17 @@ dojo.declare("dijit._KeyNavContainer", } }, + focusLastChild: function(){ + // summary: + // Focus the last focusable child in the container. + // tags: + // protected + var child = this._getLastFocusableChild(); + if(child){ // edge case: Menu could be empty or hidden + this.focusChild(child); + } + }, + focusNext: function(){ // summary: // Focus the next widget @@ -15529,15 +16336,16 @@ dojo.declare("dijit._KeyNavContainer", if(this.focusedChild && widget !== this.focusedChild){ this._onChildBlur(this.focusedChild); } + widget.set("tabIndex", this.tabIndex); // for IE focus outline to appear, must set tabIndex before focs widget.focus(last ? "end" : "start"); - this.focusedChild = widget; + this._set("focusedChild", widget); }, _startupChild: function(/*dijit._Widget*/ widget){ // summary: // Setup for each child widget // description: - // Sets tabIndex=-1 on each child, so that the tab key will + // Sets tabIndex=-1 on each child, so that the tab key will // leave the container rather than visiting each child. // tags: // private @@ -15618,6 +16426,12 @@ dojo.declare("dijit._KeyNavContainer", return this._getNextFocusableChild(null, 1); // dijit._Widget }, + _getLastFocusableChild: function(){ + // summary: + // Returns last child that can be focused + return this._getNextFocusableChild(null, -1); // dijit._Widget + }, + _getNextFocusableChild: function(child, dir){ // summary: // Returns the next or previous focusable child, compared @@ -15665,7 +16479,7 @@ dojo.declare("dijit.MenuItem", // Make 3 columns // icon, label, and expand arrow (BiDi-dependent) indicating sub-menu - templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"), + templateString: dojo.cache("dijit", "templates/MenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" role=\"presentation\">\n\t\t<div dojoAttachPoint=\"arrowWrapper\" style=\"visibility: hidden\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuExpand\"/>\n\t\t\t<span class=\"dijitMenuExpandA11y\">+</span>\n\t\t</div>\n\t</td>\n</tr>\n"), attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, { label: { node: "containerNode", type: "innerHTML" }, @@ -15702,9 +16516,8 @@ dojo.declare("dijit.MenuItem", } }, - postCreate: function(){ + buildRendering: function(){ this.inherited(arguments); - dojo.setSelectable(this.domNode, false); var label = this.id+"_text"; dojo.attr(this.containerNode, "id", label); if(this.accelKeyNode){ @@ -15712,6 +16525,7 @@ dojo.declare("dijit.MenuItem", label += " " + this.id + "_accel"; } dijit.setWaiState(this.domNode, "labelledby", label); + dojo.setSelectable(this.domNode, false); }, _onHover: function(){ @@ -15734,11 +16548,10 @@ dojo.declare("dijit.MenuItem", // then unselect it this.getParent().onItemUnhover(this); - // _onUnhover() is called when the menu is hidden (collapsed), due to clicking - // a MenuItem and having it execut. When that happens, FF and IE don't generate - // an onmouseout event for the MenuItem, so give _CssStateMixin some help - this._hovering = false; - this._setStateClass(); + // When menu is hidden (collapsed) due to clicking a MenuItem and having it execute, + // FF and IE don't generate an onmouseout event for the MenuItem. + // So, help out _CssStateMixin in this case. + this._set("hovering", false); }, _onClick: function(evt){ @@ -15823,19 +16636,21 @@ dojo.declare("dijit.MenuItem", // summary: // Hook for attr('disabled', ...) to work. // Enable or disable this menu item. - this.disabled = value; + dijit.setWaiState(this.focusNode, 'disabled', value ? 'true' : 'false'); + this._set("disabled", value); }, _setAccelKeyAttr: function(/*String*/ value){ // summary: // Hook for attr('accelKey', ...) to work. // Set accelKey on this menu item. - this.accelKey=value; this.accelKeyNode.style.display=value?"":"none"; this.accelKeyNode.innerHTML=value; //have to use colSpan to make it work in IE dojo.attr(this.containerNode,'colSpan',value?"1":"2"); + + this._set("accelKey", value); } }); @@ -15907,7 +16722,6 @@ dojo.declare("dijit.PopupMenuItem", } }); - } if(!dojo._hasResource["dijit.CheckedMenuItem"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -15922,7 +16736,7 @@ dojo.declare("dijit.CheckedMenuItem", // summary: // A checkbox-like menu item for toggling on and off - templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" waiRole=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" waiRole=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">✓</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" waiRole=\"presentation\"> </td>\n</tr>\n"), + templateString: dojo.cache("dijit", "templates/CheckedMenuItem.html", "<tr class=\"dijitReset dijitMenuItem\" dojoAttachPoint=\"focusNode\" role=\"menuitemcheckbox\" tabIndex=\"-1\"\n\t\tdojoAttachEvent=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitMenuItemIcon dijitCheckedMenuItemIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t<span class=\"dijitCheckedMenuItemIconChar\">✓</span>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" dojoAttachPoint=\"containerNode,labelNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" dojoAttachPoint=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" role=\"presentation\"> </td>\n</tr>\n"), // checked: Boolean // Our checked state @@ -15933,7 +16747,7 @@ dojo.declare("dijit.CheckedMenuItem", // Sets the class and state for the check box. dojo.toggleClass(this.domNode, "dijitCheckedMenuItemChecked", checked); dijit.setWaiState(this.domNode, "checked", checked); - this.checked = checked; + this._set("checked", checked); }, onChange: function(/*Boolean*/ checked){ @@ -15974,7 +16788,8 @@ dojo.declare("dijit.MenuSeparator", templateString: dojo.cache("dijit", "templates/MenuSeparator.html", "<tr class=\"dijitMenuSeparator\">\n\t<td class=\"dijitMenuSeparatorIconCell\">\n\t\t<div class=\"dijitMenuSeparatorTop\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n\t<td colspan=\"3\" class=\"dijitMenuSeparatorLabelCell\">\n\t\t<div class=\"dijitMenuSeparatorTop dijitMenuSeparatorLabel\"></div>\n\t\t<div class=\"dijitMenuSeparatorBottom\"></div>\n\t</td>\n</tr>\n"), - postCreate: function(){ + buildRendering: function(){ + this.inherited(arguments); dojo.setSelectable(this.domNode, false); }, @@ -15988,7 +16803,6 @@ dojo.declare("dijit.MenuSeparator", } }); - } if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -16001,6 +16815,11 @@ dojo.provide("dijit.Menu"); + + + +// "dijit/MenuItem", "dijit/PopupMenuItem", "dijit/CheckedMenuItem", "dijit/MenuSeparator" for Back-compat (TODO: remove in 2.0) + dojo.declare("dijit._MenuBase", [dijit._Widget, dijit._Templated, dijit._KeyNavContainer], { @@ -16277,8 +17096,7 @@ dojo.declare("dijit._MenuBase", // menus (similar to TAB navigation) but the menu is not active // (ie no dropdown) until an item is clicked. this.isActive = true; - dojo.addClass(this.domNode, "dijitMenuActive"); - dojo.removeClass(this.domNode, "dijitMenuPassive"); + dojo.replaceClass(this.domNode, "dijitMenuActive", "dijitMenuPassive"); }, onOpen: function(/*Event*/ e){ @@ -16297,8 +17115,7 @@ dojo.declare("dijit._MenuBase", // summary: // Mark this menu's state as inactive. this.isActive = false; // don't do this in _onBlur since the state is pending-close until we get here - dojo.removeClass(this.domNode, "dijitMenuActive"); - dojo.addClass(this.domNode, "dijitMenuPassive"); + dojo.replaceClass(this.domNode, "dijitMenuPassive", "dijitMenuActive"); }, onClose: function(){ @@ -16321,16 +17138,25 @@ dojo.declare("dijit._MenuBase", // tags: // private this._stopPopupTimer(); - if(this.focusedChild){ // unhighlight the focused item - this.focusedChild._setSelected(false); - this.focusedChild._onUnhover(); - this.focusedChild = null; - } + + var fromItem = this.focusedChild && this.focusedChild.from_item; + if(this.currentPopup){ + // If focus is on my child menu then move focus to me, + // because IE doesn't like it when you display:none a node with focus + if(dijit._curFocus && dojo.isDescendant(dijit._curFocus, this.currentPopup.domNode)){ + this.focusedChild.focusNode.focus(); + } // Close all popups that are open and descendants of this menu dijit.popup.close(this.currentPopup); this.currentPopup = null; } + + if(this.focusedChild){ // unhighlight the focused item + this.focusedChild._setSelected(false); + this.focusedChild._onUnhover(); + this.focusedChild = null; + } }, _onItemFocus: function(/*MenuItem*/ item){ @@ -16381,7 +17207,7 @@ dojo.declare("dijit.Menu", this._bindings = []; }, - templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" waiRole=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=0>\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"), + templateString: dojo.cache("dijit", "templates/Menu.html", "<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\" dojoAttachEvent=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" dojoAttachPoint=\"containerNode\"></tbody>\n</table>\n"), baseClass: "dijitMenu", @@ -16408,7 +17234,7 @@ dojo.declare("dijit.Menu", this.bindDomNode(dojo.body()); }else{ // TODO: should have _setTargetNodeIds() method to handle initialization and a possible - // later attr('targetNodeIds', ...) call. There's also a problem that targetNodeIds[] + // later set('targetNodeIds', ...) call. There's also a problem that targetNodeIds[] // gets stale after calls to bindDomNode()/unBindDomNode() as it still is just the original list (see #9610) dojo.forEach(this.targetNodeIds, this.bindDomNode, this); } @@ -16521,7 +17347,7 @@ dojo.declare("dijit.Menu", this._scheduleOpen(evt.target, iframe); // no coords - open near target node } }) - ]; + ]; }); binding.connects = cn ? doConnects(cn) : []; @@ -16687,13 +17513,6 @@ dojo.declare("dijit.Menu", } ); -// Back-compat (TODO: remove in 2.0) - - - - - - } if(!dojo._hasResource["dijit.form.Select"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -16706,7 +17525,6 @@ dojo.provide("dijit.form.Select"); - dojo.declare("dijit.form._SelectMenu", dijit.Menu, { // summary: // An internally-used menu for dropdown that allows us a vertical scrollbar @@ -16727,6 +17545,16 @@ dojo.declare("dijit.form._SelectMenu", dijit.Menu, { dijit.setWaiRole(n,"presentation"); n.appendChild(o); }, + + postCreate: function(){ + // summary: + // stop mousemove from selecting text on IE to be consistent with other browsers + + this.inherited(arguments); + + this.connect(this.domNode, "onmousemove", dojo.stopEvent); + }, + resize: function(/*Object*/ mb){ // summary: // Overridden so that we are able to handle resizing our @@ -16755,7 +17583,7 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD baseClass: "dijitSelect", - templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\" dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">▼</div\n\t\t></td\n\t></tr></tbody\n></table>\n"), + templateString: dojo.cache("dijit.form", "templates/Select.html", "<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\trole=\"combobox\" aria-haspopup=\"true\"\n\t><tbody role=\"presentation\"><tr role=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" role=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\" dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" role=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" role=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" role=\"presentation\">▼</div\n\t\t></td\n\t></tr></tbody\n></table>\n"), // attributeMap: Object // Add in our style to be applied to the focus node @@ -16769,13 +17597,17 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD // Shows current state (ie, validation result) of input (Normal, Warning, or Error) state: "", + // message: String + // Currently displayed error/prompt message + message: "", + // tooltipPosition: String[] // See description of dijit.Tooltip.defaultPosition for details on this parameter. tooltipPosition: [], // emptyLabel: string // What to display in an "empty" dropdown - emptyLabel: "", + emptyLabel: " ", // _isLoaded: Boolean // Whether or not we have been loaded @@ -16789,11 +17621,11 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD // summary: // Set the value to be the first, or the selected index this.inherited(arguments); + // set value from selected option if(this.options.length && !this.value && this.srcNodeRef){ - var si = this.srcNodeRef.selectedIndex; - this.value = this.options[si != -1 ? si : 0].value; + var si = this.srcNodeRef.selectedIndex || 0; // || 0 needed for when srcNodeRef is not a SELECT + this.value = this.options[si >= 0 ? si : 0].value; } - // Create the dropDown widget this.dropDown = new dijit.form._SelectMenu({id: this.id + "_menu"}); dojo.addClass(this.dropDown.domNode, this.baseClass + "Menu"); @@ -16803,7 +17635,7 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD // summary: // For the given option, return the menu item that should be // used to display it. This can be overridden as needed - if(!option.value){ + if(!option.value && !option.label){ // We are a separator (no label set for it) return new dijit.MenuSeparator(); }else{ @@ -16811,7 +17643,7 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD var click = dojo.hitch(this, "_setValueAttr", option); var item = new dijit.MenuItem({ option: option, - label: option.label, + label: option.label || this.emptyLabel, onClick: click, disabled: option.disabled || false }); @@ -16865,7 +17697,6 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD this._updateSelection(); } - var len = this.options.length; this._isLoaded = false; this._childrenLoaded = true; @@ -16883,10 +17714,9 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD _setDisplay: function(/*String*/ newDisplay){ // summary: // sets the display for the given value (or values) - this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' + - (newDisplay || this.emptyLabel || " ") + - '</span>'; - dijit.setWaiState(this.focusNode, "valuetext", (newDisplay || this.emptyLabel || " ") ); + var lbl = newDisplay || this.emptyLabel; + this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' + lbl + '</span>'; + dijit.setWaiState(this.focusNode, "valuetext", lbl); }, validate: function(/*Boolean*/ isFocused){ @@ -16898,12 +17728,11 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD // set the value. var isValid = this.isValid(isFocused); - this.state = isValid ? "" : "Error"; - this._setStateClass(); + this._set("state", isValid ? "" : "Error"); dijit.setWaiState(this.focusNode, "invalid", isValid ? "false" : "true"); var message = isValid ? "" : this._missingMsg; - if(this._message !== message){ - this._message = message; + if(this.message !== message){ + this._set("message", message); dijit.hideTooltip(this.domNode); if(message){ dijit.showTooltip(message, this.domNode, this.tooltipPosition, !this.isLeftToRight()); @@ -16914,9 +17743,9 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD isValid: function(/*Boolean*/ isFocused){ // summary: - // Whether or not this is a valid value. The only way a Select + // Whether or not this is a valid value. The only way a Select // can be invalid is when it's required but nothing is selected. - return (!this.required || !(/^\s*$/.test(this.value))); + return (!this.required || this.value === 0 || !(/^\s*$/.test(this.value || ""))); // handle value is null or undefined }, reset: function(){ @@ -16924,9 +17753,8 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD // Overridden so that the state will be cleared. this.inherited(arguments); dijit.hideTooltip(this.domNode); - this.state = ""; - this._setStateClass(); - delete this._message; + this._set("state", ""); + this._set("message", "") }, postMixInProperties: function(){ @@ -16938,10 +17766,17 @@ dojo.declare("dijit.form.Select", [dijit.form._FormSelectWidget, dijit._HasDropD }, postCreate: function(){ + // summary: + // stop mousemove from selecting text on IE to be consistent with other browsers + this.inherited(arguments); - if(this.tableNode.style.width){ - dojo.addClass(this.domNode, this.baseClass + "FixedWidth"); - } + + this.connect(this.domNode, "onmousemove", dojo.stopEvent); + }, + + _setStyleAttr: function(/*String||Object*/ value){ + this.inherited(arguments); + dojo.toggleClass(this.domNode, this.baseClass + "FixedWidth", !!this.tableNode.style.width); }, isLoaded: function(){ @@ -17017,12 +17852,20 @@ dojo.declare("dijit.form.SimpleTextarea", postMixInProperties: function(){ // Copy value from srcNodeRef, unless user specified a value explicitly (or there is no srcNodeRef) + // TODO: parser will handle this in 2.0 if(!this.value && this.srcNodeRef){ this.value = this.srcNodeRef.value; } this.inherited(arguments); }, + buildRendering: function(){ + this.inherited(arguments); + if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6 + dojo.addClass(this.textbox, "dijitTextAreaCols"); + } + }, + filter: function(/*String*/ value){ // Override TextBox.filter to deal with newlines... specifically (IIRC) this is for IE which writes newlines // as \r\n instead of just \n @@ -17032,13 +17875,6 @@ dojo.declare("dijit.form.SimpleTextarea", return this.inherited(arguments); }, - postCreate: function(){ - this.inherited(arguments); - if(dojo.isIE && this.cols){ // attribute selectors is not supported in IE6 - dojo.addClass(this.textbox, "dijitTextAreaCols"); - } - }, - _previousValue: "", _onInput: function(/*Event?*/ e){ // Override TextBox._onInput() to enforce maxLength restriction @@ -17086,8 +17922,6 @@ dojo.provide("dijit.InlineEditBox"); - - dojo.declare("dijit.InlineEditBox", dijit._Widget, { @@ -17131,12 +17965,12 @@ dojo.declare("dijit.InlineEditBox", // rather than plain text (ex: `dijit.Editor`) renderAsHtml: false, - // editor: String - // Class name for Editor widget + // editor: String|Function + // Class name (or reference to the Class) for Editor widget editor: "dijit.form.TextBox", - // editorWrapper: String - // Class name for widget that wraps the editor widget, displaying save/cancel + // editorWrapper: String|Function + // Class name (or reference to the Class) for widget that wraps the editor widget, displaying save/cancel // buttons. editorWrapper: "dijit._InlineEditor", @@ -17144,6 +17978,10 @@ dojo.declare("dijit.InlineEditBox", // Set of parameters for editor, like {required: true} editorParams: {}, + // disabled: Boolean + // If true, clicking the InlineEditBox to edit it will have no effect. + disabled: false, + onChange: function(value){ // summary: // Set this handler to be notified of changes to value. @@ -17226,7 +18064,6 @@ dojo.declare("dijit.InlineEditBox", // summary: // Hook to make set("disabled", ...) work. // Set disabled state of widget. - this.disabled = disabled; dijit.setWaiState(this.domNode, "disabled", disabled); if(disabled){ this.displayNode.removeAttribute("tabIndex"); @@ -17234,6 +18071,7 @@ dojo.declare("dijit.InlineEditBox", this.displayNode.setAttribute("tabIndex", 0); } dojo.toggleClass(this.displayNode, "dijitInlineEditBoxDisplayModeDisabled", disabled); + this._set("disabled", disabled); }, _onMouseOver: function(){ @@ -17291,7 +18129,7 @@ dojo.declare("dijit.InlineEditBox", var placeholder = dojo.create("span", null, this.domNode, "before"); // Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons) - var ewc = dojo.getObject(this.editorWrapper); + var ewc = typeof this.editorWrapper == "string" ? dojo.getObject(this.editorWrapper) : this.editorWrapper; this.wrapperWidget = new ewc({ value: this.value, buttonSave: this.buttonSave, @@ -17305,6 +18143,9 @@ dojo.declare("dijit.InlineEditBox", save: dojo.hitch(this, "save"), cancel: dojo.hitch(this, "cancel") }, placeholder); + if(!this._started){ + this.startup(); + } } var ww = this.wrapperWidget; @@ -17350,7 +18191,7 @@ dojo.declare("dijit.InlineEditBox", }, destroy: function(){ - if(this.wrapperWidget){ + if(this.wrapperWidget && !this.wrapperWidget._destroyed){ this.wrapperWidget.destroy(); delete this.wrapperWidget; } @@ -17387,9 +18228,6 @@ dojo.declare("dijit.InlineEditBox", var value = ww.getValue(); this.set('value', value); // display changed, formatted value - // tell the world that we have changed - setTimeout(dojo.hitch(this, "onChange", value), 0); // setTimeout prevents browser freeze for long-running event handlers - this._showText(focus); // set focus as needed }, @@ -17407,11 +18245,15 @@ dojo.declare("dijit.InlineEditBox", // Hook to make set("value", ...) work. // Inserts specified HTML value into this node, or an "input needed" character if node is blank. - this.value = val = dojo.trim(val); - if(!this.renderAsHtml){ - val = val.replace(/&/gm, "&").replace(/</gm, "<").replace(/>/gm, ">").replace(/"/gm, """).replace(/\n/g, "<br>"); + val = dojo.trim(val); + var renderVal = this.renderAsHtml ? val : val.replace(/&/gm, "&").replace(/</gm, "<").replace(/>/gm, ">").replace(/"/gm, """).replace(/\n/g, "<br>"); + this.displayNode.innerHTML = renderVal || this.noValueIndicator; + this._set("value", val); + + if(this._started){ + // tell the world that we have changed + setTimeout(dojo.hitch(this, "onChange", val), 0); // setTimeout prevents browser freeze for long-running event handlers } - this.displayNode.innerHTML = val || this.noValueIndicator; }, getValue: function(){ @@ -17456,7 +18298,7 @@ dojo.declare( // value: String // Value as an HTML string or plain text string, depending on renderAsHTML flag - templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span dojoAttachPoint=\"editNode\" waiRole=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdojoAttachEvent=\"onkeypress: _onKeyPress\"\n\t><span dojoAttachPoint=\"editorPlaceholder\"></span\n\t><span dojoAttachPoint=\"buttonContainer\"\n\t\t><button class='saveButton' dojoAttachPoint=\"saveButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:save\" label=\"${buttonSave}\"></button\n\t\t><button class='cancelButton' dojoAttachPoint=\"cancelButton\" dojoType=\"dijit.form.Button\" dojoAttachEvent=\"onClick:cancel\" label=\"${buttonCancel}\"></button\n\t></span\n></span>\n"), + templateString: dojo.cache("dijit", "templates/InlineEditBox.html", "<span data-dojo-attach-point=\"editNode\" role=\"presentation\" style=\"position: absolute; visibility:hidden\" class=\"dijitReset dijitInline\"\n\tdata-dojo-attach-event=\"onkeypress: _onKeyPress\"\n\t><span data-dojo-attach-point=\"editorPlaceholder\"></span\n\t><span data-dojo-attach-point=\"buttonContainer\"\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonSave}', 'class': 'saveButton'\"\n\t\t\tdata-dojo-attach-point=\"saveButton\" data-dojo-attach-event=\"onClick:save\"></button\n\t\t><button data-dojo-type=\"dijit.form.Button\" data-dojo-props=\"label: '${buttonCancel}', 'class': 'cancelButton'\"\n\t\t\tdata-dojo-attach-point=\"cancelButton\" data-dojo-attach-event=\"onClick:cancel\"></button\n\t></span\n></span>\n"), widgetsInTemplate: true, postMixInProperties: function(){ @@ -17467,9 +18309,11 @@ dojo.declare( }, this); }, - postCreate: function(){ + buildRendering: function(){ + this.inherited(arguments); + // Create edit widget in place in the template - var cls = dojo.getObject(this.editor); + var cls = typeof this.editor == "string" ? dojo.getObject(this.editor) : this.editor; // Copy the style from the source // Don't copy ALL properties though, just the necessary/applicable ones. @@ -17504,13 +18348,21 @@ dojo.declare( lang: this.lang }); editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value; - var ew = (this.editWidget = new cls(editorParams, this.editorPlaceholder)); + this.editWidget = new cls(editorParams, this.editorPlaceholder); if(this.inlineEditBox.autoSave){ // Remove the save/cancel buttons since saving is done by simply tabbing away or // selecting a value from the drop down list dojo.destroy(this.buttonContainer); + } + }, + + postCreate: function(){ + this.inherited(arguments); + + var ew = this.editWidget; + if(this.inlineEditBox.autoSave){ // Selecting a value from a drop down list causes an onChange event and then we save this.connect(ew, "onChange", "_onChange"); @@ -17520,7 +18372,7 @@ dojo.declare( this.connect(ew, "onKeyPress", "_onKeyPress"); }else{ // If possible, enable/disable save button based on whether the user has changed the value - if("intermediateChanges" in cls.prototype){ + if("intermediateChanges" in ew){ ew.set("intermediateChanges", true); this.connect(ew, "onChange", "_onIntermediateChange"); this.saveButton.set("disabled", true); @@ -17670,7 +18522,7 @@ dojo.__cookieProps = function(){ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){ - // summary: + // summary: // Get or set a cookie. // description: // If one argument is passed, returns the value of the cookie @@ -17679,17 +18531,17 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/ // Name of the cookie // value: // Value for the cookie - // props: + // props: // 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, {expires: -1}); @@ -17701,7 +18553,7 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/ props = props || {}; // FIXME: expires=0 seems to disappear right away, not on close? (FF3) Change docs? var exp = props.expires; - if(typeof exp == "number"){ + if(typeof exp == "number"){ var d = new Date(); d.setTime(d.getTime() + exp*24*60*60*1000); exp = props.expires = d; @@ -17722,7 +18574,7 @@ dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/ dojo.cookie.isSupported = function(){ // summary: // Use to determine if the current browser supports cookies or not. - // + // // Returns true if user allows cookies. // Returns false if user doesn't allow cookies. @@ -17758,7 +18610,7 @@ dojo.declare( // 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>", + templateString: "<span role='tablist' dojoAttachEvent='onkeypress' class='dijitStackController'></span>", // containerId: [const] String // The id of the page container that I point to @@ -17768,11 +18620,19 @@ dojo.declare( // The name of the button widget to create to correspond to each page buttonWidget: "dijit.layout._StackButton", - postCreate: function(){ - dijit.setWaiRole(this.domNode, "tablist"); - + constructor: function(){ this.pane2button = {}; // mapping from pane id to buttons - this.pane2handles = {}; // mapping from pane id to this.connect() handles + this.pane2connects = {}; // mapping from pane id to this.connect() handles + this.pane2watches = {}; // mapping from pane id to watch() handles + }, + + buildRendering: function(){ + this.inherited(arguments); + dijit.setWaiRole(this.domNode, "tablist"); // TODO: unneeded? it's in template above. + }, + + postCreate: function(){ + this.inherited(arguments); // Listen to notifications from StackContainer this.subscribe(this.containerId+"-startup", "onStartup"); @@ -17822,22 +18682,25 @@ dojo.declare( title: page.tooltip }); dijit.setWaiState(button.focusNode,"selected", "false"); - this.pane2handles[page.id] = [ - this.connect(page, 'set', function(name, value){ - var buttonAttr = { - title: 'label', - showTitle: 'showLabel', - iconClass: 'iconClass', - closable: 'closeButton', - tooltip: 'title' - }[name]; - if(buttonAttr){ - button.set(buttonAttr, value); - } - }), + + + // map from page attribute to corresponding tab button attribute + var pageAttrList = ["title", "showTitle", "iconClass", "closable", "tooltip"], + buttonAttrList = ["label", "showLabel", "iconClass", "closeButton", "title"]; + + // watch() so events like page title changes are reflected in tab button + this.pane2watches[page.id] = dojo.map(pageAttrList, function(pageAttr, idx){ + return page.watch(pageAttr, function(name, oldVal, newVal){ + button.set(buttonAttrList[idx], newVal); + }); + }); + + // connections so that clicking a tab button selects the corresponding page + this.pane2connects[page.id] = [ this.connect(button, 'onClick', dojo.hitch(this,"onButtonClick", page)), this.connect(button, 'onClickCloseButton', dojo.hitch(this,"onCloseButtonClick", page)) ]; + this.addChild(button, insertIndex); this.pane2button[page.id] = button; page.controlButton = button; // this value might be overwritten if two tabs point to same container @@ -17860,8 +18723,13 @@ dojo.declare( // private if(this._currentChild === page){ this._currentChild = null; } - dojo.forEach(this.pane2handles[page.id], this.disconnect, this); - delete this.pane2handles[page.id]; + + // disconnect/unwatch connections/watches related to page being removed + dojo.forEach(this.pane2connects[page.id], dojo.hitch(this, "disconnect")); + delete this.pane2connects[page.id]; + dojo.forEach(this.pane2watches[page.id], function(w){ w.unwatch(); }); + delete this.pane2watches[page.id]; + var button = this.pane2button[page.id]; if(button){ this.removeChild(button); @@ -17963,6 +18831,14 @@ dojo.declare( case k.PAGE_DOWN: if(e.ctrlKey){ forward = true; } break; + case k.HOME: + case k.END: + var children = this.getChildren(); + if(children && children.length){ + children[e.charOrCode == k.HOME ? 0 : children.length-1].onClick(); + } + dojo.stopEvent(e); + break; case k.DELETE: if(this._currentChild.closable){ this.onCloseButtonClick(this._currentChild); @@ -17982,7 +18858,7 @@ dojo.declare( } } } - // handle page navigation + // handle next/previous page navigation (left/right arrow, etc.) if(forward !== null){ this.adjacent(forward).onClick(); dojo.stopEvent(e); @@ -18016,9 +18892,9 @@ dojo.declare("dijit.layout._StackButton", // Probably we should be calling this.startupKeyNavChildren() instead. tabIndex: "-1", - postCreate: function(/*Event*/ evt){ - dijit.setWaiRole((this.focusNode || this.domNode), "tab"); + buildRendering: function(/*Event*/ evt){ this.inherited(arguments); + dijit.setWaiRole((this.focusNode || this.domNode), "tab"); }, onClick: function(/*Event*/ evt){ @@ -18040,7 +18916,6 @@ dojo.declare("dijit.layout._StackButton", } }); - } if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -18052,6 +18927,7 @@ dojo.provide("dijit.layout.StackContainer"); + dojo.declare( "dijit.layout.StackContainer", dijit.layout._LayoutWidget, @@ -18085,10 +18961,14 @@ dojo.declare( selectedChildWidget: null, =====*/ - postCreate: function(){ + buildRendering: function(){ this.inherited(arguments); dojo.addClass(this.domNode, "dijitLayoutContainer"); dijit.setWaiRole(this.containerNode, "tabpanel"); + }, + + postCreate: function(){ + this.inherited(arguments); this.connect(this.domNode, "onkeypress", this._onKeyPress); }, @@ -18144,8 +19024,7 @@ dojo.declare( this.inherited(arguments); - dojo.removeClass(child.domNode, "dijitVisible"); - dojo.addClass(child.domNode, "dijitHidden"); + dojo.replaceClass(child.domNode, "dijitHidden", "dijitVisible"); // remove the title attribute so it doesn't show up when i hover // over a node @@ -18218,17 +19097,19 @@ dojo.declare( if(this.selectedChildWidget != page){ // Deselect old page and select new one - this._transition(page, this.selectedChildWidget, animate); - this.selectedChildWidget = page; + var d = this._transition(page, this.selectedChildWidget, animate); + this._set("selectedChildWidget", page); dojo.publish(this.id+"-selectChild", [page]); if(this.persist){ dojo.cookie(this.id + "_selectedChild", this.selectedChildWidget.id); } } + + return d; // If child has an href, promise that fires when the child's href finishes loading }, - _transition: function(/*dijit._Widget*/newWidget, /*dijit._Widget*/oldWidget){ + _transition: function(/*dijit._Widget*/ newWidget, /*dijit._Widget*/ oldWidget, /*Boolean*/ animate){ // summary: // Hide the old widget and display the new widget. // Subclasses should override this. @@ -18237,7 +19118,7 @@ dojo.declare( if(oldWidget){ this._hideChild(oldWidget); } - this._showChild(newWidget); + var d = 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. @@ -18251,6 +19132,8 @@ dojo.declare( newWidget.resize(); } } + + return d; // If child has an href, promise that fires when the child's href finishes loading }, _adjacent: function(/*Boolean*/ forward){ @@ -18265,13 +19148,13 @@ dojo.declare( forward: function(){ // summary: // Advance to next page. - this.selectChild(this._adjacent(true), true); + return this.selectChild(this._adjacent(true), true); }, back: function(){ // summary: // Go back to previous page. - this.selectChild(this._adjacent(false), true); + return this.selectChild(this._adjacent(false), true); }, _onKeyPress: function(e){ @@ -18289,24 +19172,24 @@ dojo.declare( // summary: // Show the specified child by changing it's CSS, and call _onShow()/onShow() so // it can do any updates it needs regarding loading href's etc. + // returns: + // Promise that fires when page has finished showing, or true if there's no href var children = this.getChildren(); page.isFirstChild = (page == children[0]); page.isLastChild = (page == children[children.length-1]); - page.selected = true; + page._set("selected", true); - dojo.removeClass(page.domNode, "dijitHidden"); - dojo.addClass(page.domNode, "dijitVisible"); + dojo.replaceClass(page.domNode, "dijitVisible", "dijitHidden"); - page._onShow(); + return page._onShow() || true; }, _hideChild: function(/*dijit._Widget*/ page){ // summary: // Hide the specified child by changing it's CSS, and call _onHide() so // it's notified. - page.selected=false; - dojo.removeClass(page.domNode, "dijitVisible"); - dojo.addClass(page.domNode, "dijitHidden"); + page._set("selected", false); + dojo.replaceClass(page.domNode, "dijitHidden", "dijitVisible"); page.onHide(); }, @@ -18325,7 +19208,7 @@ dojo.declare( } }, - destroyDescendants: function(/*Boolean*/preserveDom){ + destroyDescendants: function(/*Boolean*/ preserveDom){ dojo.forEach(this.getChildren(), function(child){ this.removeChild(child); child.destroyRecursive(preserveDom); @@ -18336,7 +19219,6 @@ dojo.declare( // For back-compat, remove for 2.0 - // 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.) @@ -18401,8 +19283,28 @@ dojo.provide("dijit.layout.AccordionContainer"); +//dojo.require("dijit.layout.AccordionPane "); // for back compat, remove for 2.0 - // for back compat, remove for 2.0 +// Design notes: +// +// An AccordionContainer is a StackContainer, but each child (typically ContentPane) +// is wrapped in a _AccordionInnerContainer. This is hidden from the caller. +// +// The resulting markup will look like: +// +// <div class=dijitAccordionContainer> +// <div class=dijitAccordionInnerContainer> (one pane) +// <div class=dijitAccordionTitle> (title bar) ... </div> +// <div class=dijtAccordionChildWrapper> (content pane) </div> +// </div> +// </div> +// +// Normally the dijtAccordionChildWrapper is hidden for all but one child (the shown +// child), so the space for the content pane is all the title bars + the one dijtAccordionChildWrapper, +// which on claro has a 1px border plus a 2px bottom margin. +// +// During animation there are two dijtAccordionChildWrapper's shown, so we need +// to compensate for that. dojo.declare( "dijit.layout.AccordionContainer", @@ -18428,17 +19330,18 @@ dojo.declare( // The name of the widget used to display the title of each pane buttonWidget: "dijit.layout._AccordionButton", +/*===== // _verticalSpace: Number // Pixels of space available for the open pane // (my content box size minus the cumulative size of all the title bars) _verticalSpace: 0, - +=====*/ baseClass: "dijitAccordionContainer", - postCreate: function(){ - this.domNode.style.overflow = "hidden"; + buildRendering: function(){ this.inherited(arguments); - dijit.setWaiRole(this.domNode, "tablist"); + this.domNode.style.overflow = "hidden"; // TODO: put this in dijit.css + dijit.setWaiRole(this.domNode, "tablist"); // TODO: put this in template }, startup: function(){ @@ -18452,20 +19355,6 @@ dojo.declare( } }, - _getTargetHeight: function(/* Node */ node){ - // summary: - // For the given node, returns the height that should be - // set to achieve our vertical space (subtract any padding - // we may have). - // - // This is used by the animations. - // - // TODO: I don't think this works correctly in IE quirks when an elements - // style.height including padding and borders - var cs = dojo.getComputedStyle(node); - return Math.max(this._verticalSpace - dojo._getPadBorderExtents(node, cs).h - dojo._getMarginExtents(node, cs).h, 0); - }, - layout: function(){ // Implement _LayoutWidget.layout() virtual method. // Set the height of the open pane based on what room remains. @@ -18474,25 +19363,31 @@ dojo.declare( if(!openPane){ return;} - var openPaneContainer = openPane._wrapperWidget.domNode, - openPaneContainerMargin = dojo._getMarginExtents(openPaneContainer), - openPaneContainerPadBorder = dojo._getPadBorderExtents(openPaneContainer), + // space taken up by title, plus wrapper div (with border/margin) for open pane + var wrapperDomNode = openPane._wrapperWidget.domNode, + wrapperDomNodeMargin = dojo._getMarginExtents(wrapperDomNode), + wrapperDomNodePadBorder = dojo._getPadBorderExtents(wrapperDomNode), + wrapperContainerNode = openPane._wrapperWidget.containerNode, + wrapperContainerNodeMargin = dojo._getMarginExtents(wrapperContainerNode), + wrapperContainerNodePadBorder = dojo._getPadBorderExtents(wrapperContainerNode), mySize = this._contentBox; // get cumulative height of all the unselected title bars var totalCollapsedHeight = 0; dojo.forEach(this.getChildren(), function(child){ if(child != openPane){ - totalCollapsedHeight += dojo.marginBox(child._wrapperWidget.domNode).h; + totalCollapsedHeight += dojo._getMarginSize(child._wrapperWidget.domNode).h; } }); - this._verticalSpace = mySize.h - totalCollapsedHeight - openPaneContainerMargin.h - - openPaneContainerPadBorder.h - openPane._buttonWidget.getTitleHeight(); + this._verticalSpace = mySize.h - totalCollapsedHeight - wrapperDomNodeMargin.h + - wrapperDomNodePadBorder.h - wrapperContainerNodeMargin.h - wrapperContainerNodePadBorder.h + - openPane._buttonWidget.getTitleHeight(); // Memo size to make displayed child this._containerContentBox = { h: this._verticalSpace, - w: this._contentBox.w - openPaneContainerMargin.w - openPaneContainerPadBorder.w + w: this._contentBox.w - wrapperDomNodeMargin.w - wrapperDomNodePadBorder.w + - wrapperContainerNodeMargin.w - wrapperContainerNodePadBorder.w }; if(openPane){ @@ -18516,7 +19411,7 @@ dojo.declare( this.inherited(arguments); }, - addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){ + addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){ if(this._started){ // Adding a child to a started Accordion is complicated because children have // wrapper widgets. Default code path (calling this.inherited()) would add @@ -18532,7 +19427,7 @@ dojo.declare( // Then stick the wrapper widget around the child widget this._setupChild(child); - // Code below copied from StackContainer + // Code below copied from StackContainer dojo.publish(this.id+"-addChild", [child, insertIndex]); this.layout(); if(!this.selectedChildWidget){ @@ -18548,9 +19443,15 @@ dojo.declare( removeChild: function(child){ // Overrides _LayoutWidget.removeChild(). - // destroy wrapper widget first, before StackContainer.getChildren() call - child._wrapperWidget.destroy(); - delete child._wrapperWidget; + // Destroy wrapper widget first, before StackContainer.getChildren() call. + // Replace wrapper widget with true child widget (ContentPane etc.). + // This step only happens if the AccordionContainer has been started; otherwise there's no wrapper. + if(child._wrapperWidget){ + dojo.place(child.domNode, child._wrapperWidget.domNode, "after"); + child._wrapperWidget.destroy(); + delete child._wrapperWidget; + } + dojo.removeClass(child.domNode, "dijitHidden"); this.inherited(arguments); @@ -18564,23 +19465,53 @@ dojo.declare( }, destroy: function(){ + if(this._animation){ + this._animation.stop(); + } dojo.forEach(this.getChildren(), function(child){ - child._wrapperWidget.destroy(); + // If AccordionContainer has been started, then each child has a wrapper widget which + // also needs to be destroyed. + if(child._wrapperWidget){ + child._wrapperWidget.destroy(); + }else{ + child.destroyRecursive(); + } }); this.inherited(arguments); }, - _transition: function(/*dijit._Widget?*/newWidget, /*dijit._Widget?*/oldWidget, /*Boolean*/ animate){ + _showChild: function(child){ + // Override StackContainer._showChild() to set visibility of _wrapperWidget.containerNode + child._wrapperWidget.containerNode.style.display="block"; + return this.inherited(arguments); + }, + + _hideChild: function(child){ + // Override StackContainer._showChild() to set visibility of _wrapperWidget.containerNode + child._wrapperWidget.containerNode.style.display="none"; + this.inherited(arguments); + }, + + _transition: function(/*dijit._Widget?*/ newWidget, /*dijit._Widget?*/ oldWidget, /*Boolean*/ animate){ // Overrides StackContainer._transition() to provide sliding of title bars etc. -//TODO: should be able to replace this with calls to slideIn/slideOut - if(this._inTransition){ return; } - var animations = []; - var paneHeight = this._verticalSpace; + if(dojo.isIE < 8){ + // workaround animation bugs by not animating; not worth supporting animation for IE6 & 7 + animate = false; + } + + if(this._animation){ + // there's an in-progress animation. speedily end it so we can do the newly requested one + this._animation.stop(true); + delete this._animation; + } + + var self = this; + if(newWidget){ newWidget._wrapperWidget.set("selected", true); - this._showChild(newWidget); // prepare widget to be slid in + var d = this._showChild(newWidget); // prepare widget to be slid in // 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. @@ -18588,74 +19519,51 @@ dojo.declare( if(this.doLayout && newWidget.resize){ newWidget.resize(this._containerContentBox); } - - var newContents = newWidget.domNode; - dojo.addClass(newContents, "dijitVisible"); - dojo.removeClass(newContents, "dijitHidden"); - - if(animate){ - var newContentsOverflow = newContents.style.overflow; - newContents.style.overflow = "hidden"; - animations.push(dojo.animateProperty({ - node: newContents, - duration: this.duration, - properties: { - height: { start: 1, end: this._getTargetHeight(newContents) } - }, - onEnd: function(){ - newContents.style.overflow = newContentsOverflow; - - // Kick IE to workaround layout bug, see #11415 - if(dojo.isIE){ - setTimeout(function(){ - dojo.removeClass(newContents.parentNode, "dijitAccordionInnerContainerFocused"); - setTimeout(function(){ - dojo.addClass(newContents.parentNode, "dijitAccordionInnerContainerFocused"); - }, 0); - }, 0); - } - } - })); - } } + if(oldWidget){ oldWidget._wrapperWidget.set("selected", false); - var oldContents = oldWidget.domNode; - if(animate){ - var oldContentsOverflow = oldContents.style.overflow; - oldContents.style.overflow = "hidden"; - animations.push(dojo.animateProperty({ - node: oldContents, - duration: this.duration, - properties: { - height: { start: this._getTargetHeight(oldContents), end: 1 } - }, - onEnd: function(){ - dojo.addClass(oldContents, "dijitHidden"); - dojo.removeClass(oldContents, "dijitVisible"); - oldContents.style.overflow = oldContentsOverflow; - if(oldWidget.onHide){ - oldWidget.onHide(); - } - } - })); - }else{ - dojo.addClass(oldContents, "dijitHidden"); - dojo.removeClass(oldContents, "dijitVisible"); - if(oldWidget.onHide){ - oldWidget.onHide(); - } + if(!animate){ + this._hideChild(oldWidget); } } if(animate){ - this._inTransition = true; - var combined = dojo.fx.combine(animations); - combined.onEnd = dojo.hitch(this, function(){ - delete this._inTransition; + var newContents = newWidget._wrapperWidget.containerNode, + oldContents = oldWidget._wrapperWidget.containerNode; + + // During the animation we will be showing two dijitAccordionChildWrapper nodes at once, + // which on claro takes up 4px extra space (compared to stable AccordionContainer). + // Have to compensate for that by immediately shrinking the pane being closed. + var wrapperContainerNode = newWidget._wrapperWidget.containerNode, + wrapperContainerNodeMargin = dojo._getMarginExtents(wrapperContainerNode), + wrapperContainerNodePadBorder = dojo._getPadBorderExtents(wrapperContainerNode), + animationHeightOverhead = wrapperContainerNodeMargin.h + wrapperContainerNodePadBorder.h; + + oldContents.style.height = (self._verticalSpace - animationHeightOverhead) + "px"; + + this._animation = new dojo.Animation({ + node: newContents, + duration: this.duration, + curve: [1, this._verticalSpace - animationHeightOverhead - 1], + onAnimate: function(value){ + value = Math.floor(value); // avoid fractional values + newContents.style.height = value + "px"; + oldContents.style.height = (self._verticalSpace - animationHeightOverhead - value) + "px"; + }, + onEnd: function(){ + delete self._animation; + newContents.style.height = "auto"; + oldWidget._wrapperWidget.containerNode.style.display = "none"; + oldContents.style.height = "auto"; + self._hideChild(oldWidget); + } }); - combined.play(); - } + this._animation.onStop = this._animation.onEnd; + this._animation.play(); + } + + return d; // If child has an href, promise that fires when the widget has finished loading }, // note: we are treating the container as controller here @@ -18666,10 +19574,7 @@ dojo.declare( // This is called from a handler on AccordionContainer.domNode // (setup in StackContainer), and is also called directly from // the click handler for accordion labels - if(this._inTransition || this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){ - if(this._inTransition){ - dojo.stopEvent(e); - } + if(this.disabled || e.altKey || !(fromTitle || e.ctrlKey)){ return; } var k = dojo.keys, @@ -18694,16 +19599,17 @@ dojo.declare("dijit.layout._AccordionInnerContainer", // When other widgets are added as children to an AccordionContainer they are wrapped in // this widget. +/*===== // buttonWidget: String // Name of class to use to instantiate title // (Wish we didn't have a separate widget for just the title but maintaining it // for backwards compatibility, is it worth it?) -/*===== buttonWidget: null, =====*/ + +/*===== // contentWidget: dijit._Widget // Pointer to the real child widget -/*===== contentWidget: null, =====*/ @@ -18713,7 +19619,15 @@ dojo.declare("dijit.layout._AccordionInnerContainer", isContainer: true, isLayoutContainer: true, - buildRendering: function(){ + buildRendering: function(){ + // Builds a template like: + // <div class=dijitAccordionInnerContainer> + // Button + // <div class=dijitAccordionChildWrapper> + // ContentPane + // </div> + // </div> + // Create wrapper div, placed where the child is now this.domNode = dojo.place("<div class='" + this.baseClass + "'>", this.contentWidget.domNode, "after"); @@ -18731,22 +19645,32 @@ dojo.declare("dijit.layout._AccordionInnerContainer", parent: this.parent })).placeAt(this.domNode); - // and then the actual content widget (changing it from prior-sibling to last-child) - dojo.place(this.contentWidget.domNode, this.domNode); + // and then the actual content widget (changing it from prior-sibling to last-child), + // wrapped by a <div class=dijitAccordionChildWrapper> + this.containerNode = dojo.place("<div class='dijitAccordionChildWrapper' style='display:none'>", this.domNode); + dojo.place(this.contentWidget.domNode, this.containerNode); }, postCreate: function(){ this.inherited(arguments); - this.connect(this.contentWidget, 'set', function(name, value){ - var mappedName = {title: "label", tooltip: "title", iconClass: "iconClass"}[name]; - if(mappedName){ - this.button.set(mappedName, value); - } - }, this); + + // Map changes in content widget's title etc. to changes in the button + var button = this.button; + this._contentWidgetWatches = [ + this.contentWidget.watch('title', dojo.hitch(this, function(name, oldValue, newValue){ + button.set("label", newValue); + })), + this.contentWidget.watch('tooltip', dojo.hitch(this, function(name, oldValue, newValue){ + button.set("title", newValue); + })), + this.contentWidget.watch('iconClass', dojo.hitch(this, function(name, oldValue, newValue){ + button.set("iconClass", newValue); + })) + ]; }, _setSelectedAttr: function(/*Boolean*/ isSelected){ - this.selected = isSelected; + this._set("selected", isSelected); this.button.set("selected", isSelected); if(isSelected){ var cw = this.contentWidget; @@ -18761,7 +19685,9 @@ dojo.declare("dijit.layout._AccordionInnerContainer", destroy: function(){ this.button.destroyRecursive(); - + + dojo.forEach(this._contentWidgetWatches || [], function(w){ w.unwatch(); }); + delete this.contentWidget._buttonWidget; delete this.contentWidget._wrapperWidget; @@ -18783,7 +19709,7 @@ dojo.declare("dijit.layout._AccordionButton", // tags: // private - templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' wairole=\"tab\" waiState=\"expanded-false\"\n\t\t><span class='dijitInline dijitAccordionArrow' waiRole=\"presentation\"></span\n\t\t><span class='arrowTextUp' waiRole=\"presentation\">+</span\n\t\t><span class='arrowTextDown' waiRole=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" waiRole=\"presentation\"/>\n\t\t<span waiRole=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"), + templateString: dojo.cache("dijit.layout", "templates/AccordionButton.html", "<div dojoAttachEvent='onclick:_onTitleClick' class='dijitAccordionTitle'>\n\t<div dojoAttachPoint='titleNode,focusNode' dojoAttachEvent='onkeypress:_onTitleKeyPress'\n\t\t\tclass='dijitAccordionTitleFocus' role=\"tab\" aria-expanded=\"false\"\n\t\t><span class='dijitInline dijitAccordionArrow' role=\"presentation\"></span\n\t\t><span class='arrowTextUp' role=\"presentation\">+</span\n\t\t><span class='arrowTextDown' role=\"presentation\">-</span\n\t\t><img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" dojoAttachPoint='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"), attributeMap: dojo.mixin(dojo.clone(dijit.layout.ContentPane.prototype.attributeMap), { label: {node: "titleTextNode", type: "innerHTML" }, title: {node: "titleTextNode", type: "attribute", attribute: "title"}, @@ -18800,18 +19726,18 @@ dojo.declare("dijit.layout._AccordionButton", return this.parent; }, - postCreate: function(){ + buildRendering: function(){ this.inherited(arguments); - dojo.setSelectable(this.domNode, false); - var titleTextNodeId = dojo.attr(this.domNode,'id').replace(' ','_'); + var titleTextNodeId = this.id.replace(' ','_'); dojo.attr(this.titleTextNode, "id", titleTextNodeId+"_title"); dijit.setWaiState(this.focusNode, "labelledby", dojo.attr(this.titleTextNode, "id")); + dojo.setSelectable(this.domNode, false); }, getTitleHeight: function(){ // summary: // Returns the height of the title dom node. - return dojo.marginBox(this.domNode).h; // Integer + return dojo._getMarginSize(this.domNode).h; // Integer }, // TODO: maybe the parent should set these methods directly rather than forcing the code @@ -18820,10 +19746,8 @@ dojo.declare("dijit.layout._AccordionButton", // summary: // Callback when someone clicks my title. var parent = this.getParent(); - if(!parent._inTransition){ parent.selectChild(this.contentWidget, true); dijit.focus(this.focusNode); - } }, _onTitleKeyPress: function(/*Event*/ evt){ @@ -18831,7 +19755,7 @@ dojo.declare("dijit.layout._AccordionButton", }, _setSelectedAttr: function(/*Boolean*/ isSelected){ - this.selected = isSelected; + this._set("selected", isSelected); dijit.setWaiState(this.focusNode, "expanded", isSelected); dijit.setWaiState(this.focusNode, "selected", isSelected); this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1"); @@ -18847,6 +19771,7 @@ dojo.provide("dijit.layout.BorderContainer"); + dojo.declare( "dijit.layout.BorderContainer", dijit.layout._LayoutWidget, @@ -18862,19 +19787,21 @@ dojo.declare( // include optional splitters (splitter="true") to make them resizable by the user. The remaining // space is designated for the center region. // - // NOTE: Splitters must not be more than 50 pixels in width. - // // The outer size must be specified on the BorderContainer node. Width must be specified for the sides // and height for the top and bottom, respectively. No dimensions should be specified on the center; // it will fill the remaining space. Regions named "leading" and "trailing" may be used just like // "left" and "right" except that they will be reversed in right-to-left environments. // + // For complex layouts, multiple children can be specified for a single region. In this case, the + // layoutPriority flag on the children determines which child is closer to the edge (low layoutPriority) + // and which child is closer to the center (high layoutPriority). layoutPriority can also be used + // instead of the design attribute to conrol layout precedence of horizontal vs. vertical panes. // example: // | <div dojoType="dijit.layout.BorderContainer" design="sidebar" gutters="false" // | style="width: 400px; height: 300px;"> - // | <div dojoType="ContentPane" region="top">header text</div> - // | <div dojoType="ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div> - // | <div dojoType="ContentPane" region="center">client area</div> + // | <div dojoType="dijit.layout.ContentPane" region="top">header text</div> + // | <div dojoType="dijit.layout.ContentPane" region="right" splitter="true" style="width: 200px;">table of contents</div> + // | <div dojoType="dijit.layout.ContentPane" region="center">client area</div> // | </div> // design: String @@ -18884,13 +19811,13 @@ dojo.declare( // - "sidebar" where the left and right sides extend from top to bottom. design: "headline", - // gutters: Boolean + // gutters: [const] Boolean // Give each pane a border and margin. // Margin determined by domNode.paddingLeft. // When false, only resizable panes have a gutter (i.e. draggable splitter) for resizing. gutters: true, - // liveSplitters: Boolean + // liveSplitters: [const] Boolean // Specifies whether splitters resize as you drag (true) or only upon mouseup (false) liveSplitters: true, @@ -18913,13 +19840,6 @@ dojo.declare( this.inherited(arguments); }, - postCreate: function(){ - this.inherited(arguments); - - this._splitters = {}; - this._splitterThickness = {}; - }, - startup: function(){ if(this._started){ return; } dojo.forEach(this.getChildren(), this._setupChild, this); @@ -18939,14 +19859,10 @@ dojo.declare( if(region == "leading"){ region = ltr ? "left" : "right"; } if(region == "trailing"){ region = ltr ? "right" : "left"; } - //FIXME: redundant? - this["_"+region] = child.domNode; - this["_"+region+"Widget"] = child; - // Create draggable splitter for resizing pane, // or alternately if splitter=false but BorderContainer.gutters=true then // insert dummy div just for spacing - if((child.splitter || this.gutters) && !this._splitters[region]){ + if(region != "center" && (child.splitter || this.gutters) && !child._splitterWidget){ var _Splitter = dojo.getObject(child.splitter ? this._splitterClass : "dijit.layout._Gutter"); var splitter = new _Splitter({ id: child.id + "_splitter", @@ -18956,24 +19872,19 @@ dojo.declare( live: this.liveSplitters }); splitter.isSplitter = true; - this._splitters[region] = splitter.domNode; - dojo.place(this._splitters[region], child.domNode, "after"); + child._splitterWidget = splitter; + + dojo.place(splitter.domNode, child.domNode, "after"); - // Splitters arent added as Contained children, so we need to call startup explicitly + // Splitters aren't added as Contained children, so we need to call startup explicitly splitter.startup(); } - child.region = region; + child.region = region; // TODO: technically wrong since it overwrites "trailing" with "left" etc. } }, - _computeSplitterThickness: function(region){ - this._splitterThickness[region] = this._splitterThickness[region] || - dojo.marginBox(this._splitters[region])[(/top|bottom/.test(region) ? 'h' : 'w')]; - }, - layout: function(){ // Implement _LayoutWidget.layout() virtual method. - for(var region in this._splitters){ this._computeSplitterThickness(region); } this._layoutChildren(); }, @@ -18987,20 +19898,29 @@ dojo.declare( removeChild: function(/*dijit._Widget*/ child){ // Override _LayoutWidget.removeChild(). + var region = child.region; - var splitter = this._splitters[region]; + var splitter = child._splitterWidget if(splitter){ - dijit.byNode(splitter).destroy(); - delete this._splitters[region]; - delete this._splitterThickness[region]; + splitter.destroy(); + delete child._splitterWidget; } this.inherited(arguments); - delete this["_"+region]; - delete this["_" +region+"Widget"]; + if(this._started){ this._layoutChildren(); } + // Clean up whatever style changes we made to the child pane. + // Unclear how height and width should be handled. dojo.removeClass(child.domNode, this.baseClass+"Pane"); + dojo.style(child.domNode, { + top: "auto", + bottom: "auto", + left: "auto", + right: "auto", + position: "static" + }); + dojo.style(child.domNode, region == "top" || region == "bottom" ? "width" : "height", "auto"); }, getChildren: function(){ @@ -19010,11 +19930,15 @@ dojo.declare( }); }, + // TODO: remove in 2.0 getSplitter: function(/*String*/region){ // summary: // Returns the widget responsible for rendering the splitter associated with region - var splitter = this._splitters[region]; - return splitter ? dijit.byNode(splitter) : null; + // tags: + // deprecated + return dojo.filter(this.getChildren(), function(child){ + return child.region == region; + })[0]._splitterWidget; }, resize: function(newSize, currentSize){ @@ -19035,7 +19959,7 @@ dojo.declare( this.inherited(arguments); }, - _layoutChildren: function(/*String?*/changedRegion, /*Number?*/ changedRegionSize){ + _layoutChildren: function(/*String?*/ changedChildId, /*Number?*/ changedChildSize){ // summary: // This is the main routine for setting size/position of each child. // description: @@ -19045,11 +19969,10 @@ dojo.declare( // With changedRegion specified (as "left", "top", "bottom", or "right"), // it changes that region's width/height to changedRegionSize and // then resizes other regions that were affected. - // changedRegion: - // The region should be changed because splitter was dragged. - // "left", "right", "top", or "bottom". - // changedRegionSize: - // The new width/height (in pixels) to make changedRegion + // changedChildId: + // Id of the child which should be resized because splitter was dragged. + // changedChildSize: + // The new width/height (in pixels) to make specified child if(!this._borderBox || !this._borderBox.h){ // We are currently hidden, or we haven't been sized by our parent yet. @@ -19057,196 +19980,63 @@ dojo.declare( return; } - var sidebarLayout = (this.design == "sidebar"); - var topHeight = 0, bottomHeight = 0, leftWidth = 0, rightWidth = 0; - var topStyle = {}, leftStyle = {}, rightStyle = {}, bottomStyle = {}, - centerStyle = (this._center && this._center.style) || {}; - - var changedSide = /left|right/.test(changedRegion); - - var layoutSides = !changedRegion || (!changedSide && !sidebarLayout); - var layoutTopBottom = !changedRegion || (changedSide && sidebarLayout); - - // Ask browser for width/height of side panes. - // Would be nice to cache this but height can change according to width - // (because words wrap around). I don't think width will ever change though - // (except when the user drags a splitter). - if(this._top){ - topStyle = (changedRegion == "top" || layoutTopBottom) && this._top.style; - topHeight = changedRegion == "top" ? changedRegionSize : dojo.marginBox(this._top).h; - } - if(this._left){ - leftStyle = (changedRegion == "left" || layoutSides) && this._left.style; - leftWidth = changedRegion == "left" ? changedRegionSize : dojo.marginBox(this._left).w; - } - if(this._right){ - rightStyle = (changedRegion == "right" || layoutSides) && this._right.style; - rightWidth = changedRegion == "right" ? changedRegionSize : dojo.marginBox(this._right).w; - } - if(this._bottom){ - bottomStyle = (changedRegion == "bottom" || layoutTopBottom) && this._bottom.style; - bottomHeight = changedRegion == "bottom" ? changedRegionSize : dojo.marginBox(this._bottom).h; - } - - var splitters = this._splitters; - var topSplitter = splitters.top, bottomSplitter = splitters.bottom, - leftSplitter = splitters.left, rightSplitter = splitters.right; - var splitterThickness = this._splitterThickness; - var topSplitterThickness = splitterThickness.top || 0, - leftSplitterThickness = splitterThickness.left || 0, - rightSplitterThickness = splitterThickness.right || 0, - bottomSplitterThickness = splitterThickness.bottom || 0; - - // Check for race condition where CSS hasn't finished loading, so - // the splitter width == the viewport width (#5824) - if(leftSplitterThickness > 50 || rightSplitterThickness > 50){ - setTimeout(dojo.hitch(this, function(){ - // Results are invalid. Clear them out. - this._splitterThickness = {}; - - for(var region in this._splitters){ - this._computeSplitterThickness(region); + // Generate list of wrappers of my children in the order that I want layoutChildren() + // to process them (i.e. from the outside to the inside) + var wrappers = dojo.map(this.getChildren(), function(child, idx){ + return { + pane: child, + weight: [ + child.region == "center" ? Infinity : 0, + child.layoutPriority, + (this.design == "sidebar" ? 1 : -1) * (/top|bottom/.test(child.region) ? 1 : -1), + idx + ] + }; + }, this); + wrappers.sort(function(a, b){ + var aw = a.weight, bw = b.weight; + for(var i=0; i<aw.length; i++){ + if(aw[i] != bw[i]){ + return aw[i] - bw[i]; } - this._layoutChildren(); - }), 50); - return false; - } - - var pe = this.pe; - - var splitterBounds = { - left: (sidebarLayout ? leftWidth + leftSplitterThickness: 0) + pe.l + "px", - right: (sidebarLayout ? rightWidth + rightSplitterThickness: 0) + pe.r + "px" - }; - - if(topSplitter){ - dojo.mixin(topSplitter.style, splitterBounds); - topSplitter.style.top = topHeight + pe.t + "px"; - } - - if(bottomSplitter){ - dojo.mixin(bottomSplitter.style, splitterBounds); - bottomSplitter.style.bottom = bottomHeight + pe.b + "px"; - } - - splitterBounds = { - top: (sidebarLayout ? 0 : topHeight + topSplitterThickness) + pe.t + "px", - bottom: (sidebarLayout ? 0 : bottomHeight + bottomSplitterThickness) + pe.b + "px" - }; - - if(leftSplitter){ - dojo.mixin(leftSplitter.style, splitterBounds); - leftSplitter.style.left = leftWidth + pe.l + "px"; - } - - if(rightSplitter){ - dojo.mixin(rightSplitter.style, splitterBounds); - rightSplitter.style.right = rightWidth + pe.r + "px"; - } - - dojo.mixin(centerStyle, { - top: pe.t + topHeight + topSplitterThickness + "px", - left: pe.l + leftWidth + leftSplitterThickness + "px", - right: pe.r + rightWidth + rightSplitterThickness + "px", - bottom: pe.b + bottomHeight + bottomSplitterThickness + "px" + } + return 0; }); - var bounds = { - top: sidebarLayout ? pe.t + "px" : centerStyle.top, - bottom: sidebarLayout ? pe.b + "px" : centerStyle.bottom - }; - dojo.mixin(leftStyle, bounds); - dojo.mixin(rightStyle, bounds); - leftStyle.left = pe.l + "px"; rightStyle.right = pe.r + "px"; topStyle.top = pe.t + "px"; bottomStyle.bottom = pe.b + "px"; - if(sidebarLayout){ - topStyle.left = bottomStyle.left = leftWidth + leftSplitterThickness + pe.l + "px"; - topStyle.right = bottomStyle.right = rightWidth + rightSplitterThickness + pe.r + "px"; - }else{ - topStyle.left = bottomStyle.left = pe.l + "px"; - topStyle.right = bottomStyle.right = pe.r + "px"; - } - - // More calculations about sizes of panes - var containerHeight = this._borderBox.h - pe.t - pe.b, - middleHeight = containerHeight - ( topHeight + topSplitterThickness + bottomHeight + bottomSplitterThickness), - sidebarHeight = sidebarLayout ? containerHeight : middleHeight; - - var containerWidth = this._borderBox.w - pe.l - pe.r, - middleWidth = containerWidth - (leftWidth + leftSplitterThickness + rightWidth + rightSplitterThickness), - sidebarWidth = sidebarLayout ? middleWidth : containerWidth; + // Make new list, combining the externally specified children with splitters and gutters + var childrenAndSplitters = []; + dojo.forEach(wrappers, function(wrapper){ + var pane = wrapper.pane; + childrenAndSplitters.push(pane); + if(pane._splitterWidget){ + childrenAndSplitters.push(pane._splitterWidget); + } + }); - // New margin-box size of each pane + // Compute the box in which to lay out my children var dim = { - top: { w: sidebarWidth, h: topHeight }, - bottom: { w: sidebarWidth, h: bottomHeight }, - left: { w: leftWidth, h: sidebarHeight }, - right: { w: rightWidth, h: sidebarHeight }, - center: { h: middleHeight, w: middleWidth } + l: this.pe.l, + t: this.pe.t, + w: this._borderBox.w - this.pe.w, + h: this._borderBox.h - this.pe.h }; - if(changedRegion){ - // Respond to splitter drag event by changing changedRegion's width or height - var child = this["_" + changedRegion + "Widget"], - mb = {}; - mb[ /top|bottom/.test(changedRegion) ? "h" : "w"] = changedRegionSize; - child.resize ? child.resize(mb, dim[child.region]) : dojo.marginBox(child.domNode, mb); - } + // Layout the children, possibly changing size due to a splitter drag + dijit.layout.layoutChildren(this.domNode, dim, childrenAndSplitters, + changedChildId, changedChildSize); + }, - // Nodes in IE<8 don't respond to t/l/b/r, and TEXTAREA doesn't respond in any browser - var janky = dojo.isIE < 8 || (dojo.isIE && dojo.isQuirks) || dojo.some(this.getChildren(), function(child){ - return child.domNode.tagName == "TEXTAREA" || child.domNode.tagName == "INPUT"; + destroyRecursive: function(){ + // Destroy splitters first, while getChildren() still works + dojo.forEach(this.getChildren(), function(child){ + var splitter = child._splitterWidget; + if(splitter){ + splitter.destroy(); + } + delete child._splitterWidget; }); - if(janky){ - // Set the size of the children the old fashioned way, by setting - // CSS width and height - - var resizeWidget = function(widget, changes, result){ - if(widget){ - (widget.resize ? widget.resize(changes, result) : dojo.marginBox(widget.domNode, changes)); - } - }; - - if(leftSplitter){ leftSplitter.style.height = sidebarHeight; } - if(rightSplitter){ rightSplitter.style.height = sidebarHeight; } - resizeWidget(this._leftWidget, {h: sidebarHeight}, dim.left); - resizeWidget(this._rightWidget, {h: sidebarHeight}, dim.right); - - if(topSplitter){ topSplitter.style.width = sidebarWidth; } - if(bottomSplitter){ bottomSplitter.style.width = sidebarWidth; } - resizeWidget(this._topWidget, {w: sidebarWidth}, dim.top); - resizeWidget(this._bottomWidget, {w: sidebarWidth}, dim.bottom); - - resizeWidget(this._centerWidget, dim.center); - }else{ - // Calculate which panes need a notification that their size has been changed - // (we've already set style.top/bottom/left/right on those other panes). - var notifySides = !changedRegion || (/top|bottom/.test(changedRegion) && this.design != "sidebar"), - notifyTopBottom = !changedRegion || (/left|right/.test(changedRegion) && this.design == "sidebar"), - notifyList = { - center: true, - left: notifySides, - right: notifySides, - top: notifyTopBottom, - bottom: notifyTopBottom - }; - - // Send notification to those panes that have changed size - dojo.forEach(this.getChildren(), function(child){ - if(child.resize && notifyList[child.region]){ - child.resize(null, dim[child.region]); - } - }, this); - } - }, - destroy: function(){ - for(var region in this._splitters){ - var splitter = this._splitters[region]; - dijit.byNode(splitter).destroy(); - dojo.destroy(splitter); - } - delete this._splitters; - delete this._splitterThickness; + // Then destroy the real children, and myself this.inherited(arguments); } }); @@ -19261,6 +20051,12 @@ dojo.extend(dijit._Widget, { // See the `dijit.layout.BorderContainer` description for details. region: '', + // layoutPriority: [const] Number + // Parameter for children of `dijit.layout.BorderContainer`. + // Children with a higher layoutPriority will be placed closer to the BorderContainer center, + // between children with a lower layoutPriority. + layoutPriority: 0, + // splitter: [const] Boolean // Parameter for child of `dijit.layout.BorderContainer` where region != "center". // If true, enables user to resize the widget by putting a draggable splitter between @@ -19278,8 +20074,6 @@ dojo.extend(dijit._Widget, { maxSize: Infinity }); - - dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], { // summary: @@ -19299,7 +20093,7 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], // Pointer to the pane associated with this splitter child: null, - // region: String + // region: [const] String // Region of pane associated with this splitter. // "top", "bottom", "left", "right". region: null, @@ -19310,18 +20104,21 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], // otherwise, the size doesn't change until you drop the splitter (by mouse-up) live: true, - templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" waiRole="separator"><div class="dijitSplitterThumb"></div></div>', + templateString: '<div class="dijitSplitter" dojoAttachEvent="onkeypress:_onKeyPress,onmousedown:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" role="separator"><div class="dijitSplitterThumb"></div></div>', - postCreate: function(){ + postMixInProperties: function(){ this.inherited(arguments); - this.horizontal = /top|bottom/.test(this.region); - dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V")); -// dojo.addClass(this.child.domNode, "dijitSplitterPane"); -// dojo.setSelectable(this.domNode, false); //TODO is this necessary? + this.horizontal = /top|bottom/.test(this.region); this._factor = /top|left/.test(this.region) ? 1 : -1; - this._cookieName = this.container.id + "_" + this.region; + }, + + buildRendering: function(){ + this.inherited(arguments); + + dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V")); + if(this.container.persist){ // restore old size var persistSize = dojo.cookie(this._cookieName); @@ -19333,23 +20130,14 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], _computeMaxSize: function(){ // summary: - // Compute the maximum size that my corresponding pane can be set to + // Return the maximum size that my corresponding pane can be set to var dim = this.horizontal ? 'h' : 'w', - thickness = this.container._splitterThickness[this.region]; - - // Get DOMNode of opposite pane, if an opposite pane exists. - // Ex: if I am the _Splitter for the left pane, then get the right pane. - var flip = {left:'right', right:'left', top:'bottom', bottom:'top', leading:'trailing', trailing:'leading'}, - oppNode = this.container["_" + flip[this.region]]; - - // I can expand up to the edge of the opposite pane, or if there's no opposite pane, then to - // edge of BorderContainer - var available = dojo.contentBox(this.container.domNode)[dim] - - (oppNode ? dojo.marginBox(oppNode)[dim] : 0) - - 20 - thickness * 2; + childSize = dojo.marginBox(this.child.domNode)[dim], + center = dojo.filter(this.container.getChildren(), function(child){ return child.region == "center";})[0], + spaceAvailable = dojo.marginBox(center.domNode)[dim]; // can expand until center is crushed to 0 - return Math.min(this.child.maxSize, available); + return Math.min(this.child.maxSize, childSize + spaceAvailable); }, _startDrag: function(e){ @@ -19368,28 +20156,26 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], dojo.addClass(this.domNode, "dijitSplitterShadow"); dojo.place(this.fake, this.domNode, "after"); } - dojo.addClass(this.domNode, "dijitSplitterActive"); - dojo.addClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Active"); + dojo.addClass(this.domNode, "dijitSplitterActive dijitSplitter" + (this.horizontal ? "H" : "V") + "Active"); if(this.fake){ - dojo.removeClass(this.fake, "dijitSplitterHover"); - dojo.removeClass(this.fake, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover"); + dojo.removeClass(this.fake, "dijitSplitterHover dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover"); } //Performance: load data info local vars for onmousevent function closure var factor = this._factor, - max = this._computeMaxSize(), - min = this.child.minSize || 20, isHorizontal = this.horizontal, axis = isHorizontal ? "pageY" : "pageX", pageStart = e[axis], splitterStyle = this.domNode.style, dim = isHorizontal ? 'h' : 'w', childStart = dojo.marginBox(this.child.domNode)[dim], + max = this._computeMaxSize(), + min = this.child.minSize || 20, region = this.region, - splitterStart = parseInt(this.domNode.style[region], 10), + splitterAttr = region == "top" || region == "bottom" ? "top" : "left", // style attribute of splitter to adjust + splitterStart = parseInt(splitterStyle[splitterAttr], 10), resize = this._resize, - childNode = this.child.domNode, - layoutFunc = dojo.hitch(this.container, this.container._layoutChildren), + layoutFunc = dojo.hitch(this.container, "_layoutChildren", this.child.id), de = dojo.doc; this._handlers = (this._handlers || []).concat([ @@ -19399,9 +20185,10 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], boundChildSize = Math.max(Math.min(childSize, max), min); if(resize || forceResize){ - layoutFunc(region, boundChildSize); + layoutFunc(boundChildSize); } - splitterStyle[region] = factor * delta + splitterStart + (boundChildSize - childSize) + "px"; + // TODO: setting style directly (usually) sets content box size, need to set margin box size + splitterStyle[splitterAttr] = delta + splitterStart + factor*(boundChildSize - childSize) + "px"; }), dojo.connect(de, "ondragstart", dojo.stopEvent), dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent), @@ -19422,9 +20209,8 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], dojo.removeClass(this.cover, "dijitSplitterCoverActive"); } if(this.fake){ dojo.destroy(this.fake); } - dojo.removeClass(this.domNode, "dijitSplitterActive"); - dojo.removeClass(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Active"); - dojo.removeClass(this.domNode, "dijitSplitterShadow"); + dojo.removeClass(this.domNode, "dijitSplitterActive dijitSplitter" + + (this.horizontal ? "H" : "V") + "Active dijitSplitterShadow"); this._drag(e); //TODO: redundant with onmousemove? this._drag(e, true); }finally{ @@ -19458,8 +20244,8 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], // this.inherited(arguments); return; } - var childSize = dojo.marginBox(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick; - this.container._layoutChildren(this.region, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize)); + var childSize = dojo._getMarginSize(this.child.domNode)[ horizontal ? 'h' : 'w' ] + this._factor * tick; + this.container._layoutChildren(this.child.id, Math.max(Math.min(childSize, this._computeMaxSize()), this.child.minSize)); dojo.stopEvent(e); }, @@ -19473,7 +20259,7 @@ dojo.declare("dijit.layout._Splitter", [ dijit._Widget, dijit._Templated ], } }); -dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated ], +dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated], { // summary: // Just a spacer div to separate side pane from center pane. @@ -19484,10 +20270,15 @@ dojo.declare("dijit.layout._Gutter", [dijit._Widget, dijit._Templated ], // tags: // private - templateString: '<div class="dijitGutter" waiRole="presentation"></div>', + templateString: '<div class="dijitGutter" role="presentation"></div>', - postCreate: function(){ + postMixInProperties: function(){ + this.inherited(arguments); this.horizontal = /top|bottom/.test(this.region); + }, + + buildRendering: function(){ + this.inherited(arguments); dojo.addClass(this.domNode, "dijitGutter" + (this.horizontal ? "H" : "V")); } }); @@ -19519,12 +20310,12 @@ dojo.declare("dijit.layout._TabContainerBase", baseClass: "dijitTabContainer", - // tabStrip: Boolean + // tabStrip: [const] Boolean // Defines whether the tablist gets an extra class for layouting, putting a border/shading - // around the set of tabs. + // around the set of tabs. Not supported by claro theme. tabStrip: false, - // nested: Boolean + // nested: [const] Boolean // If true, use styling for a TabContainer nested inside another TabContainer. // For tundra etc., makes tabs look like links, and hides the outer // border since the outer TabContainer already has a border. @@ -19541,7 +20332,7 @@ dojo.declare("dijit.layout._TabContainerBase", this.inherited(arguments); }, - postCreate: function(){ + buildRendering: function(){ this.inherited(arguments); // Create the tab list that will have a tab (a.k.a. tab button) for each tab panel @@ -19608,7 +20399,12 @@ dojo.declare("dijit.layout._TabContainerBase", }else{ // just layout the tab controller, so it can position left/right buttons etc. if(this.tablist.resize){ - this.tablist.resize({w: dojo.contentBox(this.domNode).w}); + //make the tabs zero width so that they don't interfere with width calc, then reset + var s = this.tablist.domNode.style; + s.width="0"; + var width = dojo.contentBox(this.domNode).w; + s.width=""; + this.tablist.resize({w: width}); } // and call resize() on the selected pane just to tell it that it's been made visible @@ -19626,7 +20422,6 @@ dojo.declare("dijit.layout._TabContainerBase", } }); - } if(!dojo._hasResource["dijit.layout.TabController"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -19635,10 +20430,10 @@ dojo.provide("dijit.layout.TabController"); -// Menu is used for an accessible close button, would be nice to have a lighter-weight solution +// Menu is used for an accessible close button, would be nice to have a lighter-weight solution dojo.declare("dijit.layout.TabController", @@ -19654,7 +20449,7 @@ dojo.declare("dijit.layout.TabController", // tags: // private - templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>", + templateString: "<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>", // tabPosition: String // Defines where tabs go relative to the content. @@ -19704,32 +20499,16 @@ dojo.declare("dijit.layout._TabButton", closeNode: "dijitTabCloseButton" }, - templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div waiRole=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n <div waiRole=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <div waiRole=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n \t<div waiRole=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon\" dojoAttachPoint='iconNode' />\n\t\t <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t \t\tdojoAttachEvent='onclick: onClickCloseButton' waiRole=\"presentation\">\n\t\t <span dojoAttachPoint='closeText' class='dijitTabCloseText'>x</span\n\t\t ></span>\n\t\t\t</div>\n </div>\n </div>\n</div>\n"), + templateString: dojo.cache("dijit.layout", "templates/_TabButton.html", "<div role=\"presentation\" dojoAttachPoint=\"titleNode\" dojoAttachEvent='onclick:onClick'>\n <div role=\"presentation\" class='dijitTabInnerDiv' dojoAttachPoint='innerDiv'>\n <div role=\"presentation\" class='dijitTabContent' dojoAttachPoint='tabContent'>\n \t<div role=\"presentation\" dojoAttachPoint='focusNode'>\n\t\t <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" dojoAttachPoint='iconNode' />\n\t\t <span dojoAttachPoint='containerNode' class='tabLabel'></span>\n\t\t <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" dojoAttachPoint='closeNode'\n\t\t \t\tdojoAttachEvent='onclick: onClickCloseButton' role=\"presentation\">\n\t\t <span dojoAttachPoint='closeText' class='dijitTabCloseText'>[x]</span\n\t\t ></span>\n\t\t\t</div>\n </div>\n </div>\n</div>\n"), // Override _FormWidget.scrollOnFocus. // Don't scroll the whole tab container into view when the button is focused. scrollOnFocus: false, - postMixInProperties: function(){ - // Override blank iconClass from Button to do tab height adjustment on IE6, - // to make sure that tabs with and w/out close icons are same height - if(!this.iconClass){ - this.iconClass = "dijitTabButtonIcon"; - } - }, - - postCreate: function(){ + buildRendering: function(){ this.inherited(arguments); - dojo.setSelectable(this.containerNode, false); - // If a custom icon class has not been set for the - // tab icon, set its width to one pixel. This ensures - // that the height styling of the tab is maintained, - // as it is based on the height of the icon. - // TODO: I still think we can just set dijitTabButtonIcon to 1px in CSS <Bill> - if(this.iconNode.className == "dijitTabButtonIcon"){ - dojo.style(this.iconNode, "width", "1px"); - } + dojo.setSelectable(this.containerNode, false); }, startup: function(){ @@ -19743,8 +20522,10 @@ dojo.declare("dijit.layout._TabButton", }, 1); }, - _setCloseButtonAttr: function(disp){ - this.closeButton = disp; + _setCloseButtonAttr: function(/*Boolean*/ disp){ + // summary: + // Hide/show close button + this._set("closeButton", disp); dojo.toggleClass(this.innerDiv, "dijitClosable", disp); this.closeNode.style.display = disp ? "" : "none"; if(disp){ @@ -19776,16 +20557,16 @@ dojo.declare("dijit.layout._TabButton", }, _setLabelAttr: function(/*String*/ content){ // summary: - // Hook for attr('label', ...) to work. + // Hook for set('label', ...) to work. // description: // takes an HTML string. - // Inherited ToggleButton implementation will Set the label (text) of the button; + // Inherited ToggleButton implementation will Set the label (text) of the button; // Need to set the alt attribute of icon on tab buttons if no label displayed - this.inherited(arguments); - if(this.showLabel == false && !this.params.title){ - this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || ''); - } - }, + this.inherited(arguments); + if(this.showLabel == false && !this.params.title){ + this.iconNode.alt = dojo.trim(this.containerNode.innerText || this.containerNode.textContent || ''); + } + }, destroy: function(){ if(this._closeMenu){ @@ -19805,6 +20586,8 @@ dojo.provide("dijit.layout.ScrollingTabController"); + + dojo.declare("dijit.layout.ScrollingTabController", dijit.layout.TabController, { @@ -19816,9 +20599,9 @@ dojo.declare("dijit.layout.ScrollingTabController", // tags: // private - templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=false>▼</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=false>◀</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=false>▶</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"), + templateString: dojo.cache("dijit.layout", "templates/ScrollingTabController.html", "<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\" containerId=\"${containerId}\" iconClass=\"dijitTabStripMenuIcon\"\n\t\t\tdropDownPosition=\"below-alt, above-alt\"\n\t\t\tdojoAttachPoint=\"_menuBtn\" showLabel=\"false\">▼</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\" iconClass=\"dijitTabStripSlideLeftIcon\"\n\t\t\tdojoAttachPoint=\"_leftBtn\" dojoAttachEvent=\"onClick: doSlideLeft\" showLabel=\"false\">◀</div>\n\t<div dojoType=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\" iconClass=\"dijitTabStripSlideRightIcon\"\n\t\t\tdojoAttachPoint=\"_rightBtn\" dojoAttachEvent=\"onClick: doSlideRight\" showLabel=\"false\">▶</div>\n\t<div class='dijitTabListWrapper' dojoAttachPoint='tablistWrapper'>\n\t\t<div role='tablist' dojoAttachEvent='onkeypress:onkeypress'\n\t\t\t\tdojoAttachPoint='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>\n"), - // useMenu:[const] Boolean + // useMenu: [const] Boolean // True if a menu should be used to select tabs when they are too // wide to fit the TabContainer, false otherwise. useMenu: true, @@ -19828,7 +20611,7 @@ dojo.declare("dijit.layout.ScrollingTabController", // wide to fit the TabContainer, false otherwise. useSlider: true, - // tabStripClass: String + // tabStripClass: [const] String // The css class to apply to the tab strip, if it is visible. tabStripClass: "", @@ -19844,7 +20627,7 @@ dojo.declare("dijit.layout.ScrollingTabController", "class": "containerNode" }), - postCreate: function(){ + buildRendering: function(){ this.inherited(arguments); var n = this.domNode; @@ -19874,41 +20657,18 @@ dojo.declare("dijit.layout.ScrollingTabController", onAddChild: function(page, insertIndex){ this.inherited(arguments); - var menuItem; - if(this.useMenu){ - var containerId = this.containerId; - menuItem = new dijit.MenuItem({ - id: page.id + "_stcMi", - label: page.title, - dir: page.dir, - lang: page.lang, - onClick: dojo.hitch(this, function(){ - var container = dijit.byId(containerId); - container.selectChild(page); - }) - }); - this._menuChildren[page.id] = menuItem; - this._menu.addChild(menuItem, insertIndex); - } - // update the menuItem label when the button label is updated - this.pane2handles[page.id].push( - this.connect(this.pane2button[page.id], "set", function(name, value){ - if(this._postStartup){ - if(name == "label"){ - if(menuItem){ - menuItem.set(name, value); - } - - // The changed label will have changed the width of the - // buttons, so do a resize - if(this._dim){ - this.resize(this._dim); - } + // changes to the tab button label or iconClass will have changed the width of the + // buttons, so do a resize + dojo.forEach(["label", "iconClass"], function(attr){ + this.pane2watches[page.id].push( + this.pane2button[page.id].watch(attr, dojo.hitch(this, function(name, oldValue, newValue){ + if(this._postStartup && this._dim){ + this.resize(this._dim); } - } - }) - ); + })) + ); + }, this); // Increment the width of the wrapper when a tab is added // This makes sure that the buttons never wrap. @@ -19925,13 +20685,6 @@ dojo.declare("dijit.layout.ScrollingTabController", this._selectedTab = null; } - // delete menu entry corresponding to pane that was removed from TabContainer - if(this.useMenu && page && page.id && this._menuChildren[page.id]){ - this._menu.removeChild(this._menuChildren[page.id]); - this._menuChildren[page.id].destroy(); - delete this._menuChildren[page.id]; - } - this.inherited(arguments); }, @@ -19939,7 +20692,6 @@ dojo.declare("dijit.layout.ScrollingTabController", // summary: // Creates the buttons used to scroll to view tabs that // may not be visible if the TabContainer is too narrow. - this._menuChildren = {}; // Make a list of the buttons to display when the tab labels become // wider than the TabContainer, and hide the other buttons. @@ -19948,26 +20700,13 @@ dojo.declare("dijit.layout.ScrollingTabController", this._buttons = dojo.query("> .tabStripButton", this.domNode).filter(function(btn){ if((this.useMenu && btn == this._menuBtn.domNode) || (this.useSlider && (btn == this._rightBtn.domNode || btn == this._leftBtn.domNode))){ - this._btnWidth += dojo.marginBox(btn).w; + this._btnWidth += dojo._getMarginSize(btn).w; return true; }else{ dojo.style(btn, "display", "none"); return false; } }, this); - - if(this.useMenu){ - // Create the menu that is used to select tabs. - this._menu = new dijit.Menu({ - id: this.id + "_menu", - dir: this.dir, - lang: this.lang, - targetNodeIds: [this._menuBtn.domNode], - leftClickToOpen: true, - refocus: false // selecting a menu item sets focus to a TabButton - }); - this._supportingWidgets.push(this._menu); - } }, _getTabsWidth: function(){ @@ -20037,6 +20776,10 @@ dojo.declare("dijit.layout.ScrollingTabController", this._setButtonClass(this._getScroll()); this._postResize = true; + + // Return my size so layoutChildren() can use it. + // Also avoids IE9 layout glitch on browser resize when scroll buttons present + return {h: this._contentBox.h, w: dim.w}; }, _getScroll: function(){ @@ -20139,7 +20882,7 @@ dojo.declare("dijit.layout.ScrollingTabController", return pos; }, - createSmoothScroll : function(x){ + createSmoothScroll: function(x){ // summary: // Creates a dojo._Animation object that smoothly scrolls the tab list // either to a fixed horizontal pixel value, or to the selected tab. @@ -20185,7 +20928,7 @@ dojo.declare("dijit.layout.ScrollingTabController", return anim; // dojo._Animation }, - _getBtnNode: function(e){ + _getBtnNode: function(/*Event*/ e){ // summary: // Gets a button DOM node from a mouse click event. // e: @@ -20197,7 +20940,7 @@ dojo.declare("dijit.layout.ScrollingTabController", return n; }, - doSlideRight: function(e){ + doSlideRight: function(/*Event*/ e){ // summary: // Scrolls the menu to the right. // e: @@ -20205,7 +20948,7 @@ dojo.declare("dijit.layout.ScrollingTabController", this.doSlide(1, this._getBtnNode(e)); }, - doSlideLeft: function(e){ + doSlideLeft: function(/*Event*/ e){ // summary: // Scrolls the menu to the left. // e: @@ -20213,7 +20956,7 @@ dojo.declare("dijit.layout.ScrollingTabController", this.doSlide(-1,this._getBtnNode(e)); }, - doSlide: function(direction, node){ + doSlide: function(/*Number*/ direction, /*DomNode*/ node){ // summary: // Scrolls the tab list to the left or right by 75% of the widget width. // direction: @@ -20232,7 +20975,7 @@ dojo.declare("dijit.layout.ScrollingTabController", this.createSmoothScroll(to).play(); }, - _setButtonClass: function(scroll){ + _setButtonClass: function(/*Number*/ scroll){ // summary: // Disables the left scroll button if the tabs are scrolled all the way to the left, // or the right scroll button in the opposite case. @@ -20245,18 +20988,71 @@ dojo.declare("dijit.layout.ScrollingTabController", } }); -dojo.declare("dijit.layout._ScrollingTabControllerButton", - dijit.form.Button, - { - baseClass: "dijitTab tabStripButton", - templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div waiRole=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div waiRole=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img waiRole=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"), +dojo.declare("dijit.layout._ScrollingTabControllerButtonMixin", null, { + baseClass: "dijitTab tabStripButton", + + templateString: dojo.cache("dijit.layout", "templates/_ScrollingTabControllerButton.html", "<div dojoAttachEvent=\"onclick:_onButtonClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" dojoattachpoint=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" dojoattachpoint=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" dojoAttachPoint=\"iconNode\"/>\n\t\t\t<span dojoAttachPoint=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>\n"), // Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be // able to tab to the left/right/menu buttons - tabIndex: "-1" + tabIndex: "", + + // Similarly, override FormWidget.isFocusable() because clicking a button shouldn't focus it + // either (this override avoids focus() call in FormWidget.js) + isFocusable: function(){ return false; } +}); + +dojo.declare("dijit.layout._ScrollingTabControllerButton", + [dijit.form.Button, dijit.layout._ScrollingTabControllerButtonMixin]); + +dojo.declare( + "dijit.layout._ScrollingTabControllerMenuButton", + [dijit.form.Button, dijit._HasDropDown, dijit.layout._ScrollingTabControllerButtonMixin], +{ + // id of the TabContainer itself + containerId: "", + + // -1 so user can't tab into the button, but so that button can still be focused programatically. + // Because need to move focus to the button (or somewhere) before the menu is hidden or IE6 will crash. + tabIndex: "-1", + + isLoaded: function(){ + // recreate menu every time, in case the TabContainer's list of children (or their icons/labels) have changed + return false; + }, + + loadDropDown: function(callback){ + this.dropDown = new dijit.Menu({ + id: this.containerId + "_menu", + dir: this.dir, + lang: this.lang + }); + var container = dijit.byId(this.containerId); + dojo.forEach(container.getChildren(), function(page){ + var menuItem = new dijit.MenuItem({ + id: page.id + "_stcMi", + label: page.title, + iconClass: page.iconClass, + dir: page.dir, + lang: page.lang, + onClick: function(){ + container.selectChild(page); + } + }); + this.dropDown.addChild(menuItem); + }, this); + callback(); + }, + + closeDropDown: function(/*Boolean*/ focus){ + this.inherited(arguments); + if(this.dropDown){ + this.dropDown.destroyRecursive(); + delete this.dropDown; + } } -); +}); } @@ -20328,7 +21124,6 @@ dojo.declare("dijit.layout.TabContainer", } }); - } if(!dojo._hasResource["dojo.number"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -20339,7 +21134,7 @@ dojo.provide("dojo.number"); - +dojo.getObject("number", true, dojo); /*===== dojo.number = { @@ -20444,7 +21239,7 @@ dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo. if(options.fractional === false){ options.places = 0; } return pattern.replace(numberPatternRE, dojo.number._formatAbsolute(value, numberPattern[0], {decimal: decimal, group: group, places: options.places, round: options.round})); -} +}; dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/increment){ // summary: @@ -20470,7 +21265,7 @@ dojo.number.round = function(/*Number*/value, /*Number?*/places, /*Number?*/incr // 10.75 var factor = 10 / (increment || 10); return (factor * +value).toFixed(places) / factor; // Number -} +}; if((0.9).toFixed() == 0){ // (isIE) toFixed() bug workaround: Rounding fails on IE when most significant digit @@ -20483,7 +21278,7 @@ if((0.9).toFixed() == 0){ d = 0; } return round(v, p, m) + (v > 0 ? d : -d); - } + }; })(); } @@ -20506,7 +21301,7 @@ dojo.number.__FormatAbsoluteOptions = function(){ =====*/ dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){ - // summary: + // summary: // Apply numeric pattern to absolute value using options. Gives no // consideration to local customs. // value: @@ -20621,7 +21416,7 @@ dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){ // 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 || {}; @@ -20709,7 +21504,7 @@ dojo.number._parseInfo = function(/*Object?*/options){ // normalize whitespace and return return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object -} +}; /*===== dojo.number.__ParseOptions = function(){ @@ -20820,10 +21615,10 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?* var re = ""; if(q && (flags.places!==0)){ re = "\\" + flags.decimal; - if(flags.places == Infinity){ - re = "(?:" + re + "\\d+)?"; + if(flags.places == Infinity){ + re = "(?:" + re + "\\d+)?"; }else{ - re += "\\d{" + flags.places + "}"; + re += "\\d{" + flags.places + "}"; } } return re; @@ -20832,3403 +21627,3569 @@ dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?* ); var exponentRE = dojo.regexp.buildGroupRE(flags.exponent, - function(q){ + function(q){ if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; } - return ""; + return ""; } ); - var realRE = integerRE + decimalRE; - // allow for decimals without integers, e.g. .25 - if(decimalRE){realRE = "(?:(?:"+ realRE + ")|(?:" + decimalRE + "))";} - return realRE + exponentRE; // String -}; + 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(){ + // 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 + // groupSize2: Number? + // second grouping, where separators 2..n have a different interval than the first separator (for India) + this.signed = signed; + this.separator = separator; + this.groupSize = groupSize; + this.groupSize2 = groupSize2; +} +=====*/ + +dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){ + // summary: + // Builds a regular expression that matches an integer + + // assign default values to missing parameters + flags = flags || {}; + if(!("signed" in flags)){ flags.signed = [true, false]; } + if(!("separator" in flags)){ + flags.separator = ""; + }else if(!("groupSize" in flags)){ + flags.groupSize = 3; + } + + var signRE = dojo.regexp.buildGroupRE(flags.signed, + function(q){ return q ? "[-+]" : ""; }, + true + ); + + var numberRE = dojo.regexp.buildGroupRE(flags.separator, + function(sep){ + if(!sep){ + return "(?:\\d+)"; + } + + sep = dojo.regexp.escapeString(sep); + if(sep == " "){ sep = "\\s"; } + else if(sep == "\xa0"){ sep = "\\s\\xa0"; } + + var grp = flags.groupSize, grp2 = flags.groupSize2; + //TODO: should we continue to enforce that numbers with separators begin with 1-9? See #6933 + 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 + ); + + 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 indication widget, showing the amount completed + // (often the percentage completed) of a task. + // + // example: + // | <div dojoType="ProgressBar" + // | places="0" + // | value="..." maximum="..."> + // | </div> + + // progress: [const] String (Percentage or Number) + // Number or percentage indicating amount of task completed. + // Deprecated. Use "value" instead. + progress: "0", + + // value: String (Percentage or Number) + // Number or percentage indicating amount of task completed. + // With "%": percentage value, 0% <= progress <= 100%, or + // without "%": absolute value, 0 <= progress <= maximum. + // Infinity means that the progress bar is indeterminate. + value: "", + + // maximum: [const] Float + // Max sample number + maximum: 100, + + // places: [const] Number + // Number of places to show in values; 0 by default + places: 0, + + // indeterminate: [const] Boolean + // If false: show progress value (number or percentage). + // If true: show that a process is underway but that the amount completed is unknown. + // Deprecated. Use "value" instead. + indeterminate: false, + + // label: String? + // Label on progress bar. Defaults to percentage for determinate progress bar and + // blank for indeterminate progress bar. + label:"", + + // name: String + // this is the field name (for a form) if set. This needs to be set if you want to use + // this widget in a dijit.form.Form widget (such as dijit.Dialog) + name: '', + + templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\" role=\"presentation\"></div\n\t\t><span style=\"visibility:hidden\"> </span\n\t></div\n\t><div dojoAttachPoint=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"), + + // _indeterminateHighContrastImagePath: [private] dojo._URL + // URL to image to use for indeterminate progress bar when display is in high contrast mode + _indeterminateHighContrastImagePath: + dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"), + + postMixInProperties: function(){ + this.inherited(arguments); + if(!("value" in this.params)){ + this.value = this.indeterminate ? Infinity : this.progress; + } + }, + + buildRendering: function(){ + this.inherited(arguments); + this.indeterminateHighContrastImage.setAttribute("src", + this._indeterminateHighContrastImagePath.toString()); + this.update(); + }, + + update: function(/*Object?*/attributes){ + // summary: + // Internal method to change attributes of ProgressBar, similar to set(hash). Users should call + // set("value", ...) rather than calling this method directly. + // attributes: + // May provide progress and/or maximum properties on this parameter; + // see attribute specs for details. + // example: + // | myProgressBar.update({'indeterminate': true}); + // | myProgressBar.update({'progress': 80}); + // | myProgressBar.update({'indeterminate': true, label:"Loading ..." }) + // tags: + // private + + // TODO: deprecate this method and use set() instead + + dojo.mixin(this, attributes || {}); + var tip = this.internalProgress, ap = this.domNode; + var percent = 1; + if(this.indeterminate){ + dijit.removeWaiState(ap, "valuenow"); + dijit.removeWaiState(ap, "valuemin"); + dijit.removeWaiState(ap, "valuemax"); + }else{ + 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; + } + + dijit.setWaiState(ap, "describedby", this.labelNode.id); + dijit.setWaiState(ap, "valuenow", this.progress); + dijit.setWaiState(ap, "valuemin", 0); + dijit.setWaiState(ap, "valuemax", this.maximum); + } + this.labelNode.innerHTML = this.report(percent); + + dojo.toggleClass(this.domNode, "dijitProgressBarIndeterminate", this.indeterminate); + tip.style.width = (percent * 100) + "%"; + this.onChange(); + }, + + _setValueAttr: function(v){ + this._set("value", v); + if(v == Infinity){ + this.update({indeterminate:true}); + }else{ + this.update({indeterminate:false, progress:v}); + } + }, + + _setLabelAttr: function(label){ + this._set("label", label); + this.update(); + }, + + _setIndeterminateAttr: function(indeterminate){ + // Deprecated, use set("value", ...) instead + this.indeterminate = indeterminate; + this.update(); + }, + + report: function(/*float*/percent){ + // summary: + // Generates message to show inside progress bar (normally indicating amount of task completed). + // May be overridden. + // tags: + // extension + + return this.label ? this.label : + (this.indeterminate ? " " : dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang })); + }, + + onChange: function(){ + // summary: + // Callback fired when progress updates. + // tags: + // extension + } +}); + +} + +if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.ToolbarSeparator"] = true; +dojo.provide("dijit.ToolbarSeparator"); + + + + +dojo.declare("dijit.ToolbarSeparator", + [ dijit._Widget, dijit._Templated ], + { + // summary: + // A spacer between two `dijit.Toolbar` items + templateString: '<div class="dijitToolbarSeparator dijitInline" role="presentation"></div>', + buildRendering: function(){ + this.inherited(arguments); + dojo.setSelectable(this.domNode, false); + }, + isFocusable: function(){ + // summary: + // This widget isn't focusable, so pass along that fact. + // tags: + // protected + return false; + } + + }); + +} + +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"); + + + + + + +// Note: require of ToolbarSeparator is for back-compat, remove for 2.0 + +dojo.declare("dijit.Toolbar", + [dijit._Widget, dijit._Templated, dijit._KeyNavContainer], + { + // summary: + // A Toolbar widget, used to hold things like `dijit.Editor` buttons + + templateString: + '<div class="dijit" role="toolbar" tabIndex="${tabIndex}" dojoAttachPoint="containerNode">' + + // '<table style="table-layout: fixed" class="dijitReset dijitToolbarTable">' + // factor out style + // '<tr class="dijitReset" dojoAttachPoint="containerNode"></tr>'+ + // '</table>' + + '</div>', + + baseClass: "dijitToolbar", -/*===== -dojo.number.__IntegerRegexpFlags = function(){ - // 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 - // groupSize2: Number? - // second grouping, where separators 2..n have a different interval than the first separator (for India) - this.signed = signed; - this.separator = separator; - this.groupSize = groupSize; - this.groupSize2 = groupSize2; -} -=====*/ + postCreate: function(){ + this.inherited(arguments); -dojo.number._integerRegexp = function(/*dojo.number.__IntegerRegexpFlags?*/flags){ - // summary: - // Builds a regular expression that matches an integer + this.connectKeyNavHandlers( + this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW], + this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW] + ); + }, - // assign default values to missing parameters - flags = flags || {}; - if(!("signed" in flags)){ flags.signed = [true, false]; } - if(!("separator" in flags)){ - flags.separator = ""; - }else if(!("groupSize" in flags)){ - flags.groupSize = 3; + startup: function(){ + if(this._started){ return; } + + this.startupKeyNavChildren(); + + this.inherited(arguments); } +} +); - var signRE = dojo.regexp.buildGroupRE(flags.signed, - function(q){ return q ? "[-+]" : ""; }, - true - ); +} - var numberRE = dojo.regexp.buildGroupRE(flags.separator, - function(sep){ - if(!sep){ - return "(?:\\d+)"; - } +if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.DeferredList"] = true; +dojo.provide("dojo.DeferredList"); - sep = dojo.regexp.escapeString(sep); - if(sep == " "){ sep = "\\s"; } - else if(sep == "\xa0"){ sep = "\\s\\xa0"; } - var grp = flags.groupSize, grp2 = flags.groupSize2; - //TODO: should we continue to enforce that numbers with separators begin with 1-9? See #6933 - 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; +dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){ + // summary: + // Provides event handling for a group of Deferred objects. + // description: + // DeferredList takes an array of existing deferreds and returns a new deferred of its own + // this new deferred will typically have its callback fired when all of the deferreds in + // the given list have fired their own deferreds. The parameters `fireOnOneCallback` and + // fireOnOneErrback, will fire before all the deferreds as appropriate + // + // list: + // The list of deferreds to be synchronizied with this DeferredList + // fireOnOneCallback: + // Will cause the DeferredLists callback to be fired as soon as any + // of the deferreds in its list have been fired instead of waiting until + // the entire list has finished + // fireonOneErrback: + // Will cause the errback to fire upon any of the deferreds errback + // canceller: + // A deferred canceller function, see dojo.Deferred + var resultList = []; + dojo.Deferred.call(this); + var self = this; + if(list.length === 0 && !fireOnOneCallback){ + this.resolve([0, []]); + } + var finished = 0; + dojo.forEach(list, function(item, i){ + item.then(function(result){ + if(fireOnOneCallback){ + self.resolve([i, result]); + }else{ + addResult(true, result); } - return "(?:0|[1-9]\\d{0," + (grp-1) + "}(?:[" + sep + "]\\d{" + grp + "})*)"; - }, - true - ); + },function(error){ + if(fireOnOneErrback){ + self.reject(error); + }else{ + addResult(false, error); + } + if(consumeErrors){ + return null; + } + throw error; + }); + function addResult(succeeded, result){ + resultList[i] = [succeeded, result]; + finished++; + if(finished === list.length){ + self.resolve(resultList); + } + + } + }); +}; +dojo.DeferredList.prototype = new dojo.Deferred(); - return signRE + numberRE; // String -} +dojo.DeferredList.prototype.gatherResults= function(deferredList){ + // summary: + // Gathers the results of the deferreds for packaging + // as the parameters to the Deferred Lists' callback -} + var d = new dojo.DeferredList(deferredList, false, true, false); + d.addCallback(function(results){ + var ret = []; + dojo.forEach(results, function(result){ + ret.push(result[1]); + }); + return ret; + }); + return d; +}; -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"); +} +if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.tree.TreeStoreModel"] = true; +dojo.provide("dijit.tree.TreeStoreModel"); +dojo.declare( + "dijit.tree.TreeStoreModel", + null, + { + // summary: + // Implements dijit.Tree.model connecting to a store with a single + // root item. Any methods passed into the constructor will override + // the ones defined here. + // store: dojo.data.Store + // Underlying store + store: null, + // childrenAttrs: String[] + // One or more attribute names (attributes in the dojo.data item) that specify that item's children + childrenAttrs: ["children"], + // newItemIdAttr: String + // Name of attribute in the Object passed to newItem() that specifies the id. + // + // If newItemIdAttr is set then it's used when newItem() is called to see if an + // item with the same id already exists, and if so just links to the old item + // (so that the old item ends up with two parents). + // + // Setting this to null or "" will make every drop create a new item. + newItemIdAttr: "id", -dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], { - // summary: - // A progress indication widget, showing the amount completed - // (often the percentage completed) of a task. - // - // example: - // | <div dojoType="ProgressBar" - // | places="0" - // | progress="..." maximum="..."> - // | </div> - // - // description: - // Note that the progress bar is updated via (a non-standard) - // update() method, rather than via attr() like other widgets. + // labelAttr: String + // If specified, get label for tree node from this attribute, rather + // than by calling store.getLabel() + labelAttr: "", - // progress: [const] String (Percentage or Number) - // Number or percentage indicating amount of task completed. - // With "%": percentage value, 0% <= progress <= 100%, or - // without "%": absolute value, 0 <= progress <= maximum - // TODO: rename to value for 2.0 - progress: "0", + // root: [readonly] dojo.data.Item + // Pointer to the root item (read only, not a parameter) + root: null, - // maximum: [const] Float - // Max sample number - maximum: 100, + // query: anything + // Specifies datastore query to return the root item for the tree. + // Must only return a single item. Alternately can just pass in pointer + // to root item. + // example: + // | {id:'ROOT'} + query: null, - // places: [const] Number - // Number of places to show in values; 0 by default - places: 0, + // deferItemLoadingUntilExpand: Boolean + // Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes + // until they are expanded. This allows for lazying loading where only one + // loadItem (and generally one network call, consequently) per expansion + // (rather than one for each child). + // This relies on partial loading of the children items; each children item of a + // fully loaded item should contain the label and info about having children. + deferItemLoadingUntilExpand: false, - // indeterminate: [const] Boolean - // If false: show progress value (number or percentage). - // If true: show that a process is underway but that the amount completed is unknown. - indeterminate: false, + constructor: function(/* Object */ args){ + // summary: + // Passed the arguments listed above (store, etc) + // tags: + // private - // name: String - // this is the field name (for a form) if set. This needs to be set if you want to use - // this widget in a dijit.form.Form widget (such as dijit.Dialog) - name: '', + dojo.mixin(this, args); - templateString: dojo.cache("dijit", "templates/ProgressBar.html", "<div class=\"dijitProgressBar dijitProgressBarEmpty\"\n\t><div waiRole=\"progressbar\" dojoAttachPoint=\"internalProgress\" class=\"dijitProgressBarFull\"\n\t\t><div class=\"dijitProgressBarTile\"></div\n\t\t><span style=\"visibility:hidden\"> </span\n\t></div\n\t><div dojoAttachPoint=\"label\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"> </div\n\t><img dojoAttachPoint=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"), + this.connects = []; - // _indeterminateHighContrastImagePath: [private] dojo._URL - // URL to image to use for indeterminate progress bar when display is in high contrast mode - _indeterminateHighContrastImagePath: - dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"), + var store = this.store; + if(!store.getFeatures()['dojo.data.api.Identity']){ + throw new Error("dijit.Tree: store must support dojo.data.Identity"); + } - // public functions - postCreate: function(){ - this.inherited(arguments); - this.indeterminateHighContrastImage.setAttribute("src", - this._indeterminateHighContrastImagePath.toString()); - this.update(); - }, + // if the store supports Notification, subscribe to the notification events + if(store.getFeatures()['dojo.data.api.Notification']){ + this.connects = this.connects.concat([ + dojo.connect(store, "onNew", this, "onNewItem"), + dojo.connect(store, "onDelete", this, "onDeleteItem"), + dojo.connect(store, "onSet", this, "onSetItem") + ]); + } + }, - update: function(/*Object?*/attributes){ - // summary: - // Change attributes of ProgressBar, similar to attr(hash). - // - // attributes: - // May provide progress and/or maximum properties on this parameter; - // see attribute specs for details. - // - // example: - // | myProgressBar.update({'indeterminate': true}); - // | myProgressBar.update({'progress': 80}); + destroy: function(){ + dojo.forEach(this.connects, dojo.disconnect); + // TODO: should cancel any in-progress processing of getRoot(), getChildren() + }, - // TODO: deprecate this method and use set() instead + // ======================================================================= + // Methods for traversing hierarchy - dojo.mixin(this, attributes || {}); - var tip = this.internalProgress; - var percent = 1, classFunc; - if(this.indeterminate){ - classFunc = "addClass"; - dijit.removeWaiState(tip, "valuenow"); - dijit.removeWaiState(tip, "valuemin"); - dijit.removeWaiState(tip, "valuemax"); - }else{ - classFunc = "removeClass"; - if(String(this.progress).indexOf("%") != -1){ - percent = Math.min(parseFloat(this.progress)/100, 1); - this.progress = percent * this.maximum; + getRoot: function(onItem, onError){ + // summary: + // Calls onItem with the root item for the tree, possibly a fabricated item. + // Calls onError on error. + if(this.root){ + onItem(this.root); }else{ - this.progress = Math.min(this.progress, this.maximum); - percent = this.progress / this.maximum; + this.store.fetch({ + query: this.query, + onComplete: dojo.hitch(this, function(items){ + if(items.length != 1){ + throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length + + " items, but must return exactly one item"); + } + this.root = items[0]; + onItem(this.root); + }), + onError: onError + }); } - var text = this.report(percent); - this.label.firstChild.nodeValue = text; - dijit.setWaiState(tip, "describedby", this.label.id); - dijit.setWaiState(tip, "valuenow", this.progress); - dijit.setWaiState(tip, "valuemin", 0); - dijit.setWaiState(tip, "valuemax", this.maximum); - } - dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate"); - tip.style.width = (percent * 100) + "%"; - this.onChange(); - }, - - _setValueAttr: function(v){ - if(v == Infinity){ - this.update({indeterminate:true}); - }else{ - this.update({indeterminate:false, progress:v}); - } - }, + }, - _getValueAttr: function(){ - return this.progress; - }, + mayHaveChildren: function(/*dojo.data.Item*/ item){ + // summary: + // Tells if an item has or may have children. Implementing logic here + // avoids showing +/- expando icon for nodes that we know don't have children. + // (For efficiency reasons we may not want to check if an element actually + // has children until user clicks the expando node) + return dojo.some(this.childrenAttrs, function(attr){ + return this.store.hasAttribute(item, attr); + }, this); + }, - report: function(/*float*/percent){ - // summary: - // Generates message to show inside progress bar (normally indicating amount of task completed). - // May be overridden. - // tags: - // extension + getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){ + // summary: + // Calls onComplete() with array of child items of given parent item, all loaded. - return dojo.number.format(percent, { type: "percent", places: this.places, locale: this.lang }); - }, + var store = this.store; + if(!store.isItemLoaded(parentItem)){ + // The parent is not loaded yet, we must be in deferItemLoadingUntilExpand + // mode, so we will load it and just return the children (without loading each + // child item) + var getChildren = dojo.hitch(this, arguments.callee); + store.loadItem({ + item: parentItem, + onItem: function(parentItem){ + getChildren(parentItem, onComplete, onError); + }, + onError: onError + }); + return; + } + // get children of specified item + var childItems = []; + for(var i=0; i<this.childrenAttrs.length; i++){ + var vals = store.getValues(parentItem, this.childrenAttrs[i]); + childItems = childItems.concat(vals); + } - onChange: function(){ - // summary: - // Callback fired when progress updates. - // tags: - // progress - } -}); + // count how many items need to be loaded + var _waitCount = 0; + if(!this.deferItemLoadingUntilExpand){ + dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } }); + } -} + if(_waitCount == 0){ + // all items are already loaded (or we aren't loading them). proceed... + onComplete(childItems); + }else{ + // still waiting for some or all of the items to load + dojo.forEach(childItems, function(item, idx){ + if(!store.isItemLoaded(item)){ + store.loadItem({ + item: item, + onItem: function(item){ + childItems[idx] = item; + if(--_waitCount == 0){ + // all nodes have been loaded, send them to the tree + onComplete(childItems); + } + }, + onError: onError + }); + } + }); + } + }, -if(!dojo._hasResource["dijit.ToolbarSeparator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dijit.ToolbarSeparator"] = true; -dojo.provide("dijit.ToolbarSeparator"); + // ======================================================================= + // Inspecting items + isItem: function(/* anything */ something){ + return this.store.isItem(something); // Boolean + }, + fetchItemByIdentity: function(/* object */ keywordArgs){ + this.store.fetchItemByIdentity(keywordArgs); + }, + getIdentity: function(/* item */ item){ + return this.store.getIdentity(item); // Object + }, -dojo.declare("dijit.ToolbarSeparator", - [ dijit._Widget, dijit._Templated ], - { - // summary: - // A spacer between two `dijit.Toolbar` items - templateString: '<div class="dijitToolbarSeparator dijitInline" waiRole="presentation"></div>', - postCreate: function(){ dojo.setSelectable(this.domNode, false); }, - isFocusable: function(){ + getLabel: function(/*dojo.data.Item*/ item){ // summary: - // This widget isn't focusable, so pass along that fact. - // tags: - // protected - return false; - } - - }); - + // Get the label for an item + if(this.labelAttr){ + return this.store.getValue(item,this.labelAttr); // String + }else{ + return this.store.getLabel(item); // String + } + }, + // ======================================================================= + // Write interface -} + newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){ + // summary: + // Creates a new item. See `dojo.data.api.Write` for details on args. + // Used in drag & drop when item from external source dropped onto tree. + // description: + // Developers will need to override this method if new items get added + // to parents with multiple children attributes, in order to define which + // children attribute points to the new item. -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"); + var pInfo = {parent: parent, attribute: this.childrenAttrs[0]}, LnewItem; + if(this.newItemIdAttr && args[this.newItemIdAttr]){ + // Maybe there's already a corresponding item in the store; if so, reuse it. + this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){ + if(item){ + // There's already a matching item in store, use it + this.pasteItem(item, null, parent, true, insertIndex); + }else{ + // Create new item in the tree, based on the drag source. + LnewItem=this.store.newItem(args, pInfo); + if (LnewItem && (insertIndex!=undefined)){ + // Move new item to desired position + this.pasteItem(LnewItem, parent, parent, false, insertIndex); + } + } + }}); + }else{ + // [as far as we know] there is no id so we must assume this is a new item + LnewItem=this.store.newItem(args, pInfo); + if (LnewItem && (insertIndex!=undefined)){ + // Move new item to desired position + this.pasteItem(LnewItem, parent, parent, false, insertIndex); + } + } + }, + pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){ + // summary: + // Move or copy an item from one parent item to another. + // Used in drag & drop + var store = this.store, + parentAttr = this.childrenAttrs[0]; // name of "children" attr in parent item + // remove child from source item, and record the attribute that child occurred in + if(oldParentItem){ + dojo.forEach(this.childrenAttrs, function(attr){ + if(store.containsValue(oldParentItem, attr, childItem)){ + if(!bCopy){ + var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){ + return x != childItem; + }); + store.setValues(oldParentItem, attr, values); + } + parentAttr = attr; + } + }); + } + // modify target item's children attribute to include this item + if(newParentItem){ + if(typeof insertIndex == "number"){ + // call slice() to avoid modifying the original array, confusing the data store + var childItems = store.getValues(newParentItem, parentAttr).slice(); + childItems.splice(insertIndex, 0, childItem); + store.setValues(newParentItem, parentAttr, childItems); + }else{ + store.setValues(newParentItem, parentAttr, + store.getValues(newParentItem, parentAttr).concat(childItem)); + } + } + }, -dojo.declare("dijit.Toolbar", - [dijit._Widget, dijit._Templated, dijit._KeyNavContainer], - { - // summary: - // A Toolbar widget, used to hold things like `dijit.Editor` buttons + // ======================================================================= + // Callbacks - templateString: - '<div class="dijit" 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>', + onChange: function(/*dojo.data.Item*/ item){ + // summary: + // Callback whenever an item has changed, so that Tree + // can update the label, icon, etc. Note that changes + // to an item's children or parent(s) will trigger an + // onChildrenChange() so you can ignore those changes here. + // tags: + // callback + }, - baseClass: "dijitToolbar", + onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){ + // summary: + // Callback to do notifications about new, updated, or deleted items. + // tags: + // callback + }, - postCreate: function(){ - this.connectKeyNavHandlers( - this.isLeftToRight() ? [dojo.keys.LEFT_ARROW] : [dojo.keys.RIGHT_ARROW], - this.isLeftToRight() ? [dojo.keys.RIGHT_ARROW] : [dojo.keys.LEFT_ARROW] - ); - this.inherited(arguments); - }, + onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){ + // summary: + // Callback when an item has been deleted. + // description: + // Note that there will also be an onChildrenChange() callback for the parent + // of this item. + // tags: + // callback + }, - startup: function(){ - if(this._started){ return; } + // ======================================================================= + // Events from data store - this.startupKeyNavChildren(); + onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){ + // summary: + // Handler for when new items appear in the store, either from a drop operation + // or some other way. Updates the tree view (if necessary). + // description: + // If the new item is a child of an existing item, + // calls onChildrenChange() with the new list of children + // for that existing item. + // + // tags: + // extension - this.inherited(arguments); - } -} -); + // We only care about the new item if it has a parent that corresponds to a TreeNode + // we are currently displaying + if(!parentInfo){ + return; + } -// For back-compat, remove for 2.0 + // Call onChildrenChange() on parent (ie, existing) item with new list of children + // In the common case, the new list of children is simply parentInfo.newValue or + // [ parentInfo.newValue ], although if items in the store has multiple + // child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue, + // so call getChildren() to be sure to get right answer. + this.getChildren(parentInfo.item, dojo.hitch(this, function(children){ + this.onChildrenChange(parentInfo.item, children); + })); + }, + onDeleteItem: function(/*Object*/ item){ + // summary: + // Handler for delete notifications from underlying store + this.onDelete(item); + }, -} + onSetItem: function(/* item */ item, + /* attribute-name-string */ attribute, + /* object | array */ oldValue, + /* object | array */ newValue){ + // summary: + // Updates the tree view according to changes in the data store. + // description: + // Handles updates to an item's children by calling onChildrenChange(), and + // other updates to an item by calling onChange(). + // + // See `onNewItem` for more details on handling updates to an item's children. + // tags: + // extension -if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.DeferredList"] = true; -dojo.provide("dojo.DeferredList"); -dojo.DeferredList = function(/*Array*/ list, /*Boolean?*/ fireOnOneCallback, /*Boolean?*/ fireOnOneErrback, /*Boolean?*/ consumeErrors, /*Function?*/ canceller){ - // summary: - // Provides event handling for a group of Deferred objects. - // description: - // DeferredList takes an array of existing deferreds and returns a new deferred of its own - // this new deferred will typically have its callback fired when all of the deferreds in - // the given list have fired their own deferreds. The parameters `fireOnOneCallback` and - // fireOnOneErrback, will fire before all the deferreds as appropriate - // - // list: - // The list of deferreds to be synchronizied with this DeferredList - // fireOnOneCallback: - // Will cause the DeferredLists callback to be fired as soon as any - // of the deferreds in its list have been fired instead of waiting until - // the entire list has finished - // fireonOneErrback: - // Will cause the errback to fire upon any of the deferreds errback - // canceller: - // A deferred canceller function, see dojo.Deferred - var resultList = []; - dojo.Deferred.call(this); - var self = this; - if(list.length === 0 && !fireOnOneCallback){ - this.resolve([0, []]); - } - var finished = 0; - dojo.forEach(list, function(item, i){ - item.then(function(result){ - if(fireOnOneCallback){ - self.resolve([i, result]); - }else{ - addResult(true, result); - } - },function(error){ - if(fireOnOneErrback){ - self.reject(error); + if(dojo.indexOf(this.childrenAttrs, attribute) != -1){ + // item's children list changed + this.getChildren(item, dojo.hitch(this, function(children){ + // See comments in onNewItem() about calling getChildren() + this.onChildrenChange(item, children); + })); }else{ - addResult(false, error); - } - if(consumeErrors){ - return null; - } - throw error; - }); - function addResult(succeeded, result){ - resultList[i] = [succeeded, result]; - finished++; - if(finished === list.length){ - self.resolve(resultList); + // item's label/icon/etc. changed. + this.onChange(item); } - } }); -}; -dojo.DeferredList.prototype = new dojo.Deferred(); - -dojo.DeferredList.prototype.gatherResults= function(deferredList){ - // summary: - // Gathers the results of the deferreds for packaging - // as the parameters to the Deferred Lists' callback - - var d = new dojo.DeferredList(deferredList, false, true, false); - d.addCallback(function(results){ - var ret = []; - dojo.forEach(results, function(result){ - ret.push(result[1]); - }); - return ret; - }); - return d; -}; } -if(!dojo._hasResource["dijit.tree.TreeStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dijit.tree.TreeStoreModel"] = true; -dojo.provide("dijit.tree.TreeStoreModel"); - -dojo.declare( - "dijit.tree.TreeStoreModel", - null, - { - // summary: - // Implements dijit.Tree.model connecting to a store with a single - // root item. Any methods passed into the constructor will override - // the ones defined here. - - // store: dojo.data.Store - // Underlying store - store: null, - - // childrenAttrs: String[] - // One or more attribute names (attributes in the dojo.data item) that specify that item's children - childrenAttrs: ["children"], +if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.tree.ForestStoreModel"] = true; +dojo.provide("dijit.tree.ForestStoreModel"); - // newItemIdAttr: String - // Name of attribute in the Object passed to newItem() that specifies the id. - // - // If newItemIdAttr is set then it's used when newItem() is called to see if an - // item with the same id already exists, and if so just links to the old item - // (so that the old item ends up with two parents). - // - // Setting this to null or "" will make every drop create a new item. - newItemIdAttr: "id", - // labelAttr: String - // If specified, get label for tree node from this attribute, rather - // than by calling store.getLabel() - labelAttr: "", - // root: [readonly] dojo.data.Item - // Pointer to the root item (read only, not a parameter) - root: null, +dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, { + // summary: + // Interface between a dijit.Tree and a dojo.data store that doesn't have a root item, + // a.k.a. a store that has multiple "top level" items. + // + // description + // Use this class to wrap a dojo.data store, making all the items matching the specified query + // appear as children of a fabricated "root item". If no query is specified then all the + // items returned by fetch() on the underlying store become children of the root item. + // This class allows dijit.Tree to assume a single root item, even if the store doesn't have one. + // + // When using this class the developer must override a number of methods according to their app and + // data, including: + // - onNewRootItem + // - onAddToRoot + // - onLeaveRoot + // - onNewItem + // - onSetItem - // query: anything - // Specifies datastore query to return the root item for the tree. - // Must only return a single item. Alternately can just pass in pointer - // to root item. - // example: - // | {id:'ROOT'} - query: null, + // Parameters to constructor - // deferItemLoadingUntilExpand: Boolean - // Setting this to true will cause the TreeStoreModel to defer calling loadItem on nodes - // until they are expanded. This allows for lazying loading where only one - // loadItem (and generally one network call, consequently) per expansion - // (rather than one for each child). - // This relies on partial loading of the children items; each children item of a - // fully loaded item should contain the label and info about having children. - deferItemLoadingUntilExpand: false, + // rootId: String + // ID of fabricated root item + rootId: "$root$", - constructor: function(/* Object */ args){ - // summary: - // Passed the arguments listed above (store, etc) - // tags: - // private + // rootLabel: String + // Label of fabricated root item + rootLabel: "ROOT", - dojo.mixin(this, args); + // query: String + // Specifies the set of children of the root item. + // example: + // | {type:'continent'} + query: null, - this.connects = []; + // End of parameters to constructor - var store = this.store; - if(!store.getFeatures()['dojo.data.api.Identity']){ - throw new Error("dijit.Tree: store must support dojo.data.Identity"); - } + constructor: function(params){ + // summary: + // Sets up variables, etc. + // tags: + // private - // if the store supports Notification, subscribe to the notification events - if(store.getFeatures()['dojo.data.api.Notification']){ - this.connects = this.connects.concat([ - dojo.connect(store, "onNew", this, "onNewItem"), - dojo.connect(store, "onDelete", this, "onDeleteItem"), - dojo.connect(store, "onSet", this, "onSetItem") - ]); - } - }, + // Make dummy root item + this.root = { + store: this, + root: true, + id: params.rootId, + label: params.rootLabel, + children: params.rootChildren // optional param + }; + }, - destroy: function(){ - dojo.forEach(this.connects, dojo.disconnect); - // TODO: should cancel any in-progress processing of getRoot(), getChildren() - }, + // ======================================================================= + // Methods for traversing hierarchy - // ======================================================================= - // Methods for traversing hierarchy + mayHaveChildren: function(/*dojo.data.Item*/ item){ + // summary: + // Tells if an item has or may have children. Implementing logic here + // avoids showing +/- expando icon for nodes that we know don't have children. + // (For efficiency reasons we may not want to check if an element actually + // has children until user clicks the expando node) + // tags: + // extension + return item === this.root || this.inherited(arguments); + }, - getRoot: function(onItem, onError){ - // summary: - // Calls onItem with the root item for the tree, possibly a fabricated item. - // Calls onError on error. - if(this.root){ - onItem(this.root); + getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){ + // summary: + // Calls onComplete() with array of child items of given parent item, all loaded. + if(parentItem === this.root){ + if(this.root.children){ + // already loaded, just return + callback(this.root.children); }else{ this.store.fetch({ query: this.query, onComplete: dojo.hitch(this, function(items){ - if(items.length != 1){ - throw new Error(this.declaredClass + ": query " + dojo.toJson(this.query) + " returned " + items.length + - " items, but must return exactly one item"); - } - this.root = items[0]; - onItem(this.root); + this.root.children = items; + callback(items); }), onError: onError }); } - }, - - mayHaveChildren: function(/*dojo.data.Item*/ item){ - // summary: - // Tells if an item has or may have children. Implementing logic here - // avoids showing +/- expando icon for nodes that we know don't have children. - // (For efficiency reasons we may not want to check if an element actually - // has children until user clicks the expando node) - return dojo.some(this.childrenAttrs, function(attr){ - return this.store.hasAttribute(item, attr); - }, this); - }, + }else{ + this.inherited(arguments); + } + }, - getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete, /*function*/ onError){ - // summary: - // Calls onComplete() with array of child items of given parent item, all loaded. + // ======================================================================= + // Inspecting items - var store = this.store; - if(!store.isItemLoaded(parentItem)){ - // The parent is not loaded yet, we must be in deferItemLoadingUntilExpand - // mode, so we will load it and just return the children (without loading each - // child item) - var getChildren = dojo.hitch(this, arguments.callee); - store.loadItem({ - item: parentItem, - onItem: function(parentItem){ - getChildren(parentItem, onComplete, onError); - }, - onError: onError - }); - return; - } - // get children of specified item - var childItems = []; - for(var i=0; i<this.childrenAttrs.length; i++){ - var vals = store.getValues(parentItem, this.childrenAttrs[i]); - childItems = childItems.concat(vals); - } + isItem: function(/* anything */ something){ + return (something === this.root) ? true : this.inherited(arguments); + }, - // count how many items need to be loaded - var _waitCount = 0; - if(!this.deferItemLoadingUntilExpand){ - dojo.forEach(childItems, function(item){ if(!store.isItemLoaded(item)){ _waitCount++; } }); + fetchItemByIdentity: function(/* object */ keywordArgs){ + if(keywordArgs.identity == this.root.id){ + var scope = keywordArgs.scope?keywordArgs.scope:dojo.global; + if(keywordArgs.onItem){ + keywordArgs.onItem.call(scope, this.root); } + }else{ + this.inherited(arguments); + } + }, - if(_waitCount == 0){ - // all items are already loaded (or we aren't loading them). proceed... - onComplete(childItems); - }else{ - // still waiting for some or all of the items to load - dojo.forEach(childItems, function(item, idx){ - if(!store.isItemLoaded(item)){ - store.loadItem({ - item: item, - onItem: function(item){ - childItems[idx] = item; - if(--_waitCount == 0){ - // all nodes have been loaded, send them to the tree - onComplete(childItems); - } - }, - onError: onError - }); - } - }); - } - }, + getIdentity: function(/* item */ item){ + return (item === this.root) ? this.root.id : this.inherited(arguments); + }, - // ======================================================================= - // Inspecting items + getLabel: function(/* item */ item){ + return (item === this.root) ? this.root.label : this.inherited(arguments); + }, - isItem: function(/* anything */ something){ - return this.store.isItem(something); // Boolean - }, + // ======================================================================= + // Write interface - fetchItemByIdentity: function(/* object */ keywordArgs){ - this.store.fetchItemByIdentity(keywordArgs); - }, + newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){ + // summary: + // Creates a new item. See dojo.data.api.Write for details on args. + // Used in drag & drop when item from external source dropped onto tree. + if(parent === this.root){ + this.onNewRootItem(args); + return this.store.newItem(args); + }else{ + return this.inherited(arguments); + } + }, - getIdentity: function(/* item */ item){ - return this.store.getIdentity(item); // Object - }, + onNewRootItem: function(args){ + // summary: + // User can override this method to modify a new element that's being + // added to the root of the tree, for example to add a flag like root=true + }, - getLabel: function(/*dojo.data.Item*/ item){ - // summary: - // Get the label for an item - if(this.labelAttr){ - return this.store.getValue(item,this.labelAttr); // String - }else{ - return this.store.getLabel(item); // String + pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){ + // summary: + // Move or copy an item from one parent item to another. + // Used in drag & drop + if(oldParentItem === this.root){ + if(!bCopy){ + // It's onLeaveRoot()'s responsibility to modify the item so it no longer matches + // this.query... thus triggering an onChildrenChange() event to notify the Tree + // that this element is no longer a child of the root node + this.onLeaveRoot(childItem); } - }, - - // ======================================================================= - // Write interface - - newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){ - // summary: - // Creates a new item. See `dojo.data.api.Write` for details on args. - // Used in drag & drop when item from external source dropped onto tree. - // description: - // Developers will need to override this method if new items get added - // to parents with multiple children attributes, in order to define which - // children attribute points to the new item. - - var pInfo = {parent: parent, attribute: this.childrenAttrs[0], insertIndex: insertIndex}; + } + dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem, + oldParentItem === this.root ? null : oldParentItem, + newParentItem === this.root ? null : newParentItem, + bCopy, + insertIndex + ); + if(newParentItem === this.root){ + // It's onAddToRoot()'s responsibility to modify the item so it matches + // this.query... thus triggering an onChildrenChange() event to notify the Tree + // that this element is now a child of the root node + this.onAddToRoot(childItem); + } + }, - if(this.newItemIdAttr && args[this.newItemIdAttr]){ - // Maybe there's already a corresponding item in the store; if so, reuse it. - this.fetchItemByIdentity({identity: args[this.newItemIdAttr], scope: this, onItem: function(item){ - if(item){ - // There's already a matching item in store, use it - this.pasteItem(item, null, parent, true, insertIndex); - }else{ - // Create new item in the tree, based on the drag source. - this.store.newItem(args, pInfo); - } - }}); - }else{ - // [as far as we know] there is no id so we must assume this is a new item - this.store.newItem(args, pInfo); - } - }, + // ======================================================================= + // Handling for top level children - pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){ - // summary: - // Move or copy an item from one parent item to another. - // Used in drag & drop - var store = this.store, - parentAttr = this.childrenAttrs[0]; // name of "children" attr in parent item + onAddToRoot: function(/* item */ item){ + // summary: + // Called when item added to root of tree; user must override this method + // to modify the item so that it matches the query for top level items + // example: + // | store.setValue(item, "root", true); + // tags: + // extension + console.log(this, ": item ", item, " added to root"); + }, - // remove child from source item, and record the attribute that child occurred in - if(oldParentItem){ - dojo.forEach(this.childrenAttrs, function(attr){ - if(store.containsValue(oldParentItem, attr, childItem)){ - if(!bCopy){ - var values = dojo.filter(store.getValues(oldParentItem, attr), function(x){ - return x != childItem; - }); - store.setValues(oldParentItem, attr, values); - } - parentAttr = attr; - } - }); - } + onLeaveRoot: function(/* item */ item){ + // summary: + // Called when item removed from root of tree; user must override this method + // to modify the item so it doesn't match the query for top level items + // example: + // | store.unsetAttribute(item, "root"); + // tags: + // extension + console.log(this, ": item ", item, " removed from root"); + }, - // modify target item's children attribute to include this item - if(newParentItem){ - if(typeof insertIndex == "number"){ - // call slice() to avoid modifying the original array, confusing the data store - var childItems = store.getValues(newParentItem, parentAttr).slice(); - childItems.splice(insertIndex, 0, childItem); - store.setValues(newParentItem, parentAttr, childItems); - }else{ - store.setValues(newParentItem, parentAttr, - store.getValues(newParentItem, parentAttr).concat(childItem)); - } - } - }, + // ======================================================================= + // Events from data store - // ======================================================================= - // Callbacks + _requeryTop: function(){ + // reruns the query for the children of the root node, + // sending out an onSet notification if those children have changed + var oldChildren = this.root.children || []; + this.store.fetch({ + query: this.query, + onComplete: dojo.hitch(this, function(newChildren){ + this.root.children = newChildren; - onChange: function(/*dojo.data.Item*/ item){ - // summary: - // Callback whenever an item has changed, so that Tree - // can update the label, icon, etc. Note that changes - // to an item's children or parent(s) will trigger an - // onChildrenChange() so you can ignore those changes here. - // tags: - // callback - }, + // If the list of children or the order of children has changed... + if(oldChildren.length != newChildren.length || + dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){ + this.onChildrenChange(this.root, newChildren); + } + }) + }); + }, - onChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){ - // summary: - // Callback to do notifications about new, updated, or deleted items. - // tags: - // callback - }, + onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){ + // summary: + // Handler for when new items appear in the store. Developers should override this + // method to be more efficient based on their app/data. + // description: + // Note that the default implementation requeries the top level items every time + // a new item is created, since any new item could be a top level item (even in + // addition to being a child of another item, since items can have multiple parents). + // + // If developers can detect which items are possible top level items (based on the item and the + // parentInfo parameters), they should override this method to only call _requeryTop() for top + // level items. Often all top level items have parentInfo==null, but + // that will depend on which store you use and what your data is like. + // tags: + // extension + this._requeryTop(); - onDelete: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){ - // summary: - // Callback when an item has been deleted. - // description: - // Note that there will also be an onChildrenChange() callback for the parent - // of this item. - // tags: - // callback - }, + this.inherited(arguments); + }, - // ======================================================================= - // Events from data store + onDeleteItem: function(/*Object*/ item){ + // summary: + // Handler for delete notifications from underlying store - onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){ - // summary: - // Handler for when new items appear in the store, either from a drop operation - // or some other way. Updates the tree view (if necessary). - // description: - // If the new item is a child of an existing item, - // calls onChildrenChange() with the new list of children - // for that existing item. - // - // tags: - // extension + // check if this was a child of root, and if so send notification that root's children + // have changed + if(dojo.indexOf(this.root.children, item) != -1){ + this._requeryTop(); + } - // We only care about the new item if it has a parent that corresponds to a TreeNode - // we are currently displaying - if(!parentInfo){ - return; - } + this.inherited(arguments); + }, - // Call onChildrenChange() on parent (ie, existing) item with new list of children - // In the common case, the new list of children is simply parentInfo.newValue or - // [ parentInfo.newValue ], although if items in the store has multiple - // child attributes (see `childrenAttr`), then it's a superset of parentInfo.newValue, - // so call getChildren() to be sure to get right answer. - this.getChildren(parentInfo.item, dojo.hitch(this, function(children){ - this.onChildrenChange(parentInfo.item, children); - })); - }, + onSetItem: function(/* item */ item, + /* attribute-name-string */ attribute, + /* object | array */ oldValue, + /* object | array */ newValue){ + // summary: + // Updates the tree view according to changes to an item in the data store. + // Developers should override this method to be more efficient based on their app/data. + // description: + // Handles updates to an item's children by calling onChildrenChange(), and + // other updates to an item by calling onChange(). + // + // Also, any change to any item re-executes the query for the tree's top-level items, + // since this modified item may have started/stopped matching the query for top level items. + // + // If possible, developers should override this function to only call _requeryTop() when + // the change to the item has caused it to stop/start being a top level item in the tree. + // tags: + // extension - onDeleteItem: function(/*Object*/ item){ - // summary: - // Handler for delete notifications from underlying store - this.onDelete(item); - }, + this._requeryTop(); + this.inherited(arguments); + } - onSetItem: function(/* item */ item, - /* attribute-name-string */ attribute, - /* object | array */ oldValue, - /* object | array */ newValue){ - // summary: - // Updates the tree view according to changes in the data store. - // description: - // Handles updates to an item's children by calling onChildrenChange(), and - // other updates to an item by calling onChange(). - // - // See `onNewItem` for more details on handling updates to an item's children. - // tags: - // extension +}); - if(dojo.indexOf(this.childrenAttrs, attribute) != -1){ - // item's children list changed - this.getChildren(item, dojo.hitch(this, function(children){ - // See comments in onNewItem() about calling getChildren() - this.onChildrenChange(item, children); - })); - }else{ - // item's label/icon/etc. changed. - this.onChange(item); - } - } - }); +} +if(!dojo._hasResource["dojo.dnd.Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.dnd.Container"] = true; +dojo.provide("dojo.dnd.Container"); -} -if(!dojo._hasResource["dijit.tree.ForestStoreModel"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dijit.tree.ForestStoreModel"] = true; -dojo.provide("dijit.tree.ForestStoreModel"); +/* + Container states: + "" - normal state + "Over" - mouse over a container + Container item states: + "" - normal state + "Over" - mouse over a container item +*/ +/*===== +dojo.declare("dojo.dnd.__ContainerArgs", [], { + creator: function(){ + // summary: + // a creator function, which takes a data item, and returns an object like that: + // {node: newNode, data: usedData, type: arrayOfStrings} + }, -dojo.declare("dijit.tree.ForestStoreModel", dijit.tree.TreeStoreModel, { - // summary: - // Interface between Tree and a dojo.store that doesn't have a root item, - // i.e. has multiple "top level" items. - // - // description - // Use this class to wrap a dojo.store, making all the items matching the specified query - // appear as children of a fabricated "root item". If no query is specified then all the - // items returned by fetch() on the underlying store become children of the root item. - // It allows dijit.Tree to assume a single root item, even if the store doesn't have one. + // skipForm: Boolean + // don't start the drag operation, if clicked on form elements + skipForm: false, - // Parameters to constructor + // dropParent: Node||String + // node or node's id to use as the parent node for dropped items + // (must be underneath the 'node' parameter in the DOM) + dropParent: null, - // rootId: String - // ID of fabricated root item - rootId: "$root$", + // _skipStartup: Boolean + // skip startup(), which collects children, for deferred initialization + // (this is used in the markup mode) + _skipStartup: false +}); - // rootLabel: String - // Label of fabricated root item - rootLabel: "ROOT", +dojo.dnd.Item = function(){ + // summary: + // Represents (one of) the source node(s) being dragged. + // Contains (at least) the "type" and "data" attributes. + // type: String[] + // Type(s) of this item, by default this is ["text"] + // data: Object + // Logical representation of the object being dragged. + // If the drag object's type is "text" then data is a String, + // if it's another type then data could be a different Object, + // perhaps a name/value hash. + + this.type = type; + this.data = data; +} +=====*/ - // query: String - // Specifies the set of children of the root item. - // example: - // | {type:'continent'} - query: null, +dojo.declare("dojo.dnd.Container", null, { + // summary: + // a Container object, which knows when mouse hovers over it, + // and over which element it hovers + + // object attributes (for markup) + skipForm: false, + + /*===== + // current: DomNode + // The DOM node the mouse is currently hovered over + current: null, + + // map: Hash<String, dojo.dnd.Item> + // Map from an item's id (which is also the DOMNode's id) to + // the dojo.dnd.Item itself. + map: {}, + =====*/ + + constructor: function(node, params){ + // summary: + // a constructor of the Container + // node: Node + // node or node's id to build the container on + // params: dojo.dnd.__ContainerArgs + // a dictionary of parameters + this.node = dojo.byId(node); + if(!params){ params = {}; } + this.creator = params.creator || null; + this.skipForm = params.skipForm; + this.parent = params.dropParent && dojo.byId(params.dropParent); + + // class-specific variables + this.map = {}; + this.current = null; - // End of parameters to constructor + // states + this.containerState = ""; + dojo.addClass(this.node, "dojoDndContainer"); + + // mark up children + if(!(params && params._skipStartup)){ + this.startup(); + } - constructor: function(params){ + // 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", this, "onSelectStart"), + dojo.connect(this.node, "onselectstart", this, "onSelectStart") + ]; + }, + + // object attributes (for markup) + creator: function(){ // summary: - // Sets up variables, etc. - // tags: - // private - - // Make dummy root item - this.root = { - store: this, - root: true, - id: params.rootId, - label: params.rootLabel, - children: params.rootChildren // optional param - }; + // creator function, dummy at the moment }, - - // ======================================================================= - // Methods for traversing hierarchy - - mayHaveChildren: function(/*dojo.data.Item*/ item){ + + // abstract access to the map + getItem: function(/*String*/ key){ // summary: - // Tells if an item has or may have children. Implementing logic here - // avoids showing +/- expando icon for nodes that we know don't have children. - // (For efficiency reasons we may not want to check if an element actually - // has children until user clicks the expando node) - // tags: - // extension - return item === this.root || this.inherited(arguments); + // returns a data item by its key (id) + return this.map[key]; // dojo.dnd.Item }, - - getChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ callback, /*function*/ onError){ + setItem: function(/*String*/ key, /*dojo.dnd.Item*/ data){ // summary: - // Calls onComplete() with array of child items of given parent item, all loaded. - if(parentItem === this.root){ - if(this.root.children){ - // already loaded, just return - callback(this.root.children); - }else{ - this.store.fetch({ - query: this.query, - onComplete: dojo.hitch(this, function(items){ - this.root.children = items; - callback(items); - }), - onError: onError - }); - } - }else{ - this.inherited(arguments); - } + // associates a data item with its key (id) + this.map[key] = data; }, - - // ======================================================================= - // Inspecting items - - isItem: function(/* anything */ something){ - return (something === this.root) ? true : this.inherited(arguments); + delItem: function(/*String*/ key){ + // summary: + // removes a data item from the map by its key (id) + delete this.map[key]; }, - - fetchItemByIdentity: function(/* object */ keywordArgs){ - if(keywordArgs.identity == this.root.id){ - var scope = keywordArgs.scope?keywordArgs.scope:dojo.global; - if(keywordArgs.onItem){ - keywordArgs.onItem.call(scope, this.root); - } - }else{ - this.inherited(arguments); + forInItems: function(/*Function*/ f, /*Object?*/ o){ + // summary: + // iterates over a data map skipping members that + // are present in the empty object (IE and/or 3rd-party libraries). + o = o || dojo.global; + var m = this.map, e = dojo.dnd._empty; + for(var i in m){ + if(i in e){ continue; } + f.call(o, m[i], i, this); } + return o; // Object }, - - getIdentity: function(/* item */ item){ - return (item === this.root) ? this.root.id : this.inherited(arguments); - }, - - getLabel: function(/* item */ item){ - return (item === this.root) ? this.root.label : this.inherited(arguments); + clearItems: function(){ + // summary: + // removes all data items from the map + this.map = {}; }, - - // ======================================================================= - // Write interface - - newItem: function(/* dojo.dnd.Item */ args, /*Item*/ parent, /*int?*/ insertIndex){ + + // methods + getAllNodes: function(){ // summary: - // Creates a new item. See dojo.data.api.Write for details on args. - // Used in drag & drop when item from external source dropped onto tree. - if(parent === this.root){ - this.onNewRootItem(args); - return this.store.newItem(args); - }else{ - return this.inherited(arguments); - } + // returns a list (an array) of all valid child nodes + return dojo.query("> .dojoDndItem", this.parent); // NodeList }, - - onNewRootItem: function(args){ + sync: function(){ // summary: - // User can override this method to modify a new element that's being - // added to the root of the tree, for example to add a flag like root=true + // sync up the node list with the data map + var map = {}; + this.getAllNodes().forEach(function(node){ + if(node.id){ + var item = this.getItem(node.id); + if(item){ + map[node.id] = item; + return; + } + }else{ + node.id = dojo.dnd.getUniqueId(); + } + var type = node.getAttribute("dndType"), + data = node.getAttribute("dndData"); + map[node.id] = { + data: data || node.innerHTML, + type: type ? type.split(/\s*,\s*/) : ["text"] + }; + }, this); + this.map = map; + return this; // self }, - - pasteItem: function(/*Item*/ childItem, /*Item*/ oldParentItem, /*Item*/ newParentItem, /*Boolean*/ bCopy, /*int?*/ insertIndex){ + insertNodes: function(data, before, anchor){ // summary: - // Move or copy an item from one parent item to another. - // Used in drag & drop - if(oldParentItem === this.root){ - if(!bCopy){ - // It's onLeaveRoot()'s responsibility to modify the item so it no longer matches - // this.query... thus triggering an onChildrenChange() event to notify the Tree - // that this element is no longer a child of the root node - this.onLeaveRoot(childItem); + // inserts an array of new nodes before/after an anchor node + // data: Array + // a list of data items, which should be processed by the creator function + // before: Boolean + // insert before the anchor, if true, and after the anchor otherwise + // anchor: Node + // the anchor node to be used as a point of insertion + if(!this.parent.firstChild){ + anchor = null; + }else if(before){ + if(!anchor){ + anchor = this.parent.firstChild; + } + }else{ + if(anchor){ + anchor = anchor.nextSibling; } } - dijit.tree.TreeStoreModel.prototype.pasteItem.call(this, childItem, - oldParentItem === this.root ? null : oldParentItem, - newParentItem === this.root ? null : newParentItem, - bCopy, - insertIndex - ); - if(newParentItem === this.root){ - // It's onAddToRoot()'s responsibility to modify the item so it matches - // this.query... thus triggering an onChildrenChange() event to notify the Tree - // that this element is now a child of the root node - this.onAddToRoot(childItem); + if(anchor){ + for(var i = 0; i < data.length; ++i){ + var t = this._normalizedCreator(data[i]); + this.setItem(t.node.id, {data: t.data, type: t.type}); + this.parent.insertBefore(t.node, anchor); + } + }else{ + for(var i = 0; i < data.length; ++i){ + var t = this._normalizedCreator(data[i]); + this.setItem(t.node.id, {data: t.data, type: t.type}); + this.parent.appendChild(t.node); + } } + return this; // self }, - - // ======================================================================= - // Handling for top level children - - onAddToRoot: function(/* item */ item){ - // summary: - // Called when item added to root of tree; user must override this method - // to modify the item so that it matches the query for top level items - // example: - // | store.setValue(item, "root", true); - // tags: - // extension - console.log(this, ": item ", item, " added to root"); - }, - - onLeaveRoot: function(/* item */ item){ + destroy: function(){ // summary: - // Called when item removed from root of tree; user must override this method - // to modify the item so it doesn't match the query for top level items - // example: - // | store.unsetAttribute(item, "root"); - // tags: - // extension - console.log(this, ": item ", item, " removed from root"); - }, - - // ======================================================================= - // Events from data store - - _requeryTop: function(){ - // reruns the query for the children of the root node, - // sending out an onSet notification if those children have changed - var oldChildren = this.root.children || []; - this.store.fetch({ - query: this.query, - onComplete: dojo.hitch(this, function(newChildren){ - this.root.children = newChildren; - - // If the list of children or the order of children has changed... - if(oldChildren.length != newChildren.length || - dojo.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){ - this.onChildrenChange(this.root, newChildren); - } - }) - }); + // prepares this object to be garbage-collected + dojo.forEach(this.events, dojo.disconnect); + this.clearItems(); + this.node = this.parent = this.current = null; }, - onNewItem: function(/* dojo.data.Item */ item, /* Object */ parentInfo){ - // summary: - // Handler for when new items appear in the store. Developers should override this - // method to be more efficient based on their app/data. - // description: - // Note that the default implementation requeries the top level items every time - // a new item is created, since any new item could be a top level item (even in - // addition to being a child of another item, since items can have multiple parents). - // - // Developers can override this function to do something more efficient if they can - // detect which items are possible top level items (based on the item and the - // parentInfo parameters). Often all top level items have parentInfo==null, but - // that will depend on which store you use and what your data is like. - // tags: - // extension - this._requeryTop(); - - this.inherited(arguments); + // markup methods + markupFactory: function(params, node){ + params._skipStartup = true; + return new dojo.dnd.Container(node, params); }, - - onDeleteItem: function(/*Object*/ item){ + startup: function(){ // summary: - // Handler for delete notifications from underlying store - - // check if this was a child of root, and if so send notification that root's children - // have changed - if(dojo.indexOf(this.root.children, item) != -1){ - this._requeryTop(); + // collects valid child items and populate the map + + // set up the real parent node + if(!this.parent){ + // use the standard algorithm, if not assigned + this.parent = this.node; + if(this.parent.tagName.toLowerCase() == "table"){ + var c = this.parent.getElementsByTagName("tbody"); + if(c && c.length){ this.parent = c[0]; } + } } + this.defaultCreator = dojo.dnd._defaultCreator(this.parent); - this.inherited(arguments); - } -}); - - - -} - -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, dijit._CssStateMixin], -{ - // summary: - // Single node within a tree. This class is used internally - // by Tree and should not be accessed directly. - // tags: - // private - - // item: dojo.data.Item - // the dojo.data entry this tree represents - item: null, - - // isTreeNode: [protected] Boolean - // Indicates that this is a TreeNode. Used by `dijit.Tree` only, - // should not be accessed directly. - isTreeNode: true, - - // label: String - // Text of this tree node - label: "", - - // isExpandable: [private] Boolean - // This node has children, so show the expando node (+ sign) - isExpandable: null, - - // isExpanded: [readonly] Boolean - // This node is currently expanded (ie, opened) - isExpanded: false, - - // state: [private] 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: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" waiRole=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" waiRole=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" waiRole=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" waiRole=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" waiRole=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" waiRole=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" wairole=\"treeitem\" tabindex=\"-1\" waiState=\"selected-false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" waiRole=\"presentation\" style=\"display: none;\"></div>\n</div>\n"), - - baseClass: "dijitTreeNode", - - // For hover effect for tree node, and focus effect for label - cssStateNodes: { - rowNode: "dijitTreeRow", - labelNode: "dijitTreeLabel" + // process specially marked children + this.sync(); }, - attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, { - label: {node: "labelNode", type: "innerText"}, - tooltip: {node: "rowNode", type: "attribute", attribute: "title"} - }), - - postCreate: function(){ - this.inherited(arguments); - - // 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); + // 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; }, - - _setIndentAttr: function(indent){ + onMouseOut: function(e){ // summary: - // Tell this node how many levels it should be indented - // description: - // 0 for top level nodes, 1 for their children, 2 for their - // grandchildren, etc. - this.indent = indent; - - // Math.max() is to prevent negative padding on hidden root node (when indent == -1) - var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px"; - - dojo.style(this.domNode, "backgroundPosition", pixels + " 0px"); - dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels); - - dojo.forEach(this.getChildren(), function(child){ - child.set("indent", indent+1); - }); + // 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(); }, - - markProcessing: function(){ + onSelectStart: function(e){ // summary: - // Visually denote that tree is loading data, etc. - // tags: - // private - this.state = "LOADING"; - this._setExpando(true); + // event processor for onselectevent and ondragevent + // e: Event + // mouse event + if(!this.skipForm || !dojo.dnd.isFormElement(e)){ + dojo.stopEvent(e); + } }, - - unmarkProcessing: function(){ + + // utilities + onOverEvent: function(){ // summary: - // Clear markup from markProcessing() call - // tags: - // private - this._setExpando(false); + // this function is called once, when mouse is over our container }, - - _updateItemClasses: function(item){ + onOutEvent: function(){ // summary: - // Set appropriate CSS classes for icon and label dom node - // (used to allow for item updates to change respective CSS) - // tags: - // private - var tree = this.tree, model = tree.model; - if(tree._v10Compat && item === model.root){ - // For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0) - item = null; - } - this._applyClassAndStyle(item, "icon", "Icon"); - this._applyClassAndStyle(item, "label", "Label"); - this._applyClassAndStyle(item, "row", "Row"); + // this function is called once, when mouse is out of our container }, - - _applyClassAndStyle: function(item, lower, upper){ - // summary: - // Set the appropriate CSS classes and styles for labels, icons and rows. - // - // item: - // The data item. - // - // lower: - // The lower case attribute to use, e.g. 'icon', 'label' or 'row'. - // - // upper: - // The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'. - // - // tags: - // private - - var clsName = "_" + lower + "Class"; - var nodeName = lower + "Node"; - - if(this[clsName]){ - dojo.removeClass(this[nodeName], this[clsName]); - } - this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded); - if(this[clsName]){ - dojo.addClass(this[nodeName], this[clsName]); - } - dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {}); - }, - - _updateLayout: function(){ + _changeState: function(type, newState){ // summary: - // Set appropriate CSS classes for this.domNode - // tags: - // private - var parent = this.getParent(); - if(!parent || parent.rowNode.style.display == "none"){ - /* 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()); - } + // 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.replaceClass(this.node, prefix + newState, prefix + this[state]); + this[state] = newState; }, - - _setExpando: function(/*Boolean*/ processing){ + _addItemClass: function(node, type){ // summary: - // Set the right image for the expando node - // tags: - // private - - var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened", - "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"], - _a11yStates = ["*","-","+","*"], - idx = processing ? 0 : (this.isExpandable ? (this.isExpanded ? 1 : 2) : 3); - - // apply the appropriate class to the expando node - dojo.removeClass(this.expandoNode, styles); - dojo.addClass(this.expandoNode, styles[idx]); - - // provide a non-image based indicator for images-off mode - this.expandoNodeText.innerHTML = _a11yStates[idx]; - + // adds a class with prefix "dojoDndItem" + // node: Node + // a node + // type: String + // a variable suffix for a class name + dojo.addClass(node, "dojoDndItem" + type); }, - - expand: function(){ + _removeItemClass: function(node, type){ // summary: - // Show my children - // returns: - // Deferred that fires when expansion is complete - - // If there's already an expand in progress or we are already expanded, just return - if(this._expandDeferred){ - return this._expandDeferred; // dojo.Deferred - } - - // cancel in progress collapse operation - this._wipeOut && this._wipeOut.stop(); - - // All the state information for when a node is expanded, maybe this should be - // set when the animation completes instead - this.isExpanded = true; - dijit.setWaiState(this.labelNode, "expanded", "true"); - dijit.setWaiRole(this.containerNode, "group"); - dojo.addClass(this.contentNode,'dijitTreeContentExpanded'); - this._setExpando(); - this._updateItemClasses(this.item); - if(this == this.tree.rootNode){ - dijit.setWaiState(this.tree.domNode, "expanded", "true"); - } - - var def, - wipeIn = dojo.fx.wipeIn({ - node: this.containerNode, duration: dijit.defaultDuration, - onEnd: function(){ - def.callback(true); - } - }); - - // Deferred that fires when expand is complete - def = (this._expandDeferred = new dojo.Deferred(function(){ - // Canceller - wipeIn.stop(); - })); - - wipeIn.play(); - - return def; // dojo.Deferred + // removes a class with prefix "dojoDndItem" + // node: Node + // a node + // type: String + // a variable suffix for a class name + dojo.removeClass(node, "dojoDndItem" + type); }, - - collapse: function(){ + _getChildByEvent: function(e){ // summary: - // Collapse this node (if it's expanded) - - if(!this.isExpanded){ return; } - - // cancel in progress expand operation - if(this._expandDeferred){ - this._expandDeferred.cancel(); - delete this._expandDeferred; - } - - this.isExpanded = false; - dijit.setWaiState(this.labelNode, "expanded", "false"); - if(this == this.tree.rootNode){ - dijit.setWaiState(this.tree.domNode, "expanded", "false"); - } - dojo.removeClass(this.contentNode,'dijitTreeContentExpanded'); - this._setExpando(); - this._updateItemClasses(this.item); - - if(!this._wipeOut){ - this._wipeOut = dojo.fx.wipeOut({ - node: this.containerNode, duration: dijit.defaultDuration - }); + // gets a child, which is under the mouse at the moment, or null + // e: Event + // a mouse event + var node = e.target; + if(node){ + for(var parent = node.parentNode; parent; node = parent, parent = node.parentNode){ + if(parent == this.parent && dojo.hasClass(node, "dojoDndItem")){ return node; } + } } - this._wipeOut.play(); + return null; }, - - // indent: Integer - // Levels from this node to the root node - indent: 0, - - setChildItems: function(/* Object[] */ items){ + _normalizedCreator: function(/*dojo.dnd.Item*/ item, /*String*/ hint){ // summary: - // Sets the child items of this node, removing/adding nodes - // from current children to match specified items[] array. - // Also, if this.persist == true, expands any children that were previously - // opened. - // returns: - // Deferred object that fires after all previously opened children - // have been expanded again (or fires instantly if there are no such children). - - var tree = this.tree, - model = tree.model, - defs = []; // list of deferreds that need to fire before I am complete - - - // Orphan all my existing children. - // If items contains some of the same items as before then we will reattach them. - // Don't call this.removeChild() because that will collapse the tree etc. - dojo.forEach(this.getChildren(), function(child){ - dijit._Container.prototype.removeChild.call(this, child); - }, this); + // adds all necessary data to the output of the user-supplied creator function + var t = (this.creator || this.defaultCreator).call(this, item, hint); + if(!dojo.isArray(t.type)){ t.type = ["text"]; } + if(!t.node.id){ t.node.id = dojo.dnd.getUniqueId(); } + dojo.addClass(t.node, "dojoDndItem"); + return t; + } +}); - this.state = "LOADED"; +dojo.dnd._createNode = function(tag){ + // summary: + // returns a function, which creates an element of given tag + // (SPAN by default) and sets its innerHTML to given text + // tag: String + // a tag name or empty for SPAN + if(!tag){ return dojo.dnd._createSpan; } + return function(text){ // Function + return dojo.create(tag, {innerHTML: text}); // Node + }; +}; - if(items && items.length > 0){ - this.isExpandable = true; +dojo.dnd._createTrTd = function(text){ + // summary: + // creates a TR/TD structure with given text as an innerHTML of TD + // text: String + // a text for TD + var tr = dojo.create("tr"); + dojo.create("td", {innerHTML: text}, tr); + return tr; // Node +}; - // Create _TreeNode widget for each specified tree node, unless one already - // exists and isn't being used (presumably it's from a DnD move and was recently - // released - dojo.forEach(items, function(item){ - var id = model.getIdentity(item), - existingNodes = tree._itemNodesMap[id], - node; - if(existingNodes){ - for(var i=0;i<existingNodes.length;i++){ - if(existingNodes[i] && !existingNodes[i].getParent()){ - node = existingNodes[i]; - node.set('indent', this.indent+1); - break; - } - } - } - if(!node){ - node = this.tree._createTreeNode({ - item: item, - tree: tree, - isExpandable: model.mayHaveChildren(item), - label: tree.getLabel(item), - tooltip: tree.getTooltip(item), - dir: tree.dir, - lang: tree.lang, - indent: this.indent + 1 - }); - if(existingNodes){ - existingNodes.push(node); - }else{ - tree._itemNodesMap[id] = [node]; - } - } - this.addChild(node); +dojo.dnd._createSpan = function(text){ + // summary: + // creates a SPAN element with given text as its innerHTML + // text: String + // a text for SPAN + return dojo.create("span", {innerHTML: text}); // Node +}; - // If node was previously opened then open it again now (this may trigger - // more data store accesses, recursively) - if(this.tree.autoExpand || this.tree._state(item)){ - defs.push(tree._expandNode(node)); - } - }, this); +// dojo.dnd._defaultCreatorNodes: Object +// a dictionary that maps container tag names to child tag names +dojo.dnd._defaultCreatorNodes = {ul: "li", ol: "li", div: "div", p: "div"}; - // note that updateLayout() needs to be called on each child after - // _all_ the children exist - dojo.forEach(this.getChildren(), function(child, idx){ - child._updateLayout(); - }); +dojo.dnd._defaultCreator = function(node){ + // summary: + // takes a parent node, and returns an appropriate creator function + // node: Node + // a container node + var tag = node.tagName.toLowerCase(); + var c = tag == "tbody" || tag == "thead" ? dojo.dnd._createTrTd : + dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]); + return function(item, hint){ // Function + var isObj = item && dojo.isObject(item), data, type, n; + if(isObj && item.tagName && item.nodeType && item.getAttribute){ + // process a DOM node + data = item.getAttribute("dndData") || item.innerHTML; + type = item.getAttribute("dndType"); + type = type ? type.split(/\s*,\s*/) : ["text"]; + n = item; // this node is going to be moved rather than copied }else{ - this.isExpandable=false; + // process a DnD item object or a string + data = (isObj && item.data) ? item.data : item; + type = (isObj && item.type) ? item.type : ["text"]; + n = (hint == "avatar" ? dojo.dnd._createSpan : c)(String(data)); } + if(!n.id){ + n.id = dojo.dnd.getUniqueId(); + } + return {node: n, data: data, type: type}; + }; +}; + +} - if(this._setExpando){ - // change expando to/from dot or + icon, as appropriate - this._setExpando(false); - } +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"); - // Set leaf icon or folder icon, as appropriate - this._updateItemClasses(this.item); - // On initial tree show, make the selected TreeNode as either the root node of the tree, - // or the first child, if the root node is hidden - if(this == tree.rootNode){ - var fc = this.tree.showRoot ? this : this.getChildren()[0]; - if(fc){ - fc.setFocusable(true); - tree.lastFocused = fc; - }else{ - // fallback: no nodes in tree so focus on Tree <div> itself - tree.domNode.setAttribute("tabIndex", "0"); - } - } - return new dojo.DeferredList(defs); // dojo.Deferred - }, - removeChild: function(/* treeNode */ node){ - this.inherited(arguments); +dojo.getObject("tree", true, dojo); - var children = this.getChildren(); - if(children.length == 0){ - this.isExpandable = false; - this.collapse(); - } +dijit.tree._compareNodes = function(n1, n2){ + if(n1 === n2){ + return 0; + } + + if('sourceIndex' in document.documentElement){ //IE + //TODO: does not yet work if n1 and/or n2 is a text node + return n1.sourceIndex - n2.sourceIndex; + }else if('compareDocumentPosition' in document.documentElement){ //FF, Opera + return n1.compareDocumentPosition(n2) & 2 ? 1: -1; + }else if(document.createRange){ //Webkit + var r1 = doc.createRange(); + r1.setStartBefore(n1); + + var r2 = doc.createRange(); + r2.setStartBefore(n2); + + return r1.compareBoundaryPoints(r1.END_TO_END, r2); + }else{ + throw Error("dijit.tree._compareNodes don't know how to compare two different nodes in this browser"); + } +}; - dojo.forEach(children, function(child){ - child._updateLayout(); - }); - }, +dojo.declare("dijit.tree._dndContainer", + null, + { - makeExpandable: function(){ // summary: - // if this node wasn't already showing the expando node, - // turn it into one and call _setExpando() + // This is a base class for `dijit.tree._dndSelector`, and isn't meant to be used directly. + // It's modeled after `dojo.dnd.Container`. + // tags: + // protected - // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0 + /*===== + // current: DomNode + // The currently hovered TreeNode.rowNode (which is the DOM node + // associated w/a given node in the tree, excluding it's descendants) + current: null, + =====*/ - this.isExpandable = true; - this._setExpando(false); - }, + constructor: function(tree, params){ + // summary: + // A constructor of the Container + // tree: Node + // Node or node's id to build the container on + // params: dijit.tree.__SourceArgs + // A dict of parameters, which gets mixed into the object + // tags: + // private + this.tree = tree; + this.node = tree.domNode; // TODO: rename; it's not a TreeNode but the whole Tree + dojo.mixin(this, params); - _onLabelFocus: function(evt){ - // summary: - // Called when this row is focused (possibly programatically) - // Note that we aren't using _onFocus() builtin to dijit - // because it's called when focus is moved to a descendant TreeNode. - // tags: - // private - this.tree._onNodeFocus(this); - }, + // class-specific variables + this.map = {}; + this.current = null; // current TreeNode's DOM node - setSelected: function(/*Boolean*/ selected){ - // summary: - // A Tree has a (single) currently selected node. - // Mark that this node is/isn't that currently selected node. - // description: - // In particular, setting a node as selected involves setting tabIndex - // so that when user tabs to the tree, focus will go to that node (only). - dijit.setWaiState(this.labelNode, "selected", selected); - dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected); - }, + // states + this.containerState = ""; + dojo.addClass(this.node, "dojoDndContainer"); - setFocusable: function(/*Boolean*/ selected){ - // summary: - // A Tree has a (single) node that's focusable. - // Mark that this node is/isn't that currently focsuable node. - // description: - // In particular, setting a node as selected involves setting tabIndex - // so that when user tabs to the tree, focus will go to that node (only). + // set up events + this.events = [ + // container level events + dojo.connect(this.node, "onmouseenter", this, "onOverEvent"), + dojo.connect(this.node, "onmouseleave", this, "onOutEvent"), - this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1"); - }, + // switching between TreeNodes + dojo.connect(this.tree, "_onNodeMouseEnter", this, "onMouseOver"), + dojo.connect(this.tree, "_onNodeMouseLeave", this, "onMouseOut"), - _onClick: function(evt){ - // summary: - // Handler for onclick event on a node - // tags: - // private - this.tree._onClick(this, evt); - }, - _onDblClick: function(evt){ - // summary: - // Handler for ondblclick event on a node - // tags: - // private - this.tree._onDblClick(this, evt); - }, + // cancel text selection and text dragging + dojo.connect(this.node, "ondragstart", dojo, "stopEvent"), + dojo.connect(this.node, "onselectstart", dojo, "stopEvent") + ]; + }, - _onMouseEnter: function(evt){ - // summary: - // Handler for onmouseenter event on a node - // tags: - // private - this.tree._onNodeMouseEnter(this, evt); - }, + getItem: function(/*String*/ key){ + // summary: + // Returns the dojo.dnd.Item (representing a dragged node) by it's key (id). + // Called by dojo.dnd.Source.checkAcceptance(). + // tags: + // protected - _onMouseLeave: function(evt){ - // summary: - // Handler for onmouseenter event on a node - // tags: - // private - this.tree._onNodeMouseLeave(this, evt); - } -}); + var widget = this.selection[key], + ret = { + data: widget, + type: ["treeNode"] + }; -dojo.declare( - "dijit.Tree", - [dijit._Widget, dijit._Templated], -{ - // summary: - // This widget displays hierarchical data from a store. + return ret; // dojo.dnd.Item + }, - // store: [deprecated] String||dojo.data.Store - // Deprecated. Use "model" parameter instead. - // The store to get data to display in the tree. - store: null, + destroy: function(){ + // summary: + // Prepares this object to be garbage-collected - // model: dijit.Tree.model - // Interface to read tree data, get notifications of changes to tree data, - // and for handling drop operations (i.e drag and drop onto the tree) - model: null, + dojo.forEach(this.events, dojo.disconnect); + // this.clearItems(); + this.node = this.parent = null; + }, - // query: [deprecated] anything - // Deprecated. User should specify query to the model directly instead. - // Specifies datastore query to return the root item or top items for the tree. - query: null, + // mouse events + onMouseOver: function(/*TreeNode*/ widget, /*Event*/ evt){ + // summary: + // Called when mouse is moved over a TreeNode + // tags: + // protected + this.current = widget; + }, - // label: [deprecated] String - // Deprecated. Use dijit.tree.ForestStoreModel directly instead. - // Used in conjunction with query parameter. - // If a query is specified (rather than a root node id), and a label is also specified, - // then a fake root node is created and displayed, with this label. - label: "", + onMouseOut: function(/*TreeNode*/ widget, /*Event*/ evt){ + // summary: + // Called when mouse is moved away from a TreeNode + // tags: + // protected + this.current = null; + }, - // showRoot: [const] Boolean - // Should the root node be displayed, or hidden? - showRoot: true, + _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.replaceClass(this.node, prefix + newState, prefix + this[state]); + this[state] = newState; + }, - // childrenAttr: [deprecated] String[] - // Deprecated. This information should be specified in the model. - // One ore more attributes that holds children of a tree node - childrenAttr: ["children"], + _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); + }, - // path: String[] or Item[] - // Full path from rootNode to selected node expressed as array of items or array of ids. - // Since setting the path may be asynchronous (because ofwaiting on dojo.data), set("path", ...) - // returns a Deferred to indicate when the set is complete. - path: [], + _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); + }, - // selectedItem: [readonly] Item - // The currently selected item in this tree. - // This property can only be set (via set('selectedItem', ...)) when that item is already - // visible in the tree. (I.e. the tree has already been expanded to show that node.) - // Should generally use `path` attribute to set the selected item instead. - selectedItem: null, + onOverEvent: function(){ + // summary: + // This function is called once, when mouse is over our container + // tags: + // protected + this._changeState("Container", "Over"); + }, + + onOutEvent: function(){ + // summary: + // This function is called once, when mouse is out of our container + // tags: + // protected + this._changeState("Container", ""); + } +}); - // openOnClick: Boolean - // If true, clicking a folder node's label will open it, rather than calling onClick() - openOnClick: false, +} - // openOnDblClick: Boolean - // If true, double-clicking a folder node's label will open it, rather than calling onDblClick() - openOnDblClick: false, +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"); - templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" waiRole=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"), - // persist: Boolean - // Enables/disables use of cookies for state saving. - persist: true, - // autoExpand: Boolean - // Fully expand the tree on load. Overrides `persist` - autoExpand: false, - // dndController: [protected] String - // Class name to use as as the dnd controller. Specifying this class enables DnD. - // Generally you should specify this as "dijit.tree.dndSource". - dndController: null, +dojo.declare("dijit.tree._dndSelector", + dijit.tree._dndContainer, + { + // summary: + // This is a base class for `dijit.tree.dndSource` , and isn't meant to be used directly. + // It's based on `dojo.dnd.Selector`. + // tags: + // protected - // parameters to pull off of the tree and pass on to the dndController as its params - dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"], + /*===== + // selection: Hash<String, DomNode> + // (id, DomNode) map for every TreeNode that's currently selected. + // The DOMNode is the TreeNode.rowNode. + selection: {}, + =====*/ - //declare the above items so they can be pulled from the tree's markup + constructor: function(tree, params){ + // summary: + // Initialization + // tags: + // private - // onDndDrop: [protected] Function - // Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`. - // Generally this doesn't need to be set. - onDndDrop: null, + this.selection={}; + this.anchor = null; - /*===== - itemCreator: function(nodes, target, source){ - // summary: - // Returns objects passed to `Tree.model.newItem()` based on DnD nodes - // dropped onto the tree. Developer must override this method to enable - // dropping from external sources onto this Tree, unless the Tree.model's items - // happen to look like {id: 123, name: "Apple" } with no other attributes. - // description: - // For each node in nodes[], which came from source, create a hash of name/value - // pairs to be passed to Tree.model.newItem(). Returns array of those hashes. - // nodes: DomNode[] - // The DOMNodes dragged from the source container - // target: DomNode - // The target TreeNode.rowNode - // source: dojo.dnd.Source - // The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source - // returns: Object[] - // Array of name/value hashes for each new item to be added to the Tree, like: - // | [ - // | { id: 123, label: "apple", foo: "bar" }, - // | { id: 456, label: "pear", zaz: "bam" } - // | ] - // tags: - // extension - return [{}]; - }, - =====*/ - itemCreator: null, + dijit.setWaiState(this.tree.domNode, "multiselect", !this.singular); - // onDndCancel: [protected] Function - // Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`. - // Generally this doesn't need to be set. - onDndCancel: null, + this.events.push( + dojo.connect(this.tree.domNode, "onmousedown", this,"onMouseDown"), + dojo.connect(this.tree.domNode, "onmouseup", this,"onMouseUp"), + dojo.connect(this.tree.domNode, "onmousemove", this,"onMouseMove") + ); + }, -/*===== - checkAcceptance: function(source, nodes){ - // summary: - // Checks if the Tree itself can accept nodes from this source - // source: dijit.tree._dndSource - // The source which provides items - // nodes: DOMNode[] - // Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if - // source is a dijit.Tree. - // tags: - // extension - return true; // Boolean - }, -=====*/ - checkAcceptance: null, + // singular: Boolean + // Allows selection of only one element, if true. + // Tree hasn't been tested in singular=true mode, unclear if it works. + singular: false, -/*===== - checkItemAcceptance: function(target, source, position){ - // summary: - // Stub function to be overridden if one wants to check for the ability to drop at the node/item level - // description: - // In the base case, this is called to check if target can become a child of source. - // When betweenThreshold is set, position="before" or "after" means that we - // are asking if the source node can be dropped before/after the target node. - // target: DOMNode - // The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to - // Use dijit.getEnclosingWidget(target) to get the TreeNode. - // source: dijit.tree.dndSource - // The (set of) nodes we are dropping - // position: String - // "over", "before", or "after" - // tags: - // extension - return true; // Boolean - }, -=====*/ - checkItemAcceptance: null, + // methods + getSelectedTreeNodes: function(){ + // summary: + // Returns a list of selected node(s). + // Used by dndSource on the start of a drag. + // tags: + // protected + var nodes=[], sel = this.selection; + for(var i in sel){ + nodes.push(sel[i]); + } + return nodes; + }, - // dragThreshold: Integer - // Number of pixels mouse moves before it's considered the start of a drag operation - dragThreshold: 5, + selectNone: function(){ + // summary: + // Unselects all items + // tags: + // private - // betweenThreshold: Integer - // Set to a positive value to allow drag and drop "between" nodes. - // - // If during DnD mouse is over a (target) node but less than betweenThreshold - // pixels from the bottom edge, dropping the the dragged node will make it - // the next sibling of the target node, rather than the child. - // - // Similarly, if mouse is over a target node but less that betweenThreshold - // pixels from the top edge, dropping the dragged node will make it - // the target node's previous sibling rather than the target node's child. - betweenThreshold: 0, + this.setSelection([]); + return this; // self + }, - // _nodePixelIndent: Integer - // Number of pixels to indent tree nodes (relative to parent node). - // Default is 19 but can be overridden by setting CSS class dijitTreeIndent - // and calling resize() or startup() on tree after it's in the DOM. - _nodePixelIndent: 19, + destroy: function(){ + // summary: + // Prepares the object to be garbage-collected + this.inherited(arguments); + this.selection = this.anchor = null; + }, + addTreeNode: function(/*dijit._TreeNode*/node, /*Boolean?*/isAnchor){ + // summary + // add node to current selection + // node: Node + // node to add + // isAnchor: Boolean + // Whether the node should become anchor. - _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 || {})]); - }, + this.setSelection(this.getSelectedTreeNodes().concat( [node] )); + if(isAnchor){ this.anchor = node; } + return node; + }, + removeTreeNode: function(/*dijit._TreeNode*/node){ + // summary + // remove node from current selection + // node: Node + // node to remove + this.setSelection(this._setDifference(this.getSelectedTreeNodes(), [node])) + return node; + }, + isTreeNodeSelected: function(/*dijit._TreeNode*/node){ + // summary + // return true if node is currently selected + // node: Node + // the node to check whether it's in the current selection - postMixInProperties: function(){ - this.tree = this; + return node.id && !!this.selection[node.id]; + }, + setSelection: function(/*dijit._treeNode[]*/ newSelection){ + // summary + // set the list of selected nodes to be exactly newSelection. All changes to the + // selection should be passed through this function, which ensures that derived + // attributes are kept up to date. Anchor will be deleted if it has been removed + // from the selection, but no new anchor will be added by this function. + // newSelection: Node[] + // list of tree nodes to make selected + var oldSelection = this.getSelectedTreeNodes(); + dojo.forEach(this._setDifference(oldSelection, newSelection), dojo.hitch(this, function(node){ + node.setSelected(false); + if(this.anchor == node){ + delete this.anchor; + } + delete this.selection[node.id]; + })); + dojo.forEach(this._setDifference(newSelection, oldSelection), dojo.hitch(this, function(node){ + node.setSelected(true); + this.selection[node.id] = node; + })); + this._updateSelectionProperties(); + }, + _setDifference: function(xs,ys){ + // summary + // Returns a copy of xs which lacks any objects + // occurring in ys. Checks for membership by + // modifying and then reading the object, so it will + // not properly handle sets of numbers or strings. + + dojo.forEach(ys, function(y){ y.__exclude__ = true; }); + var ret = dojo.filter(xs, function(x){ return !x.__exclude__; }); - if(this.autoExpand){ - // There's little point in saving opened/closed state of nodes for a Tree - // that initially opens all it's nodes. - this.persist = false; - } + // clean up after ourselves. + dojo.forEach(ys, function(y){ delete y['__exclude__'] }); + return ret; + }, + _updateSelectionProperties: function() { + // summary + // Update the following tree properties from the current selection: + // path[s], selectedItem[s], selectedNode[s] + + var selected = this.getSelectedTreeNodes(); + var paths = [], nodes = []; + dojo.forEach(selected, function(node) { + nodes.push(node); + paths.push(node.getTreePath()); + }); + var items = dojo.map(nodes,function(node) { return node.item; }); + this.tree._set("paths", paths); + this.tree._set("path", paths[0] || []); + this.tree._set("selectedNodes", nodes); + this.tree._set("selectedNode", nodes[0] || null); + this.tree._set("selectedItems", items); + this.tree._set("selectedItem", items[0] || null); + }, + // mouse events + onMouseDown: function(e){ + // summary: + // Event processor for onmousedown + // e: Event + // mouse event + // tags: + // protected - this._itemNodesMap={}; + // ignore click on expando node + if(!this.current || this.tree.isExpandoNode( e.target, this.current)){ return; } - if(!this.cookieName){ - this.cookieName = this.id + "SaveStateCookie"; - } + if(e.button == dojo.mouseButtons.RIGHT){ return; } // ignore right-click - this._loadDeferred = new dojo.Deferred(); + dojo.stopEvent(e); - this.inherited(arguments); - }, + var treeNode = this.current, + copy = dojo.isCopyKey(e), id = treeNode.id; - postCreate: function(){ - this._initState(); + // if shift key is not pressed, and the node is already in the selection, + // delay deselection until onmouseup so in the case of DND, deselection + // will be canceled by onmousemove. + if(!this.singular && !e.shiftKey && this.selection[id]){ + this._doDeselect = true; + return; + }else{ + this._doDeselect = false; + } + this.userSelect(treeNode, copy, e.shiftKey); + }, - // Create glue between store and Tree, if not specified directly by user - if(!this.model){ - this._store2model(); - } + onMouseUp: function(e){ + // summary: + // Event processor for onmouseup + // e: Event + // mouse event + // tags: + // protected - // monitor changes to items - this.connect(this.model, "onChange", "_onItemChange"); - this.connect(this.model, "onChildrenChange", "_onItemChildrenChange"); - this.connect(this.model, "onDelete", "_onItemDelete"); + // _doDeselect is the flag to indicate that the user wants to either ctrl+click on + // a already selected item (to deselect the item), or click on a not-yet selected item + // (which should remove all current selection, and add the clicked item). This can not + // be done in onMouseDown, because the user may start a drag after mousedown. By moving + // the deselection logic here, the user can drags an already selected item. + if(!this._doDeselect){ return; } + this._doDeselect = false; + this.userSelect(this.current, dojo.isCopyKey( e ), e.shiftKey); + }, + onMouseMove: function(e){ + // summary + // event processor for onmousemove + // e: Event + // mouse event + this._doDeselect = false; + }, - this._load(); + userSelect: function(node, multi, range){ + // summary: + // Add or remove the given node from selection, responding + // to a user action such as a click or keypress. + // multi: Boolean + // Indicates whether this is meant to be a multi-select action (e.g. ctrl-click) + // range: Boolean + // Indicates whether this is meant to be a ranged action (e.g. shift-click) + // tags: + // protected - this.inherited(arguments); + if(this.singular){ + if(this.anchor == node && multi){ + this.selectNone(); + }else{ + this.setSelection([node]); + this.anchor = node; + } + }else{ + if(range && this.anchor){ + var cr = dijit.tree._compareNodes(this.anchor.rowNode, node.rowNode), + begin, end, anchor = this.anchor; + + if(cr < 0){ //current is after anchor + begin = anchor; + end = node; + }else{ //current is before anchor + begin = node; + end = anchor; + } + nodes = []; + //add everything betweeen begin and end inclusively + while(begin != end) { + nodes.push(begin) + begin = this.tree._getNextNode(begin); + } + nodes.push(end) - 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.setSelection(nodes); + }else{ + if( this.selection[ node.id ] && multi ) { + this.removeTreeNode( node ); + } else if(multi) { + this.addTreeNode(node, true); + } else { + this.setSelection([node]); + this.anchor = node; + } } } - this.dndController = new this.dndController(this, params); + }, + + forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){ + // summary: + // Iterates over selected items; + // see `dojo.dnd.Container.forInItems()` for details + o = o || dojo.global; + for(var id in this.selection){ + // console.log("selected item id: " + id); + f.call(o, this.getItem(id), id, this); + } } - }, +}); - _store2model: function(){ - // summary: - // User specified a store&query rather than model, so create model from store/query - this._v10Compat = true; - dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query"); +} - var modelParams = { - id: this.id + "_ForestStoreModel", - store: this.store, - query: this.query, - childrenAttrs: this.childrenAttr - }; +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"); - // Only override the model's mayHaveChildren() method if the user has specified an override - if(this.params.mayHaveChildren){ - modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren"); - } - if(this.params.getItemChildren){ - modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){ - this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError); - }); - } - this.model = new dijit.tree.ForestStoreModel(modelParams); - // For backwards compatibility, the visibility of the root node is controlled by - // whether or not the user has specified a label - this.showRoot = Boolean(this.label); - }, - onLoad: function(){ - // summary: - // Called when tree finishes loading and expanding. - // description: - // If persist == true the loading may encompass many levels of fetches - // from the data store, each asynchronous. Waits for all to finish. - // tags: - // callback - }, - _load: function(){ - // summary: - // Initial load of the tree. - // Load root node (possibly hidden) and it's children. - this.model.getRoot( - dojo.hitch(this, function(item){ - var rn = (this.rootNode = this.tree._createTreeNode({ - item: item, - tree: this, - isExpandable: true, - label: this.label || this.getLabel(item), - indent: this.showRoot ? 0 : -1 - })); - if(!this.showRoot){ - rn.rowNode.style.display="none"; - } - this.domNode.appendChild(rn.domNode); - var identity = this.model.getIdentity(item); - if(this._itemNodesMap[identity]){ - this._itemNodesMap[identity].push(rn); - }else{ - this._itemNodesMap[identity] = [rn]; - } - rn._updateLayout(); // sets "dijitTreeIsRoot" CSS classname - // load top level children and then fire onLoad() event - this._expandNode(rn).addCallback(dojo.hitch(this, function(){ - this._loadDeferred.callback(true); - this.onLoad(); - })); - }), - function(err){ - console.error(this, ": error loading root: ", err); - } - ); - }, - getNodesByItem: function(/*dojo.data.Item or id*/ item){ - // summary: - // Returns all tree nodes that refer to an item - // returns: - // Array of tree nodes that refer to passed item - if(!item){ return []; } - var identity = dojo.isString(item) ? item : this.model.getIdentity(item); - // return a copy so widget don't get messed up by changes to returned array - return [].concat(this._itemNodesMap[identity]); - }, - _setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){ - // summary: - // Select a tree node related to passed item. - // WARNING: if model use multi-parented items or desired tree node isn't already loaded - // behavior is undefined. Use set('path', ...) instead. - var oldValue = this.get("selectedItem"); - var identity = (!item || dojo.isString(item)) ? item : this.model.getIdentity(item); - if(identity == oldValue ? this.model.getIdentity(oldValue) : null){ return; } - var nodes = this._itemNodesMap[identity]; - this._selectNode((nodes && nodes[0]) || null); //select the first item - }, - _getSelectedItemAttr: function(){ - // summary: - // Return item related to selected tree node. - return this.selectedNode && this.selectedNode.item; - }, - _setPathAttr: function(/*Item[] || String[]*/ path){ - // summary: - // Select the tree node identified by passed path. - // path: - // Array of items or item id's - // returns: - // Deferred to indicate when the set is complete +dojo.declare( + "dijit._TreeNode", + [dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained, dijit._CssStateMixin], +{ + // summary: + // Single node within a tree. This class is used internally + // by Tree and should not be accessed directly. + // tags: + // private - var d = new dojo.Deferred(); + // item: [const] dojo.data.Item + // the dojo.data entry this tree represents + item: null, - this._selectNode(null); - if(!path || !path.length){ - d.resolve(true); - return d; - } + // isTreeNode: [protected] Boolean + // Indicates that this is a TreeNode. Used by `dijit.Tree` only, + // should not be accessed directly. + isTreeNode: true, - // If this is called during initialization, defer running until Tree has finished loading - this._loadDeferred.addCallback(dojo.hitch(this, function(){ - if(!this.rootNode){ - d.reject(new Error("!this.rootNode")); - return; - } - if(path[0] !== this.rootNode.item && (dojo.isString(path[0]) && path[0] != this.model.getIdentity(this.rootNode.item))){ - d.reject(new Error(this.id + ":path[0] doesn't match this.rootNode.item. Maybe you are using the wrong tree.")); - return; - } - path.shift(); + // label: String + // Text of this tree node + label: "", - var node = this.rootNode; + // isExpandable: [private] Boolean + // This node has children, so show the expando node (+ sign) + isExpandable: null, - function advance(){ - // summary: - // Called when "node" has completed loading and expanding. Pop the next item from the path - // (which must be a child of "node") and advance to it, and then recurse. - - // Set item and identity to next item in path (node is pointing to the item that was popped - // from the path _last_ time. - var item = path.shift(), - identity = dojo.isString(item) ? item : this.model.getIdentity(item); - - // Change "node" from previous item in path to the item we just popped from path - dojo.some(this._itemNodesMap[identity], function(n){ - if(n.getParent() == node){ - node = n; - return true; - } - return false; - }); + // isExpanded: [readonly] Boolean + // This node is currently expanded (ie, opened) + isExpanded: false, - if(path.length){ - // Need to do more expanding - this._expandNode(node).addCallback(dojo.hitch(this, advance)); - }else{ - // Final destination node, select it - this._selectNode(node); - - // signal that path setting is finished - d.resolve(true); - } - } + // state: [private] 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", - this._expandNode(node).addCallback(dojo.hitch(this, advance)); - })); - - return d; - }, + templateString: dojo.cache("dijit", "templates/TreeNode.html", "<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div dojoAttachPoint=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" dojoAttachEvent=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span dojoAttachPoint=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span dojoAttachPoint=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" dojoAttachPoint=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span dojoAttachPoint=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" dojoAttachEvent=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div dojoAttachPoint=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n"), - _getPathAttr: function(){ - // summary: - // Return an array of items that is the path to selected tree node. - if(!this.selectedNode){ return; } - var res = []; - var treeNode = this.selectedNode; - while(treeNode && treeNode !== this.rootNode){ - res.unshift(treeNode.item); - treeNode = treeNode.getParent(); - } - res.unshift(this.rootNode.item); - return res; + baseClass: "dijitTreeNode", + + // For hover effect for tree node, and focus effect for label + cssStateNodes: { + rowNode: "dijitTreeRow", + labelNode: "dijitTreeLabel" }, - ////////////// Data store related functions ////////////////////// - // These just get passed to the model; they are here for back-compat + attributeMap: dojo.delegate(dijit._Widget.prototype.attributeMap, { + label: {node: "labelNode", type: "innerText"}, + tooltip: {node: "rowNode", type: "attribute", attribute: "title"} + }), - mayHaveChildren: function(/*dojo.data.Item*/ item){ - // summary: - // Deprecated. This should be specified on the model itself. - // - // 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 actually - // has children until user clicks the expando node) - // tags: - // deprecated - }, + buildRendering: function(){ + this.inherited(arguments); - getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){ - // summary: - // Deprecated. This should be specified on the model itself. - // - // Overridable function that return array of child items of given parent item, - // or if parentItem==null then return top items in tree - // tags: - // deprecated - }, + // set expand icon for leaf + this._setExpando(); - /////////////////////////////////////////////////////// - // Functions for converting an item to a TreeNode - getLabel: function(/*dojo.data.Item*/ item){ - // summary: - // Overridable function to get the label for a tree node (given the item) - // tags: - // extension - return this.model.getLabel(item); // String - }, + // set icon and label class based on item + this._updateItemClasses(this.item); - getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ - // summary: - // Overridable function to return CSS class name to display icon - // tags: - // extension - return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf" - }, + if(this.isExpandable){ + dijit.setWaiState(this.labelNode, "expanded", this.isExpanded); + } - getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ - // summary: - // Overridable function to return CSS class name to display label - // tags: - // extension + //aria-selected should be false on all selectable elements. + this.setSelected(false); }, - getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ + _setIndentAttr: function(indent){ // summary: - // Overridable function to return CSS class name to display row - // tags: - // extension - }, + // Tell this node how many levels it should be indented + // description: + // 0 for top level nodes, 1 for their children, 2 for their + // grandchildren, etc. - getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ - // summary: - // Overridable function to return CSS styles to display icon - // returns: - // Object suitable for input to dojo.style() like {backgroundImage: "url(...)"} - // tags: - // extension + // Math.max() is to prevent negative padding on hidden root node (when indent == -1) + var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px"; + + dojo.style(this.domNode, "backgroundPosition", pixels + " 0px"); + dojo.style(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels); + + dojo.forEach(this.getChildren(), function(child){ + child.set("indent", indent+1); + }); + + this._set("indent", indent); }, - getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ + markProcessing: function(){ // summary: - // Overridable function to return CSS styles to display label - // returns: - // Object suitable for input to dojo.style() like {color: "red", background: "green"} + // Visually denote that tree is loading data, etc. // tags: - // extension + // private + this.state = "LOADING"; + this._setExpando(true); }, - getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ + unmarkProcessing: function(){ // summary: - // Overridable function to return CSS styles to display row - // returns: - // Object suitable for input to dojo.style() like {background-color: "#bbb"} + // Clear markup from markProcessing() call // tags: - // extension + // private + this._setExpando(false); }, - getTooltip: function(/*dojo.data.Item*/ item){ + _updateItemClasses: function(item){ // summary: - // Overridable function to get the tooltip for a tree node (given the item) + // Set appropriate CSS classes for icon and label dom node + // (used to allow for item updates to change respective CSS) // tags: - // extension - return ""; // String + // private + var tree = this.tree, model = tree.model; + if(tree._v10Compat && item === model.root){ + // For back-compat with 1.0, need to use null to specify root item (TODO: remove in 2.0) + item = null; + } + this._applyClassAndStyle(item, "icon", "Icon"); + this._applyClassAndStyle(item, "label", "Label"); + this._applyClassAndStyle(item, "row", "Row"); }, - /////////// Keyboard and Mouse handlers //////////////////// - - _onKeyPress: function(/*Event*/ e){ + _applyClassAndStyle: function(item, lower, upper){ // summary: - // Translates keypress events into commands for the controller - if(e.altKey){ return; } - var dk = dojo.keys; - var treeNode = dijit.getEnclosingWidget(e.target); - if(!treeNode){ return; } - - var key = e.charOrCode; - if(typeof key == "string"){ // handle printables (letter navigation) - // Check for key navigation. - if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){ - this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } ); - dojo.stopEvent(e); - } - }else{ // handle non-printables (arrow keys) - // clear record of recent printables (being saved for multi-char letter navigation), - // because "a", down-arrow, "b" shouldn't search for "ab" - if(this._curSearch){ - clearTimeout(this._curSearch.timer); - delete this._curSearch; - } + // Set the appropriate CSS classes and styles for labels, icons and rows. + // + // item: + // The data item. + // + // lower: + // The lower case attribute to use, e.g. 'icon', 'label' or 'row'. + // + // upper: + // The upper case attribute to use, e.g. 'Icon', 'Label' or 'Row'. + // + // tags: + // private - var map = this._keyHandlerMap; - if(!map){ - // setup table mapping keys to events - map = {}; - map[dk.ENTER]="_onEnterKey"; - map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow"; - map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow"; - map[dk.UP_ARROW]="_onUpArrow"; - map[dk.DOWN_ARROW]="_onDownArrow"; - map[dk.HOME]="_onHomeKey"; - map[dk.END]="_onEndKey"; - this._keyHandlerMap = map; - } - if(this._keyHandlerMap[key]){ - this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } ); - dojo.stopEvent(e); - } - } - }, + var clsName = "_" + lower + "Class"; + var nodeName = lower + "Node"; + var oldCls = this[clsName]; - _onEnterKey: function(/*Object*/ message, /*Event*/ evt){ - this._publish("execute", { item: message.item, node: message.node } ); - this._selectNode(message.node); - this.onClick(message.item, message.node, evt); - }, + this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded); + dojo.replaceClass(this[nodeName], this[clsName] || "", oldCls || ""); + + dojo.style(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {}); + }, - _onDownArrow: function(/*Object*/ message){ + _updateLayout: function(){ // summary: - // down arrow pressed; get next visible node, set focus there - var node = this._getNextNode(message.node); - if(node && node.isTreeNode){ - this.focusNode(node); + // Set appropriate CSS classes for this.domNode + // tags: + // private + var parent = this.getParent(); + if(!parent || parent.rowNode.style.display == "none"){ + /* 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()); } }, - _onUpArrow: function(/*Object*/ message){ + _setExpando: function(/*Boolean*/ processing){ // summary: - // Up arrow pressed; move to previous visible node + // Set the right image for the expando node + // tags: + // private - var node = message.node; + var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened", + "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"], + _a11yStates = ["*","-","+","*"], + idx = processing ? 0 : (this.isExpandable ? (this.isExpanded ? 1 : 2) : 3); - // if younger siblings - var previousSibling = node.getPreviousSibling(); - if(previousSibling){ - node = previousSibling; - // if the previous node is expanded, dive in deep - while(node.isExpandable && node.isExpanded && node.hasChildren()){ - // move to the last child - var children = node.getChildren(); - node = 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 = node.getParent(); - if(!(!this.showRoot && parent === this.rootNode)){ - node = parent; - } - } + // apply the appropriate class to the expando node + dojo.replaceClass(this.expandoNode, styles[idx], styles); + + // provide a non-image based indicator for images-off mode + this.expandoNodeText.innerHTML = _a11yStates[idx]; - if(node && node.isTreeNode){ - this.focusNode(node); - } }, - _onRightArrow: function(/*Object*/ message){ + expand: function(){ // summary: - // Right arrow pressed; go to child node - var node = message.node; + // Show my children + // returns: + // Deferred that fires when expansion is complete - // if not expanded, expand, else move to 1st child - if(node.isExpandable && !node.isExpanded){ - this._expandNode(node); - }else if(node.hasChildren()){ - node = node.getChildren()[0]; - if(node && node.isTreeNode){ - this.focusNode(node); - } + // If there's already an expand in progress or we are already expanded, just return + if(this._expandDeferred){ + return this._expandDeferred; // dojo.Deferred + } + + // cancel in progress collapse operation + this._wipeOut && this._wipeOut.stop(); + + // All the state information for when a node is expanded, maybe this should be + // set when the animation completes instead + this.isExpanded = true; + dijit.setWaiState(this.labelNode, "expanded", "true"); + if(this.tree.showRoot || this !== this.tree.rootNode){ + dijit.setWaiRole(this.containerNode, "group"); + } + dojo.addClass(this.contentNode,'dijitTreeContentExpanded'); + this._setExpando(); + this._updateItemClasses(this.item); + if(this == this.tree.rootNode){ + dijit.setWaiState(this.tree.domNode, "expanded", "true"); } + + var def, + wipeIn = dojo.fx.wipeIn({ + node: this.containerNode, duration: dijit.defaultDuration, + onEnd: function(){ + def.callback(true); + } + }); + + // Deferred that fires when expand is complete + def = (this._expandDeferred = new dojo.Deferred(function(){ + // Canceller + wipeIn.stop(); + })); + + wipeIn.play(); + + return def; // dojo.Deferred }, - _onLeftArrow: function(/*Object*/ message){ + collapse: function(){ // summary: - // Left arrow pressed. - // If not collapsed, collapse, else move to parent. + // Collapse this node (if it's expanded) - var node = message.node; + if(!this.isExpanded){ return; } - if(node.isExpandable && node.isExpanded){ - this._collapseNode(node); - }else{ - var parent = node.getParent(); - if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){ - this.focusNode(parent); - } + // cancel in progress expand operation + if(this._expandDeferred){ + this._expandDeferred.cancel(); + delete this._expandDeferred; } - }, - _onHomeKey: function(){ - // summary: - // Home key pressed; get first visible node, and set focus there - var node = this._getRootOrFirstNode(); - if(node){ - this.focusNode(node); + this.isExpanded = false; + dijit.setWaiState(this.labelNode, "expanded", "false"); + if(this == this.tree.rootNode){ + dijit.setWaiState(this.tree.domNode, "expanded", "false"); + } + dojo.removeClass(this.contentNode,'dijitTreeContentExpanded'); + this._setExpando(); + this._updateItemClasses(this.item); + + if(!this._wipeOut){ + this._wipeOut = dojo.fx.wipeOut({ + node: this.containerNode, duration: dijit.defaultDuration + }); } + this._wipeOut.play(); }, - _onEndKey: function(/*Object*/ message){ - // summary: - // End key pressed; go to last visible node. + // indent: Integer + // Levels from this node to the root node + indent: 0, + + setChildItems: function(/* Object[] */ items){ + // summary: + // Sets the child items of this node, removing/adding nodes + // from current children to match specified items[] array. + // Also, if this.persist == true, expands any children that were previously + // opened. + // returns: + // Deferred object that fires after all previously opened children + // have been expanded again (or fires instantly if there are no such children). + + var tree = this.tree, + model = tree.model, + defs = []; // list of deferreds that need to fire before I am complete + - var node = this.rootNode; - while(node.isExpanded){ - var c = node.getChildren(); - node = c[c.length - 1]; - } + // Orphan all my existing children. + // If items contains some of the same items as before then we will reattach them. + // Don't call this.removeChild() because that will collapse the tree etc. + dojo.forEach(this.getChildren(), function(child){ + dijit._Container.prototype.removeChild.call(this, child); + }, this); - if(node && node.isTreeNode){ - this.focusNode(node); - } - }, + this.state = "LOADED"; - // multiCharSearchDuration: Number - // If multiple characters are typed where each keystroke happens within - // multiCharSearchDuration of the previous keystroke, - // search for nodes matching all the keystrokes. - // - // For example, typing "ab" will search for entries starting with - // "ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration. - multiCharSearchDuration: 250, + if(items && items.length > 0){ + this.isExpandable = true; - _onLetterKeyNav: function(message){ - // summary: - // Called when user presses a prinatable key; search for node starting with recently typed letters. - // message: Object - // Like { node: TreeNode, key: 'a' } where key is the key the user pressed. + // Create _TreeNode widget for each specified tree node, unless one already + // exists and isn't being used (presumably it's from a DnD move and was recently + // released + dojo.forEach(items, function(item){ + var id = model.getIdentity(item), + existingNodes = tree._itemNodesMap[id], + node; + if(existingNodes){ + for(var i=0;i<existingNodes.length;i++){ + if(existingNodes[i] && !existingNodes[i].getParent()){ + node = existingNodes[i]; + node.set('indent', this.indent+1); + break; + } + } + } + if(!node){ + node = this.tree._createTreeNode({ + item: item, + tree: tree, + isExpandable: model.mayHaveChildren(item), + label: tree.getLabel(item), + tooltip: tree.getTooltip(item), + dir: tree.dir, + lang: tree.lang, + indent: this.indent + 1 + }); + if(existingNodes){ + existingNodes.push(node); + }else{ + tree._itemNodesMap[id] = [node]; + } + } + this.addChild(node); - // Branch depending on whether this key starts a new search, or modifies an existing search - var cs = this._curSearch; - if(cs){ - // We are continuing a search. Ex: user has pressed 'a', and now has pressed - // 'b', so we want to search for nodes starting w/"ab". - cs.pattern = cs.pattern + message.key; - clearTimeout(cs.timer); + // If node was previously opened then open it again now (this may trigger + // more data store accesses, recursively) + if(this.tree.autoExpand || this.tree._state(item)){ + defs.push(tree._expandNode(node)); + } + }, 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{ - // We are starting a new search - cs = this._curSearch = { - pattern: message.key, - startNode: message.node - }; + this.isExpandable=false; } - // set/reset timer to forget recent keystrokes - var self = this; - cs.timer = setTimeout(function(){ - delete self._curSearch; - }, this.multiCharSearchDuration); + if(this._setExpando){ + // change expando to/from dot or + icon, as appropriate + this._setExpando(false); + } - // Navigate to TreeNode matching keystrokes [entered so far]. - var node = cs.startNode; - do{ - node = this._getNextNode(node); - //check for last node, jump to first node if necessary - if(!node){ - node = this._getRootOrFirstNode(); - } - }while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern)); - if(node && node.isTreeNode){ - // no need to set focus if back where we started - if(node !== cs.startNode){ - this.focusNode(node); + // Set leaf icon or folder icon, as appropriate + this._updateItemClasses(this.item); + + // On initial tree show, make the selected TreeNode as either the root node of the tree, + // or the first child, if the root node is hidden + if(this == tree.rootNode){ + var fc = this.tree.showRoot ? this : this.getChildren()[0]; + if(fc){ + fc.setFocusable(true); + tree.lastFocused = fc; + }else{ + // fallback: no nodes in tree so focus on Tree <div> itself + tree.domNode.setAttribute("tabIndex", "0"); } } + + return new dojo.DeferredList(defs); // dojo.Deferred }, - _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){ - // summary: - // Translates click events into commands for the controller to process + getTreePath: function(){ + var node = this; + var path = []; + while(node && node !== this.tree.rootNode){ + path.unshift(node.item); + node = node.getParent(); + } + path.unshift(this.tree.rootNode.item); - var domElement = e.target, - isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText); + return path; + }, - if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){ - // expando node was clicked, or label of a folder node was clicked; open it - if(nodeWidget.isExpandable){ - this._onExpandoClick({node:nodeWidget}); - } - }else{ - this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } ); - this.onClick(nodeWidget.item, nodeWidget, e); - this.focusNode(nodeWidget); - } - if(!isExpandoClick){ - this._selectNode(nodeWidget); - } - dojo.stopEvent(e); + getIdentity: function() { + return this.tree.model.getIdentity(this.item); }, - _onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){ - // summary: - // Translates double-click events into commands for the controller to process - var domElement = e.target, - isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText); + removeChild: function(/* treeNode */ node){ + this.inherited(arguments); - if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){ - // expando node was clicked, or label of a folder node was clicked; open it - if(nodeWidget.isExpandable){ - this._onExpandoClick({node:nodeWidget}); - } - }else{ - this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } ); - this.onDblClick(nodeWidget.item, nodeWidget, e); - this.focusNode(nodeWidget); - } - if(!isExpandoClick){ - this._selectNode(nodeWidget); + var children = this.getChildren(); + if(children.length == 0){ + this.isExpandable = false; + this.collapse(); } - dojo.stopEvent(e); + + dojo.forEach(children, function(child){ + child._updateLayout(); + }); }, - _onExpandoClick: function(/*Object*/ message){ + makeExpandable: function(){ // summary: - // User clicked the +/- icon; expand or collapse my children. - var node = message.node; + // if this node wasn't already showing the expando node, + // turn it into one and call _setExpando() - // If we are collapsing, we might be hiding the currently focused node. - // Also, clicking the expando node might have erased focus from the current node. - // For simplicity's sake just focus on the node with the expando. - this.focusNode(node); + // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0 - if(node.isExpanded){ - this._collapseNode(node); - }else{ - this._expandNode(node); - } + this.isExpandable = true; + this._setExpando(false); }, - onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){ - // summary: - // Callback when a tree node is clicked - // tags: - // callback - }, - onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){ - // summary: - // Callback when a tree node is double-clicked - // tags: - // callback - }, - onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){ + _onLabelFocus: function(evt){ // summary: - // Callback when a node is opened + // Called when this row is focused (possibly programatically) + // Note that we aren't using _onFocus() builtin to dijit + // because it's called when focus is moved to a descendant TreeNode. // tags: - // callback + // private + this.tree._onNodeFocus(this); }, - onClose: function(/* dojo.data */ item, /*TreeNode*/ node){ + + setSelected: function(/*Boolean*/ selected){ // summary: - // Callback when a node is closed - // tags: - // callback + // A Tree has a (single) currently selected node. + // Mark that this node is/isn't that currently selected node. + // description: + // In particular, setting a node as selected involves setting tabIndex + // so that when user tabs to the tree, focus will go to that node (only). + dijit.setWaiState(this.labelNode, "selected", selected); + dojo.toggleClass(this.rowNode, "dijitTreeRowSelected", selected); }, - _getNextNode: function(node){ + setFocusable: function(/*Boolean*/ selected){ // summary: - // Get next visible node + // A Tree has a (single) node that's focusable. + // Mark that this node is/isn't that currently focsuable node. + // description: + // In particular, setting a node as selected involves setting tabIndex + // so that when user tabs to the tree, focus will go to that node (only). - if(node.isExpandable && node.isExpanded && node.hasChildren()){ - // if this is an expanded node, get the first child - return node.getChildren()[0]; // _TreeNode - }else{ - // find a parent node with a sibling - while(node && node.isTreeNode){ - var returnNode = node.getNextSibling(); - if(returnNode){ - return returnNode; // _TreeNode - } - node = node.getParent(); - } - return null; - } + this.labelNode.setAttribute("tabIndex", selected ? "0" : "-1"); + }, + + _onClick: function(evt){ + // summary: + // Handler for onclick event on a node + // tags: + // private + this.tree._onClick(this, evt); + }, + _onDblClick: function(evt){ + // summary: + // Handler for ondblclick event on a node + // tags: + // private + this.tree._onDblClick(this, evt); }, - _getRootOrFirstNode: function(){ + _onMouseEnter: function(evt){ // summary: - // Get first visible node - return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0]; + // Handler for onmouseenter event on a node + // tags: + // private + this.tree._onNodeMouseEnter(this, evt); }, - _collapseNode: function(/*_TreeNode*/ node){ + _onMouseLeave: function(evt){ // summary: - // Called when the user has requested to collapse the node + // Handler for onmouseenter event on a node + // tags: + // private + this.tree._onNodeMouseLeave(this, evt); + } +}); - if(node._expandNodeDeferred){ - delete node._expandNodeDeferred; - } +dojo.declare( + "dijit.Tree", + [dijit._Widget, dijit._Templated], +{ + // summary: + // This widget displays hierarchical data from a store. - if(node.isExpandable){ - if(node.state == "LOADING"){ - // ignore clicks while we are in the process of loading data - return; - } + // store: [deprecated] String||dojo.data.Store + // Deprecated. Use "model" parameter instead. + // The store to get data to display in the tree. + store: null, - node.collapse(); - this.onClose(node.item, node); + // model: dijit.Tree.model + // Interface to read tree data, get notifications of changes to tree data, + // and for handling drop operations (i.e drag and drop onto the tree) + model: null, - if(node.item){ - this._state(node.item,false); - this._saveState(); - } - } - }, + // query: [deprecated] anything + // Deprecated. User should specify query to the model directly instead. + // Specifies datastore query to return the root item or top items for the tree. + query: null, - _expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){ - // summary: - // Called when the user has requested to expand the node - // recursive: - // Internal flag used when _expandNode() calls itself, don't set. - // returns: - // Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants - // that were previously opened too + // label: [deprecated] String + // Deprecated. Use dijit.tree.ForestStoreModel directly instead. + // Used in conjunction with query parameter. + // If a query is specified (rather than a root node id), and a label is also specified, + // then a fake root node is created and displayed, with this label. + label: "", - if(node._expandNodeDeferred && !recursive){ - // there's already an expand in progress (or completed), so just return - return node._expandNodeDeferred; // dojo.Deferred - } + // showRoot: [const] Boolean + // Should the root node be displayed, or hidden? + showRoot: true, - var model = this.model, - item = node.item, - _this = this; + // childrenAttr: [deprecated] String[] + // Deprecated. This information should be specified in the model. + // One ore more attributes that holds children of a tree node + childrenAttr: ["children"], - switch(node.state){ - case "UNCHECKED": - // need to load all the children, and then expand - node.markProcessing(); + // paths: String[][] or Item[][] + // Full paths from rootNode to selected nodes expressed as array of items or array of ids. + // Since setting the paths may be asynchronous (because ofwaiting on dojo.data), set("paths", ...) + // returns a Deferred to indicate when the set is complete. + paths: [], + + // path: String[] or Item[] + // Backward compatible singular variant of paths. + path: [], - // Setup deferred to signal when the load and expand are finished. - // Save that deferred in this._expandDeferred as a flag that operation is in progress. - var def = (node._expandNodeDeferred = new dojo.Deferred()); + // selectedItems: [readonly] Item[] + // The currently selected items in this tree. + // This property can only be set (via set('selectedItems', ...)) when that item is already + // visible in the tree. (I.e. the tree has already been expanded to show that node.) + // Should generally use `paths` attribute to set the selected items instead. + selectedItems: null, - // Get the children - model.getChildren( - item, - function(items){ - node.unmarkProcessing(); + // selectedItem: [readonly] Item + // Backward compatible singular variant of selectedItems. + selectedItem: null, - // Display the children and also start expanding any children that were previously expanded - // (if this.persist == true). The returned Deferred will fire when those expansions finish. - var scid = node.setChildItems(items); + // openOnClick: Boolean + // If true, clicking a folder node's label will open it, rather than calling onClick() + openOnClick: false, - // Call _expandNode() again but this time it will just to do the animation (default branch). - // The returned Deferred will fire when the animation completes. - // TODO: seems like I can avoid recursion and just use a deferred to sequence the events? - var ed = _this._expandNode(node, true); + // openOnDblClick: Boolean + // If true, double-clicking a folder node's label will open it, rather than calling onDblClick() + openOnDblClick: false, - // After the above two tasks (setChildItems() and recursive _expandNode()) finish, - // signal that I am done. - scid.addCallback(function(){ - ed.addCallback(function(){ - def.callback(); - }) - }); - }, - function(err){ - console.error(_this, ": error loading root children: ", err); - } - ); - break; + templateString: dojo.cache("dijit", "templates/Tree.html", "<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdojoAttachEvent=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" dojoAttachPoint=\"indentDetector\"></div>\n</div>\n"), - default: // "LOADED" - // data is already loaded; just expand node - def = (node._expandNodeDeferred = node.expand()); + // persist: Boolean + // Enables/disables use of cookies for state saving. + persist: true, - this.onOpen(node.item, node); + // autoExpand: Boolean + // Fully expand the tree on load. Overrides `persist`. + autoExpand: false, - if(item){ - this._state(item, true); - this._saveState(); - } - } + // dndController: [protected] String + // Class name to use as as the dnd controller. Specifying this class enables DnD. + // Generally you should specify this as "dijit.tree.dndSource". + // Default of "dijit.tree._dndSelector" handles selection only (no actual DnD). + dndController: "dijit.tree._dndSelector", - return def; // dojo.Deferred + // parameters to pull off of the tree and pass on to the dndController as its params + dndParams: ["onDndDrop","itemCreator","onDndCancel","checkAcceptance", "checkItemAcceptance", "dragThreshold", "betweenThreshold"], + + //declare the above items so they can be pulled from the tree's markup + + // onDndDrop: [protected] Function + // Parameter to dndController, see `dijit.tree.dndSource.onDndDrop`. + // Generally this doesn't need to be set. + onDndDrop: null, + + /*===== + itemCreator: function(nodes, target, source){ + // summary: + // Returns objects passed to `Tree.model.newItem()` based on DnD nodes + // dropped onto the tree. Developer must override this method to enable + // dropping from external sources onto this Tree, unless the Tree.model's items + // happen to look like {id: 123, name: "Apple" } with no other attributes. + // description: + // For each node in nodes[], which came from source, create a hash of name/value + // pairs to be passed to Tree.model.newItem(). Returns array of those hashes. + // nodes: DomNode[] + // The DOMNodes dragged from the source container + // target: DomNode + // The target TreeNode.rowNode + // source: dojo.dnd.Source + // The source container the nodes were dragged from, perhaps another Tree or a plain dojo.dnd.Source + // returns: Object[] + // Array of name/value hashes for each new item to be added to the Tree, like: + // | [ + // | { id: 123, label: "apple", foo: "bar" }, + // | { id: 456, label: "pear", zaz: "bam" } + // | ] + // tags: + // extension + return [{}]; }, + =====*/ + itemCreator: null, - ////////////////// Miscellaneous functions //////////////// + // onDndCancel: [protected] Function + // Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`. + // Generally this doesn't need to be set. + onDndCancel: null, - focusNode: function(/* _tree.Node */ node){ +/*===== + checkAcceptance: function(source, nodes){ // summary: - // Focus on the specified node (which must be visible) + // Checks if the Tree itself can accept nodes from this source + // source: dijit.tree._dndSource + // The source which provides items + // nodes: DOMNode[] + // Array of DOM nodes corresponding to nodes being dropped, dijitTreeRow nodes if + // source is a dijit.Tree. // tags: - // protected + // extension + return true; // Boolean + }, +=====*/ + checkAcceptance: null, + +/*===== + checkItemAcceptance: function(target, source, position){ + // summary: + // Stub function to be overridden if one wants to check for the ability to drop at the node/item level + // description: + // In the base case, this is called to check if target can become a child of source. + // When betweenThreshold is set, position="before" or "after" means that we + // are asking if the source node can be dropped before/after the target node. + // target: DOMNode + // The dijitTreeRoot DOM node inside of the TreeNode that we are dropping on to + // Use dijit.getEnclosingWidget(target) to get the TreeNode. + // source: dijit.tree.dndSource + // The (set of) nodes we are dropping + // position: String + // "over", "before", or "after" + // tags: + // extension + return true; // Boolean + }, +=====*/ + checkItemAcceptance: null, + + // dragThreshold: Integer + // Number of pixels mouse moves before it's considered the start of a drag operation + dragThreshold: 5, + + // betweenThreshold: Integer + // Set to a positive value to allow drag and drop "between" nodes. + // + // If during DnD mouse is over a (target) node but less than betweenThreshold + // pixels from the bottom edge, dropping the the dragged node will make it + // the next sibling of the target node, rather than the child. + // + // Similarly, if mouse is over a target node but less that betweenThreshold + // pixels from the top edge, dropping the dragged node will make it + // the target node's previous sibling rather than the target node's child. + betweenThreshold: 0, + + // _nodePixelIndent: Integer + // Number of pixels to indent tree nodes (relative to parent node). + // Default is 19 but can be overridden by setting CSS class dijitTreeIndent + // and calling resize() or startup() on tree after it's in the DOM. + _nodePixelIndent: 19, - // set focus so that the label will be voiced using screen readers - dijit.focus(node.labelNode); + _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 || {})]); }, - _selectNode: function(/*_tree.Node*/ node){ - // summary: - // Mark specified node as select, and unmark currently selected node. - // tags: - // protected + postMixInProperties: function(){ + this.tree = this; - if(this.selectedNode && !this.selectedNode._destroyed){ - this.selectedNode.setSelected(false); - } - if(node){ - node.setSelected(true); + if(this.autoExpand){ + // There's little point in saving opened/closed state of nodes for a Tree + // that initially opens all it's nodes. + this.persist = false; } - this.selectedNode = node; - }, - - _onNodeFocus: function(/*dijit._Widget*/ node){ - // summary: - // Called when a TreeNode gets focus, either by user clicking - // it, or programatically by arrow key handling code. - // description: - // It marks that the current node is the selected one, and the previously - // selected node no longer is. - if(node && node != this.lastFocused){ - if(this.lastFocused && !this.lastFocused._destroyed){ - // mark that the previously focsable node is no longer focusable - this.lastFocused.setFocusable(false); - } + this._itemNodesMap={}; - // mark that the new node is the currently selected one - node.setFocusable(true); - this.lastFocused = node; + if(!this.cookieName){ + this.cookieName = this.id + "SaveStateCookie"; } - }, - _onNodeMouseEnter: function(/*dijit._Widget*/ node){ - // summary: - // Called when mouse is over a node (onmouseenter event), - // this is monitored by the DND code - }, + this._loadDeferred = new dojo.Deferred(); - _onNodeMouseLeave: function(/*dijit._Widget*/ node){ - // summary: - // Called when mouse leaves a node (onmouseleave event), - // this is monitored by the DND code + this.inherited(arguments); }, - //////////////// Events from the model ////////////////////////// - - _onItemChange: function(/*Item*/ item){ - // summary: - // Processes notification of a change to an item's scalar values like label - var model = this.model, - identity = model.getIdentity(item), - nodes = this._itemNodesMap[identity]; + postCreate: function(){ + this._initState(); - if(nodes){ - var label = this.getLabel(item), - tooltip = this.getTooltip(item); - dojo.forEach(nodes, function(node){ - node.set({ - item: item, // theoretically could be new JS Object representing same item - label: label, - tooltip: tooltip - }); - node._updateItemClasses(item); - }); + // Create glue between store and Tree, if not specified directly by user + if(!this.model){ + this._store2model(); } - }, - _onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){ - // summary: - // Processes notification of a change to an item's children - var model = this.model, - identity = model.getIdentity(parent), - parentNodes = this._itemNodesMap[identity]; + // monitor changes to items + this.connect(this.model, "onChange", "_onItemChange"); + this.connect(this.model, "onChildrenChange", "_onItemChildrenChange"); + this.connect(this.model, "onDelete", "_onItemDelete"); - if(parentNodes){ - dojo.forEach(parentNodes,function(parentNode){ - parentNode.setChildItems(newChildrenList); - }); - } - }, + this._load(); - _onItemDelete: function(/*Item*/ item){ - // summary: - // Processes notification of a deletion of an item - var model = this.model, - identity = model.getIdentity(item), - nodes = this._itemNodesMap[identity]; + this.inherited(arguments); - if(nodes){ - dojo.forEach(nodes,function(node){ - var parent = node.getParent(); - if(parent){ - // if node has not already been orphaned from a _onSetItem(parent, "children", ..) call... - parent.removeChild(node); + 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]]; } - node.destroyRecursive(); - }); - delete this._itemNodesMap[identity]; - } - }, - - /////////////// Miscellaneous funcs - - _initState: function(){ - // summary: - // 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); } + this.dndController = new this.dndController(this, params); } }, - _state: function(item,expanded){ - // summary: - // Query or set expanded state for an item, - if(!this.persist){ - return false; - } - var id=this.model.getIdentity(item); - if(arguments.length === 1){ - return this._openedItemIds[id]; - } - if(expanded){ - this._openedItemIds[id] = true; - }else{ - delete this._openedItemIds[id]; - } - }, - _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(","), {expires:365}); - }, - destroy: function(){ - if(this._curSearch){ - clearTimeout(this._curSearch.timer); - delete this._curSearch; - } - if(this.rootNode){ - this.rootNode.destroyRecursive(); - } - if(this.dndController && !dojo.isString(this.dndController)){ - this.dndController.destroy(); - } - this.rootNode = null; - this.inherited(arguments); - }, + _store2model: function(){ + // summary: + // User specified a store&query rather than model, so create model from store/query + this._v10Compat = true; + dojo.deprecated("Tree: from version 2.0, should specify a model object rather than a store/query"); - destroyRecursive: function(){ - // A tree is treated as a leaf, not as a node with children (like a grid), - // but defining destroyRecursive for back-compat. - this.destroy(); - }, + var modelParams = { + id: this.id + "_ForestStoreModel", + store: this.store, + query: this.query, + childrenAttrs: this.childrenAttr + }; - resize: function(changeSize){ - if(changeSize){ - dojo.marginBox(this.domNode, changeSize); - dojo.style(this.domNode, "overflow", "auto"); // for scrollbars + // Only override the model's mayHaveChildren() method if the user has specified an override + if(this.params.mayHaveChildren){ + modelParams.mayHaveChildren = dojo.hitch(this, "mayHaveChildren"); } - // The only JS sizing involved w/tree is the indentation, which is specified - // in CSS and read in through this dummy indentDetector node (tree must be - // visible and attached to the DOM to read this) - this._nodePixelIndent = dojo.marginBox(this.tree.indentDetector).w; - - if(this.tree.rootNode){ - // If tree has already loaded, then reset indent for all the nodes - this.tree.rootNode.set('indent', this.showRoot ? 0 : -1); + if(this.params.getItemChildren){ + modelParams.getChildren = dojo.hitch(this, function(item, onComplete, onError){ + this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError); + }); } + this.model = new dijit.tree.ForestStoreModel(modelParams); + + // For backwards compatibility, the visibility of the root node is controlled by + // whether or not the user has specified a label + this.showRoot = Boolean(this.label); }, - _createTreeNode: function(/*Object*/ args){ + onLoad: function(){ // summary: - // creates a TreeNode + // Called when tree finishes loading and expanding. // description: - // Developers can override this method to define their own TreeNode class; - // However it will probably be removed in a future release in favor of a way - // of just specifying a widget for the label, rather than one that contains - // the children too. - return new dijit._TreeNode(args); - } -}); - -// For back-compat. TODO: remove in 2.0 - - + // If persist == true the loading may encompass many levels of fetches + // from the data store, each asynchronous. Waits for all to finish. + // tags: + // callback + }, -} + _load: function(){ + // summary: + // Initial load of the tree. + // Load root node (possibly hidden) and it's children. + this.model.getRoot( + dojo.hitch(this, function(item){ + var rn = (this.rootNode = this.tree._createTreeNode({ + item: item, + tree: this, + isExpandable: true, + label: this.label || this.getLabel(item), + indent: this.showRoot ? 0 : -1 + })); + if(!this.showRoot){ + rn.rowNode.style.display="none"; + // if root is not visible, move tree role to the invisible + // root node's containerNode, see #12135 + dijit.setWaiRole(this.domNode, 'presentation'); + + dijit.setWaiRole(rn.labelNode, 'presentation'); + dijit.setWaiRole(rn.containerNode, 'tree'); + } + this.domNode.appendChild(rn.domNode); + var identity = this.model.getIdentity(item); + if(this._itemNodesMap[identity]){ + this._itemNodesMap[identity].push(rn); + }else{ + this._itemNodesMap[identity] = [rn]; + } -if(!dojo._hasResource["dojo.dnd.Container"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.dnd.Container"] = true; -dojo.provide("dojo.dnd.Container"); + rn._updateLayout(); // sets "dijitTreeIsRoot" CSS classname + // load top level children and then fire onLoad() event + this._expandNode(rn).addCallback(dojo.hitch(this, function(){ + this._loadDeferred.callback(true); + this.onLoad(); + })); + }), + function(err){ + console.error(this, ": error loading root: ", err); + } + ); + }, + getNodesByItem: function(/*dojo.data.Item or id*/ item){ + // summary: + // Returns all tree nodes that refer to an item + // returns: + // Array of tree nodes that refer to passed item + if(!item){ return []; } + var identity = dojo.isString(item) ? item : this.model.getIdentity(item); + // return a copy so widget don't get messed up by changes to returned array + return [].concat(this._itemNodesMap[identity]); + }, -/* - Container states: - "" - normal state - "Over" - mouse over a container - Container item states: - "" - normal state - "Over" - mouse over a container item -*/ + _setSelectedItemAttr: function(/*dojo.data.Item or id*/ item){ + this.set('selectedItems', [item]); + }, -/*===== -dojo.declare("dojo.dnd.__ContainerArgs", [], { - creator: function(){ + _setSelectedItemsAttr: function(/*dojo.data.Items or ids*/ items){ // summary: - // a creator function, which takes a data item, and returns an object like that: - // {node: newNode, data: usedData, type: arrayOfStrings} + // Select tree nodes related to passed items. + // WARNING: if model use multi-parented items or desired tree node isn't already loaded + // behavior is undefined. Use set('paths', ...) instead. + var tree = this; + this._loadDeferred.addCallback( dojo.hitch(this, function(){ + var identities = dojo.map(items, function(item){ + return (!item || dojo.isString(item)) ? item : tree.model.getIdentity(item); + }); + var nodes = []; + dojo.forEach(identities, function(id){ + nodes = nodes.concat(tree._itemNodesMap[id] || []); + }); + this.set('selectedNodes', nodes); + })); }, - // skipForm: Boolean - // don't start the drag operation, if clicked on form elements - skipForm: false, - - // dropParent: Node||String - // node or node's id to use as the parent node for dropped items - // (must be underneath the 'node' parameter in the DOM) - dropParent: null, - - // _skipStartup: Boolean - // skip startup(), which collects children, for deferred initialization - // (this is used in the markup mode) - _skipStartup: false -}); - -dojo.dnd.Item = function(){ - // summary: - // Represents (one of) the source node(s) being dragged. - // Contains (at least) the "type" and "data" attributes. - // type: String[] - // Type(s) of this item, by default this is ["text"] - // data: Object - // Logical representation of the object being dragged. - // If the drag object's type is "text" then data is a String, - // if it's another type then data could be a different Object, - // perhaps a name/value hash. - - this.type = type; - this.data = data; -} -=====*/ - -dojo.declare("dojo.dnd.Container", null, { - // summary: - // a Container object, which knows when mouse hovers over it, - // and over which element it hovers - - // object attributes (for markup) - skipForm: false, - - /*===== - // current: DomNode - // The DOM node the mouse is currently hovered over - current: null, - - // map: Hash<String, dojo.dnd.Item> - // Map from an item's id (which is also the DOMNode's id) to - // the dojo.dnd.Item itself. - map: {}, - =====*/ + _setPathAttr: function(/*Item[] || String[]*/ path){ + // summary: + // Singular variant of _setPathsAttr + if(path.length) { + return this.set("paths", [path]); + } else { + //Empty list is interpreted as "select nothing" + return this.set("paths", []); + } + }, - constructor: function(node, params){ + _setPathsAttr: function(/*Item[][] || String[][]*/ paths){ // summary: - // a constructor of the Container - // node: Node - // node or node's id to build the container on - // params: dojo.dnd.__ContainerArgs - // a dictionary of parameters - this.node = dojo.byId(node); - if(!params){ params = {}; } - this.creator = params.creator || null; - this.skipForm = params.skipForm; - this.parent = params.dropParent && dojo.byId(params.dropParent); - - // class-specific variables - this.map = {}; - this.current = null; + // Select the tree nodes identified by passed paths. + // paths: + // Array of arrays of items or item id's + // returns: + // Deferred to indicate when the set is complete + var tree = this; - // states - this.containerState = ""; - dojo.addClass(this.node, "dojoDndContainer"); + // We may need to wait for some nodes to expand, so setting + // each path will involve a Deferred. We bring those deferreds + // together witha DeferredList. + return new dojo.DeferredList(dojo.map(paths, function(path){ + var d = new dojo.Deferred(); + + // normalize path to use identity + path = dojo.map(path, function(item){ + return dojo.isString(item) ? item : tree.model.getIdentity(item); + }); + + if(path.length){ + // Wait for the tree to load, if it hasn't already. + tree._loadDeferred.addCallback(function(){ selectPath(path, [tree.rootNode], d); }); + }else{ + d.errback("Empty path"); + } + return d; + })).addCallback(setNodes); + + function selectPath(path, nodes, def){ + // Traverse path; the next path component should be among "nodes". + var nextPath = path.shift(); + var nextNode = dojo.filter(nodes, function(node){ + return node.getIdentity() == nextPath; + })[0]; + if(!!nextNode){ + if(path.length){ + tree._expandNode(nextNode).addCallback(function(){ selectPath(path, nextNode.getChildren(), def); }); + }else{ + //Successfully reached the end of this path + def.callback(nextNode); + } + } else { + def.errback("Could not expand path at " + nextPath); + } + } - // mark up children - if(!(params && params._skipStartup)){ - this.startup(); + function setNodes(newNodes){ + //After all expansion is finished, set the selection to + //the set of nodes successfully found. + tree.set("selectedNodes", dojo.map( + dojo.filter(newNodes,function(x){return x[0];}), + function(x){return x[1];})); } + }, - // 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", this, "onSelectStart"), - dojo.connect(this.node, "onselectstart", this, "onSelectStart") - ]; + _setSelectedNodeAttr: function(node){ + this.set('selectedNodes', [node]); }, - - // object attributes (for markup) - creator: function(){ - // summary: - // creator function, dummy at the moment + _setSelectedNodesAttr: function(nodes){ + this._loadDeferred.addCallback( dojo.hitch(this, function(){ + this.dndController.setSelection(nodes); + })); }, - - // abstract access to the map - getItem: function(/*String*/ key){ + + + ////////////// Data store related functions ////////////////////// + // These just get passed to the model; they are here for back-compat + + mayHaveChildren: function(/*dojo.data.Item*/ item){ // summary: - // returns a data item by its key (id) - return this.map[key]; // dojo.dnd.Item + // Deprecated. This should be specified on the model itself. + // + // 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 actually + // has children until user clicks the expando node) + // tags: + // deprecated }, - setItem: function(/*String*/ key, /*dojo.dnd.Item*/ data){ + + getItemChildren: function(/*dojo.data.Item*/ parentItem, /*function(items)*/ onComplete){ // summary: - // associates a data item with its key (id) - this.map[key] = data; + // Deprecated. This should be specified on the model itself. + // + // Overridable function that return array of child items of given parent item, + // or if parentItem==null then return top items in tree + // tags: + // deprecated }, - delItem: function(/*String*/ key){ + + /////////////////////////////////////////////////////// + // Functions for converting an item to a TreeNode + getLabel: function(/*dojo.data.Item*/ item){ // summary: - // removes a data item from the map by its key (id) - delete this.map[key]; + // Overridable function to get the label for a tree node (given the item) + // tags: + // extension + return this.model.getLabel(item); // String }, - forInItems: function(/*Function*/ f, /*Object?*/ o){ + + getIconClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ // summary: - // iterates over a data map skipping members that - // are present in the empty object (IE and/or 3rd-party libraries). - o = o || dojo.global; - var m = this.map, e = dojo.dnd._empty; - for(var i in m){ - if(i in e){ continue; } - f.call(o, m[i], i, this); - } - return o; // Object + // Overridable function to return CSS class name to display icon + // tags: + // extension + return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "dijitLeaf" }, - clearItems: function(){ + + getLabelClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ // summary: - // removes all data items from the map - this.map = {}; + // Overridable function to return CSS class name to display label + // tags: + // extension }, - - // methods - getAllNodes: function(){ + + getRowClass: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ // summary: - // returns a list (an array) of all valid child nodes - return dojo.query("> .dojoDndItem", this.parent); // NodeList + // Overridable function to return CSS class name to display row + // tags: + // extension }, - sync: function(){ + + getIconStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ // summary: - // sync up the node list with the data map - var map = {}; - this.getAllNodes().forEach(function(node){ - if(node.id){ - var item = this.getItem(node.id); - if(item){ - map[node.id] = item; - return; - } - }else{ - node.id = dojo.dnd.getUniqueId(); - } - var type = node.getAttribute("dndType"), - data = node.getAttribute("dndData"); - map[node.id] = { - data: data || node.innerHTML, - type: type ? type.split(/\s*,\s*/) : ["text"] - }; - }, this); - this.map = map; - return this; // self + // Overridable function to return CSS styles to display icon + // returns: + // Object suitable for input to dojo.style() like {backgroundImage: "url(...)"} + // tags: + // extension + }, + + getLabelStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ + // summary: + // Overridable function to return CSS styles to display label + // returns: + // Object suitable for input to dojo.style() like {color: "red", background: "green"} + // tags: + // extension }, - insertNodes: function(data, before, anchor){ + + getRowStyle: function(/*dojo.data.Item*/ item, /*Boolean*/ opened){ // summary: - // inserts an array of new nodes before/after an anchor node - // data: Array - // a list of data items, which should be processed by the creator function - // before: Boolean - // insert before the anchor, if true, and after the anchor otherwise - // anchor: Node - // the anchor node to be used as a point of insertion - if(!this.parent.firstChild){ - anchor = null; - }else if(before){ - if(!anchor){ - anchor = this.parent.firstChild; + // Overridable function to return CSS styles to display row + // returns: + // Object suitable for input to dojo.style() like {background-color: "#bbb"} + // tags: + // extension + }, + + getTooltip: function(/*dojo.data.Item*/ item){ + // summary: + // Overridable function to get the tooltip for a tree node (given the item) + // tags: + // extension + return ""; // String + }, + + /////////// Keyboard and Mouse handlers //////////////////// + + _onKeyPress: function(/*Event*/ e){ + // summary: + // Translates keypress events into commands for the controller + if(e.altKey){ return; } + var dk = dojo.keys; + var treeNode = dijit.getEnclosingWidget(e.target); + if(!treeNode){ return; } + + var key = e.charOrCode; + if(typeof key == "string" && key != " "){ // handle printables (letter navigation) + // Check for key navigation. + if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){ + this._onLetterKeyNav( { node: treeNode, key: key.toLowerCase() } ); + dojo.stopEvent(e); } - }else{ - if(anchor){ - anchor = anchor.nextSibling; + }else{ // handle non-printables (arrow keys) + // clear record of recent printables (being saved for multi-char letter navigation), + // because "a", down-arrow, "b" shouldn't search for "ab" + if(this._curSearch){ + clearTimeout(this._curSearch.timer); + delete this._curSearch; } - } - if(anchor){ - for(var i = 0; i < data.length; ++i){ - var t = this._normalizedCreator(data[i]); - this.setItem(t.node.id, {data: t.data, type: t.type}); - this.parent.insertBefore(t.node, anchor); + + var map = this._keyHandlerMap; + if(!map){ + // setup table mapping keys to events + map = {}; + map[dk.ENTER]="_onEnterKey"; + //On WebKit based browsers, the combination ctrl-enter + //does not get passed through. To allow accessible + //multi-select on those browsers, the space key is + //also used for selection. + map[dk.SPACE]= map[" "] = "_onEnterKey"; + map[this.isLeftToRight() ? dk.LEFT_ARROW : dk.RIGHT_ARROW]="_onLeftArrow"; + map[this.isLeftToRight() ? dk.RIGHT_ARROW : dk.LEFT_ARROW]="_onRightArrow"; + map[dk.UP_ARROW]="_onUpArrow"; + map[dk.DOWN_ARROW]="_onDownArrow"; + map[dk.HOME]="_onHomeKey"; + map[dk.END]="_onEndKey"; + this._keyHandlerMap = map; } - }else{ - for(var i = 0; i < data.length; ++i){ - var t = this._normalizedCreator(data[i]); - this.setItem(t.node.id, {data: t.data, type: t.type}); - this.parent.appendChild(t.node); + if(this._keyHandlerMap[key]){ + this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } ); + dojo.stopEvent(e); } } - return this; // self - }, - destroy: function(){ - // summary: - // prepares this object to be garbage-collected - dojo.forEach(this.events, dojo.disconnect); - this.clearItems(); - this.node = this.parent = this.current = null; }, - // markup methods - markupFactory: function(params, node){ - params._skipStartup = true; - return new dojo.dnd.Container(node, params); + _onEnterKey: function(/*Object*/ message){ + this._publish("execute", { item: message.item, node: message.node } ); + this.dndController.userSelect(message.node, dojo.isCopyKey( message.evt ), message.evt.shiftKey); + this.onClick(message.item, message.node, message.evt); }, - startup: function(){ + + _onDownArrow: function(/*Object*/ message){ // summary: - // collects valid child items and populate the map - - // set up the real parent node - if(!this.parent){ - // use the standard algorithm, if not assigned - this.parent = this.node; - if(this.parent.tagName.toLowerCase() == "table"){ - var c = this.parent.getElementsByTagName("tbody"); - if(c && c.length){ this.parent = c[0]; } - } + // down arrow pressed; get next visible node, set focus there + var node = this._getNextNode(message.node); + if(node && node.isTreeNode){ + this.focusNode(node); } - this.defaultCreator = dojo.dnd._defaultCreator(this.parent); - - // process specially marked children - this.sync(); }, - // mouse events - onMouseOver: function(e){ + _onUpArrow: function(/*Object*/ message){ // 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; + // Up arrow pressed; move to previous visible node + + var node = message.node; + + // if younger siblings + var previousSibling = node.getPreviousSibling(); + if(previousSibling){ + node = previousSibling; + // if the previous node is expanded, dive in deep + while(node.isExpandable && node.isExpanded && node.hasChildren()){ + // move to the last child + var children = node.getChildren(); + node = 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 = node.getParent(); + if(!(!this.showRoot && parent === this.rootNode)){ + node = parent; } } - if(!n){ - this._changeState("Container", "Over"); - this.onOverEvent(); + + if(node && node.isTreeNode){ + this.focusNode(node); } - 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){ + + _onRightArrow: function(/*Object*/ message){ // 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; + // Right arrow pressed; go to child node + var node = message.node; + + // if not expanded, expand, else move to 1st child + if(node.isExpandable && !node.isExpanded){ + this._expandNode(node); + }else if(node.hasChildren()){ + node = node.getChildren()[0]; + if(node && node.isTreeNode){ + this.focusNode(node); } } - if(this.current){ - this._removeItemClass(this.current, "Over"); - this.current = null; - } - this._changeState("Container", ""); - this.onOutEvent(); }, - onSelectStart: function(e){ + + _onLeftArrow: function(/*Object*/ message){ // summary: - // event processor for onselectevent and ondragevent - // e: Event - // mouse event - if(!this.skipForm || !dojo.dnd.isFormElement(e)){ - dojo.stopEvent(e); + // Left arrow pressed. + // If not collapsed, collapse, else move to parent. + + var node = message.node; + + if(node.isExpandable && node.isExpanded){ + this._collapseNode(node); + }else{ + var parent = node.getParent(); + if(parent && parent.isTreeNode && !(!this.showRoot && parent === this.rootNode)){ + this.focusNode(parent); + } } }, - - // utilities - onOverEvent: function(){ - // summary: - // this function is called once, when mouse is over our container - }, - onOutEvent: function(){ - // summary: - // this function is called once, when mouse is out of our container - }, - _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; - }, - _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); - }, - _getChildByEvent: function(e){ + + _onHomeKey: function(){ // summary: - // gets a child, which is under the mouse at the moment, or null - // e: Event - // a mouse event - var node = e.target; + // Home key pressed; get first visible node, and set focus there + var node = this._getRootOrFirstNode(); if(node){ - for(var parent = node.parentNode; parent; node = parent, parent = node.parentNode){ - if(parent == this.parent && dojo.hasClass(node, "dojoDndItem")){ return node; } - } + this.focusNode(node); } - return null; }, - _normalizedCreator: function(/*dojo.dnd.Item*/ item, /*String*/ hint){ + + _onEndKey: function(/*Object*/ message){ // summary: - // adds all necessary data to the output of the user-supplied creator function - var t = (this.creator || this.defaultCreator).call(this, item, hint); - if(!dojo.isArray(t.type)){ t.type = ["text"]; } - if(!t.node.id){ t.node.id = dojo.dnd.getUniqueId(); } - dojo.addClass(t.node, "dojoDndItem"); - return t; - } -}); + // End key pressed; go to last visible node. -dojo.dnd._createNode = function(tag){ - // summary: - // returns a function, which creates an element of given tag - // (SPAN by default) and sets its innerHTML to given text - // tag: String - // a tag name or empty for SPAN - if(!tag){ return dojo.dnd._createSpan; } - return function(text){ // Function - return dojo.create(tag, {innerHTML: text}); // Node - }; -}; + var node = this.rootNode; + while(node.isExpanded){ + var c = node.getChildren(); + node = c[c.length - 1]; + } -dojo.dnd._createTrTd = function(text){ - // summary: - // creates a TR/TD structure with given text as an innerHTML of TD - // text: String - // a text for TD - var tr = dojo.create("tr"); - dojo.create("td", {innerHTML: text}, tr); - return tr; // Node -}; + if(node && node.isTreeNode){ + this.focusNode(node); + } + }, -dojo.dnd._createSpan = function(text){ - // summary: - // creates a SPAN element with given text as its innerHTML - // text: String - // a text for SPAN - return dojo.create("span", {innerHTML: text}); // Node -}; + // multiCharSearchDuration: Number + // If multiple characters are typed where each keystroke happens within + // multiCharSearchDuration of the previous keystroke, + // search for nodes matching all the keystrokes. + // + // For example, typing "ab" will search for entries starting with + // "ab" unless the delay between "a" and "b" is greater than multiCharSearchDuration. + multiCharSearchDuration: 250, -// dojo.dnd._defaultCreatorNodes: Object -// a dictionary that maps container tag names to child tag names -dojo.dnd._defaultCreatorNodes = {ul: "li", ol: "li", div: "div", p: "div"}; + _onLetterKeyNav: function(message){ + // summary: + // Called when user presses a prinatable key; search for node starting with recently typed letters. + // message: Object + // Like { node: TreeNode, key: 'a' } where key is the key the user pressed. -dojo.dnd._defaultCreator = function(node){ - // summary: - // takes a parent node, and returns an appropriate creator function - // node: Node - // a container node - var tag = node.tagName.toLowerCase(); - var c = tag == "tbody" || tag == "thead" ? dojo.dnd._createTrTd : - dojo.dnd._createNode(dojo.dnd._defaultCreatorNodes[tag]); - return function(item, hint){ // Function - var isObj = item && dojo.isObject(item), data, type, n; - if(isObj && item.tagName && item.nodeType && item.getAttribute){ - // process a DOM node - data = item.getAttribute("dndData") || item.innerHTML; - type = item.getAttribute("dndType"); - type = type ? type.split(/\s*,\s*/) : ["text"]; - n = item; // this node is going to be moved rather than copied + // Branch depending on whether this key starts a new search, or modifies an existing search + var cs = this._curSearch; + if(cs){ + // We are continuing a search. Ex: user has pressed 'a', and now has pressed + // 'b', so we want to search for nodes starting w/"ab". + cs.pattern = cs.pattern + message.key; + clearTimeout(cs.timer); }else{ - // process a DnD item object or a string - data = (isObj && item.data) ? item.data : item; - type = (isObj && item.type) ? item.type : ["text"]; - n = (hint == "avatar" ? dojo.dnd._createSpan : c)(String(data)); + // We are starting a new search + cs = this._curSearch = { + pattern: message.key, + startNode: message.node + }; } - if(!n.id){ - n.id = dojo.dnd.getUniqueId(); + + // set/reset timer to forget recent keystrokes + var self = this; + cs.timer = setTimeout(function(){ + delete self._curSearch; + }, this.multiCharSearchDuration); + + // Navigate to TreeNode matching keystrokes [entered so far]. + var node = cs.startNode; + do{ + node = this._getNextNode(node); + //check for last node, jump to first node if necessary + if(!node){ + node = this._getRootOrFirstNode(); + } + }while(node !== cs.startNode && (node.label.toLowerCase().substr(0, cs.pattern.length) != cs.pattern)); + if(node && node.isTreeNode){ + // no need to set focus if back where we started + if(node !== cs.startNode){ + this.focusNode(node); + } } - return {node: n, data: data, type: type}; - }; -}; + }, -} + isExpandoNode: function(node, widget){ + // summary: + // check whether a dom node is the expandoNode for a particular TreeNode widget + return dojo.isDescendant(node, widget.expandoNode); + }, + _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){ + // summary: + // Translates click events into commands for the controller to process -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"); + var domElement = e.target, + isExpandoClick = this.isExpandoNode(domElement, nodeWidget); + if( (this.openOnClick && nodeWidget.isExpandable) || isExpandoClick ){ + // expando node was clicked, or label of a folder node was clicked; open it + if(nodeWidget.isExpandable){ + this._onExpandoClick({node:nodeWidget}); + } + }else{ + this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } ); + this.onClick(nodeWidget.item, nodeWidget, e); + this.focusNode(nodeWidget); + } + dojo.stopEvent(e); + }, + _onDblClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){ + // summary: + // Translates double-click events into commands for the controller to process + var domElement = e.target, + isExpandoClick = (domElement == nodeWidget.expandoNode || domElement == nodeWidget.expandoNodeText); -dojo.declare("dijit.tree._dndContainer", - null, - { + if( (this.openOnDblClick && nodeWidget.isExpandable) ||isExpandoClick ){ + // expando node was clicked, or label of a folder node was clicked; open it + if(nodeWidget.isExpandable){ + this._onExpandoClick({node:nodeWidget}); + } + }else{ + this._publish("execute", { item: nodeWidget.item, node: nodeWidget, evt: e } ); + this.onDblClick(nodeWidget.item, nodeWidget, e); + this.focusNode(nodeWidget); + } + dojo.stopEvent(e); + }, + _onExpandoClick: function(/*Object*/ message){ // summary: - // This is a base class for `dijit.tree._dndSelector`, and isn't meant to be used directly. - // It's modeled after `dojo.dnd.Container`. - // tags: - // protected + // User clicked the +/- icon; expand or collapse my children. + var node = message.node; - /*===== - // current: DomNode - // The currently hovered TreeNode.rowNode (which is the DOM node - // associated w/a given node in the tree, excluding it's descendants) - current: null, - =====*/ + // If we are collapsing, we might be hiding the currently focused node. + // Also, clicking the expando node might have erased focus from the current node. + // For simplicity's sake just focus on the node with the expando. + this.focusNode(node); - constructor: function(tree, params){ - // summary: - // A constructor of the Container - // tree: Node - // Node or node's id to build the container on - // params: dijit.tree.__SourceArgs - // A dict of parameters, which gets mixed into the object - // tags: - // private - this.tree = tree; - this.node = tree.domNode; // TODO: rename; it's not a TreeNode but the whole Tree - dojo.mixin(this, params); + if(node.isExpanded){ + this._collapseNode(node); + }else{ + this._expandNode(node); + } + }, - // class-specific variables - this.map = {}; - this.current = null; // current TreeNode's DOM node + onClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){ + // summary: + // Callback when a tree node is clicked + // tags: + // callback + }, + onDblClick: function(/* dojo.data */ item, /*TreeNode*/ node, /*Event*/ evt){ + // summary: + // Callback when a tree node is double-clicked + // tags: + // callback + }, + onOpen: function(/* dojo.data */ item, /*TreeNode*/ node){ + // summary: + // Callback when a node is opened + // tags: + // callback + }, + onClose: function(/* dojo.data */ item, /*TreeNode*/ node){ + // summary: + // Callback when a node is closed + // tags: + // callback + }, + + _getNextNode: function(node){ + // summary: + // Get next visible node + + if(node.isExpandable && node.isExpanded && node.hasChildren()){ + // if this is an expanded node, get the first child + return node.getChildren()[0]; // _TreeNode + }else{ + // find a parent node with a sibling + while(node && node.isTreeNode){ + var returnNode = node.getNextSibling(); + if(returnNode){ + return returnNode; // _TreeNode + } + node = node.getParent(); + } + return null; + } + }, - // states - this.containerState = ""; - dojo.addClass(this.node, "dojoDndContainer"); + _getRootOrFirstNode: function(){ + // summary: + // Get first visible node + return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0]; + }, - // set up events - this.events = [ - // container level events - dojo.connect(this.node, "onmouseenter", this, "onOverEvent"), - dojo.connect(this.node, "onmouseleave", this, "onOutEvent"), + _collapseNode: function(/*_TreeNode*/ node){ + // summary: + // Called when the user has requested to collapse the node - // switching between TreeNodes - dojo.connect(this.tree, "_onNodeMouseEnter", this, "onMouseOver"), - dojo.connect(this.tree, "_onNodeMouseLeave", this, "onMouseOut"), + if(node._expandNodeDeferred){ + delete node._expandNodeDeferred; + } - // cancel text selection and text dragging - dojo.connect(this.node, "ondragstart", dojo, "stopEvent"), - dojo.connect(this.node, "onselectstart", dojo, "stopEvent") - ]; - }, + if(node.isExpandable){ + if(node.state == "LOADING"){ + // ignore clicks while we are in the process of loading data + return; + } - getItem: function(/*String*/ key){ - // summary: - // Returns the dojo.dnd.Item (representing a dragged node) by it's key (id). - // Called by dojo.dnd.Source.checkAcceptance(). - // tags: - // protected + node.collapse(); + this.onClose(node.item, node); - var node = this.selection[key], - ret = { - data: dijit.getEnclosingWidget(node), - type: ["treeNode"] - }; + if(node.item){ + this._state(node.item,false); + this._saveState(); + } + } + }, - return ret; // dojo.dnd.Item - }, + _expandNode: function(/*_TreeNode*/ node, /*Boolean?*/ recursive){ + // summary: + // Called when the user has requested to expand the node + // recursive: + // Internal flag used when _expandNode() calls itself, don't set. + // returns: + // Deferred that fires when the node is loaded and opened and (if persist=true) all it's descendants + // that were previously opened too - destroy: function(){ - // summary: - // Prepares this object to be garbage-collected + if(node._expandNodeDeferred && !recursive){ + // there's already an expand in progress (or completed), so just return + return node._expandNodeDeferred; // dojo.Deferred + } - dojo.forEach(this.events, dojo.disconnect); - // this.clearItems(); - this.node = this.parent = null; - }, + var model = this.model, + item = node.item, + _this = this; - // mouse events - onMouseOver: function(/*TreeNode*/ widget, /*Event*/ evt){ - // summary: - // Called when mouse is moved over a TreeNode - // tags: - // protected - this.current = widget.rowNode; - this.currentWidget = widget; - }, + switch(node.state){ + case "UNCHECKED": + // need to load all the children, and then expand + node.markProcessing(); - onMouseOut: function(/*TreeNode*/ widget, /*Event*/ evt){ - // summary: - // Called when mouse is moved away from a TreeNode - // tags: - // protected - this.current = null; - this.currentWidget = null; - }, + // Setup deferred to signal when the load and expand are finished. + // Save that deferred in this._expandDeferred as a flag that operation is in progress. + var def = (node._expandNodeDeferred = new dojo.Deferred()); - _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; - }, + // Get the children + model.getChildren( + item, + function(items){ + node.unmarkProcessing(); - _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); - }, + // Display the children and also start expanding any children that were previously expanded + // (if this.persist == true). The returned Deferred will fire when those expansions finish. + var scid = node.setChildItems(items); - _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); - }, + // Call _expandNode() again but this time it will just to do the animation (default branch). + // The returned Deferred will fire when the animation completes. + // TODO: seems like I can avoid recursion and just use a deferred to sequence the events? + var ed = _this._expandNode(node, true); - onOverEvent: function(){ - // summary: - // This function is called once, when mouse is over our container - // tags: - // protected - this._changeState("Container", "Over"); - }, + // After the above two tasks (setChildItems() and recursive _expandNode()) finish, + // signal that I am done. + scid.addCallback(function(){ + ed.addCallback(function(){ + def.callback(); + }) + }); + }, + function(err){ + console.error(_this, ": error loading root children: ", err); + } + ); + break; - onOutEvent: function(){ - // summary: - // This function is called once, when mouse is out of our container - // tags: - // protected - this._changeState("Container", ""); - } -}); + default: // "LOADED" + // data is already loaded; just expand node + def = (node._expandNodeDeferred = node.expand()); -} + this.onOpen(node.item, node); -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"); + if(item){ + this._state(item, true); + this._saveState(); + } + } + return def; // dojo.Deferred + }, + ////////////////// Miscellaneous functions //////////////// -dojo.declare("dijit.tree._dndSelector", - dijit.tree._dndContainer, - { + focusNode: function(/* _tree.Node */ node){ // summary: - // This is a base class for `dijit.tree.dndSource` , and isn't meant to be used directly. - // It's based on `dojo.dnd.Selector`. + // Focus on the specified node (which must be visible) // tags: // protected - /*===== - // selection: Hash<String, DomNode> - // (id, DomNode) map for every TreeNode that's currently selected. - // The DOMNode is the TreeNode.rowNode. - selection: {}, - =====*/ - - constructor: function(tree, params){ - // summary: - // Initialization - // tags: - // private - - 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"), - dojo.connect(this.tree.domNode, "onmousemove", this,"onMouseMove") - ); - }, + // set focus so that the label will be voiced using screen readers + dijit.focus(node.labelNode); + }, - // singular: Boolean - // Allows selection of only one element, if true. - // Tree hasn't been tested in singular=true mode, unclear if it works. - singular: false, + _onNodeFocus: function(/*dijit._Widget*/ node){ + // summary: + // Called when a TreeNode gets focus, either by user clicking + // it, or programatically by arrow key handling code. + // description: + // It marks that the current node is the selected one, and the previously + // selected node no longer is. - // methods + if(node && node != this.lastFocused){ + if(this.lastFocused && !this.lastFocused._destroyed){ + // mark that the previously focsable node is no longer focusable + this.lastFocused.setFocusable(false); + } - getSelectedNodes: function(){ - // summary: - // Returns the set of selected nodes. - // Used by dndSource on the start of a drag. - // tags: - // protected - return this.selection; - }, + // mark that the new node is the currently selected one + node.setFocusable(true); + this.lastFocused = node; + } + }, - selectNone: function(){ - // summary: - // Unselects all items - // tags: - // private + _onNodeMouseEnter: function(/*dijit._Widget*/ node){ + // summary: + // Called when mouse is over a node (onmouseenter event), + // this is monitored by the DND code + }, - return this._removeSelection()._removeAnchor(); // self - }, + _onNodeMouseLeave: function(/*dijit._Widget*/ node){ + // summary: + // Called when mouse leaves a node (onmouseleave event), + // this is monitored by the DND code + }, - destroy: function(){ - // summary: - // Prepares the object to be garbage-collected - this.inherited(arguments); - this.selection = this.anchor = null; - }, + //////////////// Events from the model ////////////////////////// - // mouse events - onMouseDown: function(e){ - // summary: - // Event processor for onmousedown - // e: Event - // mouse event - // tags: - // protected + _onItemChange: function(/*Item*/ item){ + // summary: + // Processes notification of a change to an item's scalar values like label + var model = this.model, + identity = model.getIdentity(item), + nodes = this._itemNodesMap[identity]; - if(!this.current){ return; } + if(nodes){ + var label = this.getLabel(item), + tooltip = this.getTooltip(item); + dojo.forEach(nodes, function(node){ + node.set({ + item: item, // theoretically could be new JS Object representing same item + label: label, + tooltip: tooltip + }); + node._updateItemClasses(item); + }); + } + }, - if(e.button == dojo.mouseButtons.RIGHT){ return; } // ignore right-click + _onItemChildrenChange: function(/*dojo.data.Item*/ parent, /*dojo.data.Item[]*/ newChildrenList){ + // summary: + // Processes notification of a change to an item's children + var model = this.model, + identity = model.getIdentity(parent), + parentNodes = this._itemNodesMap[identity]; - var treeNode = dijit.getEnclosingWidget(this.current), - id = treeNode.id + "-dnd" // so id doesn't conflict w/widget + if(parentNodes){ + dojo.forEach(parentNodes,function(parentNode){ + parentNode.setChildItems(newChildrenList); + }); + } + }, - if(!dojo.hasAttr(this.current, "id")){ - dojo.attr(this.current, "id", id); - } + _onItemDelete: function(/*Item*/ item){ + // summary: + // Processes notification of a deletion of an item + var model = this.model, + identity = model.getIdentity(item), + nodes = this._itemNodesMap[identity]; - if(!this.singular && !dojo.isCopyKey(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.isCopyKey(e)){ - this.selectNone(); - } - }else{ - this.selectNone(); - this.anchor = this.current; - this._addItemClass(this.anchor, "Anchor"); + if(nodes){ + dojo.forEach(nodes,function(node){ + // Remove node from set of selected nodes (if it's selected) + this.dndController.removeTreeNode(node); - this.selection[this.current.id] = this.current; - } - }else{ - if(!this.singular && e.shiftKey){ - if(dojo.isCopyKey(e)){ - //TODO add range to selection - }else{ - //TODO select new range from anchor - } - }else{ - if(dojo.isCopyKey(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{ - if(!(id in this.selection)){ - this.selectNone(); - this.anchor = this.current; - this._addItemClass(this.current, "Anchor"); - this.selection[id] = this.current; - } - } + var parent = node.getParent(); + if(parent){ + // if node has not already been orphaned from a _onSetItem(parent, "children", ..) call... + parent.removeChild(node); } - } + node.destroyRecursive(); + }, this); + delete this._itemNodesMap[identity]; + } + }, - dojo.stopEvent(e); - }, + /////////////// Miscellaneous funcs - onMouseUp: function(e){ - // summary: - // Event processor for onmouseup - // e: Event - // mouse event - // tags: - // protected + _initState: function(){ + // summary: + // 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); + } + } + }, + _state: function(item,expanded){ + // summary: + // Query or set expanded state for an item, + if(!this.persist){ + return false; + } + var id=this.model.getIdentity(item); + if(arguments.length === 1){ + return this._openedItemIds[id]; + } + if(expanded){ + this._openedItemIds[id] = true; + }else{ + delete this._openedItemIds[id]; + } + }, + _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(","), {expires:365}); + }, - // TODO: this code is apparently for handling an edge case when the user is selecting - // multiple nodes and then mousedowns on a node by accident... it lets the user keep the - // current selection by moving the mouse away (or something like that). It doesn't seem - // to work though and requires a lot of plumbing (including this code, the onmousemove - // handler, and the this.simpleSelection attribute. Consider getting rid of all of it. + destroy: function(){ + if(this._curSearch){ + clearTimeout(this._curSearch.timer); + delete this._curSearch; + } + if(this.rootNode){ + this.rootNode.destroyRecursive(); + } + if(this.dndController && !dojo.isString(this.dndController)){ + this.dndController.destroy(); + } + this.rootNode = null; + this.inherited(arguments); + }, - 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; - } - }, - onMouseMove: function(e){ - // summary - // event processor for onmousemove - // e: Event - // mouse event - this.simpleSelection = false; - }, + destroyRecursive: function(){ + // A tree is treated as a leaf, not as a node with children (like a grid), + // but defining destroyRecursive for back-compat. + this.destroy(); + }, - _removeSelection: function(){ - // summary: - // Unselects all items - // tags: - // private - 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 - }, + resize: function(changeSize){ + if(changeSize){ + dojo.marginBox(this.domNode, changeSize); + } - _removeAnchor: function(){ - // summary: - // Removes the Anchor CSS class from a node. - // According to `dojo.dnd.Selector`, anchor means that - // "an item is selected, and is an anchor for a 'shift' selection". - // It's not relevant for Tree at this point, since we don't support multiple selection. - // tags: - // private - if(this.anchor){ - this._removeItemClass(this.anchor, "Anchor"); - this.anchor = null; - } - return this; // self - }, + // The only JS sizing involved w/tree is the indentation, which is specified + // in CSS and read in through this dummy indentDetector node (tree must be + // visible and attached to the DOM to read this) + this._nodePixelIndent = dojo._getMarginSize(this.tree.indentDetector).w; - forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){ - // summary: - // Iterates over selected items; - // see `dojo.dnd.Container.forInItems()` for details - o = o || dojo.global; - for(var id in this.selection){ - console.log("selected item id: " + id); - f.call(o, this.getItem(id), id, this); - } + if(this.tree.rootNode){ + // If tree has already loaded, then reset indent for all the nodes + this.tree.rootNode.set('indent', this.showRoot ? 0 : -1); } + }, + + _createTreeNode: function(/*Object*/ args){ + // summary: + // creates a TreeNode + // description: + // Developers can override this method to define their own TreeNode class; + // However it will probably be removed in a future release in favor of a way + // of just specifying a widget for the label, rather than one that contains + // the children too. + return new dijit._TreeNode(args); + } }); +// For back-compat. TODO: remove in 2.0 + } if(!dojo._hasResource["dojo.dnd.Avatar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. @@ -24319,7 +25280,7 @@ dojo.declare("dojo.dnd.Avatar", null, { var icon = dojo.byId("a11yIcon"); var text = '+'; // assume canDrop && copy if (this.manager.canDropFlag && !this.manager.copy) { - text = '< '; // canDrop && move + text = '< '; // canDrop && move }else if (!this.manager.canDropFlag && !this.manager.copy) { text = "o"; //!canDrop && move }else if(!this.manager.canDropFlag){ @@ -24420,7 +25381,7 @@ dojo.declare("dojo.dnd.Manager", null, { dojo.connect(dojo.body(), "onselectstart", dojo.stopEvent) ]; var c = "dojoDnd" + (copy ? "Copy" : "Move"); - dojo.addClass(dojo.body(), c); + dojo.addClass(dojo.body(), c); }, canDrop: function(flag){ // summary: @@ -24434,8 +25395,7 @@ dojo.declare("dojo.dnd.Manager", null, { stopDrag: function(){ // summary: // stop the DnD in progress - dojo.removeClass(dojo.body(), "dojoDndCopy"); - dojo.removeClass(dojo.body(), "dojoDndMove"); + dojo.removeClass(dojo.body(), ["dojoDndCopy", "dojoDndMove"]); dojo.forEach(this.events, dojo.disconnect); this.events = []; this.avatar.destroy(); @@ -24468,7 +25428,7 @@ dojo.declare("dojo.dnd.Manager", null, { s.left = (e.pageX + this.OFFSET_X) + "px"; s.top = (e.pageY + this.OFFSET_Y) + "px"; var copy = Boolean(this.source.copyState(dojo.isCopyKey(e))); - if(this.copy != copy){ + if(this.copy != copy){ this._setCopyStatus(copy); } } @@ -24502,7 +25462,7 @@ dojo.declare("dojo.dnd.Manager", null, { switch(e.keyCode){ case dojo.keys.CTRL: var copy = Boolean(this.source.copyState(true)); - if(this.copy != copy){ + if(this.copy != copy){ this._setCopyStatus(copy); } break; @@ -24520,7 +25480,7 @@ dojo.declare("dojo.dnd.Manager", null, { // keyboard event if(this.avatar && e.keyCode == dojo.keys.CTRL){ var copy = Boolean(this.source.copyState(false)); - if(this.copy != copy){ + if(this.copy != copy){ this._setCopyStatus(copy); } } @@ -24535,8 +25495,9 @@ dojo.declare("dojo.dnd.Manager", null, { this.copy = copy; this.source._markDndStatus(this.copy); this.updateAvatar(); - dojo.removeClass(dojo.body(), "dojoDnd" + (this.copy ? "Move" : "Copy")); - dojo.addClass(dojo.body(), "dojoDnd" + (this.copy ? "Copy" : "Move")); + dojo.replaceClass(dojo.body(), + "dojoDnd" + (this.copy ? "Copy" : "Move"), + "dojoDnd" + (this.copy ? "Move" : "Copy")); } }); @@ -24694,9 +25655,8 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { // Keeps track of current drop target. var m = dojo.dnd.manager(), - oldTarget = this.targetAnchor, // the DOMNode corresponding to TreeNode mouse was previously over - newTarget = this.current, // DOMNode corresponding to TreeNode mouse is currently over - newTargetWidget = this.currentWidget, // the TreeNode itself + oldTarget = this.targetAnchor, // the TreeNode corresponding to TreeNode mouse was previously over + newTarget = this.current, // TreeNode corresponding to TreeNode mouse is currently over oldDropPosition = this.dropPosition; // the previous drop position (over/before/after) // calculate if user is indicating to drop the dragged node before, after, or over @@ -24705,7 +25665,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { if(newTarget && this.betweenThreshold > 0){ // If mouse is over a new TreeNode, then get new TreeNode's position and size if(!this.targetBox || oldTarget != newTarget){ - this.targetBox = dojo.position(newTarget, true); + this.targetBox = dojo.position(newTarget.rowNode, true); } if((e.pageY - this.targetBox.y) <= this.betweenThreshold){ newDropPosition = "Before"; @@ -24716,23 +25676,23 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { if(newTarget != oldTarget || newDropPosition != oldDropPosition){ if(oldTarget){ - this._removeItemClass(oldTarget, oldDropPosition); + this._removeItemClass(oldTarget.rowNode, oldDropPosition); } if(newTarget){ - this._addItemClass(newTarget, newDropPosition); + this._addItemClass(newTarget.rowNode, newDropPosition); } // Check if it's ok to drop the dragged node on/before/after the target node. if(!newTarget){ m.canDrop(false); - }else if(newTargetWidget == this.tree.rootNode && newDropPosition != "Over"){ + }else if(newTarget == this.tree.rootNode && newDropPosition != "Over"){ // Can't drop before or after tree's root node; the dropped node would just disappear (at least visually) m.canDrop(false); }else if(m.source == this && (newTarget.id in this.selection)){ // Guard against dropping onto yourself (TODO: guard against dropping onto your descendant, #7140) m.canDrop(false); - }else if(this.checkItemAcceptance(newTarget, m.source, newDropPosition.toLowerCase()) - && !this._isParentChildDrop(m.source, newTarget)){ + }else if(this.checkItemAcceptance(newTarget.rowNode, m.source, newDropPosition.toLowerCase()) + && !this._isParentChildDrop(m.source, newTarget.rowNode)){ m.canDrop(true); }else{ m.canDrop(false); @@ -24758,12 +25718,23 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { }else{ if(this.mouseDown && this.isSource && (Math.abs(e.pageX-this._lastX)>=this.dragThreshold || Math.abs(e.pageY-this._lastY)>=this.dragThreshold)){ - var n = this.getSelectedNodes(); - var nodes=[]; - for(var i in n){ - nodes.push(n[i]); - } + var nodes = this.getSelectedTreeNodes(); if(nodes.length){ + if(nodes.length > 1){ + //filter out all selected items which has one of their ancestor selected as well + var seen = this.selection, i = 0, r = [], n, p; + nextitem: while((n = nodes[i++])){ + for(p = n.getParent(); p && p !== this.tree; p = p.getParent()){ + if(seen[p.id]){ //parent is already selected, skip this node + continue nextitem; + } + } + //this node does not have any ancestors selected, add it + r.push(n); + } + nodes = r; + } + nodes = dojo.map(nodes, function(n){return n.domNode}); m.startDrag(this, nodes, this.copyState(dojo.isCopyKey(e))); } } @@ -24781,7 +25752,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { this.mouseButton = e.button; this._lastX = e.pageX; this._lastY = e.pageY; - this.inherited("onMouseDown",arguments); + this.inherited(arguments); }, onMouseUp: function(e){ @@ -24793,7 +25764,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { // private if(this.mouseDown){ this.mouseDown = false; - this.inherited("onMouseUp",arguments); + this.inherited(arguments); } }, @@ -24919,7 +25890,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { this.isDragging = false; // Compute the new parent item - var targetWidget = dijit.getEnclosingWidget(target); + var targetWidget = target; var newParentItem; var insertIndex; newParentItem = (targetWidget && targetWidget.item) || tree.item; @@ -24975,7 +25946,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { // Get the hash to pass to model.newItem(). A single call to // itemCreator() returns an array of hashes, one for each drag source node. if(!newItemsParams){ - newItemsParams = this.itemCreator(nodes, target, source); + newItemsParams = this.itemCreator(nodes, target.rowNode, source); } // Create new item in the tree, based on the drag source. @@ -25049,16 +26020,13 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { var root = source.tree.domNode; - var ids = {}; - for(var x in source.selection){ - ids[source.selection[x].parentNode.id] = true; - } + var ids = source.selection; var node = targetRow.parentNode; // Iterate up the DOM hierarchy from the target drop row, // checking of any of the dragged nodes have the same ID. - while(node != root && (!node.id || !ids[node.id])){ + while(node != root && !ids[node.id]){ node = node.parentNode; } @@ -25071,7 +26039,7 @@ dojo.declare("dijit.tree.dndSource", dijit.tree._dndSelector, { // tags: // private if(!this.targetAnchor){ return; } - this._removeItemClass(this.targetAnchor, this.dropPosition); + this._removeItemClass(this.targetAnchor.rowNode, this.dropPosition); this.targetAnchor = null; this.targetBox = null; this.dropPosition = null; @@ -25103,7 +26071,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ // { 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 + // 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){ @@ -25118,7 +26086,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ // ... // typeN: function || object // } - // Where if it is a function, it is assumed to be an object constructor that takes the + // 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: // { @@ -25184,7 +26152,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ //all item handles will become invalid and a new fetch must be issued. clearOnClose: false, - //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url. + //Parameter to allow specifying if preventCache should be passed to the xhrGet call or not when loading data from a url. //Note this does not mean the store calls the server on each fetch, only that the data load has preventCache set as an option. //Added for tracker: #6072 urlPreventCache: false, @@ -25192,19 +26160,19 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ //Parameter for specifying that it is OK for the xhrGet call to fail silently. failOk: false, - //Parameter to indicate to process data from the url as hierarchical - //(data items can contain other data items in js form). Default is true - //for backwards compatibility. False means only root items are processed - //as items, all child objects outside of type-mapped objects and those in + //Parameter to indicate to process data from the url as hierarchical + //(data items can contain other data items in js form). Default is true + //for backwards compatibility. False means only root items are processed + //as items, all child objects outside of type-mapped objects and those in //specific reference format, are left straight JS data objects. hierarchical: true, _assertIsItem: function(/* item */ item){ // summary: // This function tests whether the item passed in is indeed an item in the store. - // item: + // item: // The item to test for being contained by the store. - if(!this.isItem(item)){ + if(!this.isItem(item)){ throw new Error("dojo.data.ItemFileReadStore: Invalid item argument."); } }, @@ -25212,25 +26180,25 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ _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: + // attribute: // The attribute to test for being contained by the store. - if(typeof attribute !== "string"){ + if(typeof attribute !== "string"){ throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument."); } }, - getValue: function( /* item */ item, - /* attribute-name-string */ attribute, + getValue: function( /* item */ item, + /* attribute-name-string */ attribute, /* value? */ defaultValue){ - // summary: + // 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, + getValues: function(/* item */ item, /* attribute-name-string */ attribute){ - // summary: + // summary: // See dojo.data.api.Read.getValues() this._assertIsItem(item); @@ -25240,7 +26208,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, getAttributes: function(/* item */ item){ - // summary: + // summary: // See dojo.data.api.Read.getAttributes() this._assertIsItem(item); var attributes = []; @@ -25255,17 +26223,17 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ hasAttribute: function( /* item */ item, /* attribute-name-string */ attribute){ - // summary: + // summary: // See dojo.data.api.Read.hasAttribute() this._assertIsItem(item); this._assertIsAttribute(attribute); return (attribute in item); }, - containsValue: function(/* item */ item, - /* attribute-name-string */ attribute, + containsValue: function(/* item */ item, + /* attribute-name-string */ attribute, /* anything */ value){ - // summary: + // summary: // See dojo.data.api.Read.containsValue() var regexp = undefined; if(typeof value === "string"){ @@ -25274,22 +26242,22 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ return this._containsValue(item, attribute, value, regexp); //boolean. }, - _containsValue: function( /* item */ item, - /* attribute-name-string */ attribute, + _containsValue: function( /* item */ item, + /* attribute-name-string */ attribute, /* anything */ value, /* RegExp?*/ regexp){ - // summary: + // 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 + // 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: + // value: // The value to match. // regexp: // Optional regular expression generated off value if value was of string type to handle wildcarding. @@ -25306,7 +26274,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, isItem: function(/* anything */ something){ - // summary: + // summary: // See dojo.data.api.Read.isItem() if(something && something[this._storeRefPropName] === this){ if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){ @@ -25317,25 +26285,25 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, isItemLoaded: function(/* anything */ something){ - // summary: + // summary: // See dojo.data.api.Read.isItemLoaded() return this.isItem(something); //boolean }, loadItem: function(/* object */ keywordArgs){ - // summary: + // summary: // See dojo.data.api.Read.loadItem() this._assertIsItem(keywordArgs.item); }, getFeatures: function(){ - // summary: + // summary: // See dojo.data.api.Read.getFeatures() return this._features; //Object }, getLabel: function(/* item */ item){ - // summary: + // summary: // See dojo.data.api.Read.getLabel() if(this._labelAttr && this.isItem(item)){ return this.getValue(item,this._labelAttr); //String @@ -25344,7 +26312,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, getLabelAttributes: function(/* item */ item){ - // summary: + // summary: // See dojo.data.api.Read.getLabelAttributes() if(this._labelAttr){ return [this._labelAttr]; //array @@ -25352,10 +26320,10 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ return null; //null }, - _fetchItems: function( /* Object */ keywordArgs, - /* Function */ findCallback, + _fetchItems: function( /* Object */ keywordArgs, + /* Function */ findCallback, /* Function */ errorCallback){ - // summary: + // summary: // See dojo.data.util.simpleFetch.fetch() var self = this, filter = function(requestArgs, arrayOfItems){ @@ -25395,8 +26363,8 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ } 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 + // 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. @@ -25416,11 +26384,11 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ //Do a check on the JsonFileUrl and crosscheck it. //If it doesn't match the cross-check, it needs to be updated //This allows for either url or _jsonFileUrl to he changed to - //reset the store load location. Done this way for backwards + //reset the store load location. Done this way for backwards //compatibility. People use _jsonFileUrl (even though officially //private. if(this._jsonFileUrl !== this._ccUrl){ - dojo.deprecated("dojo.data.ItemFileReadStore: ", + dojo.deprecated("dojo.data.ItemFileReadStore: ", "To change the url, set the url property of the store," + " not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); this._ccUrl = this._jsonFileUrl; @@ -25431,21 +26399,21 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ } //See if there was any forced reset of data. - if(this.data != null && this._jsonData == null){ + if(this.data != null){ this._jsonData = this.data; this.data = null; } 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 + //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, + url: self._jsonFileUrl, handleAs: "json-comment-optional", preventCache: this.urlPreventCache, failOk: this.failOk @@ -25505,7 +26473,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, _handleQueuedFetches: function(){ - // summary: + // summary: // Internal function to execute delayed request in the store. //Execute any deferred fetches now. if(this._queuedFetches.length > 0){ @@ -25514,7 +26482,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ delayedQuery = fData.args, delayedFilter = fData.filter; if(delayedFilter){ - delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); + delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); }else{ this.fetchItemByIdentity(delayedQuery); } @@ -25524,31 +26492,31 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, _getItemsArray: function(/*object?*/queryOptions){ - // summary: + // 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._arrayOfAllItems; } return this._arrayOfTopLevelItems; }, close: function(/*dojo.data.api.Request || keywordArgs || null */ request){ - // summary: + // summary: // See dojo.data.api.Read.close() - if(this.clearOnClose && - this._loadFinished && + if(this.clearOnClose && + this._loadFinished && !this._loadInProgress){ //Reset all internalsback to default state. This will force a reload - //on next fetch. This also checks that the data or url param was set + //on next fetch. This also checks that the data or url param was set //so that the store knows it can get data. Without one of those being set, //the next fetch will trigger an error. - if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) && + if(((this._jsonFileUrl == "" || this._jsonFileUrl == null) && (this.url == "" || this.url == null) ) && this.data == null){ console.debug("dojo.data.ItemFileReadStore: WARNING! Data reload " + - " information has not been provided." + + " information has not been provided." + " Please set 'url' or 'data' to the appropriate value before" + " the next fetch"); } @@ -25586,7 +26554,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ // | false == valueIsAnItem("Kermit"); // | false == valueIsAnItem(42); // | false == valueIsAnItem(new Date()); - // | false == valueIsAnItem({_type:'Date', _value:'May 14, 1802'}); + // | false == valueIsAnItem({_type:'Date', _value:'1802-05-14'}); // | false == valueIsAnItem({_reference:'Kermit'}); // | true == valueIsAnItem({name:'Kermit', color:'green'}); // | true == valueIsAnItem({iggy:'pop'}); @@ -25597,8 +26565,8 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ (!dojo.isArray(aValue) || addingArrays) && (!dojo.isFunction(aValue)) && (aValue.constructor == Object || dojo.isArray(aValue)) && - (typeof aValue._reference === "undefined") && - (typeof aValue._type === "undefined") && + (typeof aValue._reference === "undefined") && + (typeof aValue._type === "undefined") && (typeof aValue._value === "undefined") && self.hierarchical ); @@ -25648,13 +26616,13 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ item[this._rootItemPropName]=true; } - // Step 2: Walk through all the attribute values of all the items, + // 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 + // + // 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 = {}, key; @@ -25688,9 +26656,9 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ this._reverseRefMap += "_"; } - // 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 + // 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; @@ -25702,7 +26670,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ item = this._arrayOfAllItems[i]; arrayOfValues = item[identifier]; var identity = arrayOfValues[0]; - if(!this._itemsByIdentity[identity]){ + if(!Object.hasOwnProperty.call(this._itemsByIdentity, identity)){ this._itemsByIdentity[identity] = item; }else{ if(this._jsonFileUrl){ @@ -25716,7 +26684,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ this._features['dojo.data.api.Identity'] = Number; } - // Step 5: Walk through all the items, and set each item's properties + // 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]; @@ -25730,13 +26698,13 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ // 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] } + // { 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'}] } + // { name:['Nelson Mandela'], born:[{_type:'Date', _value:'1918-07-18'}] } // into this: - // { name:['Kermit'], born:(new Date('July 18, 1918')) } + // { name:['Kermit'], born:(new Date(1918, 6, 18)) } // // We also generate the associate map for all items for the O(1) isItem function. for(i = 0; i < this._arrayOfAllItems.length; ++i){ @@ -25749,7 +26717,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ if(("_type" in value) && ("_value" in 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){ + 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); @@ -25772,12 +26740,12 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ var candidateItem = this._arrayOfAllItems[k], found = true; for(var refKey in referenceDescription){ - if(candidateItem[refKey] != referenceDescription[refKey]){ - found = false; + if(candidateItem[refKey] != referenceDescription[refKey]){ + found = false; } } - if(found){ - arrayOfValues[j] = candidateItem; + if(found){ + arrayOfValues[j] = candidateItem; } } } @@ -25788,7 +26756,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ } } }else if(this.isItem(value)){ - //It's a child item (not one referenced through _reference). + //It's a child item (not one referenced through _reference). //We need to treat this as a referenced item, so it can be cleaned up //in a write store easily. if(this.referenceIntegrity){ @@ -25817,7 +26785,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, getIdentity: function(/* item */ item){ - // summary: + // summary: // See dojo.data.api.Identity.getIdentity() var identifier = this._features['dojo.data.api.Identity']; if(identifier === Number){ @@ -25832,7 +26800,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, fetchItemByIdentity: function(/* Object */ keywordArgs){ - // summary: + // summary: // See dojo.data.api.Identity.fetchItemByIdentity() // Hasn't loaded yet, we have to trigger the load. @@ -25843,11 +26811,11 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ //Do a check on the JsonFileUrl and crosscheck it. //If it doesn't match the cross-check, it needs to be updated //This allows for either url or _jsonFileUrl to he changed to - //reset the store load location. Done this way for backwards + //reset the store load location. Done this way for backwards //compatibility. People use _jsonFileUrl (even though officially //private. if(this._jsonFileUrl !== this._ccUrl){ - dojo.deprecated("dojo.data.ItemFileReadStore: ", + dojo.deprecated("dojo.data.ItemFileReadStore: ", "To change the url, set the url property of the store," + " not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); this._ccUrl = this._jsonFileUrl; @@ -25870,7 +26838,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }else{ this._loadInProgress = true; var getArgs = { - url: self._jsonFileUrl, + url: self._jsonFileUrl, handleAs: "json-comment-optional", preventCache: this.urlPreventCache, failOk: this.failOk @@ -25913,7 +26881,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ scope = keywordArgs.scope?keywordArgs.scope:dojo.global; keywordArgs.onItem.call(scope, item); } - } + } }else{ // Already loaded. We can just look it up and call back. item = this._getItemByIdentity(keywordArgs.identity); @@ -25928,9 +26896,10 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ // summary: // Internal function to look an item up by its identity map. var item = null; - if(this._itemsByIdentity){ + if(this._itemsByIdentity && + Object.hasOwnProperty.call(this._itemsByIdentity, identity)){ item = this._itemsByIdentity[identity]; - }else{ + }else if (Object.hasOwnProperty.call(this._arrayOfAllItems, identity)){ item = this._arrayOfAllItems[identity]; } if(item === undefined){ @@ -25940,15 +26909,15 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, getIdentityAttributes: function(/* item */ item){ - // summary: - // See dojo.data.api.Identity.getIdentifierAttributes() + // summary: + // See dojo.data.api.Identity.getIdentityAttributes() 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 + // spec says we need to return null if the identity is not composed + // of attributes return null; // null }else{ return [identifier]; // Array @@ -25956,18 +26925,18 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ }, _forceLoad: function(){ - // summary: + // 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. + // for specific functions to work properly. var self = this; //Do a check on the JsonFileUrl and crosscheck it. //If it doesn't match the cross-check, it needs to be updated //This allows for either url or _jsonFileUrl to he changed to - //reset the store load location. Done this way for backwards + //reset the store load location. Done this way for backwards //compatibility. People use _jsonFileUrl (even though officially //private. if(this._jsonFileUrl !== this._ccUrl){ - dojo.deprecated("dojo.data.ItemFileReadStore: ", + dojo.deprecated("dojo.data.ItemFileReadStore: ", "To change the url, set the url property of the store," + " not _jsonFileUrl. _jsonFileUrl support will be removed in 2.0"); this._ccUrl = this._jsonFileUrl; @@ -25978,14 +26947,14 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ } //See if there was any forced reset of data. - if(this.data != null && this._jsonData == null){ + if(this.data != null){ this._jsonData = this.data; this.data = null; } if(this._jsonFileUrl){ var getArgs = { - url: this._jsonFileUrl, + url: this._jsonFileUrl, handleAs: "json-comment-optional", preventCache: this.urlPreventCache, failOk: this.failOk, @@ -25994,7 +26963,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ var getHandler = dojo.xhrGet(getArgs); getHandler.addCallback(function(data){ try{ - //Check to be sure there wasn't another load going on concurrently + //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. @@ -26007,7 +26976,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ //Okay, we hit an error state we can't recover from. A forced load occurred //while an async load was occurring. Since we cannot block at this point, the best //that can be managed is to throw an error. - throw new Error("dojo.data.ItemFileReadStore: Unable to perform a synchronous load, an async load is in progress."); + throw new Error("dojo.data.ItemFileReadStore: Unable to perform a synchronous load, an async load is in progress."); } }catch(e){ console.log(e); @@ -26021,7 +26990,7 @@ dojo.declare("dojo.data.ItemFileReadStore", null,{ self._getItemsFromLoadedData(self._jsonData); self._jsonData = null; self._loadFinished = true; - } + } } }); //Mix in the simple fetch implementation to this class. @@ -26034,6 +27003,7 @@ dojo._hasResource["dojo.data.ItemFileWriteStore"] = true; dojo.provide("dojo.data.ItemFileWriteStore"); + dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { constructor: function(/* object */ keywordParameters){ // keywordParameters: {typeMap: object) @@ -26044,7 +27014,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { // ... // typeN: function || object // } - // Where if it is a function, it is assumed to be an object constructor that takes the + // Where if it is a function, it is assumed to be an object constructor that takes the // value of _value as the initialization parameters. It is serialized assuming object.toString() // serialization. If it is an object, then it is assumed // to be an object of general form: @@ -26060,8 +27030,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { // For keeping track of changes so that we can implement isDirty and revert this._pending = { - _newItems:{}, - _modifiedItems:{}, + _newItems:{}, + _modifiedItems:{}, _deletedItems:{} }; @@ -26124,8 +27094,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { } } - // make sure this identity is not already in use by another item, if identifiers were - // defined in the file. Otherwise it would be the item count, + // make sure this identity is not already in use by another item, if identifiers were + // defined in the file. Otherwise it would be the item count, // which should always be unique in this case. if(this._itemsByIdentity){ this._assert(typeof this._itemsByIdentity[newIdentity] === "undefined"); @@ -26134,7 +27104,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { this._assert(typeof this._pending._deletedItems[newIdentity] === "undefined"); var newItem = {}; - newItem[this._storeRefPropName] = this; + newItem[this._storeRefPropName] = this; newItem[this._itemNumPropName] = this._arrayOfAllItems.length; if(this._itemsByIdentity){ this._itemsByIdentity[newIdentity] = newItem; @@ -26187,14 +27157,14 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { // Bummer, the user is trying to do something like // newItem({_S:"foo"}). Unfortunately, our superclass, // ItemFileReadStore, is already using _S in each of our items - // to hold private info. To avoid a naming collision, we - // need to move all our private info to some other property + // to hold private info. To avoid a naming collision, we + // need to move all our private info to some other property // of all the items/objects. So, we need to iterate over all - // the items and do something like: + // the items and do something like: // item.__S = item._S; // item._S = undefined; - // But first we have to make sure the new "__S" variable is - // not in use, which means we have to iterate over all the + // But first we have to make sure the new "__S" variable is + // not in use, which means we have to iterate over all the // items checking for that. throw new Error("encountered bug in ItemFileWriteStore.newItem"); } @@ -26231,17 +27201,17 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { this._assertIsItem(item); // Remove this item from the _arrayOfAllItems, but leave a null value in place - // of the item, so as not to change the length of the array, so that in newItem() + // of the item, so as not to change the length of the array, so that in newItem() // we can still safely do: newIdentity = this._arrayOfAllItems.length; var indexInArrayOfAllItems = item[this._itemNumPropName]; var identity = this.getIdentity(item); //If we have reference integrity on, we need to do reference cleanup for the deleted item if(this.referenceIntegrity){ - //First scan all the attributes of this items for references and clean them up in the map + //First scan all the attributes of this items for references and clean them up in the map //As this item is going away, no need to track its references anymore. - //Get the attributes list before we generate the backup so it + //Get the attributes list before we generate the backup so it //doesn't pollute the attributes list. var attributes = this.getAttributes(item); @@ -26287,7 +27257,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { return !(this.isItem(possibleItem) && this.getIdentity(possibleItem) == identity); }, this); //Remove the note of the reference to the item and set the values on the modified attribute. - this._removeReferenceFromMap(item, containingItem, attribute); + this._removeReferenceFromMap(item, containingItem, attribute); if(newValues.length < oldValues.length){ this._setValueOrValues(containingItem, attribute, newValues, true); } @@ -26349,11 +27319,11 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { var identity = this.getIdentity(item); if(!this._pending._modifiedItems[identity]){ - // Before we actually change the item, we make a copy of it to - // record the original state, so that we'll be able to revert if + // Before we actually change the item, we make a copy of it to + // record the original state, so that we'll be able to revert if // the revert method gets called. If the item has already been // modified then there's no need to do this now, since we already - // have a record of the original state. + // have a record of the original state. var copyOfItemState = {}; for(var key in item){ if((key === this._storeRefPropName) || (key === this._itemNumPropName) || (key === this._rootItemPropName)){ @@ -26374,7 +27344,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { if(dojo.isArray(newValueOrValues) && newValueOrValues.length === 0){ // If we were passed an empty array as the value, that counts - // as "unsetting" the attribute, so we need to remove this + // as "unsetting" the attribute, so we need to remove this // attribute from the item. success = delete item[attribute]; newValueOrValues = undefined; // used in the onSet Notification call below @@ -26398,7 +27368,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { // Unfortunately, it's not safe to just do this: // newValueArray = newValues; // Instead, we need to copy the array, which slice() does very nicely. - // This is so that our internal data structure won't + // This is so that our internal data structure won't // get corrupted if the user mucks with the values array *after* // calling setValues(). newValueArray = newValueOrValues.slice(0, newValueOrValues.length); @@ -26406,7 +27376,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { newValueArray = [newValueOrValues]; } - //We need to handle reference integrity if this is on. + //We need to handle reference integrity if this is on. //In the case of set, we need to see if references were added or removed //and update the reference tracking map accordingly. if(this.referenceIntegrity){ @@ -26433,7 +27403,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { if(map[id.toString()]){ delete map[id.toString()]; }else{ - this._addReferenceToMap(possibleItem, item, attribute); + this._addReferenceToMap(possibleItem, item, attribute); } } }, this); @@ -26463,7 +27433,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { // Now we make the dojo.data.api.Notification call if(callOnSet){ - this.onSet(item, attribute, oldValueOrValues, newValueOrValues); + this.onSet(item, attribute, oldValueOrValues, newValueOrValues); } return success; // boolean }, @@ -26498,7 +27468,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { // Method to remove an reference map entry for an item and attribute. // description: // Method to remove an reference map entry for an item and attribute. This will - // also perform cleanup on the map such that if there are no more references at all to + // also perform cleanup on the map such that if there are no more references at all to // the item, its reference object and entry are removed. // // refItem: @@ -26555,7 +27525,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { _flatten: function(/* anything */ value){ if(this.isItem(value)){ var item = value; - // Given an item, return an serializable object that provides a + // Given an item, return an serializable object that provides a // reference to the item. // For example, given kermit: // var kermit = store.newItem({id:2, name:"Kermit"}); @@ -26586,7 +27556,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { }, _getNewFileContentString: function(){ - // summary: + // summary: // Generate a string that can be saved to a file. // The result should look similar to: // http://trac.dojotoolkit.org/browser/dojo/trunk/tests/data/countries.json @@ -26627,7 +27597,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { }, _isEmpty: function(something){ - // summary: + // summary: // Function to determine if an array or object has no properties or values. // something: // The array or object to examine. @@ -26656,7 +27626,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { var self = this; var saveCompleteCallback = function(){ self._pending = { - _newItems:{}, + _newItems:{}, _modifiedItems:{}, _deletedItems:{} }; @@ -26705,7 +27675,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { modifiedItem = this._arrayOfAllItems[identity]; } - // Restore the original item into a full-fledged item again, we want to try to + // Restore the original item into a full-fledged item again, we want to try to // keep the same object instance as if we don't it, causes bugs like #9022. copyOfItemState[this._storeRefPropName] = this; for(key in modifiedItem){ @@ -26746,7 +27716,7 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { } this._addReferenceToMap(refItem, deletedItem, reference.attr); }, this); - delete deletedItem["backupRefs_" + this._reverseRefMap]; + delete deletedItem["backupRefs_" + this._reverseRefMap]; } } @@ -26765,8 +27735,8 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { } this._pending = { - _newItems:{}, - _modifiedItems:{}, + _newItems:{}, + _modifiedItems:{}, _deletedItems:{} }; return true; // boolean @@ -26777,13 +27747,13 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { if(item){ // return true if the item is dirty var identity = this.getIdentity(item); - return new Boolean(this._pending._newItems[identity] || + return new Boolean(this._pending._newItems[identity] || this._pending._modifiedItems[identity] || this._pending._deletedItems[identity]).valueOf(); // boolean }else{ // return true if the store is dirty -- which means return true // if there are any new items, dirty items, or modified items - if(!this._isEmpty(this._pending._newItems) || + if(!this._isEmpty(this._pending._newItems) || !this._isEmpty(this._pending._modifiedItems) || !this._isEmpty(this._pending._deletedItems)){ return true; @@ -26794,28 +27764,28 @@ dojo.declare("dojo.data.ItemFileWriteStore", dojo.data.ItemFileReadStore, { /* dojo.data.api.Notification */ - onSet: function(/* item */ item, - /*attribute-name-string*/ attribute, + onSet: function(/* item */ item, + /*attribute-name-string*/ attribute, /*object | array*/ oldValue, /*object | array*/ newValue){ // summary: See dojo.data.api.Notification.onSet() - // No need to do anything. This method is here just so that the + // No need to do anything. This method is here just so that the // client code can connect observers to it. }, onNew: function(/* item */ newItem, /*object?*/ parentInfo){ // summary: See dojo.data.api.Notification.onNew() - // No need to do anything. This method is here just so that the - // client code can connect observers to it. + // No need to do anything. This method is here just so that the + // client code can connect observers to it. }, onDelete: function(/* item */ deletedItem){ // summary: See dojo.data.api.Notification.onDelete() - // No need to do anything. This method is here just so that the - // client code can connect observers to it. + // No need to do anything. This method is here just so that the + // client code can connect observers to it. }, close: function(/* object? */ request){ diff --git a/lib/dojo/uacss.js b/lib/dojo/uacss.js index 781ab9c36..25b12f4bc 100644 --- a/lib/dojo/uacss.js +++ b/lib/dojo/uacss.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,7 @@ if(!dojo._hasResource["dojo.uacss"]){ //_hasResource checks added by build. Do n dojo._hasResource["dojo.uacss"] = true; dojo.provide("dojo.uacss"); + (function(){ // summary: // Applies pre-set CSS classes to the top-level HTML node, based on: @@ -33,6 +34,7 @@ dojo.provide("dojo.uacss"); dj_ie6: maj(ie) == 6, dj_ie7: maj(ie) == 7, dj_ie8: maj(ie) == 8, + dj_ie9: maj(ie) == 9, dj_quirks: d.isQuirks, dj_iequirks: ie && d.isQuirks, @@ -61,7 +63,7 @@ dojo.provide("dojo.uacss"); html.className = d.trim(html.className + " " + classStr); // If RTL mode, then add dj_rtl flag plus repeat existing classes with -rtl extension. - // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl). + // We can't run the code below until the <body> tag has loaded (so we can check for dir=rtl). // Unshift() is to run sniff code before the parser. dojo._loaders.unshift(function(){ if(!dojo._isBodyLtr()){ diff --git a/lib/dojo/window.js b/lib/dojo/window.js index c36eb4c23..4e363faba 100644 --- a/lib/dojo/window.js +++ b/lib/dojo/window.js @@ -1,5 +1,5 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ @@ -9,6 +9,8 @@ if(!dojo._hasResource["dojo.window"]){ //_hasResource checks added by build. Do dojo._hasResource["dojo.window"] = true; dojo.provide("dojo.window"); +dojo.getObject("window", true, dojo); + dojo.window.getBox = function(){ // summary: // Returns the dimensions and scroll position of the viewable area of a browser window @@ -62,7 +64,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ return; } var backCompat = doc.compatMode == 'BackCompat', - clientAreaRoot = backCompat? body : html, + clientAreaRoot = (isIE >= 9 && node.ownerDocument.parentWindow.frameElement) + ? ((html.clientHeight > 0 && html.clientWidth > 0 && (body.clientHeight == 0 || body.clientWidth == 0 || body.clientHeight > html.clientHeight || body.clientWidth > html.clientWidth)) ? html : body) + : (backCompat ? body : html), scrollRoot = isWK ? body : clientAreaRoot, rootWidth = clientAreaRoot.clientWidth, rootHeight = clientAreaRoot.clientHeight, @@ -87,14 +91,11 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ }else{ var pb = dojo._getPadBorderExtents(el); elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t; - } - - if(el != scrollRoot){ // body, html sizes already have the scrollbar removed var clientSize = el.clientWidth, scrollBarSize = elPos.w - clientSize; if(clientSize > 0 && scrollBarSize > 0){ elPos.w = clientSize; - if(isIE && rtl){ elPos.x += scrollBarSize; } + elPos.x += (rtl && (isIE || el.clientLeft > pb.l/*Chrome*/)) ? scrollBarSize : 0; } clientSize = el.clientHeight; scrollBarSize = elPos.h - clientSize; @@ -123,8 +124,9 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ bot = t + nodePos.h - elPos.h; // beyond bottom: > 0 if(r * l > 0){ var s = Math[l < 0? "max" : "min"](l, r); + if(rtl && ((isIE == 8 && !backCompat) || isIE >= 9)){ s = -s; } nodePos.x += el.scrollLeft; - el.scrollLeft += (isIE >= 8 && !backCompat && rtl)? -s : s; + el.scrollLeft += s; nodePos.x -= el.scrollLeft; } if(bot * t > 0){ @@ -133,7 +135,7 @@ dojo.window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ nodePos.y -= el.scrollTop; } el = (el != scrollRoot) && !fixedPos && el.parentNode; - } + } }catch(error){ console.error('scrollIntoView: ' + error); node.scrollIntoView(false); -- cgit v1.2.3-54-g00ecf