From 0181c0110985cfd2659e81c8cc1ef5a2f73bc697 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 14 Aug 2012 19:04:32 +0400 Subject: dojo: remove uncompressed files --- lib/dojo/AdapterRegistry.js.uncompressed.js | 113 - lib/dojo/DeferredList.js.uncompressed.js | 86 - lib/dojo/Evented.js.uncompressed.js | 32 - lib/dojo/NodeList-data.js.uncompressed.js | 181 - lib/dojo/NodeList-dom.js.uncompressed.js | 454 - lib/dojo/NodeList-fx.js.uncompressed.js | 222 - lib/dojo/NodeList-html.js.uncompressed.js | 55 - lib/dojo/NodeList-manipulate.js.uncompressed.js | 730 - lib/dojo/NodeList-traverse.js.uncompressed.js | 508 - lib/dojo/Stateful.js.uncompressed.js | 139 - lib/dojo/_base/Color.js.uncompressed.js | 220 - lib/dojo/_base/Deferred.js.uncompressed.js | 366 - lib/dojo/_base/NodeList.js.uncompressed.js | 100 - lib/dojo/_base/array.js.uncompressed.js | 343 - lib/dojo/_base/browser.js.uncompressed.js | 21 - lib/dojo/_base/config.js.uncompressed.js | 174 - lib/dojo/_base/connect.js.uncompressed.js | 400 - lib/dojo/_base/declare.js.uncompressed.js | 1050 - lib/dojo/_base/event.js.uncompressed.js | 51 - lib/dojo/_base/fx.js.uncompressed.js | 666 - lib/dojo/_base/html.js.uncompressed.js | 389 - lib/dojo/_base/json.js.uncompressed.js | 85 - lib/dojo/_base/kernel.js.uncompressed.js | 302 - lib/dojo/_base/lang.js.uncompressed.js | 707 - lib/dojo/_base/loader.js.uncompressed.js | 718 - lib/dojo/_base/query.js.uncompressed.js | 3 - lib/dojo/_base/sniff.js.uncompressed.js | 187 - lib/dojo/_base/unload.js.uncompressed.js | 81 - lib/dojo/_base/url.js.uncompressed.js | 111 - lib/dojo/_base/window.js.uncompressed.js | 126 - lib/dojo/_base/xhr.js.uncompressed.js | 830 - lib/dojo/_firebug/firebug.js.uncompressed.js | 1183 - lib/dojo/aspect.js.uncompressed.js | 207 - lib/dojo/back.js.uncompressed.js | 397 - lib/dojo/behavior.js.uncompressed.js | 248 - lib/dojo/cache.js.uncompressed.js | 9 - lib/dojo/cldr/monetary.js.uncompressed.js | 35 - lib/dojo/cldr/nls/ar/buddhist.js.uncompressed.js | 115 - lib/dojo/cldr/nls/ar/currency.js.uncompressed.js | 16 - lib/dojo/cldr/nls/ar/gregorian.js.uncompressed.js | 240 - lib/dojo/cldr/nls/ar/hebrew.js.uncompressed.js | 124 - lib/dojo/cldr/nls/ar/islamic.js.uncompressed.js | 156 - lib/dojo/cldr/nls/ar/number.js.uncompressed.js | 18 - lib/dojo/cldr/nls/buddhist.js.uncompressed.js | 267 - lib/dojo/cldr/nls/ca/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/ca/gregorian.js.uncompressed.js | 235 - lib/dojo/cldr/nls/ca/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/cs/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/cs/gregorian.js.uncompressed.js | 215 - lib/dojo/cldr/nls/cs/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/currency.js.uncompressed.js | 48 - lib/dojo/cldr/nls/da/buddhist.js.uncompressed.js | 141 - lib/dojo/cldr/nls/da/currency.js.uncompressed.js | 16 - lib/dojo/cldr/nls/da/gregorian.js.uncompressed.js | 237 - lib/dojo/cldr/nls/da/islamic.js.uncompressed.js | 87 - lib/dojo/cldr/nls/da/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/de/buddhist.js.uncompressed.js | 130 - lib/dojo/cldr/nls/de/currency.js.uncompressed.js | 17 - lib/dojo/cldr/nls/de/gregorian.js.uncompressed.js | 237 - lib/dojo/cldr/nls/de/islamic.js.uncompressed.js | 172 - lib/dojo/cldr/nls/de/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/el/buddhist.js.uncompressed.js | 120 - lib/dojo/cldr/nls/el/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/el/gregorian.js.uncompressed.js | 241 - lib/dojo/cldr/nls/el/hebrew.js.uncompressed.js | 73 - lib/dojo/cldr/nls/el/number.js.uncompressed.js | 20 - .../cldr/nls/en-au/currency.js.uncompressed.js | 8 - .../cldr/nls/en-au/gregorian.js.uncompressed.js | 17 - lib/dojo/cldr/nls/en-au/number.js.uncompressed.js | 7 - .../cldr/nls/en-ca/currency.js.uncompressed.js | 8 - .../cldr/nls/en-ca/gregorian.js.uncompressed.js | 20 - .../cldr/nls/en-gb/buddhist.js.uncompressed.js | 101 - .../cldr/nls/en-gb/gregorian.js.uncompressed.js | 23 - lib/dojo/cldr/nls/en-gb/islamic.js.uncompressed.js | 153 - lib/dojo/cldr/nls/en-gb/number.js.uncompressed.js | 7 - lib/dojo/cldr/nls/en/buddhist.js.uncompressed.js | 109 - lib/dojo/cldr/nls/en/currency.js.uncompressed.js | 17 - lib/dojo/cldr/nls/en/gregorian.js.uncompressed.js | 229 - lib/dojo/cldr/nls/en/islamic.js.uncompressed.js | 166 - lib/dojo/cldr/nls/en/number.js.uncompressed.js | 23 - lib/dojo/cldr/nls/es/buddhist.js.uncompressed.js | 125 - lib/dojo/cldr/nls/es/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/es/gregorian.js.uncompressed.js | 238 - lib/dojo/cldr/nls/es/islamic.js.uncompressed.js | 179 - lib/dojo/cldr/nls/es/number.js.uncompressed.js | 21 - lib/dojo/cldr/nls/fi/buddhist.js.uncompressed.js | 166 - lib/dojo/cldr/nls/fi/currency.js.uncompressed.js | 22 - lib/dojo/cldr/nls/fi/gregorian.js.uncompressed.js | 239 - lib/dojo/cldr/nls/fi/hebrew.js.uncompressed.js | 176 - lib/dojo/cldr/nls/fi/islamic.js.uncompressed.js | 155 - lib/dojo/cldr/nls/fi/number.js.uncompressed.js | 22 - .../cldr/nls/fr-ch/gregorian.js.uncompressed.js | 9 - lib/dojo/cldr/nls/fr-ch/number.js.uncompressed.js | 9 - lib/dojo/cldr/nls/fr/currency.js.uncompressed.js | 23 - lib/dojo/cldr/nls/fr/gregorian.js.uncompressed.js | 247 - lib/dojo/cldr/nls/fr/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/gregorian.js.uncompressed.js | 294 - lib/dojo/cldr/nls/he/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/he/gregorian.js.uncompressed.js | 213 - lib/dojo/cldr/nls/he/hebrew.js.uncompressed.js | 125 - lib/dojo/cldr/nls/he/islamic.js.uncompressed.js | 119 - lib/dojo/cldr/nls/he/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/hebrew.js.uncompressed.js | 265 - lib/dojo/cldr/nls/hu/currency.js.uncompressed.js | 17 - lib/dojo/cldr/nls/hu/gregorian.js.uncompressed.js | 227 - lib/dojo/cldr/nls/hu/number.js.uncompressed.js | 21 - lib/dojo/cldr/nls/islamic.js.uncompressed.js | 264 - lib/dojo/cldr/nls/it/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/it/gregorian.js.uncompressed.js | 235 - lib/dojo/cldr/nls/it/number.js.uncompressed.js | 12 - lib/dojo/cldr/nls/ja/currency.js.uncompressed.js | 18 - lib/dojo/cldr/nls/ja/gregorian.js.uncompressed.js | 222 - lib/dojo/cldr/nls/ja/number.js.uncompressed.js | 12 - lib/dojo/cldr/nls/ko/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/ko/gregorian.js.uncompressed.js | 243 - lib/dojo/cldr/nls/ko/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/nb/currency.js.uncompressed.js | 23 - lib/dojo/cldr/nls/nb/gregorian.js.uncompressed.js | 234 - lib/dojo/cldr/nls/nb/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/nl/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/nl/gregorian.js.uncompressed.js | 233 - lib/dojo/cldr/nls/nl/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/number.js.uncompressed.js | 64 - lib/dojo/cldr/nls/pl/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/pl/gregorian.js.uncompressed.js | 242 - lib/dojo/cldr/nls/pl/number.js.uncompressed.js | 22 - .../cldr/nls/pt-pt/gregorian.js.uncompressed.js | 141 - lib/dojo/cldr/nls/pt-pt/number.js.uncompressed.js | 8 - lib/dojo/cldr/nls/pt/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/pt/gregorian.js.uncompressed.js | 237 - lib/dojo/cldr/nls/pt/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/ro/buddhist.js.uncompressed.js | 121 - lib/dojo/cldr/nls/ro/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/ro/gregorian.js.uncompressed.js | 251 - lib/dojo/cldr/nls/ro/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/ru/currency.js.uncompressed.js | 16 - lib/dojo/cldr/nls/ru/gregorian.js.uncompressed.js | 232 - lib/dojo/cldr/nls/ru/number.js.uncompressed.js | 21 - lib/dojo/cldr/nls/sk/currency.js.uncompressed.js | 15 - lib/dojo/cldr/nls/sk/gregorian.js.uncompressed.js | 225 - lib/dojo/cldr/nls/sk/number.js.uncompressed.js | 9 - lib/dojo/cldr/nls/sl/currency.js.uncompressed.js | 17 - lib/dojo/cldr/nls/sl/gregorian.js.uncompressed.js | 218 - lib/dojo/cldr/nls/sl/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/sv/currency.js.uncompressed.js | 18 - lib/dojo/cldr/nls/sv/gregorian.js.uncompressed.js | 245 - lib/dojo/cldr/nls/sv/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/th/buddhist.js.uncompressed.js | 118 - lib/dojo/cldr/nls/th/currency.js.uncompressed.js | 16 - lib/dojo/cldr/nls/th/gregorian.js.uncompressed.js | 232 - lib/dojo/cldr/nls/th/number.js.uncompressed.js | 22 - lib/dojo/cldr/nls/tr/currency.js.uncompressed.js | 17 - lib/dojo/cldr/nls/tr/gregorian.js.uncompressed.js | 239 - lib/dojo/cldr/nls/tr/number.js.uncompressed.js | 22 - .../cldr/nls/zh-hant/buddhist.js.uncompressed.js | 146 - .../cldr/nls/zh-hant/currency.js.uncompressed.js | 16 - .../cldr/nls/zh-hant/gregorian.js.uncompressed.js | 228 - .../cldr/nls/zh-hant/islamic.js.uncompressed.js | 87 - .../cldr/nls/zh-hant/number.js.uncompressed.js | 7 - .../cldr/nls/zh-hk/currency.js.uncompressed.js | 15 - .../cldr/nls/zh-hk/gregorian.js.uncompressed.js | 85 - lib/dojo/cldr/nls/zh-hk/number.js.uncompressed.js | 7 - .../cldr/nls/zh-tw/currency.js.uncompressed.js | 14 - .../cldr/nls/zh-tw/gregorian.js.uncompressed.js | 80 - lib/dojo/cldr/nls/zh/currency.js.uncompressed.js | 16 - lib/dojo/cldr/nls/zh/gregorian.js.uncompressed.js | 247 - lib/dojo/cldr/nls/zh/number.js.uncompressed.js | 12 - lib/dojo/cldr/supplemental.js.uncompressed.js | 77 - lib/dojo/colors.js.uncompressed.js | 232 - lib/dojo/cookie.js.uncompressed.js | 98 - lib/dojo/currency.js.uncompressed.js | 132 - lib/dojo/data/ItemFileReadStore.js.uncompressed.js | 945 - .../data/ItemFileWriteStore.js.uncompressed.js | 805 - lib/dojo/data/ObjectStore.js.uncompressed.js | 505 - lib/dojo/data/api/Identity.js.uncompressed.js | 107 - lib/dojo/data/api/Notification.js.uncompressed.js | 122 - lib/dojo/data/api/Read.js.uncompressed.js | 485 - lib/dojo/data/api/Request.js.uncompressed.js | 36 - lib/dojo/data/api/Write.js.uncompressed.js | 221 - lib/dojo/data/util/filter.js.uncompressed.js | 74 - lib/dojo/data/util/simpleFetch.js.uncompressed.js | 95 - lib/dojo/data/util/sorter.js.uncompressed.js | 99 - lib/dojo/date.js.uncompressed.js | 347 - lib/dojo/date/locale.js.uncompressed.js | 670 - lib/dojo/date/stamp.js.uncompressed.js | 146 - lib/dojo/dnd/AutoSource.js.uncompressed.js | 13 - lib/dojo/dnd/Avatar.js.uncompressed.js | 111 - lib/dojo/dnd/Container.js.uncompressed.js | 432 - lib/dojo/dnd/Manager.js.uncompressed.js | 213 - lib/dojo/dnd/Moveable.js.uncompressed.js | 173 - lib/dojo/dnd/Mover.js.uncompressed.js | 119 - lib/dojo/dnd/Selector.js.uncompressed.js | 324 - lib/dojo/dnd/Source.js.uncompressed.js | 513 - lib/dojo/dnd/Target.js.uncompressed.js | 13 - lib/dojo/dnd/TimedMoveable.js.uncompressed.js | 69 - lib/dojo/dnd/autoscroll.js.uncompressed.js | 118 - lib/dojo/dnd/common.js.uncompressed.js | 35 - lib/dojo/dnd/move.js.uncompressed.js | 143 - lib/dojo/dojo.js.uncompressed.js | 14179 -------- lib/dojo/dom-attr.js.uncompressed.js | 238 - lib/dojo/dom-class.js.uncompressed.js | 320 - lib/dojo/dom-construct.js.uncompressed.js | 376 - lib/dojo/dom-form.js.uncompressed.js | 166 - lib/dojo/dom-geometry.js.uncompressed.js | 751 - lib/dojo/dom-prop.js.uncompressed.js | 190 - lib/dojo/dom-style.js.uncompressed.js | 321 - lib/dojo/dom.js.uncompressed.js | 156 - lib/dojo/domReady.js.uncompressed.js | 95 - lib/dojo/fx.js.uncompressed.js | 426 - lib/dojo/fx/Toggler.js.uncompressed.js | 103 - lib/dojo/fx/easing.js.uncompressed.js | 284 - lib/dojo/gears.js.uncompressed.js | 61 - lib/dojo/has.js.uncompressed.js | 178 - lib/dojo/hash.js.uncompressed.js | 243 - lib/dojo/html.js.uncompressed.js | 342 - lib/dojo/i18n.js.uncompressed.js | 514 - lib/dojo/io-query.js.uncompressed.js | 98 - lib/dojo/io/iframe.js.uncompressed.js | 376 - lib/dojo/io/script.js.uncompressed.js | 256 - lib/dojo/jaxer.js.uncompressed.js | 19 - lib/dojo/json.js.uncompressed.js | 149 - lib/dojo/keys.js.uncompressed.js | 80 - lib/dojo/loadInit.js.uncompressed.js | 7 - lib/dojo/main.js.uncompressed.js | 50 - lib/dojo/mouse.js.uncompressed.js | 127 - lib/dojo/nls/ar/colors.js.uncompressed.js | 156 - lib/dojo/nls/az/colors.js.uncompressed.js | 153 - lib/dojo/nls/ca/colors.js.uncompressed.js | 156 - lib/dojo/nls/colors.js.uncompressed.js | 191 - lib/dojo/nls/cs/colors.js.uncompressed.js | 156 - lib/dojo/nls/da/colors.js.uncompressed.js | 156 - lib/dojo/nls/de/colors.js.uncompressed.js | 156 - lib/dojo/nls/el/colors.js.uncompressed.js | 156 - lib/dojo/nls/es/colors.js.uncompressed.js | 156 - lib/dojo/nls/fi/colors.js.uncompressed.js | 156 - lib/dojo/nls/fr/colors.js.uncompressed.js | 156 - lib/dojo/nls/he/colors.js.uncompressed.js | 158 - lib/dojo/nls/hr/colors.js.uncompressed.js | 156 - lib/dojo/nls/hu/colors.js.uncompressed.js | 156 - lib/dojo/nls/it/colors.js.uncompressed.js | 156 - lib/dojo/nls/ja/colors.js.uncompressed.js | 156 - lib/dojo/nls/kk/colors.js.uncompressed.js | 156 - lib/dojo/nls/ko/colors.js.uncompressed.js | 156 - lib/dojo/nls/nb/colors.js.uncompressed.js | 156 - lib/dojo/nls/nl/colors.js.uncompressed.js | 156 - lib/dojo/nls/pl/colors.js.uncompressed.js | 156 - lib/dojo/nls/pt-pt/colors.js.uncompressed.js | 156 - lib/dojo/nls/pt/colors.js.uncompressed.js | 156 - lib/dojo/nls/ro/colors.js.uncompressed.js | 156 - lib/dojo/nls/ru/colors.js.uncompressed.js | 156 - lib/dojo/nls/sk/colors.js.uncompressed.js | 156 - lib/dojo/nls/sl/colors.js.uncompressed.js | 156 - lib/dojo/nls/sv/colors.js.uncompressed.js | 156 - lib/dojo/nls/th/colors.js.uncompressed.js | 156 - lib/dojo/nls/tr/colors.js.uncompressed.js | 156 - lib/dojo/nls/tt-rss-layer_ROOT.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_ar.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_ca.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_cs.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_da.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_de-de.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_el.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_en-gb.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_en-us.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_es-es.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_fi-fi.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_fr-fr.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_he-il.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_hu.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_it-it.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_ja-jp.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_ko-kr.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_nb.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_nl-nl.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_pl.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_pt-br.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_pt-pt.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_ru.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_sk.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_sl.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_sv.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_th.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_tr.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_zh-cn.js.uncompressed.js | 13 - lib/dojo/nls/tt-rss-layer_zh-tw.js.uncompressed.js | 13 - lib/dojo/nls/zh-tw/colors.js.uncompressed.js | 156 - lib/dojo/nls/zh/colors.js.uncompressed.js | 156 - lib/dojo/number.js.uncompressed.js | 576 - lib/dojo/on.js.uncompressed.js | 474 - lib/dojo/parser.js.uncompressed.js | 594 - lib/dojo/query.js.uncompressed.js | 713 - lib/dojo/ready.js.uncompressed.js | 138 - lib/dojo/regexp.js.uncompressed.js | 73 - lib/dojo/require.js.uncompressed.js | 7 - lib/dojo/rpc/JsonService.js.uncompressed.js | 85 - lib/dojo/rpc/JsonpService.js.uncompressed.js | 67 - lib/dojo/rpc/RpcService.js.uncompressed.js | 175 - lib/dojo/selector/_loader.js.uncompressed.js | 45 - lib/dojo/selector/acme.js.uncompressed.js | 1480 - lib/dojo/selector/lite.js.uncompressed.js | 264 - lib/dojo/store/Cache.js.uncompressed.js | 148 - lib/dojo/store/DataStore.js.uncompressed.js | 170 - lib/dojo/store/JsonRest.js.uncompressed.js | 155 - lib/dojo/store/Memory.js.uncompressed.js | 161 - lib/dojo/store/Observable.js.uncompressed.js | 175 - lib/dojo/store/api/Store.js.uncompressed.js | 297 - .../store/util/QueryResults.js.uncompressed.js | 64 - .../util/SimpleQueryEngine.js.uncompressed.js | 108 - lib/dojo/string.js.uncompressed.js | 162 - lib/dojo/text.js.uncompressed.js | 212 - lib/dojo/topic.js.uncompressed.js | 33 - lib/dojo/touch.js.uncompressed.js | 89 - lib/dojo/tt-rss-layer.js.uncompressed.js | 32247 ------------------- lib/dojo/uacss.js.uncompressed.js | 66 - lib/dojo/window.js.uncompressed.js | 169 - 315 files changed, 95869 deletions(-) delete mode 100644 lib/dojo/AdapterRegistry.js.uncompressed.js delete mode 100644 lib/dojo/DeferredList.js.uncompressed.js delete mode 100644 lib/dojo/Evented.js.uncompressed.js delete mode 100644 lib/dojo/NodeList-data.js.uncompressed.js delete mode 100644 lib/dojo/NodeList-dom.js.uncompressed.js delete mode 100644 lib/dojo/NodeList-fx.js.uncompressed.js delete mode 100644 lib/dojo/NodeList-html.js.uncompressed.js delete mode 100644 lib/dojo/NodeList-manipulate.js.uncompressed.js delete mode 100644 lib/dojo/NodeList-traverse.js.uncompressed.js delete mode 100644 lib/dojo/Stateful.js.uncompressed.js delete mode 100644 lib/dojo/_base/Color.js.uncompressed.js delete mode 100644 lib/dojo/_base/Deferred.js.uncompressed.js delete mode 100644 lib/dojo/_base/NodeList.js.uncompressed.js delete mode 100644 lib/dojo/_base/array.js.uncompressed.js delete mode 100644 lib/dojo/_base/browser.js.uncompressed.js delete mode 100644 lib/dojo/_base/config.js.uncompressed.js delete mode 100644 lib/dojo/_base/connect.js.uncompressed.js delete mode 100644 lib/dojo/_base/declare.js.uncompressed.js delete mode 100644 lib/dojo/_base/event.js.uncompressed.js delete mode 100644 lib/dojo/_base/fx.js.uncompressed.js delete mode 100644 lib/dojo/_base/html.js.uncompressed.js delete mode 100644 lib/dojo/_base/json.js.uncompressed.js delete mode 100644 lib/dojo/_base/kernel.js.uncompressed.js delete mode 100644 lib/dojo/_base/lang.js.uncompressed.js delete mode 100644 lib/dojo/_base/loader.js.uncompressed.js delete mode 100644 lib/dojo/_base/query.js.uncompressed.js delete mode 100644 lib/dojo/_base/sniff.js.uncompressed.js delete mode 100644 lib/dojo/_base/unload.js.uncompressed.js delete mode 100644 lib/dojo/_base/url.js.uncompressed.js delete mode 100644 lib/dojo/_base/window.js.uncompressed.js delete mode 100644 lib/dojo/_base/xhr.js.uncompressed.js delete mode 100644 lib/dojo/_firebug/firebug.js.uncompressed.js delete mode 100644 lib/dojo/aspect.js.uncompressed.js delete mode 100644 lib/dojo/back.js.uncompressed.js delete mode 100644 lib/dojo/behavior.js.uncompressed.js delete mode 100644 lib/dojo/cache.js.uncompressed.js delete mode 100644 lib/dojo/cldr/monetary.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ar/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ar/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ar/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ar/hebrew.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ar/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ar/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ca/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ca/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ca/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/cs/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/cs/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/cs/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/da/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/da/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/da/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/da/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/da/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/de/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/de/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/de/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/de/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/de/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/el/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/el/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/el/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/el/hebrew.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/el/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-au/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-au/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-au/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-ca/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-ca/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-gb/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-gb/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-gb/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en-gb/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/en/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/es/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/es/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/es/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/es/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/es/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fi/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fi/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fi/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fi/hebrew.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fi/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fi/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fr-ch/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fr-ch/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fr/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fr/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/fr/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/he/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/he/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/he/hebrew.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/he/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/he/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/hebrew.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/hu/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/hu/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/hu/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/it/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/it/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/it/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ja/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ja/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ja/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ko/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ko/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ko/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/nb/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/nb/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/nb/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/nl/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/nl/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/nl/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pl/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pl/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pl/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pt-pt/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pt-pt/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pt/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pt/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/pt/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ro/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ro/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ro/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ro/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ru/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ru/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/ru/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sk/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sk/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sk/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sl/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sl/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sl/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sv/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sv/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/sv/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/th/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/th/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/th/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/th/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/tr/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/tr/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/tr/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hant/buddhist.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hant/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hant/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hant/islamic.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hant/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hk/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hk/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-hk/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-tw/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh-tw/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh/currency.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh/gregorian.js.uncompressed.js delete mode 100644 lib/dojo/cldr/nls/zh/number.js.uncompressed.js delete mode 100644 lib/dojo/cldr/supplemental.js.uncompressed.js delete mode 100644 lib/dojo/colors.js.uncompressed.js delete mode 100644 lib/dojo/cookie.js.uncompressed.js delete mode 100644 lib/dojo/currency.js.uncompressed.js delete mode 100644 lib/dojo/data/ItemFileReadStore.js.uncompressed.js delete mode 100644 lib/dojo/data/ItemFileWriteStore.js.uncompressed.js delete mode 100644 lib/dojo/data/ObjectStore.js.uncompressed.js delete mode 100644 lib/dojo/data/api/Identity.js.uncompressed.js delete mode 100644 lib/dojo/data/api/Notification.js.uncompressed.js delete mode 100644 lib/dojo/data/api/Read.js.uncompressed.js delete mode 100644 lib/dojo/data/api/Request.js.uncompressed.js delete mode 100644 lib/dojo/data/api/Write.js.uncompressed.js delete mode 100644 lib/dojo/data/util/filter.js.uncompressed.js delete mode 100644 lib/dojo/data/util/simpleFetch.js.uncompressed.js delete mode 100644 lib/dojo/data/util/sorter.js.uncompressed.js delete mode 100644 lib/dojo/date.js.uncompressed.js delete mode 100644 lib/dojo/date/locale.js.uncompressed.js delete mode 100644 lib/dojo/date/stamp.js.uncompressed.js delete mode 100644 lib/dojo/dnd/AutoSource.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Avatar.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Container.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Manager.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Moveable.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Mover.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Selector.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Source.js.uncompressed.js delete mode 100644 lib/dojo/dnd/Target.js.uncompressed.js delete mode 100644 lib/dojo/dnd/TimedMoveable.js.uncompressed.js delete mode 100644 lib/dojo/dnd/autoscroll.js.uncompressed.js delete mode 100644 lib/dojo/dnd/common.js.uncompressed.js delete mode 100644 lib/dojo/dnd/move.js.uncompressed.js delete mode 100644 lib/dojo/dojo.js.uncompressed.js delete mode 100644 lib/dojo/dom-attr.js.uncompressed.js delete mode 100644 lib/dojo/dom-class.js.uncompressed.js delete mode 100644 lib/dojo/dom-construct.js.uncompressed.js delete mode 100644 lib/dojo/dom-form.js.uncompressed.js delete mode 100644 lib/dojo/dom-geometry.js.uncompressed.js delete mode 100644 lib/dojo/dom-prop.js.uncompressed.js delete mode 100644 lib/dojo/dom-style.js.uncompressed.js delete mode 100644 lib/dojo/dom.js.uncompressed.js delete mode 100644 lib/dojo/domReady.js.uncompressed.js delete mode 100644 lib/dojo/fx.js.uncompressed.js delete mode 100644 lib/dojo/fx/Toggler.js.uncompressed.js delete mode 100644 lib/dojo/fx/easing.js.uncompressed.js delete mode 100644 lib/dojo/gears.js.uncompressed.js delete mode 100644 lib/dojo/has.js.uncompressed.js delete mode 100644 lib/dojo/hash.js.uncompressed.js delete mode 100644 lib/dojo/html.js.uncompressed.js delete mode 100644 lib/dojo/i18n.js.uncompressed.js delete mode 100644 lib/dojo/io-query.js.uncompressed.js delete mode 100644 lib/dojo/io/iframe.js.uncompressed.js delete mode 100644 lib/dojo/io/script.js.uncompressed.js delete mode 100644 lib/dojo/jaxer.js.uncompressed.js delete mode 100644 lib/dojo/json.js.uncompressed.js delete mode 100644 lib/dojo/keys.js.uncompressed.js delete mode 100644 lib/dojo/loadInit.js.uncompressed.js delete mode 100644 lib/dojo/main.js.uncompressed.js delete mode 100644 lib/dojo/mouse.js.uncompressed.js delete mode 100644 lib/dojo/nls/ar/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/az/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/ca/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/cs/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/da/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/de/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/el/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/es/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/fi/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/fr/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/he/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/hr/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/hu/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/it/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/ja/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/kk/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/ko/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/nb/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/nl/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/pl/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/pt-pt/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/pt/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/ro/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/ru/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/sk/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/sl/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/sv/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/th/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/tr/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_ROOT.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_ar.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_ca.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_cs.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_da.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_de-de.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_el.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_en-gb.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_en-us.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_es-es.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_fi-fi.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_fr-fr.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_he-il.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_hu.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_it-it.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_ja-jp.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_ko-kr.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_nb.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_nl-nl.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_pl.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_pt-br.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_pt-pt.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_ru.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_sk.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_sl.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_sv.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_th.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_tr.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_zh-cn.js.uncompressed.js delete mode 100644 lib/dojo/nls/tt-rss-layer_zh-tw.js.uncompressed.js delete mode 100644 lib/dojo/nls/zh-tw/colors.js.uncompressed.js delete mode 100644 lib/dojo/nls/zh/colors.js.uncompressed.js delete mode 100644 lib/dojo/number.js.uncompressed.js delete mode 100644 lib/dojo/on.js.uncompressed.js delete mode 100644 lib/dojo/parser.js.uncompressed.js delete mode 100644 lib/dojo/query.js.uncompressed.js delete mode 100644 lib/dojo/ready.js.uncompressed.js delete mode 100644 lib/dojo/regexp.js.uncompressed.js delete mode 100644 lib/dojo/require.js.uncompressed.js delete mode 100644 lib/dojo/rpc/JsonService.js.uncompressed.js delete mode 100644 lib/dojo/rpc/JsonpService.js.uncompressed.js delete mode 100644 lib/dojo/rpc/RpcService.js.uncompressed.js delete mode 100644 lib/dojo/selector/_loader.js.uncompressed.js delete mode 100644 lib/dojo/selector/acme.js.uncompressed.js delete mode 100644 lib/dojo/selector/lite.js.uncompressed.js delete mode 100644 lib/dojo/store/Cache.js.uncompressed.js delete mode 100644 lib/dojo/store/DataStore.js.uncompressed.js delete mode 100644 lib/dojo/store/JsonRest.js.uncompressed.js delete mode 100644 lib/dojo/store/Memory.js.uncompressed.js delete mode 100644 lib/dojo/store/Observable.js.uncompressed.js delete mode 100644 lib/dojo/store/api/Store.js.uncompressed.js delete mode 100644 lib/dojo/store/util/QueryResults.js.uncompressed.js delete mode 100644 lib/dojo/store/util/SimpleQueryEngine.js.uncompressed.js delete mode 100644 lib/dojo/string.js.uncompressed.js delete mode 100644 lib/dojo/text.js.uncompressed.js delete mode 100644 lib/dojo/topic.js.uncompressed.js delete mode 100644 lib/dojo/touch.js.uncompressed.js delete mode 100644 lib/dojo/tt-rss-layer.js.uncompressed.js delete mode 100644 lib/dojo/uacss.js.uncompressed.js delete mode 100644 lib/dojo/window.js.uncompressed.js (limited to 'lib/dojo') diff --git a/lib/dojo/AdapterRegistry.js.uncompressed.js b/lib/dojo/AdapterRegistry.js.uncompressed.js deleted file mode 100644 index 23a6a0f0a..000000000 --- a/lib/dojo/AdapterRegistry.js.uncompressed.js +++ /dev/null @@ -1,113 +0,0 @@ -define("dojo/AdapterRegistry", ["./_base/kernel", "./_base/lang"], function(dojo, lang) { - // module: - // dojo/AdapterRegistry - // summary: - // TODOC - -var AdapterRegistry = dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){ - // summary: - // A registry to make contextual calling/searching easier. - // description: - // Objects of this class keep list of arrays in the form [name, check, - // wrap, directReturn] that are used to determine what the contextual - // result of a set of checked arguments is. All check/wrap functions - // in this registry should be of the same arity. - // example: - // | // create a new registry - // | var reg = new dojo.AdapterRegistry(); - // | reg.register("handleString", - // | dojo.isString, - // | function(str){ - // | // do something with the string here - // | } - // | ); - // | reg.register("handleArr", - // | dojo.isArray, - // | function(arr){ - // | // do something with the array here - // | } - // | ); - // | - // | // now we can pass reg.match() *either* an array or a string and - // | // the value we pass will get handled by the right function - // | reg.match("someValue"); // will call the first function - // | reg.match(["someValue"]); // will call the second - - this.pairs = []; - this.returnWrappers = returnWrappers || false; // Boolean -}; - -/*===== -// doc alias helpers: -AdapterRegistry = dojo.AdapterRegistry; -=====*/ - -lang.extend(AdapterRegistry, { - register: function(/*String*/ name, /*Function*/ check, /*Function*/ wrap, /*Boolean?*/ directReturn, /*Boolean?*/ override){ - // summary: - // register a check function to determine if the wrap function or - // object gets selected - // name: - // a way to identify this matcher. - // check: - // a function that arguments are passed to from the adapter's - // match() function. The check function should return true if the - // given arguments are appropriate for the wrap function. - // directReturn: - // If directReturn is true, the value passed in for wrap will be - // returned instead of being called. Alternately, the - // AdapterRegistry can be set globally to "return not call" using - // the returnWrappers property. Either way, this behavior allows - // the registry to act as a "search" function instead of a - // function interception library. - // override: - // If override is given and true, the check function will be given - // highest priority. Otherwise, it will be the lowest priority - // adapter. - this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]); - }, - - match: function(/* ... */){ - // summary: - // Find an adapter for the given arguments. If no suitable adapter - // is found, throws an exception. match() accepts any number of - // arguments, all of which are passed to all matching functions - // from the registered pairs. - for(var i = 0; i < this.pairs.length; i++){ - var pair = this.pairs[i]; - if(pair[1].apply(this, arguments)){ - if((pair[3])||(this.returnWrappers)){ - return pair[2]; - }else{ - return pair[2].apply(this, arguments); - } - } - } - throw new Error("No match found"); - }, - - unregister: function(name){ - // summary: - // Remove a named adapter from the registry - // name: String - // The name of the adapter. - // returns: Boolean - // Returns true if operation is successful. - // Returns false if operation fails. - - // FIXME: this is kind of a dumb way to handle this. On a large - // registry this will be slow-ish and we can use the name as a lookup - // should we choose to trade memory for speed. - for(var i = 0; i < this.pairs.length; i++){ - var pair = this.pairs[i]; - if(pair[0] == name){ - this.pairs.splice(i, 1); - return true; - } - } - return false; - } -}); - -return AdapterRegistry; -}); diff --git a/lib/dojo/DeferredList.js.uncompressed.js b/lib/dojo/DeferredList.js.uncompressed.js deleted file mode 100644 index 589ed18b2..000000000 --- a/lib/dojo/DeferredList.js.uncompressed.js +++ /dev/null @@ -1,86 +0,0 @@ -define("dojo/DeferredList", ["./_base/kernel", "./_base/Deferred", "./_base/array"], function(dojo, Deferred, darray) { - // module: - // dojo/DeferredList - // summary: - // TODOC - - -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 = []; - Deferred.call(this); - var self = this; - if(list.length === 0 && !fireOnOneCallback){ - this.resolve([0, []]); - } - var finished = 0; - darray.forEach(list, function(item, i){ - item.then(function(result){ - if(fireOnOneCallback){ - self.resolve([i, result]); - }else{ - addResult(true, result); - } - },function(error){ - if(fireOnOneErrback){ - self.reject(error); - }else{ - addResult(false, error); - } - if(consumeErrors){ - return null; - } - throw error; - }); - function addResult(succeeded, result){ - resultList[i] = [succeeded, result]; - finished++; - if(finished === list.length){ - self.resolve(resultList); - } - - } - }); -}; -dojo.DeferredList.prototype = new Deferred(); - -dojo.DeferredList.prototype.gatherResults = function(deferredList){ - // summary: - // Gathers the results of the deferreds for packaging - // as the parameters to the Deferred Lists' callback - // deferredList: dojo.DeferredList - // The deferred list from which this function gathers results. - // returns: dojo.DeferredList - // The newly created deferred list which packs results as - // parameters to its callback. - - var d = new dojo.DeferredList(deferredList, false, true, false); - d.addCallback(function(results){ - var ret = []; - darray.forEach(results, function(result){ - ret.push(result[1]); - }); - return ret; - }); - return d; -}; - -return dojo.DeferredList; -}); diff --git a/lib/dojo/Evented.js.uncompressed.js b/lib/dojo/Evented.js.uncompressed.js deleted file mode 100644 index c39c9e71a..000000000 --- a/lib/dojo/Evented.js.uncompressed.js +++ /dev/null @@ -1,32 +0,0 @@ -define("dojo/Evented", ["./aspect", "./on"], function(aspect, on){ - // summary: - // The export of this module is a class that can be used as a mixin or base class, - // to add on() and emit() methods to a class - // for listening for events and emiting events: - // |define(["dojo/Evented"], function(Evented){ - // | var EventedWidget = dojo.declare([Evented, dijit._Widget], {...}); - // | widget = new EventedWidget(); - // | widget.on("open", function(event){ - // | ... do something with event - // | }); - // | - // | widget.emit("open", {name:"some event", ...}); - - "use strict"; - var after = aspect.after; - function Evented(){ - } - Evented.prototype = { - on: function(type, listener){ - return on.parse(this, type, listener, function(target, type){ - return after(target, 'on' + type, listener, true); - }); - }, - emit: function(type, event){ - var args = [this]; - args.push.apply(args, arguments); - return on.emit.apply(on, args); - } - }; - return Evented; -}); diff --git a/lib/dojo/NodeList-data.js.uncompressed.js b/lib/dojo/NodeList-data.js.uncompressed.js deleted file mode 100644 index b8c76b0b0..000000000 --- a/lib/dojo/NodeList-data.js.uncompressed.js +++ /dev/null @@ -1,181 +0,0 @@ -define("dojo/NodeList-data", [ - "./_base/kernel", "./query", "./_base/lang", "./_base/array", "./dom-attr" -], function(dojo, query, lang, array, attr) { - // module: - // dojo/NodeList-data - // summary: - // TODOC - -var NodeList = query.NodeList; -/*===== -// doc alias helpers: -var NodeList = dojo.NodeList; - - 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` - }; - -=====*/ - - var dataCache = {}, x = 0, dataattr = "data-dojo-dataid", - dopid = function(node){ - // summary: Return a uniqueish ID for the passed node reference - var pid = attr.get(node, dataattr); - if(!pid){ - pid = "pid" + (x++); - attr.set(node, dataattr, pid); - } - return pid; - } - ; - - - var dodata = dojo._nodeData = function(node, key, value){ - // summary: Private helper for dojo.NodeList.data for single node data access. Refer to NodeList.data - // documentation for more information. - // - // node: String|DomNode - // The node to associate data with - // - // key: Object?|String? - // If an object, act as a setter and iterate over said object setting data items as defined. - // If a string, and `value` present, set the data for defined `key` to `value` - // If a string, and `value` absent, act as a getter, returning the data associated with said `key` - // - // value: Anything? - // The value to set for said `key`, provided `key` is a string (and not an object) - // - var pid = dopid(node), r; - if(!dataCache[pid]){ dataCache[pid] = {}; } - - // API discrepency: calling with only a node returns the whole object. $.data throws - if(arguments.length == 1){ r = dataCache[pid]; } - if(typeof key == "string"){ - // either getter or setter, based on `value` presence - if(arguments.length > 2){ - dataCache[pid][key] = value; - }else{ - r = dataCache[pid][key]; - } - }else{ - // must be a setter, mix `value` into data hash - // API discrepency: using object as setter works here - r = lang.mixin(dataCache[pid], key); - } - - return r; // Object|Anything|Nothing - }; - - var removeData = dojo._removeNodeData = function(node, key){ - // summary: Remove some data from this node - // node: String|DomNode - // The node reference to remove data from - // key: String? - // If omitted, remove all data in this dataset. - // If passed, remove only the passed `key` in the associated dataset - var pid = dopid(node); - if(dataCache[pid]){ - if(key){ - delete dataCache[pid][key]; - }else{ - delete dataCache[pid]; - } - } - }; - - dojo._gcNodeData = function(){ - // summary: super expensive: GC all data in the data for nodes that no longer exist in the dom. - // description: - // super expensive: GC all data in the data for nodes that no longer exist in the dom. - // MUCH safer to do this yourself, manually, on a per-node basis (via `NodeList.removeData()`) - // provided as a stop-gap for exceptionally large/complex applications with constantly changing - // content regions (eg: a dijit.layout.ContentPane with replacing data) - // There is NO automatic GC going on. If you dojo.destroy() a node, you should _removeNodeData - // prior to destruction. - var livePids = query("[" + dataattr + "]").map(dopid); - for(var i in dataCache){ - if(array.indexOf(livePids, i) < 0){ delete dataCache[i]; } - } - }; - - // make nodeData and removeNodeData public on dojo.NodeList: - lang.extend(NodeList, { - data: NodeList._adaptWithCondition(dodata, function(a){ - return a.length === 0 || a.length == 1 && (typeof a[0] == "string"); - }), - removeData: NodeList._adaptAsForEach(removeData) - }); - -// 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: -// -// NodeList.prototype.data = function(key, value){ -// var a = arguments, r; -// if(a.length === 0 || a.length == 1 && (typeof a[0] == "string")){ -// r = this.map(function(node){ -// return d._data(node, key); -// }); -// if(r.length == 1){ r = r[0]; } // the offending line, and the diff on adaptWithCondition -// }else{ -// r = this.forEach(function(node){ -// d._data(node, key, value); -// }); -// } -// return r; // dojo.NodeList|Array|SingleItem -// }; - - return NodeList; - -}); diff --git a/lib/dojo/NodeList-dom.js.uncompressed.js b/lib/dojo/NodeList-dom.js.uncompressed.js deleted file mode 100644 index 2460c79c9..000000000 --- a/lib/dojo/NodeList-dom.js.uncompressed.js +++ /dev/null @@ -1,454 +0,0 @@ -define("dojo/NodeList-dom", ["./_base/kernel", "./query", "./_base/array", "./_base/lang", "./dom-class", "./dom-construct", "./dom-geometry", "./dom-attr", "./dom-style"], function(dojo, query, array, lang, domCls, domCtr, domGeom, domAttr, domStyle){ - /*===== var NodeList = dojo.NodeList; =====*/ - var magicGuard = function(a){ - // summary: - // the guard function for dojo.attr() and dojo.style() - return a.length == 1 && (typeof a[0] == "string"); // inline'd type check - }; - - var orphan = function(node){ - // summary: - // function to orphan nodes - var p = node.parentNode; - if(p){ - p.removeChild(node); - } - }; - // FIXME: should we move orphan() to dojo.html? - - var NodeList = query.NodeList, - awc = NodeList._adaptWithCondition, - aafe = NodeList._adaptAsForEach, - aam = NodeList._adaptAsMap; - - function getSet(module){ - return function(node, name, value){ - if(arguments.length == 2){ - return module[typeof name == "string" ? "get" : "set"](node, name); - } - // setter - return module.set(node, name, value); - }; - } - - lang.extend(NodeList, { - _normalize: function(/*String||Element||Object||NodeList*/content, /*DOMNode?*/refNode){ - // summary: - // normalizes data to an array of items to insert. - // description: - // If content is an object, it can have special properties "template" and - // "parse". If "template" is defined, then the template value is run through - // dojo.string.substitute (if dojo.string.substitute has been dojo.required elsewhere), - // or if templateFunc is a function on the content, that function will be used to - // transform the template into a final string to be used for for passing to dojo._toDom. - // If content.parse is true, then it is remembered for later, for when the content - // nodes are inserted into the DOM. At that point, the nodes will be parsed for widgets - // (if dojo.parser has been dojo.required elsewhere). - - //Wanted to just use a DocumentFragment, but for the array/NodeList - //case that meant using cloneNode, but we may not want that. - //Cloning should only happen if the node operations span - //multiple refNodes. Also, need a real array, not a NodeList from the - //DOM since the node movements could change those NodeLists. - - var parse = content.parse === true; - - //Do we have an object that needs to be run through a template? - if(typeof content.template == "string"){ - var templateFunc = content.templateFunc || (dojo.string && dojo.string.substitute); - content = templateFunc ? templateFunc(content.template, content) : content; - } - - var type = (typeof content); - if(type == "string" || type == "number"){ - content = domCtr.toDom(content, (refNode && refNode.ownerDocument)); - if(content.nodeType == 11){ - //DocumentFragment. It cannot handle cloneNode calls, so pull out the children. - content = lang._toArray(content.childNodes); - }else{ - content = [content]; - } - }else if(!lang.isArrayLike(content)){ - content = [content]; - }else if(!lang.isArray(content)){ - //To get to this point, content is array-like, but - //not an array, which likely means a DOM NodeList. Convert it now. - content = lang._toArray(content); - } - - //Pass around the parse info - if(parse){ - content._runParse = true; - } - return content; //Array - }, - - _cloneNode: function(/*DOMNode*/ node){ - // summary: - // private utility to clone a node. Not very interesting in the vanilla - // dojo.NodeList case, but delegates could do interesting things like - // clone event handlers if that is derivable from the node. - return node.cloneNode(true); - }, - - _place: function(/*Array*/ary, /*DOMNode*/refNode, /*String*/position, /*Boolean*/useClone){ - // summary: - // private utility to handle placing an array of nodes relative to another node. - // description: - // Allows for cloning the nodes in the array, and for - // optionally parsing widgets, if ary._runParse is true. - - //Avoid a disallowed operation if trying to do an innerHTML on a non-element node. - if(refNode.nodeType != 1 && position == "only"){ - return; - } - var rNode = refNode, tempNode; - - //Always cycle backwards in case the array is really a - //DOM NodeList and the DOM operations take it out of the live collection. - var length = ary.length; - for(var i = length - 1; i >= 0; i--){ - var node = (useClone ? this._cloneNode(ary[i]) : ary[i]); - - //If need widget parsing, use a temp node, instead of waiting after inserting into - //real DOM because we need to start widget parsing at one node up from current node, - //which could cause some already parsed widgets to be parsed again. - if(ary._runParse && dojo.parser && dojo.parser.parse){ - if(!tempNode){ - tempNode = rNode.ownerDocument.createElement("div"); - } - tempNode.appendChild(node); - dojo.parser.parse(tempNode); - node = tempNode.firstChild; - while(tempNode.firstChild){ - tempNode.removeChild(tempNode.firstChild); - } - } - - if(i == length - 1){ - domCtr.place(node, rNode, position); - }else{ - rNode.parentNode.insertBefore(node, rNode); - } - rNode = node; - } - }, - - /*===== - position: function(){ - // summary: - // Returns border-box objects (x/y/w/h) of all elements in a node list - // as an Array (*not* a NodeList). Acts like `dojo.position`, though - // assumes the node passed is each node in this list. - - return dojo.map(this, dojo.position); // Array - }, - - attr: function(property, value){ - // summary: - // gets or sets the DOM attribute for every element in the - // NodeList. See also `dojo.attr` - // property: String - // the attribute to get/set - // value: String? - // optional. The value to set the property to - // returns: - // if no value is passed, the result is an array of attribute values - // If a value is passed, the return is this NodeList - // example: - // Make all nodes with a particular class focusable: - // | dojo.query(".focusable").attr("tabIndex", -1); - // example: - // Disable a group of buttons: - // | dojo.query("button.group").attr("disabled", true); - // example: - // innerHTML can be assigned or retrieved as well: - // | // get the innerHTML (as an array) for each list item - // | var ih = dojo.query("li.replaceable").attr("innerHTML"); - return; // dojo.NodeList - return; // Array - }, - - style: function(property, value){ - // summary: - // gets or sets the CSS property for every element in the NodeList - // property: String - // the CSS property to get/set, in JavaScript notation - // ("lineHieght" instead of "line-height") - // value: String? - // optional. The value to set the property to - // returns: - // if no value is passed, the result is an array of strings. - // If a value is passed, the return is this NodeList - return; // dojo.NodeList - return; // Array - }, - - addClass: function(className){ - // summary: - // adds the specified class to every node in the list - // className: String|Array - // A String class name to add, or several space-separated class names, - // or an array of class names. - return; // dojo.NodeList - }, - - removeClass: function(className){ - // summary: - // removes the specified class from every node in the list - // className: String|Array? - // An optional String class name to remove, or several space-separated - // class names, or an array of class names. If omitted, all class names - // will be deleted. - // returns: - // dojo.NodeList, this list - return; // dojo.NodeList - }, - - toggleClass: function(className, condition){ - // summary: - // Adds a class to node if not present, or removes if present. - // Pass a boolean condition if you want to explicitly add or remove. - // condition: Boolean? - // If passed, true means to add the class, false means to remove. - // className: String - // the CSS class to add - return; // dojo.NodeList - }, - - empty: function(){ - // summary: - // clears all content from each node in the list. Effectively - // equivalent to removing all child nodes from every item in - // the list. - return this.forEach("item.innerHTML='';"); // dojo.NodeList - // FIXME: should we be checking for and/or disposing of widgets below these nodes? - }, - =====*/ - - // useful html methods - attr: awc(getSet(domAttr), magicGuard), - style: awc(getSet(domStyle), magicGuard), - - addClass: aafe(domCls.add), - removeClass: aafe(domCls.remove), - replaceClass: aafe(domCls.replace), - toggleClass: aafe(domCls.toggle), - - empty: aafe(domCtr.empty), - removeAttr: aafe(domAttr.remove), - - position: aam(domGeom.position), - marginBox: aam(domGeom.getMarginBox), - - // FIXME: connectPublisher()? connectRunOnce()? - - /* - destroy: function(){ - // summary: - // destroys every item in the list. - this.forEach(d.destroy); - // FIXME: should we be checking for and/or disposing of widgets below these nodes? - }, - */ - - place: function(/*String||Node*/ queryOrNode, /*String*/ position){ - // summary: - // places elements of this node list relative to the first element matched - // by queryOrNode. Returns the original NodeList. See: `dojo.place` - // queryOrNode: - // may be a string representing any valid CSS3 selector or a DOM node. - // In the selector case, only the first matching element will be used - // for relative positioning. - // position: - // can be one of: - // | "last" (default) - // | "first" - // | "before" - // | "after" - // | "only" - // | "replace" - // or an offset in the childNodes property - var item = query(queryOrNode)[0]; - return this.forEach(function(node){ domCtr.place(node, item, position); }); // dojo.NodeList - }, - - orphan: function(/*String?*/ filter){ - // summary: - // removes elements in this list that match the filter - // from their parents and returns them as a new NodeList. - // filter: - // CSS selector like ".foo" or "div > span" - // returns: - // `dojo.NodeList` containing the orphaned elements - return (filter ? query._filterResult(this, filter) : this).forEach(orphan); // dojo.NodeList - }, - - adopt: function(/*String||Array||DomNode*/ queryOrListOrNode, /*String?*/ position){ - // summary: - // places any/all elements in queryOrListOrNode at a - // position relative to the first element in this list. - // Returns a dojo.NodeList of the adopted elements. - // queryOrListOrNode: - // a DOM node or a query string or a query result. - // Represents the nodes to be adopted relative to the - // first element of this NodeList. - // position: - // can be one of: - // | "last" (default) - // | "first" - // | "before" - // | "after" - // | "only" - // | "replace" - // or an offset in the childNodes property - return query(queryOrListOrNode).place(this[0], position)._stash(this); // dojo.NodeList - }, - - // FIXME: do we need this? - query: function(/*String*/ queryStr){ - // summary: - // Returns a new list whose members match the passed query, - // assuming elements of the current NodeList as the root for - // each search. - // example: - // assume a DOM created by this markup: - // |
- // |

- // | bacon is tasty, dontcha think? - // |

- // |
- // |
- // |

great comedians may not be funny in person

- // |
- // 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: - // | var spans = l.query("p span"); - - // FIXME: probably slow - if(!queryStr){ return this; } - var ret = new NodeList; - this.map(function(node){ - // FIXME: why would we ever get undefined here? - query(queryStr, node).forEach(function(subNode){ - if(subNode !== undefined){ - ret.push(subNode); - } - }); - }); - return ret._stash(this); // dojo.NodeList - }, - - filter: function(/*String|Function*/ filter){ - // summary: - // "masks" the built-in javascript filter() method (supported - // in Dojo via `dojo.filter`) to support passing a simple - // string filter in addition to supporting filtering function - // objects. - // filter: - // If a string, a CSS rule like ".thinger" or "div > span". - // example: - // "regular" JS filter syntax as exposed in dojo.filter: - // | dojo.query("*").filter(function(item){ - // | // highlight every paragraph - // | return (item.nodeName == "p"); - // | }).style("backgroundColor", "yellow"); - // example: - // the same filtering using a CSS selector - // | dojo.query("*").filter("p").styles("backgroundColor", "yellow"); - - var a = arguments, items = this, start = 0; - if(typeof filter == "string"){ // inline'd type check - items = query._filterResult(this, a[0]); - if(a.length == 1){ - // if we only got a string query, pass back the filtered results - return items._stash(this); // dojo.NodeList - } - // if we got a callback, run it over the filtered items - start = 1; - } - return this._wrap(array.filter(items, a[start], a[start + 1]), this); // dojo.NodeList - }, - - /* - // FIXME: should this be "copyTo" and include parenting info? - clone: function(){ - // summary: - // creates node clones of each element of this list - // and returns a new list containing the clones - }, - */ - - addContent: function(/*String||DomNode||Object||dojo.NodeList*/ content, /*String||Integer?*/ position){ - // summary: - // add a node, NodeList or some HTML as a string to every item in the - // list. Returns the original list. - // description: - // a copy of the HTML content is added to each item in the - // list, with an optional position argument. If no position - // argument is provided, the content is appended to the end of - // each item. - // content: - // DOM node, HTML in string format, a NodeList or an Object. If a DOM node or - // NodeList, the content will be cloned if the current NodeList has more than one - // element. Only the DOM nodes are cloned, no event handlers. If it is an Object, - // it should be an object with at "template" String property that has the HTML string - // to insert. If dojo.string has already been dojo.required, then dojo.string.substitute - // will be used on the "template" to generate the final HTML string. Other allowed - // properties on the object are: "parse" if the HTML - // string should be parsed for widgets (dojo.require("dojo.parser") to get that - // option to work), and "templateFunc" if a template function besides dojo.string.substitute - // should be used to transform the "template". - // position: - // can be one of: - // | "last"||"end" (default) - // | "first||"start" - // | "before" - // | "after" - // | "replace" (replaces nodes in this NodeList with new content) - // | "only" (removes other children of the nodes so new content is the only child) - // or an offset in the childNodes property - // example: - // appends content to the end if the position is omitted - // | dojo.query("h3 > p").addContent("hey there!"); - // example: - // add something to the front of each element that has a - // "thinger" property: - // | dojo.query("[thinger]").addContent("...", "first"); - // example: - // adds a header before each element of the list - // | dojo.query(".note").addContent("

NOTE:

", "before"); - // example: - // add a clone of a DOM node to the end of every element in - // the list, removing it from its existing parent. - // | dojo.query(".note").addContent(dojo.byId("foo")); - // example: - // Append nodes from a templatized string. - // dojo.require("dojo.string"); - // dojo.query(".note").addContent({ - // template: '${id}: ${name}', - // id: "user332", - // name: "Mr. Anderson" - // }); - // example: - // Append nodes from a templatized string that also has widgets parsed. - // dojo.require("dojo.string"); - // dojo.require("dojo.parser"); - // var notes = dojo.query(".note").addContent({ - // template: '', - // parse: true, - // text: "Send" - // }); - content = this._normalize(content, this[0]); - for(var i = 0, node; (node = this[i]); i++){ - this._place(content, node, position, i > 0); - } - return this; //dojo.NodeList - } - }); - - /*===== return dojo.NodeList; =====*/ - return NodeList; -}); diff --git a/lib/dojo/NodeList-fx.js.uncompressed.js b/lib/dojo/NodeList-fx.js.uncompressed.js deleted file mode 100644 index ec81392e0..000000000 --- a/lib/dojo/NodeList-fx.js.uncompressed.js +++ /dev/null @@ -1,222 +0,0 @@ -define("dojo/NodeList-fx", ["dojo/_base/NodeList", "./_base/lang", "./_base/connect", "./_base/fx", "./fx"], - function(NodeList, lang, connectLib, baseFx, coreFx) { - // module: - // dojo/NodeList-fx - // summary: - // TODOC - -/*===== -dojo["NodeList-fx"] = { - // summary: Adds dojo.fx animation support to dojo.query() by extending the NodeList class - // with additional FX functions. NodeList is the array-like object used to hold query results. -}; - -// doc alias helpers: -NodeList = dojo.NodeList; -=====*/ - -lang.extend(NodeList, { - _anim: function(obj, method, args){ - args = args||{}; - var a = coreFx.combine( - this.map(function(item){ - var tmpArgs = { node: item }; - lang.mixin(tmpArgs, args); - return obj[method](tmpArgs); - }) - ); - return args.auto ? a.play() && this : a; // dojo.Animation|dojo.NodeList - }, - - wipeIn: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Fade in all tables with class "blah": - // | dojo.query("table.blah").wipeIn().play(); - // - // example: - // Utilizing `auto` to get the NodeList back: - // | dojo.query(".titles").wipeIn({ auto:true }).onclick(someFunction); - // - return this._anim(coreFx, "wipeIn", args); // dojo.Animation|dojo.NodeList - }, - - wipeOut: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Wipe out all tables with class "blah": - // | dojo.query("table.blah").wipeOut().play(); - return this._anim(coreFx, "wipeOut", args); // dojo.Animation|dojo.NodeList - }, - - slideTo: function(args){ - // summary: - // slide all elements of the node list to the specified place via `dojo.fx.slideTo` - // - // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // | Move all tables with class "blah" to 300/300: - // | dojo.query("table.blah").slideTo({ - // | left: 40, - // | top: 50 - // | }).play(); - return this._anim(coreFx, "slideTo", args); // dojo.Animation|dojo.NodeList - }, - - - fadeIn: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Fade in all tables with class "blah": - // | dojo.query("table.blah").fadeIn().play(); - return this._anim(baseFx, "fadeIn", args); // dojo.Animation|dojo.NodeList - }, - - fadeOut: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Fade out all elements with class "zork": - // | dojo.query(".zork").fadeOut().play(); - // example: - // Fade them on a delay and do something at the end: - // | var fo = dojo.query(".zork").fadeOut(); - // | dojo.connect(fo, "onEnd", function(){ /*...*/ }); - // | fo.play(); - // example: - // Using `auto`: - // | dojo.query("li").fadeOut({ auto:true }).filter(filterFn).forEach(doit); - // - return this._anim(baseFx, "fadeOut", args); // dojo.Animation|dojo.NodeList - }, - - animateProperty: function(args){ - // summary: - // Animate all elements of this NodeList across the properties specified. - // syntax identical to `dojo.animateProperty` - // - // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // | dojo.query(".zork").animateProperty({ - // | duration: 500, - // | properties: { - // | color: { start: "black", end: "white" }, - // | left: { end: 300 } - // | } - // | }).play(); - // - // example: - // | dojo.query(".grue").animateProperty({ - // | auto:true, - // | properties: { - // | height:240 - // | } - // | }).onclick(handler); - return this._anim(baseFx, "animateProperty", args); // dojo.Animation|dojo.NodeList - }, - - anim: function( /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, - /*Function?*/ onEnd, - /*Integer?*/ delay){ - // summary: - // Animate one or more CSS properties for all nodes in this list. - // The returned animation object will already be playing when it - // is returned. See the docs for `dojo.anim` for full details. - // properties: Object - // the properties to animate. does NOT support the `auto` parameter like other - // NodeList-fx methods. - // duration: Integer? - // Optional. The time to run the animations for - // easing: Function? - // Optional. The easing function to use. - // onEnd: Function? - // A function to be called when the animation ends - // delay: - // how long to delay playing the returned animation - // example: - // Another way to fade out: - // | dojo.query(".thinger").anim({ opacity: 0 }); - // example: - // animate all elements with the "thigner" class to a width of 500 - // pixels over half a second - // | dojo.query(".thinger").anim({ width: 500 }, 700); - var canim = coreFx.combine( - this.map(function(item){ - return baseFx.animateProperty({ - node: item, - properties: properties, - duration: duration||350, - easing: easing - }); - }) - ); - if(onEnd){ - connectLib.connect(canim, "onEnd", onEnd); - } - return canim.play(delay||0); // dojo.Animation - } -}); - -return NodeList; -}); diff --git a/lib/dojo/NodeList-html.js.uncompressed.js b/lib/dojo/NodeList-html.js.uncompressed.js deleted file mode 100644 index 9e7312d8b..000000000 --- a/lib/dojo/NodeList-html.js.uncompressed.js +++ /dev/null @@ -1,55 +0,0 @@ -define("dojo/NodeList-html", ["./query", "./_base/lang", "./html"], function(query, lang, html) { - // module: - // dojo/NodeList-html - // summary: - // TODOC - -var NodeList = query.NodeList; - -/*===== -dojo["NodeList-html"] = { - // summary: Adds a chainable html method to dojo.query() / Nodelist instances for setting/replacing node content -}; - -// doc helper aliases: -NodeList = dojo.NodeList; -=====*/ - -lang.extend(NodeList, { - html: function(/* String|DomNode|NodeList? */ content, /* Object? */params){ - // summary: - // see `dojo.html.set()`. Set the content of all elements of this NodeList - // - // content: - // An html string, node or enumerable list of nodes for insertion into the dom - // - // params: - // Optional flags/properties to configure the content-setting. See dojo.html._ContentSetter - // - // description: - // Based around `dojo.html.set()`, set the content of the Elements in a - // NodeList to the given content (string/node/nodelist), with optional arguments - // to further tune the set content behavior. - // - // example: - // | dojo.query(".thingList").html("
  • 1
  • 2
  • 3
  • ", - // | { - // | parseContent: true, - // | onBegin: function(){ - // | this.content = this.content.replace(/([0-9])/g, this.id + ": $1"); - // | this.inherited("onBegin", arguments); - // | } - // | }).removeClass("notdone").addClass("done"); - - var dhs = new html._ContentSetter(params || {}); - this.forEach(function(elm){ - dhs.node = elm; - dhs.set(content); - dhs.tearDown(); - }); - return this; // dojo.NodeList - } -}); - -return NodeList; -}); diff --git a/lib/dojo/NodeList-manipulate.js.uncompressed.js b/lib/dojo/NodeList-manipulate.js.uncompressed.js deleted file mode 100644 index 47e32c1b6..000000000 --- a/lib/dojo/NodeList-manipulate.js.uncompressed.js +++ /dev/null @@ -1,730 +0,0 @@ -define("dojo/NodeList-manipulate", ["./query", "./_base/lang", "./_base/array", "./dom-construct", "./NodeList-dom"], function(dquery, lang, array, construct) { - // module: - // dojo/NodeList-manipulate - // summary: - // TODOC - -var NodeList = dquery.NodeList; - -/*===== -dojo["NodeList-manipulate"] = { - // summary: Adds a chainable methods to dojo.query() / Nodelist instances for manipulating HTML - // and DOM nodes and their properties. -}; - -// doc alias helpers: -NodeList = dojo.NodeList; -=====*/ - -//TODO: add a way to parse for widgets in the injected markup? - - function getText(/*DOMNode*/node){ - // summary: - // recursion method for text() to use. Gets text value for a node. - // description: - // Juse uses nodedValue so things like
    tags do not end up in - // the text as any sort of line return. - var text = "", ch = node.childNodes; - for(var i = 0, n; n = ch[i]; i++){ - //Skip comments. - if(n.nodeType != 8){ - if(n.nodeType == 1){ - text += getText(n); - }else{ - text += n.nodeValue; - } - } - } - return text; - } - - function getWrapInsertion(/*DOMNode*/node){ - // summary: - // finds the innermost element to use for wrap insertion. - - //Make it easy, assume single nesting, no siblings. - while(node.childNodes[0] && node.childNodes[0].nodeType == 1){ - node = node.childNodes[0]; - } - return node; //DOMNode - } - - function makeWrapNode(/*DOMNode||String*/html, /*DOMNode*/refNode){ - // summary: - // convert HTML into nodes if it is not already a node. - if(typeof html == "string"){ - html = construct.toDom(html, (refNode && refNode.ownerDocument)); - if(html.nodeType == 11){ - //DocumentFragment cannot handle cloneNode, so choose first child. - html = html.childNodes[0]; - } - }else if(html.nodeType == 1 && html.parentNode){ - //This element is already in the DOM clone it, but not its children. - html = html.cloneNode(false); - } - return html; /*DOMNode*/ - } - - lang.extend(NodeList, { - _placeMultiple: function(/*String||Node||NodeList*/query, /*String*/position){ - // summary: - // private method for inserting queried nodes into all nodes in this NodeList - // at different positions. Differs from NodeList.place because it will clone - // the nodes in this NodeList if the query matches more than one element. - var nl2 = typeof query == "string" || query.nodeType ? dquery(query) : query; - var toAdd = []; - for(var i = 0; i < nl2.length; i++){ - //Go backwards in DOM to make dom insertions easier via insertBefore - var refNode = nl2[i]; - var length = this.length; - for(var j = length - 1, item; item = this[j]; j--){ - if(i > 0){ - //Need to clone the item. This also means - //it needs to be added to the current NodeList - //so it can also be the target of other chaining operations. - item = this._cloneNode(item); - toAdd.unshift(item); - } - if(j == length - 1){ - construct.place(item, refNode, position); - }else{ - refNode.parentNode.insertBefore(item, refNode); - } - refNode = item; - } - } - - if(toAdd.length){ - //Add the toAdd items to the current NodeList. Build up list of args - //to pass to splice. - toAdd.unshift(0); - toAdd.unshift(this.length - 1); - Array.prototype.splice.apply(this, toAdd); - } - - return this; //dojo.NodeList - }, - - innerHTML: function(/*String?||DOMNode?|NodeList?*/value){ - // summary: - // allows setting the innerHTML of each node in the NodeList, - // if there is a value passed in, otherwise, reads the innerHTML value of the first node. - // description: - // This method is simpler than the dojo.NodeList.html() method provided by - // `dojo.NodeList-html`. This method just does proper innerHTML insertion of HTML fragments, - // and it allows for the innerHTML to be read for the first node in the node list. - // Since dojo.NodeList-html already took the "html" name, this method is called - // "innerHTML". However, if dojo.NodeList-html has not been loaded yet, this - // module will define an "html" method that can be used instead. Be careful if you - // are working in an environment where it is possible that dojo.NodeList-html could - // have been loaded, since its definition of "html" will take precedence. - // The nodes represented by the value argument will be cloned if more than one - // node is in this NodeList. The nodes in this NodeList are returned in the "set" - // usage of this method, not the HTML that was inserted. - // returns: - // if no value is passed, the result is String, the innerHTML of the first node. - // If a value is passed, the return is this dojo.NodeList - // example: - // assume a DOM created by this markup: - // |
    - // |
    - // This code inserts

    Hello World

    into both divs: - // | dojo.query("div").innerHTML("

    Hello World

    "); - // example: - // assume a DOM created by this markup: - // |

    Hello Mars

    - // |

    Hello World

    - // This code returns "

    Hello Mars

    ": - // | var message = dojo.query("div").innerHTML(); - if(arguments.length){ - return this.addContent(value, "only"); //dojo.NodeList - }else{ - return this[0].innerHTML; //String - } - }, - - /*===== - html: function(value){ - // summary: - // see the information for "innerHTML". "html" is an alias for "innerHTML", but is - // only defined if dojo.NodeList-html has not been loaded. - // description: - // An alias for the "innerHTML" method, but only defined if there is not an existing - // "html" method on dojo.NodeList. Be careful if you are working in an environment - // where it is possible that dojo.NodeList-html could have been loaded, since its - // definition of "html" will take precedence. If you are not sure if dojo.NodeList-html - // could be loaded, use the "innerHTML" method. - // value: String?||DOMNode?||NodeList? - // optional. The HTML fragment to use as innerHTML. If value is not passed, then the innerHTML - // of the first element in this NodeList is returned. - // returns: - // if no value is passed, the result is String, the innerHTML of the first node. - // If a value is passed, the return is this dojo.NodeList - return; // dojo.NodeList - return; // String - }, - =====*/ - - text: function(/*String*/value){ - // summary: - // allows setting the text value of each node in the NodeList, - // if there is a value passed in, otherwise, returns the text value for all the - // nodes in the NodeList in one string. - // example: - // assume a DOM created by this markup: - // |
    - // |
    - // This code inserts "Hello World" into both divs: - // | dojo.query("div").text("Hello World"); - // example: - // assume a DOM created by this markup: - // |

    Hello Mars today

    - // |

    Hello World

    - // This code returns "Hello Mars today": - // | var message = dojo.query("div").text(); - // returns: - // if no value is passed, the result is String, the text value of the first node. - // If a value is passed, the return is this dojo.NodeList - if(arguments.length){ - for(var i = 0, node; node = this[i]; i++){ - if(node.nodeType == 1){ - construct.empty(node); - node.appendChild(node.ownerDocument.createTextNode(value)); - } - } - return this; //dojo.NodeList - }else{ - var result = ""; - for(i = 0; node = this[i]; i++){ - result += getText(node); - } - return result; //String - } - }, - - val: function(/*String||Array*/value){ - // summary: - // If a value is passed, allows seting the value property of form elements in this - // NodeList, or properly selecting/checking the right value for radio/checkbox/select - // elements. If no value is passed, the value of the first node in this NodeList - // is returned. - // returns: - // if no value is passed, the result is String or an Array, for the value of the - // first node. - // If a value is passed, the return is this dojo.NodeList - // example: - // assume a DOM created by this markup: - // | - // | - // This code gets and sets the values for the form fields above: - // | dojo.query('[type="text"]').val(); //gets value foo - // | dojo.query('[type="text"]').val("bar"); //sets the input's value to "bar" - // | dojo.query("select").val() //gets array value ["red", "yellow"] - // | dojo.query("select").val(["blue", "yellow"]) //Sets the blue and yellow options to selected. - - //Special work for input elements. - if(arguments.length){ - var isArray = lang.isArray(value); - for(var index = 0, node; node = this[index]; index++){ - var name = node.nodeName.toUpperCase(); - var type = node.type; - var newValue = isArray ? value[index] : value; - - if(name == "SELECT"){ - var opts = node.options; - for(var i = 0; i < opts.length; i++){ - var opt = opts[i]; - if(node.multiple){ - opt.selected = (array.indexOf(value, opt.value) != -1); - }else{ - opt.selected = (opt.value == newValue); - } - } - }else if(type == "checkbox" || type == "radio"){ - node.checked = (node.value == newValue); - }else{ - node.value = newValue; - } - } - return this; //dojo.NodeList - }else{ - //node already declared above. - node = this[0]; - if(!node || node.nodeType != 1){ - return undefined; - } - value = node.value || ""; - if(node.nodeName.toUpperCase() == "SELECT" && node.multiple){ - //A multivalued selectbox. Do the pain. - value = []; - //opts declared above in if block. - opts = node.options; - //i declared above in if block; - for(i = 0; i < opts.length; i++){ - //opt declared above in if block - opt = opts[i]; - if(opt.selected){ - value.push(opt.value); - } - } - if(!value.length){ - value = null; - } - } - return value; //String||Array - } - }, - - append: function(/*String||DOMNode||NodeList*/content){ - // summary: - // appends the content to every node in the NodeList. - // description: - // The content will be cloned if the length of NodeList - // is greater than 1. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the appended content. - // example: - // assume a DOM created by this markup: - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("div").append("append"); - // Results in this DOM structure: - // |

    Hello Mars

    append
    - // |

    Hello World

    append
    - return this.addContent(content, "last"); //dojo.NodeList - }, - - appendTo: function(/*String*/query){ - // summary: - // appends nodes in this NodeList to the nodes matched by - // the query passed to appendTo. - // description: - // The nodes in this NodeList will be cloned if the query - // matches more than one element. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the matched nodes from the query. - // example: - // assume a DOM created by this markup: - // | append - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("span").appendTo("p"); - // Results in this DOM structure: - // |

    Hello Marsappend

    - // |

    Hello Worldappend

    - return this._placeMultiple(query, "last"); //dojo.NodeList - }, - - prepend: function(/*String||DOMNode||NodeList*/content){ - // summary: - // prepends the content to every node in the NodeList. - // description: - // The content will be cloned if the length of NodeList - // is greater than 1. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the appended content. - // assume a DOM created by this markup: - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("div").prepend("prepend"); - // Results in this DOM structure: - // |
    prepend

    Hello Mars

    - // |
    prepend

    Hello World

    - return this.addContent(content, "first"); //dojo.NodeList - }, - - prependTo: function(/*String*/query){ - // summary: - // prepends nodes in this NodeList to the nodes matched by - // the query passed to prependTo. - // description: - // The nodes in this NodeList will be cloned if the query - // matches more than one element. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the matched nodes from the query. - // example: - // assume a DOM created by this markup: - // | prepend - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("span").prependTo("p"); - // Results in this DOM structure: - // |

    prependHello Mars

    - // |

    prependHello World

    - return this._placeMultiple(query, "first"); //dojo.NodeList - }, - - after: function(/*String||Element||NodeList*/content){ - // summary: - // Places the content after every node in the NodeList. - // description: - // The content will be cloned if the length of NodeList - // is greater than 1. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the appended content. - // example: - // assume a DOM created by this markup: - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("div").after("after"); - // Results in this DOM structure: - // |

    Hello Mars

    after - // |

    Hello World

    after - return this.addContent(content, "after"); //dojo.NodeList - }, - - insertAfter: function(/*String*/query){ - // summary: - // The nodes in this NodeList will be placed after the nodes - // matched by the query passed to insertAfter. - // description: - // The nodes in this NodeList will be cloned if the query - // matches more than one element. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the matched nodes from the query. - // example: - // assume a DOM created by this markup: - // | after - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("span").insertAfter("p"); - // Results in this DOM structure: - // |

    Hello Mars

    after - // |

    Hello World

    after - return this._placeMultiple(query, "after"); //dojo.NodeList - }, - - before: function(/*String||DOMNode||NodeList*/content){ - // summary: - // Places the content before every node in the NodeList. - // description: - // The content will be cloned if the length of NodeList - // is greater than 1. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the appended content. - // example: - // assume a DOM created by this markup: - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("div").before("before"); - // Results in this DOM structure: - // | before

    Hello Mars

    - // | before

    Hello World

    - return this.addContent(content, "before"); //dojo.NodeList - }, - - insertBefore: function(/*String*/query){ - // summary: - // The nodes in this NodeList will be placed after the nodes - // matched by the query passed to insertAfter. - // description: - // The nodes in this NodeList will be cloned if the query - // matches more than one element. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // dojo.NodeList, the nodes currently in this NodeList will be returned, - // not the matched nodes from the query. - // example: - // assume a DOM created by this markup: - // | before - // |

    Hello Mars

    - // |

    Hello World

    - // Running this code: - // | dojo.query("span").insertBefore("p"); - // Results in this DOM structure: - // | before

    Hello Mars

    - // | before

    Hello World

    - return this._placeMultiple(query, "before"); //dojo.NodeList - }, - - /*===== - remove: function(simpleFilter){ - // summary: - // alias for dojo.NodeList's orphan method. Removes elements - // in this list that match the simple filter from their parents - // and returns them as a new NodeList. - // simpleFilter: String - // single-expression CSS rule. For example, ".thinger" or - // "#someId[attrName='value']" but not "div > span". In short, - // anything which does not invoke a descent to evaluate but - // can instead be used to test a single node is acceptable. - // returns: - // dojo.NodeList - return; // dojo.NodeList - }, - =====*/ - remove: NodeList.prototype.orphan, - - wrap: function(/*String||DOMNode*/html){ - // summary: - // Wrap each node in the NodeList with html passed to wrap. - // description: - // html will be cloned if the NodeList has more than one - // element. Only DOM nodes are cloned, not any attached - // event handlers. - // returns: - // dojo.NodeList, the nodes in the current NodeList will be returned, - // not the nodes from html argument. - // example: - // assume a DOM created by this markup: - // | one - // | two - // Running this code: - // | dojo.query("b").wrap("
    "); - // Results in this DOM structure: - // |
    one
    - // |
    two
    - if(this[0]){ - html = makeWrapNode(html, this[0]); - - //Now cycle through the elements and do the insertion. - for(var i = 0, node; node = this[i]; i++){ - //Always clone because if html is used to hold one of - //the "this" nodes, then on the clone of html it will contain - //that "this" node, and that would be bad. - var clone = this._cloneNode(html); - if(node.parentNode){ - node.parentNode.replaceChild(clone, node); - } - //Find deepest element and insert old node in it. - var insertion = getWrapInsertion(clone); - insertion.appendChild(node); - } - } - return this; //dojo.NodeList - }, - - wrapAll: function(/*String||DOMNode*/html){ - // summary: - // Insert html where the first node in this NodeList lives, then place all - // nodes in this NodeList as the child of the html. - // returns: - // dojo.NodeList, the nodes in the current NodeList will be returned, - // not the nodes from html argument. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".red").wrapAll('
    '); - // Results in this DOM structure: - // |
    - // |
    - // |
    Red One
    - // |
    Red Two
    - // |
    - // |
    Blue One
    - // |
    Blue Two
    - // |
    - if(this[0]){ - html = makeWrapNode(html, this[0]); - - //Place the wrap HTML in place of the first node. - this[0].parentNode.replaceChild(html, this[0]); - - //Now cycle through the elements and move them inside - //the wrap. - var insertion = getWrapInsertion(html); - for(var i = 0, node; node = this[i]; i++){ - insertion.appendChild(node); - } - } - return this; //dojo.NodeList - }, - - wrapInner: function(/*String||DOMNode*/html){ - // summary: - // For each node in the NodeList, wrap all its children with the passed in html. - // description: - // html will be cloned if the NodeList has more than one - // element. Only DOM nodes are cloned, not any attached - // event handlers. - // returns: - // dojo.NodeList, the nodes in the current NodeList will be returned, - // not the nodes from html argument. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".red").wrapInner(''); - // Results in this DOM structure: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - if(this[0]){ - html = makeWrapNode(html, this[0]); - for(var i = 0; i < this.length; i++){ - //Always clone because if html is used to hold one of - //the "this" nodes, then on the clone of html it will contain - //that "this" node, and that would be bad. - var clone = this._cloneNode(html); - - //Need to convert the childNodes to an array since wrapAll modifies the - //DOM and can change the live childNodes NodeList. - this._wrap(lang._toArray(this[i].childNodes), null, this._NodeListCtor).wrapAll(clone); - } - } - return this; //dojo.NodeList - }, - - replaceWith: function(/*String||DOMNode||NodeList*/content){ - // summary: - // Replaces each node in ths NodeList with the content passed to replaceWith. - // description: - // The content will be cloned if the length of NodeList - // is greater than 1. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // The nodes currently in this NodeList will be returned, not the replacing content. - // Note that the returned nodes have been removed from the DOM. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".red").replaceWith('
    Green
    '); - // Results in this DOM structure: - // |
    - // |
    Green
    - // |
    Blue One
    - // |
    Green
    - // |
    Blue Two
    - // |
    - content = this._normalize(content, this[0]); - for(var i = 0, node; node = this[i]; i++){ - this._place(content, node, "before", i > 0); - node.parentNode.removeChild(node); - } - return this; //dojo.NodeList - }, - - replaceAll: function(/*String*/query){ - // summary: - // replaces nodes matched by the query passed to replaceAll with the nodes - // in this NodeList. - // description: - // The nodes in this NodeList will be cloned if the query - // matches more than one element. Only the DOM nodes are cloned, not - // any attached event handlers. - // returns: - // The nodes currently in this NodeList will be returned, not the matched nodes - // from the query. The nodes currently in this NodeLIst could have - // been cloned, so the returned NodeList will include the cloned nodes. - // example: - // assume a DOM created by this markup: - // |
    - // |
    ___
    - // |
    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
    - // |
    - var nl = dquery(query); - var content = this._normalize(this, this[0]); - for(var i = 0, node; node = nl[i]; i++){ - this._place(content, node, "before", i > 0); - node.parentNode.removeChild(node); - } - return this; //dojo.NodeList - }, - - clone: function(){ - // summary: - // Clones all the nodes in this NodeList and returns them as a new NodeList. - // description: - // Only the DOM nodes are cloned, not any attached event handlers. - // returns: - // dojo.NodeList, a cloned set of the original nodes. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".red").clone().appendTo(".container"); - // Results in this DOM structure: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    Red One
    - // |
    Red Two
    - // |
    - - //TODO: need option to clone events? - var ary = []; - for(var i = 0; i < this.length; i++){ - ary.push(this._cloneNode(this[i])); - } - return this._wrap(ary, this, this._NodeListCtor); //dojo.NodeList - } - }); - - //set up html method if one does not exist - if(!NodeList.prototype.html){ - NodeList.prototype.html = NodeList.prototype.innerHTML; - } - -return NodeList; -}); diff --git a/lib/dojo/NodeList-traverse.js.uncompressed.js b/lib/dojo/NodeList-traverse.js.uncompressed.js deleted file mode 100644 index 41f850147..000000000 --- a/lib/dojo/NodeList-traverse.js.uncompressed.js +++ /dev/null @@ -1,508 +0,0 @@ -define("dojo/NodeList-traverse", ["./query", "./_base/lang", "./_base/array"], function(dquery, lang, array) { - // module: - // dojo/NodeList-traverse - // summary: - // TODOC - -var NodeList = dquery.NodeList; - -/*===== -dojo["NodeList-traverse"] = { - // summary: Adds a chainable methods to dojo.query() / Nodelist instances for traversing the DOM -}; - -// doc alias helpers: -NodeList = dojo.NodeList; -=====*/ - -lang.extend(NodeList, { - _buildArrayFromCallback: function(/*Function*/callback){ - // summary: - // builds a new array of possibly differing size based on the input list. - // Since the returned array is likely of different size than the input array, - // the array's map function cannot be used. - var ary = []; - for(var i = 0; i < this.length; i++){ - var items = callback.call(this[i], this[i], ary); - if(items){ - ary = ary.concat(items); - } - } - return ary; //Array - }, - - _getUniqueAsNodeList: function(/*Array*/ nodes){ - // summary: - // given a list of nodes, make sure only unique - // elements are returned as our NodeList object. - // Does not call _stash(). - var ary = []; - //Using for loop for better speed. - for(var i = 0, node; node = nodes[i]; i++){ - //Should be a faster way to do this. dojo.query has a private - //_zip function that may be inspirational, but there are pathways - //in query that force nozip? - if(node.nodeType == 1 && array.indexOf(ary, node) == -1){ - ary.push(node); - } - } - return this._wrap(ary, null, this._NodeListCtor); //dojo.NodeList - }, - - _getUniqueNodeListWithParent: function(/*Array*/ nodes, /*String*/ query){ - // summary: - // gets unique element nodes, filters them further - // with an optional query and then calls _stash to track parent NodeList. - var ary = this._getUniqueAsNodeList(nodes); - ary = (query ? dquery._filterResult(ary, query) : ary); - return ary._stash(this); //dojo.NodeList - }, - - _getRelatedUniqueNodes: function(/*String?*/ query, /*Function*/ callback){ - // summary: - // cycles over all the nodes and calls a callback - // to collect nodes for a possible inclusion in a result. - // The callback will get two args: callback(node, ary), - // where ary is the array being used to collect the nodes. - return this._getUniqueNodeListWithParent(this._buildArrayFromCallback(callback), query); //dojo.NodeList - }, - - children: function(/*String?*/ query){ - // summary: - // Returns all immediate child elements for nodes in this dojo.NodeList. - // Optionally takes a query to filter the child elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, all immediate child elements for the nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // | Some Text - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".container").children(); - // returns the four divs that are children of the container div. - // Running this code: - // | dojo.query(".container").children(".red"); - // returns the two divs that have the class "red". - return this._getRelatedUniqueNodes(query, function(node, ary){ - return lang._toArray(node.childNodes); - }); //dojo.NodeList - }, - - closest: function(/*String*/ query, /*String|DOMNode?*/ root){ - // summary: - // Returns closest parent that matches query, including current node in this - // dojo.NodeList if it matches the query. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // root: - // If specified, query is relative to "root" rather than document body. - // returns: - // dojo.NodeList, the closest parent that matches the query, including the current - // node in this dojo.NodeList if it matches the query. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // | Some Text - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".red").closest(".container"); - // returns the div with class "container". - return this._getRelatedUniqueNodes(null, function(node, ary){ - do{ - if(dquery._filterResult([node], query, root).length){ - return node; - } - }while(node != root && (node = node.parentNode) && node.nodeType == 1); - return null; //To make rhino strict checking happy. - }); //dojo.NodeList - }, - - parent: function(/*String?*/ query){ - // summary: - // Returns immediate parent elements for nodes in this dojo.NodeList. - // Optionally takes a query to filter the parent elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, immediate parent elements for nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".text").parent(); - // returns the two divs with class "blue". - // Running this code: - // | dojo.query(".text").parent(".first"); - // returns the one div with class "blue" and "first". - return this._getRelatedUniqueNodes(query, function(node, ary){ - return node.parentNode; - }); //dojo.NodeList - }, - - parents: function(/*String?*/ query){ - // summary: - // Returns all parent elements for nodes in this dojo.NodeList. - // Optionally takes a query to filter the child elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, all parent elements for nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".text").parents(); - // returns the two divs with class "blue", the div with class "container", - // | the body element and the html element. - // Running this code: - // | dojo.query(".text").parents(".container"); - // returns the one div with class "container". - return this._getRelatedUniqueNodes(query, function(node, ary){ - var pary = []; - while(node.parentNode){ - node = node.parentNode; - pary.push(node); - } - return pary; - }); //dojo.NodeList - }, - - siblings: function(/*String?*/ query){ - // summary: - // Returns all sibling elements for nodes in this dojo.NodeList. - // Optionally takes a query to filter the sibling elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, all sibling elements for nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // | Some Text - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".first").siblings(); - // returns the two divs with class "red" and the other div - // | with class "blue" that does not have "first". - // Running this code: - // | dojo.query(".first").siblings(".red"); - // returns the two div with class "red". - return this._getRelatedUniqueNodes(query, function(node, ary){ - var pary = []; - var nodes = (node.parentNode && node.parentNode.childNodes); - for(var i = 0; i < nodes.length; i++){ - if(nodes[i] != node){ - pary.push(nodes[i]); - } - } - return pary; - }); //dojo.NodeList - }, - - next: function(/*String?*/ query){ - // summary: - // Returns the next element for nodes in this dojo.NodeList. - // Optionally takes a query to filter the next elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, the next element for nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // | Some Text - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".first").next(); - // returns the div with class "red" and has innerHTML of "Red Two". - // Running this code: - // | dojo.query(".last").next(".red"); - // does not return any elements. - return this._getRelatedUniqueNodes(query, function(node, ary){ - var next = node.nextSibling; - while(next && next.nodeType != 1){ - next = next.nextSibling; - } - return next; - }); //dojo.NodeList - }, - - nextAll: function(/*String?*/ query){ - // summary: - // Returns all sibling elements that come after the nodes in this dojo.NodeList. - // Optionally takes a query to filter the sibling elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, all sibling elements that come after the nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // | Some Text - // |
    Blue One
    - // | - // | - // |
    - // Running this code: - // | dojo.query(".first").nextAll(); - // returns the two divs with class of "next". - // Running this code: - // | dojo.query(".first").nextAll(".red"); - // returns the one div with class "red" and innerHTML "Red Two". - return this._getRelatedUniqueNodes(query, function(node, ary){ - var pary = []; - var next = node; - while((next = next.nextSibling)){ - if(next.nodeType == 1){ - pary.push(next); - } - } - return pary; - }); //dojo.NodeList - }, - - prev: function(/*String?*/ query){ - // summary: - // Returns the previous element for nodes in this dojo.NodeList. - // Optionally takes a query to filter the previous elements. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, the previous element for nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // | Some Text - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".first").prev(); - // returns the div with class "red" and has innerHTML of "Red One". - // Running this code: - // | dojo.query(".first").prev(".blue"); - // does not return any elements. - return this._getRelatedUniqueNodes(query, function(node, ary){ - var prev = node.previousSibling; - while(prev && prev.nodeType != 1){ - prev = prev.previousSibling; - } - return prev; - }); //dojo.NodeList - }, - - prevAll: function(/*String?*/ query){ - // summary: - // Returns all sibling elements that come before the nodes in this dojo.NodeList. - // Optionally takes a query to filter the sibling elements. - // description: - // The returned nodes will be in reverse DOM order -- the first node in the list will - // be the node closest to the original node/NodeList. - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // query: - // a CSS selector. - // returns: - // dojo.NodeList, all sibling elements that come before the nodes in this dojo.NodeList. - // example: - // assume a DOM created by this markup: - // |
    - // | - // | Some Text - // | - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".second").prevAll(); - // returns the two divs with class of "prev". - // Running this code: - // | dojo.query(".first").prevAll(".red"); - // returns the one div with class "red prev" and innerHTML "Red One". - return this._getRelatedUniqueNodes(query, function(node, ary){ - var pary = []; - var prev = node; - while((prev = prev.previousSibling)){ - if(prev.nodeType == 1){ - pary.push(prev); - } - } - return pary; - }); //dojo.NodeList - }, - - andSelf: function(){ - // summary: - // Adds the nodes from the previous dojo.NodeList to the current dojo.NodeList. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // returns: - // dojo.NodeList - // example: - // assume a DOM created by this markup: - // |
    - // | - // | Some Text - // | - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".second").prevAll().andSelf(); - // returns the two divs with class of "prev", as well as the div with class "second". - return this.concat(this._parent); //dojo.NodeList - }, - - //Alternate methods for the :first/:last/:even/:odd pseudos. - first: function(){ - // summary: - // Returns the first node in this dojo.NodeList as a dojo.NodeList. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // returns: - // dojo.NodeList, with the first node in this dojo.NodeList - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".blue").first(); - // returns the div with class "blue" and "first". - return this._wrap(((this[0] && [this[0]]) || []), this); //dojo.NodeList - }, - - last: function(){ - // summary: - // Returns the last node in this dojo.NodeList as a dojo.NodeList. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // returns: - // dojo.NodeList, with the last node in this dojo.NodeList - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".blue").last(); - // returns the last div with class "blue", - return this._wrap((this.length ? [this[this.length - 1]] : []), this); //dojo.NodeList - }, - - even: function(){ - // summary: - // Returns the even nodes in this dojo.NodeList as a dojo.NodeList. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // returns: - // dojo.NodeList, with the even nodes in this dojo.NodeList - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".interior").even(); - // returns the two divs with class "blue" - return this.filter(function(item, i){ - return i % 2 != 0; - }); //dojo.NodeList - }, - - odd: function(){ - // summary: - // Returns the odd nodes in this dojo.NodeList as a dojo.NodeList. - // description: - // .end() can be used on the returned dojo.NodeList to get back to the - // original dojo.NodeList. - // returns: - // dojo.NodeList, with the odd nodes in this dojo.NodeList - // example: - // assume a DOM created by this markup: - // |
    - // |
    Red One
    - // |
    Blue One
    - // |
    Red Two
    - // |
    Blue Two
    - // |
    - // Running this code: - // | dojo.query(".interior").odd(); - // returns the two divs with class "red" - return this.filter(function(item, i){ - return i % 2 == 0; - }); //dojo.NodeList - } -}); - -return NodeList; -}); diff --git a/lib/dojo/Stateful.js.uncompressed.js b/lib/dojo/Stateful.js.uncompressed.js deleted file mode 100644 index af5b70128..000000000 --- a/lib/dojo/Stateful.js.uncompressed.js +++ /dev/null @@ -1,139 +0,0 @@ -define("dojo/Stateful", ["./_base/kernel", "./_base/declare", "./_base/lang", "./_base/array"], function(dojo, declare, lang, array) { - // module: - // dojo/Stateful - // summary: - // TODOC - -return 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){ - lang.mixin(this, mixin); - } - }, - - get: function(/*String*/name){ - // summary: - // Get a property on a Stateful instance. - // name: - // The property to get. - // returns: - // The property value on this Stateful instance. - // description: - // Get a named property on a Stateful object. The property may - // potentially be retrieved via a getter method in subclasses. In the base class - // this just retrieves the object's property. - // For example: - // | stateful = new dojo.Stateful({foo: 3}); - // | stateful.get("foo") // returns 3 - // | stateful.foo // returns 3 - - return this[name]; //Any - }, - set: function(/*String*/name, /*Object*/value){ - // summary: - // Set a property on a Stateful instance - // name: - // The property to set. - // value: - // The value to set in the property. - // returns: - // The function returns this dojo.Stateful instance. - // description: - // Sets named properties on a stateful object and notifies any watchers of - // the property. A programmatic setter may be defined in subclasses. - // For example: - // | stateful = new dojo.Stateful(); - // | stateful.watch(function(name, oldValue, value){ - // | // this will be called on the set below - // | } - // | stateful.set(foo, 5); - // - // set() may also be called with a hash of name/value pairs, ex: - // | myObj.set({ - // | foo: "Howdy", - // | bar: 3 - // | }) - // This is equivalent to calling set(foo, "Howdy") and set(bar, 3) - if(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; //dojo.Stateful - }, - watch: function(/*String?*/name, /*Function*/callback){ - // summary: - // Watches a property for changes - // name: - // Indicates the property to watch. This is optional (the callback may be the - // only parameter), and if omitted, all the properties will be watched - // returns: - // An object handle for the watch. The unwatch method of this object - // can be used to discontinue watching this property: - // | var watchHandle = obj.watch("foo", callback); - // | watchHandle.unwatch(); // callback won't be called now - // callback: - // The function to execute when the property changes. This will be called after - // the property has been changed. The callback will be called with the |this| - // set to the instance, the first argument as the name of the property, the - // second argument as the old value and the third argument as the new value. - - var callbacks = this._watchCallbacks; - if(!callbacks){ - var self = this; - callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){ - var notify = function(propertyCallbacks){ - if(propertyCallbacks){ - propertyCallbacks = propertyCallbacks.slice(); - for(var i = 0, l = propertyCallbacks.length; i < l; i++){ - 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(array.indexOf(propertyCallbacks, callback), 1); - } - }; //Object - } - -}); - -}); diff --git a/lib/dojo/_base/Color.js.uncompressed.js b/lib/dojo/_base/Color.js.uncompressed.js deleted file mode 100644 index ed0918093..000000000 --- a/lib/dojo/_base/Color.js.uncompressed.js +++ /dev/null @@ -1,220 +0,0 @@ -define("dojo/_base/Color", ["./kernel", "./lang", "./array", "./config"], function(dojo, lang, ArrayUtil, config){ - - var Color = dojo.Color = function(/*Array|String|Object*/ color){ - // summary: - // Takes a named string, hex string, array of rgb or rgba values, - // an object with r, g, b, and a properties, or another `dojo.Color` object - // and creates a new Color instance to work from. - // - // example: - // Work with a Color instance: - // | var c = new dojo.Color(); - // | c.setColor([0,0,0]); // black - // | var hex = c.toHex(); // #000000 - // - // example: - // Work with a node's color: - // | var color = dojo.style("someNode", "backgroundColor"); - // | var n = new dojo.Color(color); - // | // adjust the color some - // | n.r *= .5; - // | console.log(n.toString()); // rgb(128, 255, 255); - if(color){ this.setColor(color); } - }; - - /*===== - lang.mixin(dojo.Color,{ - named:{ - // summary: Dictionary list of all CSS named colors, by name. Values are 3-item arrays with corresponding RG and B values. - } - }); - =====*/ - - // FIXME: - // there's got to be a more space-efficient way to encode or discover - // these!! Use hex? - Color.named = { - "black": [0,0,0], - "silver": [192,192,192], - "gray": [128,128,128], - "white": [255,255,255], - "maroon": [128,0,0], - "red": [255,0,0], - "purple": [128,0,128], - "fuchsia":[255,0,255], - "green": [0,128,0], - "lime": [0,255,0], - "olive": [128,128,0], - "yellow": [255,255,0], - "navy": [0,0,128], - "blue": [0,0,255], - "teal": [0,128,128], - "aqua": [0,255,255], - "transparent": config.transparentColor || [0,0,0,0] - }; - - lang.extend(Color, { - r: 255, g: 255, b: 255, a: 1, - _set: function(r, g, b, a){ - var t = this; t.r = r; t.g = g; t.b = b; t.a = a; - }, - setColor: function(/*Array|String|Object*/ color){ - // summary: - // Takes a named string, hex string, array of rgb or rgba values, - // an object with r, g, b, and a properties, or another `dojo.Color` object - // and sets this color instance to that value. - // - // example: - // | var c = new dojo.Color(); // no color - // | c.setColor("#ededed"); // greyish - if(lang.isString(color)){ - Color.fromString(color, this); - }else if(lang.isArray(color)){ - Color.fromArray(color, this); - }else{ - this._set(color.r, color.g, color.b, color.a); - if(!(color instanceof Color)){ this.sanitize(); } - } - return this; // dojo.Color - }, - sanitize: function(){ - // summary: - // Ensures the object has correct attributes - // description: - // the default implementation does nothing, include dojo.colors to - // augment it with real checks - return this; // dojo.Color - }, - toRgb: function(){ - // summary: - // Returns 3 component array of rgb values - // example: - // | var c = new dojo.Color("#000000"); - // | console.log(c.toRgb()); // [0,0,0] - var t = this; - return [t.r, t.g, t.b]; // Array - }, - toRgba: function(){ - // summary: - // Returns a 4 component array of rgba values from the color - // represented by this object. - var t = this; - return [t.r, t.g, t.b, t.a]; // Array - }, - toHex: function(){ - // summary: - // Returns a CSS color string in hexadecimal representation - // example: - // | console.log(new dojo.Color([0,0,0]).toHex()); // #000000 - var arr = ArrayUtil.map(["r", "g", "b"], function(x){ - var s = this[x].toString(16); - return s.length < 2 ? "0" + s : s; - }, this); - return "#" + arr.join(""); // String - }, - toCss: function(/*Boolean?*/ includeAlpha){ - // summary: - // Returns a css color string in rgb(a) representation - // example: - // | var c = new dojo.Color("#FFF").toCss(); - // | console.log(c); // rgb('255','255','255') - var t = this, rgb = t.r + ", " + t.g + ", " + t.b; - return (includeAlpha ? "rgba(" + rgb + ", " + t.a : "rgb(" + rgb) + ")"; // String - }, - toString: function(){ - // summary: - // Returns a visual representation of the color - return this.toCss(true); // String - } - }); - - Color.blendColors = dojo.blendColors = function( - /*dojo.Color*/ start, - /*dojo.Color*/ end, - /*Number*/ weight, - /*dojo.Color?*/ obj - ){ - // summary: - // Blend colors end and start with weight from 0 to 1, 0.5 being a 50/50 blend, - // can reuse a previously allocated dojo.Color object for the result - var t = obj || new Color(); - ArrayUtil.forEach(["r", "g", "b", "a"], function(x){ - t[x] = start[x] + (end[x] - start[x]) * weight; - if(x != "a"){ t[x] = Math.round(t[x]); } - }); - return t.sanitize(); // dojo.Color - }; - - Color.fromRgb = dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ - // summary: - // Returns a `dojo.Color` instance from a string of the form - // "rgb(...)" or "rgba(...)". Optionally accepts a `dojo.Color` - // object to update with the parsed value and return instead of - // creating a new object. - // returns: - // A dojo.Color object. If obj is passed, it will be the return value. - var m = color.toLowerCase().match(/^rgba?\(([\s\.,0-9]+)\)/); - return m && Color.fromArray(m[1].split(/\s*,\s*/), obj); // dojo.Color - }; - - Color.fromHex = dojo.colorFromHex = function(/*String*/ color, /*dojo.Color?*/ obj){ - // summary: - // Converts a hex string with a '#' prefix to a color object. - // Supports 12-bit #rgb shorthand. Optionally accepts a - // `dojo.Color` object to update with the parsed value. - // - // returns: - // A dojo.Color object. If obj is passed, it will be the return value. - // - // example: - // | var thing = dojo.colorFromHex("#ededed"); // grey, longhand - // - // example: - // | var thing = dojo.colorFromHex("#000"); // black, shorthand - var t = obj || new Color(), - bits = (color.length == 4) ? 4 : 8, - mask = (1 << bits) - 1; - color = Number("0x" + color.substr(1)); - if(isNaN(color)){ - return null; // dojo.Color - } - ArrayUtil.forEach(["b", "g", "r"], function(x){ - var c = color & mask; - color >>= bits; - t[x] = bits == 4 ? 17 * c : c; - }); - t.a = 1; - return t; // dojo.Color - }; - - Color.fromArray = dojo.colorFromArray = function(/*Array*/ a, /*dojo.Color?*/ obj){ - // summary: - // 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 - // returns: - // A dojo.Color object. If obj is passed, it will be the return value. - var t = obj || new Color(); - t._set(Number(a[0]), Number(a[1]), Number(a[2]), Number(a[3])); - if(isNaN(t.a)){ t.a = 1; } - return t.sanitize(); // dojo.Color - }; - - Color.fromString = dojo.colorFromString = function(/*String*/ str, /*dojo.Color?*/ obj){ - // summary: - // Parses `str` for a color value. Accepts hex, rgb, and rgba - // style color values. - // description: - // Acceptable input values for str may include arrays of any form - // accepted by dojo.colorFromArray, hex strings such as "#aaaaaa", or - // rgb or rgba strings such as "rgb(133, 200, 16)" or "rgba(10, 10, - // 10, 50)" - // returns: - // A dojo.Color object. If obj is passed, it will be the return value. - var a = Color.named[str]; - return a && Color.fromArray(a, obj) || Color.fromRgb(str, obj) || Color.fromHex(str, obj); // dojo.Color - }; - - return Color; -}); diff --git a/lib/dojo/_base/Deferred.js.uncompressed.js b/lib/dojo/_base/Deferred.js.uncompressed.js deleted file mode 100644 index 6dc39e96c..000000000 --- a/lib/dojo/_base/Deferred.js.uncompressed.js +++ /dev/null @@ -1,366 +0,0 @@ -define("dojo/_base/Deferred", ["./kernel", "./lang"], function(dojo, lang){ - // module: - // dojo/_base/Deferred - // summary: - // This module defines dojo.Deferred. - - 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. - // 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 - // 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 - // CommonJS proposed promise API. An example of using a Dojo promise: - // - // | var resultingPromise = someAsyncOperation.then(function(result){ - // | ... handle result ... - // | }, - // | function(error){ - // | ... handle error ... - // | }); - // - // The .then() call returns a new promise that represents the result of the - // execution of the callback. The callbacks will never affect the original promises value. - // - // The dojo.Deferred instances also provide the following functions for backwards compatibility: - // - // * addCallback(handler) - // * addErrback(handler) - // * callback(result) - // * errback(result) - // - // Callbacks are allowed to return promises themselves, so - // you can build complicated sequences of events with ease. - // - // The creator of the Deferred may specify a canceller. The canceller - // is a function that will be called if Deferred.cancel is called - // before the Deferred fires. You can use this to implement clean - // aborting of an XMLHttpRequest, etc. Note that cancel will fire the - // deferred with a CancelledError (unless your canceller returns - // another kind of error), so the errbacks should be prepared to - // handle that error for cancellable Deferreds. - // example: - // | var deferred = new dojo.Deferred(); - // | setTimeout(function(){ deferred.callback({success: true}); }, 1000); - // | return deferred; - // example: - // Deferred objects are often used when making code asynchronous. It - // may be easiest to write functions in a synchronous manner and then - // split code using a deferred to trigger a response to a long-lived - // operation. For example, instead of register a callback function to - // denote when a rendering operation completes, the function can - // simply return a deferred: - // - // | // callback style: - // | function renderLotsOfData(data, callback){ - // | var success = false - // | try{ - // | for(var x in data){ - // | renderDataitem(data[x]); - // | } - // | success = true; - // | }catch(e){ } - // | if(callback){ - // | callback(success); - // | } - // | } - // - // | // using callback style - // | renderLotsOfData(someDataObj, function(success){ - // | // handles success or failure - // | if(!success){ - // | promptUserToRecover(); - // | } - // | }); - // | // NOTE: no way to add another callback here!! - // example: - // Using a Deferred doesn't simplify the sending code any, but it - // provides a standard interface for callers and senders alike, - // providing both with a simple way to service multiple callbacks for - // an operation and freeing both sides from worrying about details - // such as "did this get called already?". With Deferreds, new - // callbacks can be added at any time. - // - // | // Deferred style: - // | function renderLotsOfData(data){ - // | var d = new dojo.Deferred(); - // | try{ - // | for(var x in data){ - // | renderDataitem(data[x]); - // | } - // | d.callback(true); - // | }catch(e){ - // | d.errback(new Error("rendering failed")); - // | } - // | return d; - // | } - // - // | // using Deferred style - // | renderLotsOfData(someDataObj).then(null, function(){ - // | promptUserToRecover(); - // | }); - // | // NOTE: addErrback and addCallback both return the Deferred - // | // again, so we could chain adding callbacks or save the - // | // deferred for later should we need to be notified again. - // example: - // In this example, renderLotsOfData is synchronous and so both - // versions are pretty artificial. Putting the data display on a - // timeout helps show why Deferreds rock: - // - // | // Deferred style and async func - // | function renderLotsOfData(data){ - // | var d = new dojo.Deferred(); - // | setTimeout(function(){ - // | try{ - // | for(var x in data){ - // | renderDataitem(data[x]); - // | } - // | d.callback(true); - // | }catch(e){ - // | d.errback(new Error("rendering failed")); - // | } - // | }, 100); - // | return d; - // | } - // - // | // using Deferred style - // | renderLotsOfData(someDataObj).then(null, function(){ - // | promptUserToRecover(); - // | }); - // - // Note that the caller doesn't have to change his code at all to - // handle the asynchronous case. - - var result, finished, isError, head, nextListener; - var promise = (this.promise = {}); - - function complete(value){ - if(finished){ - throw new Error("This deferred has already been resolved"); - } - result = value; - finished = true; - notify(); - } - function notify(){ - var mutated; - while(!mutated && nextListener){ - var listener = nextListener; - nextListener = nextListener.next; - if((mutated = (listener.progress == mutator))){ // assignment and check - finished = false; - } - var func = (isError ? listener.error : listener.resolved); - if(func){ - try{ - var newResult = func(result); - if (newResult && typeof newResult.then === "function"){ - newResult.then(lang.hitch(listener.deferred, "resolve"), lang.hitch(listener.deferred, "reject"), lang.hitch(listener.deferred, "progress")); - continue; - } - var unchanged = mutated && newResult === undefined; - if(mutated && !unchanged){ - isError = newResult instanceof Error; - } - listener.deferred[unchanged && isError ? "reject" : "resolve"](unchanged ? result : newResult); - }catch(e){ - listener.deferred.reject(e); - } - }else{ - if(isError){ - listener.deferred.reject(result); - }else{ - listener.deferred.resolve(result); - } - } - } - } - // calling resolve will resolve the promise - this.resolve = this.callback = function(value){ - // summary: - // Fulfills the Deferred instance successfully with the provide value - this.fired = 0; - this.results = [value, null]; - complete(value); - }; - - - // calling error will indicate that the promise failed - this.reject = this.errback = function(error){ - // summary: - // Fulfills the Deferred instance as an error with the provided error - isError = true; - this.fired = 1; - complete(error); - this.results = [null, error]; - if(!error || error.log !== false){ - (dojo.config.deferredOnError || function(x){ console.error(x); })(error); - } - }; - // call progress to provide updates on the progress on the completion of the promise - this.progress = function(update){ - // summary: - // Send progress events to all listeners - var listener = nextListener; - while(listener){ - var progress = listener.progress; - progress && progress(update); - listener = listener.next; - } - }; - this.addCallbacks = function(callback, errback){ - // summary: - // Adds callback and error callback for this deferred instance. - // callback: Function? - // The callback attached to this deferred object. - // errback: Function? - // The error callback attached to this deferred object. - // returns: - // Returns this deferred object. - this.then(callback, errback, mutator); - return this; // dojo.Deferred - }; - // provide the implementation of the promise - promise.then = this.then = function(/*Function?*/resolvedCallback, /*Function?*/errorCallback, /*Function?*/progressCallback){ - // summary: - // Adds a fulfilledHandler, errorHandler, and progressHandler to be called for - // completion of a promise. The fulfilledHandler is called when the promise - // is fulfilled. The errorHandler is called when a promise fails. The - // progressHandler is called for progress events. All arguments are optional - // and non-function values are ignored. The progressHandler is not only an - // optional argument, but progress events are purely optional. Promise - // providers are not required to ever create progress events. - // - // This function will return a new promise that is fulfilled when the given - // fulfilledHandler or errorHandler callback is finished. This allows promise - // operations to be chained together. The value returned from the callback - // handler is the fulfillment value for the returned promise. If the callback - // throws an error, the returned promise will be moved to failed state. - // - // returns: - // Returns a new promise that represents the result of the - // execution of the callback. The callbacks will never affect the original promises value. - // example: - // An example of using a CommonJS compliant promise: - // | asyncComputeTheAnswerToEverything(). - // | then(addTwo). - // | then(printResult, onError); - // | >44 - // - var returnDeferred = progressCallback == mutator ? this : new dojo.Deferred(promise.cancel); - var listener = { - resolved: resolvedCallback, - error: errorCallback, - progress: progressCallback, - deferred: returnDeferred - }; - if(nextListener){ - head = head.next = listener; - } - else{ - nextListener = head = listener; - } - if(finished){ - notify(); - } - return returnDeferred.promise; // Promise - }; - var deferred = this; - promise.cancel = this.cancel = function (){ - // summary: - // Cancels the asynchronous operation - if(!finished){ - var error = canceller && canceller(deferred); - if(!finished){ - if (!(error instanceof Error)){ - error = new Error(error); - } - error.log = false; - deferred.reject(error); - } - } - }; - freeze(promise); - }; - lang.extend(dojo.Deferred, { - addCallback: function (/*Function*/ callback){ - // summary: - // Adds successful callback for this deferred instance. - // returns: - // Returns this deferred object. - return this.addCallbacks(lang.hitch.apply(dojo, arguments)); // dojo.Deferred - }, - - addErrback: function (/*Function*/ errback){ - // summary: - // Adds error callback for this deferred instance. - // returns: - // Returns this deferred object. - return this.addCallbacks(null, lang.hitch.apply(dojo, arguments)); // dojo.Deferred - }, - - addBoth: function (/*Function*/ callback){ - // summary: - // Add handler as both successful callback and error callback for this deferred instance. - // returns: - // Returns this deferred object. - var enclosed = lang.hitch.apply(dojo, arguments); - return this.addCallbacks(enclosed, enclosed); // dojo.Deferred - }, - fired: -1 - }); - - dojo.Deferred.when = dojo.when = function(promiseOrValue, /*Function?*/ callback, /*Function?*/ errback, /*Function?*/ progressHandler){ - // summary: - // This provides normalization between normal synchronous values and - // asynchronous promises, so you can interact with them in a common way - // returns: - // Returns a new promise that represents the result of the execution of callback - // when parameter "promiseOrValue" is promise. - // Returns the execution result of callback when parameter "promiseOrValue" is value. - // example: - // | function printFirstAndLast(items){ - // | dojo.when(findFirst(items), console.log); - // | dojo.when(findLast(items), console.log); - // | } - // | function findFirst(items){ - // | return dojo.when(items, function(items){ - // | return items[0]; - // | }); - // | } - // | function findLast(items){ - // | return dojo.when(items, function(items){ - // | return items[items.length - 1]; - // | }); - // | } - // And now all three of his functions can be used sync or async. - // | printFirstAndLast([1,2,3,4]) will work just as well as - // | printFirstAndLast(dojo.xhrGet(...)); - - if(promiseOrValue && typeof promiseOrValue.then === "function"){ - return promiseOrValue.then(callback, errback, progressHandler); - } - return callback ? callback(promiseOrValue) : promiseOrValue; // Promise - }; - - return dojo.Deferred; -}); diff --git a/lib/dojo/_base/NodeList.js.uncompressed.js b/lib/dojo/_base/NodeList.js.uncompressed.js deleted file mode 100644 index e723fa801..000000000 --- a/lib/dojo/_base/NodeList.js.uncompressed.js +++ /dev/null @@ -1,100 +0,0 @@ -define("dojo/_base/NodeList", ["./kernel", "../query", "./array", "./html", "../NodeList-dom"], function(dojo, query, array){ - // module: - // dojo/_base/NodeList - // summary: - // This module defines dojo.NodeList. - -var NodeList = query.NodeList; - - /*===== - dojo.extend(dojo.NodeList, { - connect: function(methodName, objOrFunc, funcName){ - // summary: - // attach event handlers to every item of the NodeList. Uses dojo.connect() - // so event properties are normalized - // methodName: String - // the name of the method to attach to. For DOM events, this should be - // the lower-case name of the event - // objOrFunc: Object|Function|String - // if 2 arguments are passed (methodName, objOrFunc), objOrFunc should - // reference a function or be the name of the function in the global - // namespace to attach. If 3 arguments are provided - // (methodName, objOrFunc, funcName), objOrFunc must be the scope to - // locate the bound function in - // funcName: String? - // optional. A string naming the function in objOrFunc to bind to the - // event. May also be a function reference. - // example: - // add an onclick handler to every button on the page - // | dojo.query("div:nth-child(odd)").connect("onclick", function(e){ - // | console.log("clicked!"); - // | }); - // example: - // attach foo.bar() to every odd div's onmouseover - // | dojo.query("div:nth-child(odd)").connect("onmouseover", foo, "bar"); - }, - coords: function(){ - // summary: - // Deprecated: Use position() for border-box x/y/w/h - // or marginBox() for margin-box w/h/l/t. - // Returns the box objects of all elements in a node list as - // an Array (*not* a NodeList). Acts like `dojo.coords`, though assumes - // the node passed is each node in this list. - - return dojo.map(this, dojo.coords); // Array - } - }); - - var NodeList = dojo.NodeList; - =====*/ - var nlp = NodeList.prototype; - - // don't bind early to dojo.connect since we no longer explicitly depend on it - nlp.connect = NodeList._adaptAsForEach(function(){ - return dojo.connect.apply(this, arguments); - }); - nlp.coords = NodeList._adaptAsMap(dojo.coords); - - NodeList.events = [ - // summary: - // list of all DOM events used in NodeList - "blur", "focus", "change", "click", "error", "keydown", "keypress", - "keyup", "load", "mousedown", "mouseenter", "mouseleave", "mousemove", - "mouseout", "mouseover", "mouseup", "submit" - ]; - - // FIXME: pseudo-doc the above automatically generated on-event functions - - // syntactic sugar for DOM events - array.forEach(NodeList.events, function(evt){ - var _oe = "on" + evt; - nlp[_oe] = function(a, b){ - return this.connect(_oe, a, b); - }; - // FIXME: should these events trigger publishes? - /* - return (a ? this.connect(_oe, a, b) : - this.forEach(function(n){ - // FIXME: - // listeners get buried by - // addEventListener and can't be dug back - // out to be triggered externally. - // see: - // http://developer.mozilla.org/en/docs/DOM:element - - console.log(n, evt, _oe); - - // FIXME: need synthetic event support! - var _e = { target: n, faux: true, type: evt }; - // dojo._event_listener._synthesizeEvent({}, { target: n, faux: true, type: evt }); - try{ n[evt](_e); }catch(e){ console.log(e); } - try{ n[_oe](_e); }catch(e){ console.log(e); } - }) - ); - */ - } - ); - - dojo.NodeList = NodeList; - return dojo.NodeList; -}); diff --git a/lib/dojo/_base/array.js.uncompressed.js b/lib/dojo/_base/array.js.uncompressed.js deleted file mode 100644 index 06e733b4b..000000000 --- a/lib/dojo/_base/array.js.uncompressed.js +++ /dev/null @@ -1,343 +0,0 @@ -define("dojo/_base/array", ["./kernel", "../has", "./lang"], function(dojo, has, lang){ - // module: - // dojo/_base/array - // summary: - // This module defines the Javascript v1.6 array extensions. - - /*===== - dojo.indexOf = function(arr, value, fromIndex, findLast){ - // summary: - // locates the first index of the provided value in the - // passed array. If the value is not found, -1 is returned. - // description: - // This method corresponds to the JavaScript 1.6 Array.indexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript - // 1.6's indexOf skips the holes in the sparse array. - // For details on this method, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/indexOf - // arr: Array - // value: Object - // fromIndex: Integer? - // findLast: Boolean? - // returns: Number - }; - dojo.lastIndexOf = function(arr, value, fromIndex){ - // summary: - // locates the last index of the provided value in the passed - // array. If the value is not found, -1 is returned. - // description: - // This method corresponds to the JavaScript 1.6 Array.lastIndexOf method, with one difference: when - // run over sparse arrays, the Dojo function invokes the callback for every index whereas JavaScript - // 1.6's lastIndexOf skips the holes in the sparse array. - // For details on this method, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/lastIndexOf - // arr: Array, - // value: Object, - // fromIndex: Integer? - // returns: Number - }; - dojo.forEach = function(arr, callback, thisObject){ - // summary: - // for every item in arr, callback is invoked. Return values are ignored. - // If you want to break out of the loop, consider using dojo.every() or dojo.some(). - // forEach does not allow breaking out of the loop over the items in arr. - // arr: - // the array to iterate over. If a string, operates on individual characters. - // callback: - // a function is invoked with three arguments: item, index, and array - // thisObject: - // may be used to scope the call to callback - // description: - // This function corresponds to the JavaScript 1.6 Array.forEach() method, with one difference: when - // run over sparse arrays, this implementation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's forEach skips the holes in the sparse array. - // For more details, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/forEach - // example: - // | // log out all members of the array: - // | dojo.forEach( - // | [ "thinger", "blah", "howdy", 10 ], - // | function(item){ - // | console.log(item); - // | } - // | ); - // example: - // | // log out the members and their indexes - // | dojo.forEach( - // | [ "thinger", "blah", "howdy", 10 ], - // | function(item, idx, arr){ - // | console.log(item, "at index:", idx); - // | } - // | ); - // example: - // | // use a scoped object member as the callback - // | - // | var obj = { - // | prefix: "logged via obj.callback:", - // | callback: function(item){ - // | console.log(this.prefix, item); - // | } - // | }; - // | - // | // specifying the scope function executes the callback in that scope - // | 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 ], - // | dojo.hitch(obj, "callback") - // | ); - // arr: Array|String - // callback: Function|String - // thisObject: Object? - }; - dojo.every = function(arr, callback, thisObject){ - // summary: - // Determines whether or not every item in arr satisfies the - // condition implemented by callback. - // arr: Array|String - // the array to iterate on. If a string, operates on individual characters. - // callback: Function|String - // a function is invoked with three arguments: item, index, - // and array and returns true if the condition is met. - // thisObject: Object? - // may be used to scope the call to callback - // returns: Boolean - // description: - // This function corresponds to the JavaScript 1.6 Array.every() method, with one difference: when - // run over sparse arrays, this implementation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's every skips the holes in the sparse array. - // For more details, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/every - // example: - // | // returns false - // | dojo.every([1, 2, 3, 4], function(item){ return item>1; }); - // example: - // | // returns true - // | dojo.every([1, 2, 3, 4], function(item){ return item>0; }); - }; - dojo.some = function(arr, callback, thisObject){ - // summary: - // Determines whether or not any item in arr satisfies the - // condition implemented by callback. - // arr: Array|String - // the array to iterate over. If a string, operates on individual characters. - // callback: Function|String - // a function is invoked with three arguments: item, index, - // and array and returns true if the condition is met. - // thisObject: Object? - // may be used to scope the call to callback - // returns: Boolean - // description: - // This function corresponds to the JavaScript 1.6 Array.some() method, with one difference: when - // run over sparse arrays, this implementation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's some skips the holes in the sparse array. - // For more details, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/some - // example: - // | // is true - // | dojo.some([1, 2, 3, 4], function(item){ return item>1; }); - // example: - // | // is false - // | dojo.some([1, 2, 3, 4], function(item){ return item<1; }); - }; - dojo.map = function(arr, callback, thisObject){ - // summary: - // applies callback to each element of arr and returns - // an Array with the results - // arr: Array|String - // the array to iterate on. If a string, operates on - // individual characters. - // callback: Function|String - // a function is invoked with three arguments, (item, index, - // array), and returns a value - // thisObject: Object? - // may be used to scope the call to callback - // returns: Array - // description: - // This function corresponds to the JavaScript 1.6 Array.map() method, with one difference: when - // run over sparse arrays, this implementation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's map skips the holes in the sparse array. - // For more details, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map - // example: - // | // returns [2, 3, 4, 5] - // | dojo.map([1, 2, 3, 4], function(item){ return item+1 }); - }; - dojo.filter = function(arr, callback, thisObject){ - // summary: - // Returns a new Array with those items from arr that match the - // condition implemented by callback. - // arr: Array - // the array to iterate over. - // callback: Function|String - // a function that is invoked with three arguments (item, - // index, array). The return of this function is expected to - // be a boolean which determines whether the passed-in item - // will be included in the returned array. - // thisObject: Object? - // may be used to scope the call to callback - // returns: Array - // description: - // This function corresponds to the JavaScript 1.6 Array.filter() method, with one difference: when - // run over sparse arrays, this implementation passes the "holes" in the sparse array to - // the callback function with a value of undefined. JavaScript 1.6's filter skips the holes in the sparse array. - // For more details, see: - // https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter - // example: - // | // returns [2, 3, 4] - // | dojo.filter([1, 2, 3, 4], function(item){ return item>1; }); - }; - =====*/ - - // our old simple function builder stuff - var cache = {}, u, array; // the export object - - function clearCache(){ - cache = {}; - } - - function buildFn(fn){ - return cache[fn] = new Function("item", "index", "array", fn); // Function - } - // magic snippet: if(typeof fn == "string") fn = cache[fn] || buildFn(fn); - - // every & some - - function everyOrSome(some){ - var every = !some; - return function(a, fn, o){ - var i = 0, l = a && a.length || 0, result; - if(l && typeof a == "string") a = a.split(""); - if(typeof fn == "string") fn = cache[fn] || buildFn(fn); - if(o){ - for(; i < l; ++i){ - result = !fn.call(o, a[i], i, a); - if(some ^ result){ - return !result; - } - } - }else{ - for(; i < l; ++i){ - result = !fn(a[i], i, a); - if(some ^ result){ - return !result; - } - } - } - return every; // Boolean - } - } - // var every = everyOrSome(false), some = everyOrSome(true); - - // indexOf, lastIndexOf - - function index(up){ - var delta = 1, lOver = 0, uOver = 0; - if(!up){ - delta = lOver = uOver = -1; - } - return function(a, x, from, last){ - if(last && delta > 0){ - // TODO: why do we use a non-standard signature? why do we need "last"? - return array.lastIndexOf(a, x, from); - } - var l = a && a.length || 0, end = up ? l + uOver : lOver, i; - if(from === u){ - i = up ? lOver : l + uOver; - }else{ - if(from < 0){ - i = l + from; - if(i < 0){ - i = lOver; - } - }else{ - i = from >= l ? l + uOver : from; - } - } - if(l && typeof a == "string") a = a.split(""); - for(; i != end; i += delta){ - if(a[i] == x){ - return i; // Number - } - } - return -1; // Number - } - } - // var indexOf = index(true), lastIndexOf = index(false); - - function forEach(a, fn, o){ - var i = 0, l = a && a.length || 0; - if(l && typeof a == "string") a = a.split(""); - if(typeof fn == "string") fn = cache[fn] || buildFn(fn); - if(o){ - for(; i < l; ++i){ - fn.call(o, a[i], i, a); - } - }else{ - for(; i < l; ++i){ - fn(a[i], i, a); - } - } - } - - function map(a, fn, o, Ctr){ - // TODO: why do we have a non-standard signature here? do we need "Ctr"? - var i = 0, l = a && a.length || 0, out = new (Ctr || Array)(l); - if(l && typeof a == "string") a = a.split(""); - if(typeof fn == "string") fn = cache[fn] || buildFn(fn); - if(o){ - for(; i < l; ++i){ - out[i] = fn.call(o, a[i], i, a); - } - }else{ - for(; i < l; ++i){ - out[i] = fn(a[i], i, a); - } - } - return out; // Array - } - - function filter(a, fn, o){ - // TODO: do we need "Ctr" here like in map()? - var i = 0, l = a && a.length || 0, out = [], value; - if(l && typeof a == "string") a = a.split(""); - if(typeof fn == "string") fn = cache[fn] || buildFn(fn); - if(o){ - for(; i < l; ++i){ - value = a[i]; - if(fn.call(o, value, i, a)){ - out.push(value); - } - } - }else{ - for(; i < l; ++i){ - value = a[i]; - if(fn(value, i, a)){ - out.push(value); - } - } - } - return out; // Array - } - - array = { - every: everyOrSome(false), - some: everyOrSome(true), - indexOf: index(true), - lastIndexOf: index(false), - forEach: forEach, - map: map, - filter: filter, - clearCache: clearCache - }; - - 1 && lang.mixin(dojo, array); - - /*===== return dojo.array; =====*/ - return array; -}); diff --git a/lib/dojo/_base/browser.js.uncompressed.js b/lib/dojo/_base/browser.js.uncompressed.js deleted file mode 100644 index 8f186e2a1..000000000 --- a/lib/dojo/_base/browser.js.uncompressed.js +++ /dev/null @@ -1,21 +0,0 @@ -if(require.has){ - require.has.add("config-selectorEngine", "acme"); -} -define("dojo/_base/browser", [ - "../ready", - "./kernel", - "./connect", // until we decide if connect is going back into non-browser environments - "./unload", - "./window", - "./event", - "./html", - "./NodeList", - "../query", - "./xhr", - "./fx"], function(dojo) { - // module: - // dojo/_base/browser - // summary: - // This module causes the browser-only base modules to be loaded. - return dojo; -}); diff --git a/lib/dojo/_base/config.js.uncompressed.js b/lib/dojo/_base/config.js.uncompressed.js deleted file mode 100644 index 290efd10a..000000000 --- a/lib/dojo/_base/config.js.uncompressed.js +++ /dev/null @@ -1,174 +0,0 @@ -define("dojo/_base/config", ["../has", "require"], function(has, require){ - // module: - // dojo/_base/config - // summary: - // This module defines the user configuration during bootstrap. - // description: - // By defining user configuration as a module value, an entire configuration can be specified in a build, - // thereby eliminating the need for sniffing and or explicitly setting in the global variable dojoConfig. - // Also, when multiple instances of dojo exist in a single application, each will necessarily be located - // at an unique absolute module identifier as given by the package configuration. Implementing configuration - // as a module allows for specifying unique, per-instance configurations. - // example: - // Create a second instance of dojo with a different, instance-uniqe configuration (assume the loader and - // dojo.js are already loaded). - // | // specify a configuration that creates a new instance of dojo at the absolute module identifier "myDojo" - // | require({ - // | packages:[{ - // | name:"myDojo", - // | location:".", //assume baseUrl points to dojo.js - // | }] - // | }); - // | - // | // specify a configuration for the myDojo instance - // | define("myDojo/config", { - // | // normal configuration variables go here, e.g., - // | locale:"fr-ca" - // | }); - // | - // | // load and use the new instance of dojo - // | require(["myDojo"], function(dojo) { - // | // dojo is the new instance of dojo - // | // use as required - // | }); - - var result = {}; - if(1){ - // must be the dojo loader; take a shallow copy of require.rawConfig - var src = require.rawConfig, p; - for(p in src){ - result[p] = src[p]; - } - }else{ - var adviseHas = function(featureSet, prefix, booting){ - for(p in featureSet){ - p!="has" && has.add(prefix + p, featureSet[p], 0, booting); - } - }; - result = 1 ? - // must be a built version of the dojo loader; all config stuffed in require.rawConfig - require.rawConfig : - // a foreign loader - this.dojoConfig || this.djConfig || {}; - adviseHas(result, "config", 1); - adviseHas(result.has, "", 1); - } - return result; - -/*===== -// note: -// 'dojoConfig' does not exist under 'dojo.*' so that it can be set before the -// 'dojo' variable exists. -// note: -// Setting any of these variables *after* the library has loaded does -// nothing at all. - -// FIXME: can we document these on dojo.config object and explain they must be set via djConfig/dojoConfig global prior to loading dojo.js - -dojoConfig = { - // summary: - // Application code can set the global 'dojoConfig' prior to loading - // the library to control certain global settings for how dojo works. - // - // isDebug: Boolean - // Defaults to `false`. If set to `true`, ensures that Dojo provides - // extended debugging feedback via Firebug. If Firebug is not available - // on your platform, setting `isDebug` to `true` will force Dojo to - // pull in (and display) the version of Firebug Lite which is - // integrated into the Dojo distribution, thereby always providing a - // debugging/logging console when `isDebug` is enabled. Note that - // Firebug's `console.*` methods are ALWAYS defined by Dojo. If - // `isDebug` is false and you are on a platform without Firebug, these - // methods will be defined as no-ops. - isDebug: false, - // locale: String - // The locale to assume for loading localized resources in this page, - // specified according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt). - // Must be specified entirely in lowercase, e.g. `en-us` and `zh-cn`. - // See the documentation for `dojo.i18n` and `dojo.requireLocalization` - // for details on loading localized resources. If no locale is specified, - // Dojo assumes the locale of the user agent, according to `navigator.userLanguage` - // or `navigator.language` properties. - locale: undefined, - // extraLocale: Array - // No default value. Specifies additional locales whose - // resources should also be loaded alongside the default locale when - // calls to `dojo.requireLocalization()` are processed. - extraLocale: undefined, - // baseUrl: String - // The directory in which `dojo.js` is located. Under normal - // conditions, Dojo auto-detects the correct location from which it - // was loaded. You may need to manually configure `baseUrl` in cases - // where you have renamed `dojo.js` or in which `` tags confuse - // some browsers (e.g. IE 6). The variable `dojo.baseUrl` is assigned - // either the value of `djConfig.baseUrl` if one is provided or the - // auto-detected root if not. Other modules are located relative to - // this path. The path should end in a slash. - baseUrl: undefined, - // modulePaths: Object - // A map of module names to paths relative to `dojo.baseUrl`. The - // key/value pairs correspond directly to the arguments which - // `dojo.registerModulePath` accepts. Specifiying - // `djConfig.modulePaths = { "foo": "../../bar" }` is the equivalent - // of calling `dojo.registerModulePath("foo", "../../bar");`. Multiple - // modules may be configured via `djConfig.modulePaths`. - modulePaths: {}, - // 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 - // dojo.required modules have loaded. Only works with a built dojo.js, - // it does not work the dojo.js directly from source control. - afterOnLoad: false, - // addOnLoad: Function or Array - // Adds a callback via dojo.addOnLoad. Useful when Dojo is added after - // the page loads and djConfig.afterOnLoad is true. Supports the same - // arguments as dojo.addOnLoad. When using a function reference, use - // `djConfig.addOnLoad = function(){};`. For object with function name use - // `djConfig.addOnLoad = [myObject, "functionName"];` and for object with - // function reference use - // `djConfig.addOnLoad = [myObject, function(){}];` - addOnLoad: null, - // require: Array - // An array of module names to be loaded immediately after dojo.js has been included - // in a page. - require: [], - // defaultDuration: Array - // Default duration, in milliseconds, for wipe and fade animations within dijits. - // Assigned to dijit.defaultDuration. - defaultDuration: 200, - // dojoBlankHtmlUrl: String - // Used by some modules to configure an empty iframe. Used by dojo.io.iframe and - // dojo.back, and dijit popup support in IE where an iframe is needed to make sure native - // controls do not bleed through the popups. Normally this configuration variable - // does not need to be set, except when using cross-domain/CDN Dojo builds. - // Save dojo/resources/blank.html to your domain and set `djConfig.dojoBlankHtmlUrl` - // to the path on your domain your copy of blank.html. - dojoBlankHtmlUrl: undefined, - // ioPublish: Boolean? - // Set this to true to enable publishing of topics for the different phases of - // IO operations. Publishing is done via dojo.publish. See dojo.__IoPublish for a list - // of topics that are published. - ioPublish: false, - // useCustomLogger: Anything? - // If set to a value that evaluates to true such as a string or array and - // isDebug is true and Firebug is not available or running, then it bypasses - // the creation of Firebug Lite allowing you to define your own console object. - useCustomLogger: undefined, - // transparentColor: Array - // Array containing the r, g, b components used as transparent color in dojo.Color; - // if undefined, [255,255,255] (white) will be used. - transparentColor: undefined, - // skipIeDomLoaded: Boolean - // For IE only, skip the DOMContentLoaded hack used. Sometimes it can cause an Operation - // Aborted error if the rest of the page triggers script defers before the DOM is ready. - // If this is config value is set to true, then dojo.addOnLoad callbacks will not be - // triggered until the page load event, which is after images and iframes load. If you - // want to trigger the callbacks sooner, you can put a script block in the bottom of - // your HTML that calls dojo._loadInit();. If you are using multiversion support, change - // "dojo." to the appropriate scope name for dojo. - skipIeDomLoaded: false -} -=====*/ -}); - diff --git a/lib/dojo/_base/connect.js.uncompressed.js b/lib/dojo/_base/connect.js.uncompressed.js deleted file mode 100644 index 69de83e70..000000000 --- a/lib/dojo/_base/connect.js.uncompressed.js +++ /dev/null @@ -1,400 +0,0 @@ -define("dojo/_base/connect", ["./kernel", "../on", "../topic", "../aspect", "./event", "../mouse", "./sniff", "./lang", "../keys"], function(kernel, on, hub, aspect, eventModule, mouse, has, lang){ -// module: -// dojo/_base/connect -// summary: -// This module defines the dojo.connect API. -// This modules also provides keyboard event handling helpers. -// This module exports an extension event for emulating Firefox's keypress handling. -// However, this extension event exists primarily for backwards compatibility and -// is not recommended. WebKit and IE uses an alternate keypress handling (only -// firing for printable characters, to distinguish from keydown events), and most -// consider the WebKit/IE behavior more desirable. -has.add("events-keypress-typed", function(){ // keypresses should only occur a printable character is hit - var testKeyEvent = {charCode: 0}; - try{ - testKeyEvent = document.createEvent("KeyboardEvent"); - (testKeyEvent.initKeyboardEvent || testKeyEvent.initKeyEvent).call(testKeyEvent, "keypress", true, true, null, false, false, false, false, 9, 3); - }catch(e){} - return testKeyEvent.charCode == 0 && !has("opera"); -}); - -function connect_(obj, event, context, method, dontFix){ - method = lang.hitch(context, method); - if(!obj || !(obj.addEventListener || obj.attachEvent)){ - // it is a not a DOM node and we are using the dojo.connect style of treating a - // method like an event, must go right to aspect - return aspect.after(obj || kernel.global, event, method, true); - } - if(typeof event == "string" && event.substring(0, 2) == "on"){ - event = event.substring(2); - } - if(!obj){ - obj = kernel.global; - } - if(!dontFix){ - switch(event){ - // dojo.connect has special handling for these event types - case "keypress": - event = keypress; - break; - case "mouseenter": - event = mouse.enter; - break; - case "mouseleave": - event = mouse.leave; - break; - } - } - return on(obj, event, method, dontFix); -} - -var _punctMap = { - 106:42, - 111:47, - 186:59, - 187:43, - 188:44, - 189:45, - 190:46, - 191:47, - 192:96, - 219:91, - 220:92, - 221:93, - 222:39, - 229:113 -}; -var evtCopyKey = has("mac") ? "metaKey" : "ctrlKey"; - - -var _synthesizeEvent = function(evt, props){ - var faux = lang.mixin({}, evt, props); - setKeyChar(faux); - // FIXME: would prefer to use lang.hitch: lang.hitch(evt, evt.preventDefault); - // but it throws an error when preventDefault is invoked on Safari - // does Event.preventDefault not support "apply" on Safari? - faux.preventDefault = function(){ evt.preventDefault(); }; - faux.stopPropagation = function(){ evt.stopPropagation(); }; - return faux; -}; -function setKeyChar(evt){ - evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; - evt.charOrCode = evt.keyChar || evt.keyCode; -} -var keypress; -if(has("events-keypress-typed")){ - // this emulates Firefox's keypress behavior where every keydown can correspond to a keypress - var _trySetKeyCode = function(e, code){ - try{ - // squelch errors when keyCode is read-only - // (e.g. if keyCode is ctrl or shift) - return (e.keyCode = code); - }catch(e){ - return 0; - } - }; - keypress = function(object, listener){ - var keydownSignal = on(object, "keydown", function(evt){ - // munge key/charCode - var k=evt.keyCode; - // These are Windows Virtual Key Codes - // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/VirtualKeyCodes.asp - var unprintable = (k!=13 || (has("ie") >= 9 && !has("quirks"))) && k!=32 && (k!=27||!has("ie")) && (k<48||k>90) && (k<96||k>111) && (k<186||k>192) && (k<219||k>222) && k!=229; - // synthesize keypress for most unprintables and CTRL-keys - if(unprintable||evt.ctrlKey){ - var c = unprintable ? 0 : k; - if(evt.ctrlKey){ - if(k==3 || k==13){ - return listener.call(evt.currentTarget, evt); // IE will post CTRL-BREAK, CTRL-ENTER as keypress natively - }else if(c>95 && c<106){ - c -= 48; // map CTRL-[numpad 0-9] to ASCII - }else if((!evt.shiftKey)&&(c>=65&&c<=90)){ - c += 32; // map CTRL-[A-Z] to lowercase - }else{ - c = _punctMap[c] || c; // map other problematic CTRL combinations to ASCII - } - } - // simulate a keypress event - var faux = _synthesizeEvent(evt, {type: 'keypress', faux: true, charCode: c}); - listener.call(evt.currentTarget, faux); - if(has("ie")){ - _trySetKeyCode(evt, faux.keyCode); - } - } - }); - var keypressSignal = on(object, "keypress", function(evt){ - var c = evt.charCode; - c = c>=32 ? c : 0; - evt = _synthesizeEvent(evt, {charCode: c, faux: true}); - return listener.call(this, evt); - }); - return { - remove: function(){ - keydownSignal.remove(); - keypressSignal.remove(); - } - }; - }; -}else{ - if(has("opera")){ - keypress = function(object, listener){ - return on(object, "keypress", function(evt){ - var c = evt.which; - if(c==3){ - c=99; // Mozilla maps CTRL-BREAK to CTRL-c - } - // can't trap some keys at all, like INSERT and DELETE - // there is no differentiating info between DELETE and ".", or INSERT and "-" - c = c<32 && !evt.shiftKey ? 0 : c; - if(evt.ctrlKey && !evt.shiftKey && c>=65 && c<=90){ - // lowercase CTRL-[A-Z] keys - c += 32; - } - return listener.call(this, _synthesizeEvent(evt, { charCode: c })); - }); - }; - }else{ - keypress = function(object, listener){ - return on(object, "keypress", function(evt){ - setKeyChar(evt); - return listener.call(this, evt); - }); - }; - } -} - -var connect = { - _keypress:keypress, - - connect:function(obj, event, context, method, dontFix){ - // normalize arguments - var a=arguments, args=[], i=0; - // if a[0] is a String, obj was omitted - args.push(typeof a[0] == "string" ? null : a[i++], a[i++]); - // if the arg-after-next is a String or Function, context was NOT omitted - var a1 = a[i+1]; - args.push(typeof a1 == "string" || typeof a1 == "function" ? a[i++] : null, a[i++]); - // absorb any additional arguments - for(var l=a.length; i= 0; --j){ - proto = lin[j].prototype; - if(!proto.hasOwnProperty("declaredClass")){ - proto.declaredClass = "uniqName_" + (counter++); - } - name = proto.declaredClass; - if(!nameMap.hasOwnProperty(name)){ - nameMap[name] = {count: 0, refs: [], cls: lin[j]}; - ++clsCount; - } - rec = nameMap[name]; - if(top && top !== rec){ - rec.refs.push(top); - ++top.count; - } - top = rec; - } - ++top.count; - roots[0].refs.push(top); - } - - // remove classes without external references recursively - while(roots.length){ - top = roots.pop(); - result.push(top.cls); - --clsCount; - // optimization: follow a single-linked chain - while(refs = top.refs, refs.length == 1){ - top = refs[0]; - if(!top || --top.count){ - // branch or end of chain => do not end to roots - top = 0; - break; - } - result.push(top.cls); - --clsCount; - } - if(top){ - // branch - for(i = 0, l = refs.length; i < l; ++i){ - top = refs[i]; - if(!--top.count){ - roots.push(top); - } - } - } - } - if(clsCount){ - err("can't build consistent linearization", className); - } - - // calculate the superclass offset - base = bases[0]; - result[0] = base ? - base._meta && base === result[result.length - base._meta.bases.length] ? - base._meta.bases.length : 1 : 0; - - return result; - } - - function inherited(args, a, f){ - var name, chains, bases, caller, meta, base, proto, opf, pos, - cache = this._inherited = this._inherited || {}; - - // crack arguments - if(typeof args == "string"){ - name = args; - args = a; - a = f; - } - f = 0; - - caller = args.callee; - name = name || caller.nom; - if(!name){ - err("can't deduce a name to call inherited()", this.declaredClass); - } - - meta = this.constructor._meta; - bases = meta.bases; - - pos = cache.p; - if(name != cname){ - // method - if(cache.c !== caller){ - // cache bust - pos = 0; - base = bases[0]; - meta = base._meta; - if(meta.hidden[name] !== caller){ - // error detection - chains = meta.chains; - if(chains && typeof chains[name] == "string"){ - err("calling chained method with inherited: " + name, this.declaredClass); - } - // find caller - do{ - meta = base._meta; - proto = base.prototype; - if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){ - break; - } - }while(base = bases[++pos]); // intentional assignment - pos = base ? pos : -1; - } - } - // find next - base = bases[++pos]; - if(base){ - proto = base.prototype; - if(base._meta && proto.hasOwnProperty(name)){ - f = proto[name]; - }else{ - opf = op[name]; - do{ - proto = base.prototype; - f = proto[name]; - if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){ - break; - } - }while(base = bases[++pos]); // intentional assignment - } - } - f = base && f || op[name]; - }else{ - // constructor - if(cache.c !== caller){ - // cache bust - pos = 0; - meta = bases[0]._meta; - if(meta && meta.ctor !== caller){ - // error detection - chains = meta.chains; - if(!chains || chains.constructor !== "manual"){ - err("calling chained constructor with inherited", this.declaredClass); - } - // find caller - while(base = bases[++pos]){ // intentional assignment - meta = base._meta; - if(meta && meta.ctor === caller){ - break; - } - } - pos = base ? pos : -1; - } - } - // find next - while(base = bases[++pos]){ // intentional assignment - meta = base._meta; - f = meta ? meta.ctor : base; - if(f){ - break; - } - } - f = base && f; - } - - // cache the found super method - cache.c = f; - cache.p = pos; - - // now we have the result - if(f){ - return a === true ? f : f.apply(this, a || args); - } - // intentionally no return if a super method was not found - } - - function getInherited(name, args){ - if(typeof name == "string"){ - return this.__inherited(name, args, true); - } - return this.__inherited(name, true); - } - - function inherited__debug(args, a1, a2){ - var f = this.getInherited(args, a1); - if(f){ return f.apply(this, a2 || a1 || args); } - // intentionally no return if a super method was not found - } - - var inheritedImpl = dojo.config.isDebug ? inherited__debug : inherited; - - // emulation of "instanceof" - function isInstanceOf(cls){ - var bases = this.constructor._meta.bases; - for(var i = 0, l = bases.length; i < l; ++i){ - if(bases[i] === cls){ - return true; - } - } - return this instanceof cls; - } - - function mixOwn(target, source){ - // add props adding metadata for incoming functions skipping a constructor - for(var name in source){ - if(name != cname && source.hasOwnProperty(name)){ - target[name] = source[name]; - } - } - if(has("bug-for-in-skips-shadowed")){ - for(var extraNames= lang._extraNames, i= extraNames.length; i;){ - name = extraNames[--i]; - if(name != cname && source.hasOwnProperty(name)){ - target[name] = source[name]; - } - } - } - } - - // implementation of safe mixin function - function safeMixin(target, source){ - var name, t; - // add props adding metadata for incoming functions skipping a constructor - for(name in source){ - t = source[name]; - if((t !== op[name] || !(name in op)) && name != cname){ - if(opts.call(t) == "[object Function]"){ - // non-trivial function method => attach its name - t.nom = name; - } - target[name] = t; - } - } - if(has("bug-for-in-skips-shadowed")){ - for(var extraNames= lang._extraNames, i= extraNames.length; i;){ - name = extraNames[--i]; - t = source[name]; - if((t !== op[name] || !(name in op)) && name != cname){ - if(opts.call(t) == "[object Function]"){ - // non-trivial function method => attach its name - t.nom = name; - } - target[name] = t; - } - } - } - return target; - } - - function extend(source){ - declare.safeMixin(this.prototype, source); - return this; - } - - // chained constructor compatible with the legacy dojo.declare() - function chainedConstructor(bases, ctorSpecial){ - return function(){ - var a = arguments, args = a, a0 = a[0], f, i, m, - l = bases.length, preArgs; - - if(!(this instanceof a.callee)){ - // not called via new, so force it - return applyNew(a); - } - - //this._inherited = {}; - // perform the shaman's rituals of the original dojo.declare() - // 1) call two types of the preamble - if(ctorSpecial && (a0 && a0.preamble || this.preamble)){ - // full blown ritual - preArgs = new Array(bases.length); - // prepare parameters - preArgs[0] = a; - for(i = 0;;){ - // process the preamble of the 1st argument - a0 = a[0]; - if(a0){ - f = a0.preamble; - if(f){ - a = f.apply(this, a) || a; - } - } - // process the preamble of this class - f = bases[i].prototype; - f = f.hasOwnProperty("preamble") && f.preamble; - if(f){ - a = f.apply(this, a) || a; - } - // one peculiarity of the preamble: - // it is called if it is not needed, - // e.g., there is no constructor to call - // let's watch for the last constructor - // (see ticket #9795) - if(++i == l){ - break; - } - preArgs[i] = a; - } - } - // 2) call all non-trivial constructors using prepared arguments - for(i = l - 1; i >= 0; --i){ - f = bases[i]; - m = f._meta; - f = m ? m.ctor : f; - if(f){ - f.apply(this, preArgs ? preArgs[i] : a); - } - } - // 3) continue the original ritual: call the postscript - f = this.postscript; - if(f){ - f.apply(this, args); - } - }; - } - - - // chained constructor compatible with the legacy dojo.declare() - function singleConstructor(ctor, ctorSpecial){ - return function(){ - var a = arguments, t = a, a0 = a[0], f; - - if(!(this instanceof a.callee)){ - // not called via new, so force it - return applyNew(a); - } - - //this._inherited = {}; - // perform the shaman's rituals of the original dojo.declare() - // 1) call two types of the preamble - if(ctorSpecial){ - // full blown ritual - if(a0){ - // process the preamble of the 1st argument - f = a0.preamble; - if(f){ - t = f.apply(this, t) || t; - } - } - f = this.preamble; - if(f){ - // process the preamble of this class - f.apply(this, t); - // one peculiarity of the preamble: - // it is called even if it is not needed, - // e.g., there is no constructor to call - // let's watch for the last constructor - // (see ticket #9795) - } - } - // 2) call a constructor - if(ctor){ - ctor.apply(this, a); - } - // 3) continue the original ritual: call the postscript - f = this.postscript; - if(f){ - f.apply(this, a); - } - }; - } - - // plain vanilla constructor (can use inherited() to call its base constructor) - function simpleConstructor(bases){ - return function(){ - var a = arguments, i = 0, f, m; - - if(!(this instanceof a.callee)){ - // not called via new, so force it - return applyNew(a); - } - - //this._inherited = {}; - // perform the shaman's rituals of the original dojo.declare() - // 1) do not call the preamble - // 2) call the top constructor (it can use this.inherited()) - for(; f = bases[i]; ++i){ // intentional assignment - m = f._meta; - f = m ? m.ctor : f; - if(f){ - f.apply(this, a); - break; - } - } - // 3) call the postscript - f = this.postscript; - if(f){ - f.apply(this, a); - } - }; - } - - function chain(name, bases, reversed){ - return function(){ - var b, m, f, i = 0, step = 1; - if(reversed){ - i = bases.length - 1; - step = -1; - } - for(; b = bases[i]; i += step){ // intentional assignment - m = b._meta; - f = (m ? m.hidden : b.prototype)[name]; - if(f){ - f.apply(this, arguments); - } - } - }; - } - - // forceNew(ctor) - // return a new object that inherits from ctor.prototype but - // without actually running ctor on the object. - function forceNew(ctor){ - // create object with correct prototype using a do-nothing - // constructor - xtor.prototype = ctor.prototype; - var t = new xtor; - xtor.prototype = null; // clean up - return t; - } - - // applyNew(args) - // just like 'new ctor()' except that the constructor and its arguments come - // from args, which must be an array or an arguments object - function applyNew(args){ - // create an object with ctor's prototype but without - // calling ctor on it. - var ctor = args.callee, t = forceNew(ctor); - // execute the real constructor on the new object - ctor.apply(t, args); - return t; - } - - function declare(className, superclass, props){ - // crack parameters - if(typeof className != "string"){ - props = superclass; - superclass = className; - className = ""; - } - props = props || {}; - - var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass; - - // build a prototype - if(opts.call(superclass) == "[object Array]"){ - // C3 MRO - bases = c3mro(superclass, className); - t = bases[0]; - mixins = bases.length - t; - superclass = bases[mixins]; - }else{ - bases = [0]; - if(superclass){ - if(opts.call(superclass) == "[object Function]"){ - t = superclass._meta; - bases = bases.concat(t ? t.bases : superclass); - }else{ - 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?", className); - } - } - if(superclass){ - for(i = mixins - 1;; --i){ - proto = forceNew(superclass); - if(!i){ - // stop if nothing to add (the last base) - break; - } - // mix in properties - t = bases[i]; - (t._meta ? mixOwn : mix)(proto, t.prototype); - // chain in new constructor - ctor = new Function; - ctor.superclass = superclass; - ctor.prototype = proto; - superclass = proto.constructor = ctor; - } - }else{ - proto = {}; - } - // add all properties - declare.safeMixin(proto, props); - // add constructor - t = props.constructor; - if(t !== op.constructor){ - t.nom = cname; - proto.constructor = t; - } - - // collect chains and flags - for(i = mixins - 1; i; --i){ // intentional assignment - t = bases[i]._meta; - if(t && t.chains){ - chains = mix(chains || {}, t.chains); - } - } - if(proto["-chains-"]){ - chains = mix(chains || {}, proto["-chains-"]); - } - - // build ctor - t = !chains || !chains.hasOwnProperty(cname); - bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) : - (bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t)); - - // add meta information to the constructor - ctor._meta = {bases: bases, hidden: props, chains: chains, - parents: parents, ctor: props.constructor}; - ctor.superclass = superclass && superclass.prototype; - ctor.extend = extend; - ctor.prototype = proto; - proto.constructor = ctor; - - // add "standard" methods to the prototype - proto.getInherited = getInherited; - proto.isInstanceOf = isInstanceOf; - proto.inherited = inheritedImpl; - proto.__inherited = inherited; - - // add name if specified - if(className){ - proto.declaredClass = className; - lang.setObject(className, ctor); - } - - // build chains and add them to the prototype - if(chains){ - for(name in chains){ - if(proto[name] && typeof chains[name] == "string" && name != cname){ - t = proto[name] = chain(name, bases, chains[name] === "after"); - t.nom = name; - } - } - } - // chained methods do not return values - // no need to chain "invisible" functions - - return ctor; // Function - } - - /*===== - dojo.declare = function(className, superclass, props){ - // summary: - // Create a feature-rich constructor from compact notation. - // className: String?: - // The optional name of the constructor (loosely, a "class") - // stored in the "declaredClass" property in the created prototype. - // It will be used as a global name for a created constructor. - // superclass: Function|Function[]: - // May be null, a Function, or an Array of Functions. This argument - // specifies a list of bases (the left-most one is the most deepest - // base). - // props: Object: - // An object whose properties are copied to the created prototype. - // Add an instance-initialization function by making it a property - // named "constructor". - // returns: - // New constructor function. - // description: - // Create a constructor using a compact notation for inheritance and - // prototype extension. - // - // Mixin ancestors provide a type of multiple inheritance. - // Prototypes of mixin ancestors are copied to the new class: - // changes to mixin prototypes will not affect classes to which - // they have been mixed in. - // - // Ancestors can be compound classes created by this version of - // dojo.declare. In complex cases all base classes are going to be - // linearized according to C3 MRO algorithm - // (see http://www.python.org/download/releases/2.3/mro/ for more - // details). - // - // "className" is cached in "declaredClass" property of the new class, - // if it was supplied. The immediate super class will be cached in - // "superclass" property of the new class. - // - // Methods in "props" will be copied and modified: "nom" property - // (the declared name of the method) will be added to all copied - // functions to help identify them for the internal machinery. Be - // very careful, while reusing methods: if you use the same - // function under different names, it can produce errors in some - // cases. - // - // It is possible to use constructors created "manually" (without - // dojo.declare) as bases. They will be called as usual during the - // creation of an instance, their methods will be chained, and even - // called by "this.inherited()". - // - // Special property "-chains-" governs how to chain methods. It is - // a dictionary, which uses method names as keys, and hint strings - // as values. If a hint string is "after", this method will be - // called after methods of its base classes. If a hint string is - // "before", this method will be called before methods of its base - // classes. - // - // If "constructor" is not mentioned in "-chains-" property, it will - // be chained using the legacy mode: using "after" chaining, - // calling preamble() method before each constructor, if available, - // and calling postscript() after all constructors were executed. - // If the hint is "after", it is chained as a regular method, but - // postscript() will be called after the chain of constructors. - // "constructor" cannot be chained "before", but it allows - // a special hint string: "manual", which means that constructors - // are not going to be chained in any way, and programmer will call - // them manually using this.inherited(). In the latter case - // postscript() will be called after the construction. - // - // All chaining hints are "inherited" from base classes and - // potentially can be overridden. Be very careful when overriding - // hints! Make sure that all chained methods can work in a proposed - // manner of chaining. - // - // Once a method was chained, it is impossible to unchain it. The - // only exception is "constructor". You don't need to define a - // method in order to supply a chaining hint. - // - // If a method is chained, it cannot use this.inherited() because - // all other methods in the hierarchy will be called automatically. - // - // Usually constructors and initializers of any kind are chained - // using "after" and destructors of any kind are chained as - // "before". Note that chaining assumes that chained methods do not - // return any value: any returned value will be discarded. - // - // example: - // | dojo.declare("my.classes.bar", my.classes.foo, { - // | // properties to be added to the class prototype - // | someValue: 2, - // | // initialization function - // | constructor: function(){ - // | this.myComplicatedObject = new ReallyComplicatedObject(); - // | }, - // | // other functions - // | someMethod: function(){ - // | doStuff(); - // | } - // | }); - // - // example: - // | var MyBase = dojo.declare(null, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var MyClass1 = dojo.declare(MyBase, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var MyClass2 = dojo.declare(MyBase, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var MyDiamond = dojo.declare([MyClass1, MyClass2], { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // - // example: - // | var F = function(){ console.log("raw constructor"); }; - // | F.prototype.method = function(){ - // | console.log("raw method"); - // | }; - // | var A = dojo.declare(F, { - // | constructor: function(){ - // | console.log("A.constructor"); - // | }, - // | method: function(){ - // | console.log("before calling F.method..."); - // | this.inherited(arguments); - // | console.log("...back in A"); - // | } - // | }); - // | new A().method(); - // | // will print: - // | // raw constructor - // | // A.constructor - // | // before calling F.method... - // | // raw method - // | // ...back in A - // - // example: - // | var A = dojo.declare(null, { - // | "-chains-": { - // | destroy: "before" - // | } - // | }); - // | var B = dojo.declare(A, { - // | constructor: function(){ - // | console.log("B.constructor"); - // | }, - // | destroy: function(){ - // | console.log("B.destroy"); - // | } - // | }); - // | var C = dojo.declare(B, { - // | constructor: function(){ - // | console.log("C.constructor"); - // | }, - // | destroy: function(){ - // | console.log("C.destroy"); - // | } - // | }); - // | new C().destroy(); - // | // prints: - // | // B.constructor - // | // C.constructor - // | // C.destroy - // | // B.destroy - // - // example: - // | var A = dojo.declare(null, { - // | "-chains-": { - // | constructor: "manual" - // | } - // | }); - // | var B = dojo.declare(A, { - // | constructor: function(){ - // | // ... - // | // call the base constructor with new parameters - // | this.inherited(arguments, [1, 2, 3]); - // | // ... - // | } - // | }); - // - // example: - // | var A = dojo.declare(null, { - // | "-chains-": { - // | m1: "before" - // | }, - // | m1: function(){ - // | console.log("A.m1"); - // | }, - // | m2: function(){ - // | console.log("A.m2"); - // | } - // | }); - // | var B = dojo.declare(A, { - // | "-chains-": { - // | m2: "after" - // | }, - // | m1: function(){ - // | console.log("B.m1"); - // | }, - // | m2: function(){ - // | console.log("B.m2"); - // | } - // | }); - // | var x = new B(); - // | x.m1(); - // | // prints: - // | // B.m1 - // | // A.m1 - // | x.m2(); - // | // prints: - // | // A.m2 - // | // B.m2 - return new Function(); // Function - }; - =====*/ - - /*===== - dojo.safeMixin = function(target, source){ - // summary: - // Mix in properties skipping a constructor and decorating functions - // like it is done by dojo.declare. - // target: Object - // Target object to accept new properties. - // source: Object - // Source object for new properties. - // description: - // This function is used to mix in properties like lang.mixin does, - // but it skips a constructor property and decorates functions like - // dojo.declare does. - // - // It is meant to be used with classes and objects produced with - // dojo.declare. Functions mixed in with dojo.safeMixin can use - // this.inherited() like normal methods. - // - // This function is used to implement extend() method of a constructor - // produced with dojo.declare(). - // - // example: - // | var A = dojo.declare(null, { - // | m1: function(){ - // | console.log("A.m1"); - // | }, - // | m2: function(){ - // | console.log("A.m2"); - // | } - // | }); - // | var B = dojo.declare(A, { - // | m1: function(){ - // | this.inherited(arguments); - // | console.log("B.m1"); - // | } - // | }); - // | B.extend({ - // | m2: function(){ - // | this.inherited(arguments); - // | console.log("B.m2"); - // | } - // | }); - // | var x = new B(); - // | dojo.safeMixin(x, { - // | m1: function(){ - // | this.inherited(arguments); - // | console.log("X.m1"); - // | }, - // | m2: function(){ - // | this.inherited(arguments); - // | console.log("X.m2"); - // | } - // | }); - // | x.m2(); - // | // prints: - // | // A.m1 - // | // B.m1 - // | // X.m1 - }; - =====*/ - - /*===== - Object.inherited = function(name, args, newArgs){ - // summary: - // Calls a super method. - // name: String? - // The optional method name. Should be the same as the caller's - // name. Usually "name" is specified in complex dynamic cases, when - // the calling method was dynamically added, undecorated by - // dojo.declare, and it cannot be determined. - // args: Arguments - // The caller supply this argument, which should be the original - // "arguments". - // newArgs: Object? - // If "true", the found function will be returned without - // executing it. - // If Array, it will be used to call a super method. Otherwise - // "args" will be used. - // returns: - // Whatever is returned by a super method, or a super method itself, - // if "true" was specified as newArgs. - // description: - // This method is used inside method of classes produced with - // dojo.declare to call a super method (next in the chain). It is - // used for manually controlled chaining. Consider using the regular - // chaining, because it is faster. Use "this.inherited()" only in - // complex cases. - // - // This method cannot me called from automatically chained - // constructors including the case of a special (legacy) - // constructor chaining. It cannot be called from chained methods. - // - // If "this.inherited()" cannot find the next-in-chain method, it - // does nothing and returns "undefined". The last method in chain - // can be a default method implemented in Object, which will be - // called last. - // - // If "name" is specified, it is assumed that the method that - // received "args" is the parent method for this call. It is looked - // up in the chain list and if it is found the next-in-chain method - // is called. If it is not found, the first-in-chain method is - // called. - // - // If "name" is not specified, it will be derived from the calling - // method (using a methoid property "nom"). - // - // example: - // | var B = dojo.declare(A, { - // | method1: function(a, b, c){ - // | this.inherited(arguments); - // | }, - // | method2: function(a, b){ - // | return this.inherited(arguments, [a + b]); - // | } - // | }); - // | // next method is not in the chain list because it is added - // | // manually after the class was created. - // | B.prototype.method3 = function(){ - // | console.log("This is a dynamically-added method."); - // | this.inherited("method3", arguments); - // | }; - // example: - // | var B = dojo.declare(A, { - // | method: function(a, b){ - // | var super = this.inherited(arguments, true); - // | // ... - // | if(!super){ - // | console.log("there is no super method"); - // | return 0; - // | } - // | return super.apply(this, arguments); - // | } - // | }); - return {}; // Object - } - =====*/ - - /*===== - Object.getInherited = function(name, args){ - // summary: - // Returns a super method. - // name: String? - // The optional method name. Should be the same as the caller's - // name. Usually "name" is specified in complex dynamic cases, when - // the calling method was dynamically added, undecorated by - // dojo.declare, and it cannot be determined. - // args: Arguments - // The caller supply this argument, which should be the original - // "arguments". - // returns: - // Returns a super method (Function) or "undefined". - // description: - // This method is a convenience method for "this.inherited()". - // It uses the same algorithm but instead of executing a super - // method, it returns it, or "undefined" if not found. - // - // example: - // | var B = dojo.declare(A, { - // | method: function(a, b){ - // | var super = this.getInherited(arguments); - // | // ... - // | if(!super){ - // | console.log("there is no super method"); - // | return 0; - // | } - // | return super.apply(this, arguments); - // | } - // | }); - return {}; // Object - } - =====*/ - - /*===== - Object.isInstanceOf = function(cls){ - // summary: - // Checks the inheritance chain to see if it is inherited from this - // class. - // cls: Function - // Class constructor. - // returns: - // "true", if this object is inherited from this class, "false" - // otherwise. - // description: - // This method is used with instances of classes produced with - // dojo.declare to determine of they support a certain interface or - // not. It models "instanceof" operator. - // - // example: - // | var A = dojo.declare(null, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var B = dojo.declare(null, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var C = dojo.declare([A, B], { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var D = dojo.declare(A, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | - // | var a = new A(), b = new B(), c = new C(), d = new D(); - // | - // | console.log(a.isInstanceOf(A)); // true - // | console.log(b.isInstanceOf(A)); // false - // | console.log(c.isInstanceOf(A)); // true - // | console.log(d.isInstanceOf(A)); // true - // | - // | console.log(a.isInstanceOf(B)); // false - // | console.log(b.isInstanceOf(B)); // true - // | console.log(c.isInstanceOf(B)); // true - // | console.log(d.isInstanceOf(B)); // false - // | - // | console.log(a.isInstanceOf(C)); // false - // | console.log(b.isInstanceOf(C)); // false - // | console.log(c.isInstanceOf(C)); // true - // | console.log(d.isInstanceOf(C)); // false - // | - // | console.log(a.isInstanceOf(D)); // false - // | console.log(b.isInstanceOf(D)); // false - // | console.log(c.isInstanceOf(D)); // false - // | console.log(d.isInstanceOf(D)); // true - return {}; // Object - } - =====*/ - - /*===== - Object.extend = function(source){ - // summary: - // Adds all properties and methods of source to constructor's - // prototype, making them available to all instances created with - // constructor. This method is specific to constructors created with - // dojo.declare. - // source: Object - // Source object which properties are going to be copied to the - // constructor's prototype. - // description: - // Adds source properties to the constructor's prototype. It can - // override existing properties. - // - // This method is similar to dojo.extend function, but it is specific - // to constructors produced by dojo.declare. It is implemented - // using dojo.safeMixin, and it skips a constructor property, - // and properly decorates copied functions. - // - // example: - // | var A = dojo.declare(null, { - // | m1: function(){}, - // | s1: "Popokatepetl" - // | }); - // | A.extend({ - // | m1: function(){}, - // | m2: function(){}, - // | f1: true, - // | d1: 42 - // | }); - }; - =====*/ - - dojo.safeMixin = declare.safeMixin = safeMixin; - dojo.declare = declare; - - return declare; -}); diff --git a/lib/dojo/_base/event.js.uncompressed.js b/lib/dojo/_base/event.js.uncompressed.js deleted file mode 100644 index 34b9ce8e6..000000000 --- a/lib/dojo/_base/event.js.uncompressed.js +++ /dev/null @@ -1,51 +0,0 @@ -define("dojo/_base/event", ["./kernel", "../on", "../has", "../dom-geometry"], function(dojo, on, has, dom){ - // module: - // dojo/_base/event - // summary: - // This module defines dojo DOM event API. - if(on._fixEvent){ - var fixEvent = on._fixEvent; - on._fixEvent = function(evt, se){ - // add some additional normalization for back-compat, this isn't in on.js because it is somewhat more expensive - evt = fixEvent(evt, se); - if(evt){ - dom.normalizeEvent(evt); - } - return evt; - }; - } - dojo.fixEvent = function(/*Event*/ evt, /*DOMNode*/ sender){ - // summary: - // normalizes properties on the event object including event - // bubbling methods, keystroke normalization, and x/y positions - // evt: Event - // native event object - // sender: DOMNode - // node to treat as "currentTarget" - if(on._fixEvent){ - return on._fixEvent(evt, sender); - } - return evt; // Event - }; - - dojo.stopEvent = function(/*Event*/ evt){ - // summary: - // prevents propagation and clobbers the default action of the - // passed event - // evt: Event - // The event object. If omitted, window.event is used on IE. - if(has("dom-addeventlistener") || (evt && evt.preventDefault)){ - evt.preventDefault(); - evt.stopPropagation(); - }else{ - evt = evt || window.event; - evt.cancelBubble = true; - on._preventDefault.call(evt); - } - }; - - return { - fix: dojo.fixEvent, - stop: dojo.stopEvent - }; -}); diff --git a/lib/dojo/_base/fx.js.uncompressed.js b/lib/dojo/_base/fx.js.uncompressed.js deleted file mode 100644 index cf52b0de1..000000000 --- a/lib/dojo/_base/fx.js.uncompressed.js +++ /dev/null @@ -1,666 +0,0 @@ -define("dojo/_base/fx", ["./kernel", "./lang", "../Evented", "./Color", "./connect", "./sniff", "../dom", "../dom-style"], function(dojo, lang, Evented, Color, connect, has, dom, style){ - // module: - // dojo/_base/fx - // summary: - // This module defines the base dojo.fx implementation. - // notes: - // Animation loosely package based on Dan Pupius' work, contributed under CLA; see - // http://pupius.co.uk/js/Toolkit.Drawing.js - - var _mixin = lang.mixin; - - dojo._Line = function(/*int*/ start, /*int*/ end){ - // summary: - // dojo._Line is the object used to generate values from a start value - // to an end value - // start: int - // Beginning value for range - // end: int - // Ending value for range - this.start = start; - this.end = end; - }; - - dojo._Line.prototype.getValue = function(/*float*/ n){ - // summary: Returns the point on the line - // n: a floating point number greater than 0 and less than 1 - return ((this.end - this.start) * n) + this.start; // Decimal - }; - - dojo.Animation = function(args){ - // summary: - // A generic animation class that fires callbacks into its handlers - // object at various states. - // description: - // A generic animation class that fires callbacks into its handlers - // object at various states. Nearly all dojo animation functions - // return an instance of this method, usually without calling the - // .play() method beforehand. Therefore, you will likely need to - // call .play() on instances of `dojo.Animation` when one is - // returned. - // args: Object - // The 'magic argument', mixing all the properties into this - // animation instance. - - _mixin(this, args); - if(lang.isArray(this.curve)){ - this.curve = new dojo._Line(this.curve[0], this.curve[1]); - } - - }; - dojo.Animation.prototype = new Evented(); - // Alias to drop come 2.0: - dojo._Animation = dojo.Animation; - - lang.extend(dojo.Animation, { - // duration: Integer - // The time in milliseonds the animation will take to run - duration: 350, - - /*===== - // curve: dojo._Line|Array - // A two element array of start and end values, or a `dojo._Line` instance to be - // used in the Animation. - curve: null, - - // easing: Function? - // A Function to adjust the acceleration (or deceleration) of the progress - // across a dojo._Line - easing: null, - =====*/ - - // repeat: Integer? - // The number of times to loop the animation - repeat: 0, - - // rate: Integer? - // the time in milliseconds to wait before advancing to next frame - // (used as a fps timer: 1000/rate = fps) - rate: 20 /* 50 fps */, - - /*===== - // delay: Integer? - // The time in milliseconds to wait before starting animation after it - // has been .play()'ed - delay: null, - - // beforeBegin: Event? - // Synthetic event fired before a dojo.Animation begins playing (synchronous) - beforeBegin: null, - - // onBegin: Event? - // Synthetic event fired as a dojo.Animation begins playing (useful?) - onBegin: null, - - // onAnimate: Event? - // Synthetic event fired at each interval of a `dojo.Animation` - onAnimate: null, - - // onEnd: Event? - // Synthetic event fired after the final frame of a `dojo.Animation` - onEnd: null, - - // onPlay: Event? - // Synthetic event fired any time a `dojo.Animation` is play()'ed - onPlay: null, - - // onPause: Event? - // Synthetic event fired when a `dojo.Animation` is paused - onPause: null, - - // onStop: Event - // Synthetic event fires when a `dojo.Animation` is stopped - onStop: null, - - =====*/ - - _percent: 0, - _startRepeatCount: 0, - - _getStep: function(){ - var _p = this._percent, - _e = this.easing - ; - return _e ? _e(_p) : _p; - }, - _fire: function(/*Event*/ evt, /*Array?*/ args){ - // summary: - // Convenience function. Fire event "evt" and pass it the - // arguments specified in "args". - // description: - // Convenience function. Fire event "evt" and pass it the - // arguments specified in "args". - // Fires the callback in the scope of the `dojo.Animation` - // instance. - // evt: - // The event to fire. - // args: - // The arguments to pass to the event. - var a = args||[]; - if(this[evt]){ - if(dojo.config.debugAtAllCosts){ - this[evt].apply(this, a); - }else{ - try{ - this[evt].apply(this, a); - }catch(e){ - // squelch and log because we shouldn't allow exceptions in - // synthetic event handlers to cause the internal timer to run - // amuck, potentially pegging the CPU. I'm not a fan of this - // squelch, but hopefully logging will make it clear what's - // going on - console.error("exception in animation handler for:", evt); - console.error(e); - } - } - } - return this; // dojo.Animation - }, - - play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ - // summary: - // Start the animation. - // delay: - // How many milliseconds to delay before starting. - // gotoStart: - // If true, starts the animation from the beginning; otherwise, - // starts it from its current position. - // returns: dojo.Animation - // The instance to allow chaining. - - var _t = this; - if(_t._delayTimer){ _t._clearTimer(); } - if(gotoStart){ - _t._stopTimer(); - _t._active = _t._paused = false; - _t._percent = 0; - }else if(_t._active && !_t._paused){ - return _t; - } - - _t._fire("beforeBegin", [_t.node]); - - var de = delay || _t.delay, - _p = lang.hitch(_t, "_play", gotoStart); - - if(de > 0){ - _t._delayTimer = setTimeout(_p, de); - return _t; - } - _p(); - return _t; // dojo.Animation - }, - - _play: function(gotoStart){ - var _t = this; - if(_t._delayTimer){ _t._clearTimer(); } - _t._startTime = new Date().valueOf(); - if(_t._paused){ - _t._startTime -= _t.duration * _t._percent; - } - - _t._active = true; - _t._paused = false; - var value = _t.curve.getValue(_t._getStep()); - if(!_t._percent){ - if(!_t._startRepeatCount){ - _t._startRepeatCount = _t.repeat; - } - _t._fire("onBegin", [value]); - } - - _t._fire("onPlay", [value]); - - _t._cycle(); - return _t; // dojo.Animation - }, - - pause: function(){ - // summary: Pauses a running animation. - var _t = this; - if(_t._delayTimer){ _t._clearTimer(); } - _t._stopTimer(); - if(!_t._active){ return _t; /*dojo.Animation*/ } - _t._paused = true; - _t._fire("onPause", [_t.curve.getValue(_t._getStep())]); - return _t; // dojo.Animation - }, - - gotoPercent: function(/*Decimal*/ percent, /*Boolean?*/ andPlay){ - // summary: - // Sets the progress of the animation. - // percent: - // A percentage in decimal notation (between and including 0.0 and 1.0). - // andPlay: - // If true, play the animation after setting the progress. - var _t = this; - _t._stopTimer(); - _t._active = _t._paused = true; - _t._percent = percent; - if(andPlay){ _t.play(); } - return _t; // dojo.Animation - }, - - stop: function(/*boolean?*/ gotoEnd){ - // summary: Stops a running animation. - // gotoEnd: If true, the animation will end. - var _t = this; - if(_t._delayTimer){ _t._clearTimer(); } - if(!_t._timer){ return _t; /* dojo.Animation */ } - _t._stopTimer(); - if(gotoEnd){ - _t._percent = 1; - } - _t._fire("onStop", [_t.curve.getValue(_t._getStep())]); - _t._active = _t._paused = false; - return _t; // dojo.Animation - }, - - status: function(){ - // summary: - // Returns a string token representation of the status of - // the animation, one of: "paused", "playing", "stopped" - if(this._active){ - return this._paused ? "paused" : "playing"; // String - } - return "stopped"; // String - }, - - _cycle: function(){ - var _t = this; - if(_t._active){ - var curr = new Date().valueOf(); - var step = (curr - _t._startTime) / (_t.duration); - - if(step >= 1){ - step = 1; - } - _t._percent = step; - - // Perform easing - if(_t.easing){ - step = _t.easing(step); - } - - _t._fire("onAnimate", [_t.curve.getValue(step)]); - - if(_t._percent < 1){ - _t._startTimer(); - }else{ - _t._active = false; - - if(_t.repeat > 0){ - _t.repeat--; - _t.play(null, true); - }else if(_t.repeat == -1){ - _t.play(null, true); - }else{ - if(_t._startRepeatCount){ - _t.repeat = _t._startRepeatCount; - _t._startRepeatCount = 0; - } - } - _t._percent = 0; - _t._fire("onEnd", [_t.node]); - !_t.repeat && _t._stopTimer(); - } - } - return _t; // dojo.Animation - }, - - _clearTimer: function(){ - // summary: Clear the play delay timer - clearTimeout(this._delayTimer); - delete this._delayTimer; - } - - }); - - // the local timer, stubbed into all Animation instances - var ctr = 0, - timer = null, - runner = { - run: function(){} - }; - - lang.extend(dojo.Animation, { - - _startTimer: function(){ - if(!this._timer){ - this._timer = connect.connect(runner, "run", this, "_cycle"); - ctr++; - } - if(!timer){ - timer = setInterval(lang.hitch(runner, "run"), this.rate); - } - }, - - _stopTimer: function(){ - if(this._timer){ - connect.disconnect(this._timer); - this._timer = null; - ctr--; - } - if(ctr <= 0){ - clearInterval(timer); - timer = null; - ctr = 0; - } - } - - }); - - var _makeFadeable = - has("ie") ? function(node){ - // only set the zoom if the "tickle" value would be the same as the - // default - var ns = node.style; - // don't set the width to auto if it didn't already cascade that way. - // We don't want to f anyones designs - if(!ns.width.length && style.get(node, "width") == "auto"){ - ns.width = "auto"; - } - } : - function(){}; - - dojo._fade = function(/*Object*/ args){ - // summary: - // Returns an animation that will fade the node defined by - // args.node from the start to end values passed (args.start - // args.end) (end is mandatory, start is optional) - - args.node = dom.byId(args.node); - var fArgs = _mixin({ properties: {} }, args), - props = (fArgs.properties.opacity = {}); - - props.start = !("start" in fArgs) ? - function(){ - return +style.get(fArgs.node, "opacity")||0; - } : fArgs.start; - props.end = fArgs.end; - - var anim = dojo.animateProperty(fArgs); - connect.connect(anim, "beforeBegin", lang.partial(_makeFadeable, fArgs.node)); - - return anim; // dojo.Animation - }; - - /*===== - dojo.__FadeArgs = function(node, duration, easing){ - // node: DOMNode|String - // The node referenced in the animation - // duration: Integer? - // Duration of the animation in milliseconds. - // easing: Function? - // An easing function. - this.node = node; - this.duration = duration; - this.easing = easing; - } - =====*/ - - dojo.fadeIn = function(/*dojo.__FadeArgs*/ args){ - // summary: - // Returns an animation that will fade node defined in 'args' from - // its current opacity to fully opaque. - return dojo._fade(_mixin({ end: 1 }, args)); // dojo.Animation - }; - - dojo.fadeOut = function(/*dojo.__FadeArgs*/ args){ - // summary: - // Returns an animation that will fade node defined in 'args' - // from its current opacity to fully transparent. - return dojo._fade(_mixin({ end: 0 }, args)); // dojo.Animation - }; - - dojo._defaultEasing = function(/*Decimal?*/ n){ - // summary: The default easing function for dojo.Animation(s) - return 0.5 + ((Math.sin((n + 1.5) * Math.PI)) / 2); // Decimal - }; - - var PropLine = function(properties){ - // PropLine is an internal class which is used to model the values of - // an a group of CSS properties across an animation lifecycle. In - // particular, the "getValue" function handles getting interpolated - // values between start and end for a particular CSS value. - this._properties = properties; - for(var p in properties){ - var prop = properties[p]; - if(prop.start instanceof Color){ - // create a reusable temp color object to keep intermediate results - prop.tempColor = new Color(); - } - } - }; - - PropLine.prototype.getValue = function(r){ - var ret = {}; - for(var p in this._properties){ - var prop = this._properties[p], - start = prop.start; - if(start instanceof Color){ - ret[p] = Color.blendColors(start, prop.end, r, prop.tempColor).toCss(); - }else if(!lang.isArray(start)){ - ret[p] = ((prop.end - start) * r) + start + (p != "opacity" ? prop.units || "px" : 0); - } - } - return ret; - }; - - /*===== - dojo.declare("dojo.__AnimArgs", [dojo.__FadeArgs], { - // Properties: Object? - // A hash map of style properties to Objects describing the transition, - // such as the properties of dojo._Line with an additional 'units' property - properties: {} - - //TODOC: add event callbacks - }); - =====*/ - - dojo.animateProperty = function(/*dojo.__AnimArgs*/ args){ - // summary: - // Returns an animation that will transition the properties of - // node defined in `args` depending how they are defined in - // `args.properties` - // - // description: - // `dojo.animateProperty` is the foundation of most `dojo.fx` - // animations. It takes an object of "properties" corresponding to - // style properties, and animates them in parallel over a set - // duration. - // - // example: - // A simple animation that changes the width of the specified node. - // | dojo.animateProperty({ - // | node: "nodeId", - // | properties: { width: 400 }, - // | }).play(); - // Dojo figures out the start value for the width and converts the - // integer specified for the width to the more expressive but - // verbose form `{ width: { end: '400', units: 'px' } }` which you - // can also specify directly. Defaults to 'px' if ommitted. - // - // example: - // Animate width, height, and padding over 2 seconds... the - // pedantic way: - // | dojo.animateProperty({ node: node, duration:2000, - // | properties: { - // | width: { start: '200', end: '400', units:"px" }, - // | height: { start:'200', end: '400', units:"px" }, - // | paddingTop: { start:'5', end:'50', units:"px" } - // | } - // | }).play(); - // Note 'paddingTop' is used over 'padding-top'. Multi-name CSS properties - // are written using "mixed case", as the hyphen is illegal as an object key. - // - // example: - // Plug in a different easing function and register a callback for - // when the animation ends. Easing functions accept values between - // zero and one and return a value on that basis. In this case, an - // exponential-in curve. - // | dojo.animateProperty({ - // | node: "nodeId", - // | // dojo figures out the start value - // | properties: { width: { end: 400 } }, - // | easing: function(n){ - // | return (n==0) ? 0 : Math.pow(2, 10 * (n - 1)); - // | }, - // | onEnd: function(node){ - // | // called when the animation finishes. The animation - // | // target is passed to this function - // | } - // | }).play(500); // delay playing half a second - // - // example: - // Like all `dojo.Animation`s, animateProperty returns a handle to the - // Animation instance, which fires the events common to Dojo FX. Use `dojo.connect` - // to access these events outside of the Animation definiton: - // | var anim = dojo.animateProperty({ - // | node:"someId", - // | properties:{ - // | width:400, height:500 - // | } - // | }); - // | dojo.connect(anim,"onEnd", function(){ - // | console.log("animation ended"); - // | }); - // | // play the animation now: - // | anim.play(); - // - // example: - // Each property can be a function whose return value is substituted along. - // Additionally, each measurement (eg: start, end) can be a function. The node - // reference is passed direcly to callbacks. - // | dojo.animateProperty({ - // | node:"mine", - // | properties:{ - // | height:function(node){ - // | // shrink this node by 50% - // | return dojo.position(node).h / 2 - // | }, - // | width:{ - // | start:function(node){ return 100; }, - // | end:function(node){ return 200; } - // | } - // | } - // | }).play(); - // - - var n = args.node = dom.byId(args.node); - if(!args.easing){ args.easing = dojo._defaultEasing; } - - var anim = new dojo.Animation(args); - connect.connect(anim, "beforeBegin", anim, function(){ - var pm = {}; - for(var p in this.properties){ - // Make shallow copy of properties into pm because we overwrite - // some values below. In particular if start/end are functions - // we don't want to overwrite them or the functions won't be - // called if the animation is reused. - if(p == "width" || p == "height"){ - this.node.display = "block"; - } - var prop = this.properties[p]; - if(lang.isFunction(prop)){ - prop = prop(n); - } - prop = pm[p] = _mixin({}, (lang.isObject(prop) ? prop: { end: prop })); - - if(lang.isFunction(prop.start)){ - prop.start = prop.start(n); - } - if(lang.isFunction(prop.end)){ - prop.end = prop.end(n); - } - var isColor = (p.toLowerCase().indexOf("color") >= 0); - function getStyle(node, p){ - // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: - var v = { height: node.offsetHeight, width: node.offsetWidth }[p]; - if(v !== undefined){ return v; } - v = style.get(node, p); - return (p == "opacity") ? +v : (isColor ? v : parseFloat(v)); - } - if(!("end" in prop)){ - prop.end = getStyle(n, p); - }else if(!("start" in prop)){ - prop.start = getStyle(n, p); - } - - if(isColor){ - prop.start = new Color(prop.start); - prop.end = new Color(prop.end); - }else{ - prop.start = (p == "opacity") ? +prop.start : parseFloat(prop.start); - } - } - this.curve = new PropLine(pm); - }); - connect.connect(anim, "onAnimate", lang.hitch(style, "set", anim.node)); - return anim; // dojo.Animation - }; - - dojo.anim = function( /*DOMNode|String*/ node, - /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, - /*Function?*/ onEnd, - /*Integer?*/ delay){ - // summary: - // A simpler interface to `dojo.animateProperty()`, also returns - // an instance of `dojo.Animation` but begins the animation - // immediately, unlike nearly every other Dojo animation API. - // description: - // `dojo.anim` is a simpler (but somewhat less powerful) version - // of `dojo.animateProperty`. It uses defaults for many basic properties - // and allows for positional parameters to be used in place of the - // packed "property bag" which is used for other Dojo animation - // methods. - // - // The `dojo.Animation` object returned from `dojo.anim` will be - // already playing when it is returned from this function, so - // calling play() on it again is (usually) a no-op. - // node: - // a DOM node or the id of a node to animate CSS properties on - // duration: - // The number of milliseconds over which the animation - // should run. Defaults to the global animation default duration - // (350ms). - // easing: - // An easing function over which to calculate acceleration - // and deceleration of the animation through its duration. - // A default easing algorithm is provided, but you may - // plug in any you wish. A large selection of easing algorithms - // are available in `dojo.fx.easing`. - // onEnd: - // A function to be called when the animation finishes - // running. - // delay: - // The number of milliseconds to delay beginning the - // animation by. The default is 0. - // example: - // Fade out a node - // | dojo.anim("id", { opacity: 0 }); - // example: - // Fade out a node over a full second - // | dojo.anim("id", { opacity: 0 }, 1000); - return dojo.animateProperty({ // dojo.Animation - node: node, - duration: duration || dojo.Animation.prototype.duration, - properties: properties, - easing: easing, - onEnd: onEnd - }).play(delay || 0); - }; - - return { - _Line: dojo._Line, - Animation: dojo.Animation, - _fade: dojo._fade, - fadeIn: dojo.fadeIn, - fadeOut: dojo.fadeOut, - _defaultEasing: dojo._defaultEasing, - animateProperty: dojo.animateProperty, - anim: dojo.anim - }; -}); diff --git a/lib/dojo/_base/html.js.uncompressed.js b/lib/dojo/_base/html.js.uncompressed.js deleted file mode 100644 index 63e3bee46..000000000 --- a/lib/dojo/_base/html.js.uncompressed.js +++ /dev/null @@ -1,389 +0,0 @@ -define("dojo/_base/html", ["./kernel", "../dom", "../dom-style", "../dom-attr", "../dom-prop", "../dom-class", "../dom-construct", "../dom-geometry"], function(dojo, dom, style, attr, prop, cls, ctr, geom){ - // module: - // dojo/dom - // summary: - // This module is a stub for the core dojo DOM API. - - // mix-in dom - dojo.byId = dom.byId; - dojo.isDescendant = dom.isDescendant; - dojo.setSelectable = dom.setSelectable; - - // mix-in dom-attr - dojo.getAttr = attr.get; - dojo.setAttr = attr.set; - dojo.hasAttr = attr.has; - dojo.removeAttr = attr.remove; - dojo.getNodeProp = attr.getNodeProp; - - dojo.attr = function(node, name, value){ - // summary: - // Gets or sets an attribute on an HTML element. - // description: - // Handles normalized getting and setting of attributes on DOM - // Nodes. If 2 arguments are passed, and a the second argument is a - // string, acts as a getter. - // - // If a third argument is passed, or if the second argument is a - // map of attributes, acts as a setter. - // - // When passing functions as values, note that they will not be - // directly assigned to slots on the node, but rather the default - // behavior will be removed and the new behavior will be added - // using `dojo.connect()`, meaning that event handler properties - // will be normalized and that some caveats with regards to - // non-standard behaviors for onsubmit apply. Namely that you - // should cancel form submission using `dojo.stopEvent()` on the - // passed event object instead of returning a boolean value from - // the handler itself. - // node: DOMNode|String - // id or reference to the element to get or set the attribute on - // name: String|Object - // the name of the attribute to get or set. - // value: String? - // The value to set for the attribute - // returns: - // when used as a getter, the value of the requested attribute - // or null if that attribute does not have a specified or - // default value; - // - // when used as a setter, the DOM node - // - // example: - // | // get the current value of the "foo" attribute on a node - // | dojo.attr(dojo.byId("nodeId"), "foo"); - // | // or we can just pass the id: - // | dojo.attr("nodeId", "foo"); - // - // example: - // | // use attr() to set the tab index - // | dojo.attr("nodeId", "tabIndex", 3); - // | - // - // example: - // Set multiple values at once, including event handlers: - // | dojo.attr("formId", { - // | "foo": "bar", - // | "tabIndex": -1, - // | "method": "POST", - // | "onsubmit": function(e){ - // | // stop submitting the form. Note that the IE behavior - // | // of returning true or false will have no effect here - // | // since our handler is connect()ed to the built-in - // | // onsubmit behavior and so we need to use - // | // dojo.stopEvent() to ensure that the submission - // | // doesn't proceed. - // | dojo.stopEvent(e); - // | - // | // submit the form with Ajax - // | dojo.xhrPost({ form: "formId" }); - // | } - // | }); - // - // example: - // Style is s special case: Only set with an object hash of styles - // | dojo.attr("someNode",{ - // | id:"bar", - // | style:{ - // | width:"200px", height:"100px", color:"#000" - // | } - // | }); - // - // example: - // Again, only set style as an object hash of styles: - // | var obj = { color:"#fff", backgroundColor:"#000" }; - // | dojo.attr("someNode", "style", obj); - // | - // | // though shorter to use `dojo.style()` in this case: - // | dojo.style("someNode", obj); - - if(arguments.length == 2){ - return attr[typeof name == "string" ? "get" : "set"](node, name); - } - return attr.set(node, name, value); - }; - - // mix-in dom-class - dojo.hasClass = cls.contains; - dojo.addClass = cls.add; - dojo.removeClass = cls.remove; - dojo.toggleClass = cls.toggle; - dojo.replaceClass = cls.replace; - - // mix-in dom-construct - dojo._toDom = dojo.toDom = ctr.toDom; - dojo.place = ctr.place; - dojo.create = ctr.create; - dojo.empty = function(node){ ctr.empty(node); }; - dojo._destroyElement = dojo.destroy = function(node){ ctr.destroy(node); }; - - // mix-in dom-geometry - dojo._getPadExtents = dojo.getPadExtents = geom.getPadExtents; - dojo._getBorderExtents = dojo.getBorderExtents = geom.getBorderExtents; - dojo._getPadBorderExtents = dojo.getPadBorderExtents = geom.getPadBorderExtents; - dojo._getMarginExtents = dojo.getMarginExtents = geom.getMarginExtents; - dojo._getMarginSize = dojo.getMarginSize = geom.getMarginSize; - dojo._getMarginBox = dojo.getMarginBox = geom.getMarginBox; - dojo.setMarginBox = geom.setMarginBox; - dojo._getContentBox = dojo.getContentBox = geom.getContentBox; - dojo.setContentSize = geom.setContentSize; - dojo._isBodyLtr = dojo.isBodyLtr = geom.isBodyLtr; - dojo._docScroll = dojo.docScroll = geom.docScroll; - dojo._getIeDocumentElementOffset = dojo.getIeDocumentElementOffset = geom.getIeDocumentElementOffset; - dojo._fixIeBiDiScrollLeft = dojo.fixIeBiDiScrollLeft = geom.fixIeBiDiScrollLeft; - dojo.position = geom.position; - - dojo.marginBox = function marginBox(/*DomNode|String*/node, /*Object?*/box){ - // summary: - // Getter/setter for the margin-box of node. - // description: - // Getter/setter for the margin-box of node. - // Returns an object in the expected format of box (regardless - // if box is passed). The object might look like: - // `{ l: 50, t: 200, w: 300: h: 150 }` - // for a node offset from its parent 50px to the left, 200px from - // the top with a margin width of 300px and a margin-height of - // 150px. - // node: - // id or reference to DOM Node to get/set box for - // box: - // If passed, denotes that dojo.marginBox() should - // update/set the margin box for node. Box is an object in the - // above format. All properties are optional if passed. - // example: - // Retrieve the margin box of a passed node - // | var box = dojo.marginBox("someNodeId"); - // | console.dir(box); - // - // example: - // Set a node's margin box to the size of another node - // | var box = dojo.marginBox("someNodeId"); - // | dojo.marginBox("someOtherNode", box); - return box ? geom.setMarginBox(node, box) : geom.getMarginBox(node); // Object - }; - - dojo.contentBox = function contentBox(/*DomNode|String*/node, /*Object?*/box){ - // summary: - // Getter/setter for the content-box of node. - // description: - // Returns an object in the expected format of box (regardless if box is passed). - // The object might look like: - // `{ l: 50, t: 200, w: 300: h: 150 }` - // for a node offset from its parent 50px to the left, 200px from - // the top with a content width of 300px and a content-height of - // 150px. Note that the content box may have a much larger border - // or margin box, depending on the box model currently in use and - // CSS values set/inherited for node. - // While the getter will return top and left values, the - // setter only accepts setting the width and height. - // node: - // id or reference to DOM Node to get/set box for - // box: - // If passed, denotes that dojo.contentBox() should - // update/set the content box for node. Box is an object in the - // above format, but only w (width) and h (height) are supported. - // All properties are optional if passed. - return box ? geom.setContentSize(node, box) : geom.getContentBox(node); // Object - }; - - dojo.coords = function(/*DomNode|String*/node, /*Boolean?*/includeScroll){ - // summary: - // Deprecated: Use position() for border-box x/y/w/h - // or marginBox() for margin-box w/h/l/t. - // Returns an object representing a node's size and position. - // - // description: - // Returns an object that measures margin-box (w)idth/(h)eight - // and absolute position x/y of the border-box. Also returned - // is computed (l)eft and (t)op values in pixels from the - // node's offsetParent as returned from marginBox(). - // Return value will be in the form: - //| { l: 50, t: 200, w: 300: h: 150, x: 100, y: 300 } - // Does not act as a setter. If includeScroll is passed, the x and - // y params are affected as one would expect in dojo.position(). - dojo.deprecated("dojo.coords()", "Use dojo.position() or dojo.marginBox()."); - node = dom.byId(node); - var s = style.getComputedStyle(node), mb = geom.getMarginBox(node, s); - var abs = geom.position(node, includeScroll); - mb.x = abs.x; - mb.y = abs.y; - return mb; // Object - }; - - // mix-in dom-prop - dojo.getProp = prop.get; - dojo.setProp = prop.set; - - dojo.prop = function(/*DomNode|String*/node, /*String|Object*/name, /*String?*/value){ - // summary: - // Gets or sets a property on an HTML element. - // description: - // Handles normalized getting and setting of properties on DOM - // Nodes. If 2 arguments are passed, and a the second argument is a - // string, acts as a getter. - // - // If a third argument is passed, or if the second argument is a - // map of attributes, acts as a setter. - // - // When passing functions as values, note that they will not be - // directly assigned to slots on the node, but rather the default - // behavior will be removed and the new behavior will be added - // using `dojo.connect()`, meaning that event handler properties - // will be normalized and that some caveats with regards to - // non-standard behaviors for onsubmit apply. Namely that you - // should cancel form submission using `dojo.stopEvent()` on the - // passed event object instead of returning a boolean value from - // the handler itself. - // node: - // id or reference to the element to get or set the property on - // name: - // the name of the property to get or set. - // value: - // The value to set for the property - // returns: - // when used as a getter, the value of the requested property - // or null if that attribute does not have a specified or - // default value; - // - // when used as a setter, the DOM node - // - // example: - // | // get the current value of the "foo" property on a node - // | dojo.prop(dojo.byId("nodeId"), "foo"); - // | // or we can just pass the id: - // | dojo.prop("nodeId", "foo"); - // - // example: - // | // use prop() to set the tab index - // | dojo.prop("nodeId", "tabIndex", 3); - // | - // - // example: - // Set multiple values at once, including event handlers: - // | dojo.prop("formId", { - // | "foo": "bar", - // | "tabIndex": -1, - // | "method": "POST", - // | "onsubmit": function(e){ - // | // stop submitting the form. Note that the IE behavior - // | // of returning true or false will have no effect here - // | // since our handler is connect()ed to the built-in - // | // onsubmit behavior and so we need to use - // | // dojo.stopEvent() to ensure that the submission - // | // doesn't proceed. - // | dojo.stopEvent(e); - // | - // | // submit the form with Ajax - // | dojo.xhrPost({ form: "formId" }); - // | } - // | }); - // - // example: - // Style is s special case: Only set with an object hash of styles - // | dojo.prop("someNode",{ - // | id:"bar", - // | style:{ - // | width:"200px", height:"100px", color:"#000" - // | } - // | }); - // - // example: - // Again, only set style as an object hash of styles: - // | var obj = { color:"#fff", backgroundColor:"#000" }; - // | dojo.prop("someNode", "style", obj); - // | - // | // though shorter to use `dojo.style()` in this case: - // | dojo.style("someNode", obj); - - if(arguments.length == 2){ - return prop[typeof name == "string" ? "get" : "set"](node, name); - } - // setter - return prop.set(node, name, value); - }; - - // mix-in dom-style - dojo.getStyle = style.get; - dojo.setStyle = style.set; - dojo.getComputedStyle = style.getComputedStyle; - dojo.__toPixelValue = dojo.toPixelValue = style.toPixelValue; - - dojo.style = function(node, name, value){ - // summary: - // Accesses styles on a node. If 2 arguments are - // passed, acts as a getter. If 3 arguments are passed, acts - // as a setter. - // description: - // Getting the style value uses the computed style for the node, so the value - // will be a calculated value, not just the immediate node.style value. - // Also when getting values, use specific style names, - // like "borderBottomWidth" instead of "border" since compound values like - // "border" are not necessarily reflected as expected. - // If you want to get node dimensions, use `dojo.marginBox()`, - // `dojo.contentBox()` or `dojo.position()`. - // node: DOMNode|String - // id or reference to node to get/set style for - // name: String?|Object? - // the style property to set in DOM-accessor format - // ("borderWidth", not "border-width") or an object with key/value - // pairs suitable for setting each property. - // value: String? - // If passed, sets value on the node for style, handling - // cross-browser concerns. When setting a pixel value, - // be sure to include "px" in the value. For instance, top: "200px". - // Otherwise, in some cases, some browsers will not apply the style. - // returns: - // when used as a getter, return the computed style of the node if passing in an ID or node, - // or return the normalized, computed value for the property when passing in a node and a style property - // example: - // Passing only an ID or node returns the computed style object of - // the node: - // | dojo.style("thinger"); - // example: - // Passing a node and a style property returns the current - // normalized, computed value for that property: - // | dojo.style("thinger", "opacity"); // 1 by default - // - // example: - // Passing a node, a style property, and a value changes the - // current display of the node and returns the new computed value - // | dojo.style("thinger", "opacity", 0.5); // == 0.5 - // - // example: - // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: - // | dojo.style("thinger", { - // | "opacity": 0.5, - // | "border": "3px solid black", - // | "height": "300px" - // | }); - // - // example: - // When the CSS style property is hyphenated, the JavaScript property is camelCased. - // font-size becomes fontSize, and so on. - // | dojo.style("thinger",{ - // | fontSize:"14pt", - // | letterSpacing:"1.2em" - // | }); - // - // example: - // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling - // dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()` - // | dojo.query(".someClassName").style("visibility","hidden"); - // | // or - // | dojo.query("#baz > div").style({ - // | opacity:0.75, - // | fontSize:"13pt" - // | }); - - switch(arguments.length){ - case 1: - return style.get(node); - case 2: - return style[typeof name == "string" ? "get" : "set"](node, name); - } - // setter - return style.set(node, name, value); - }; - - return dojo; -}); diff --git a/lib/dojo/_base/json.js.uncompressed.js b/lib/dojo/_base/json.js.uncompressed.js deleted file mode 100644 index b70d4ebb8..000000000 --- a/lib/dojo/_base/json.js.uncompressed.js +++ /dev/null @@ -1,85 +0,0 @@ -define("dojo/_base/json", ["./kernel", "../json"], function(dojo, json){ - // module: - // dojo/_base/json - // summary: - // This module defines the dojo JSON API. - -dojo.fromJson = function(/*String*/ js){ - // summary: - // Parses a JavaScript expression and returns a JavaScript value. - // description: - // Throws for invalid JavaScript expressions. It does not use a strict JSON parser. It - // always delegates to eval(). The content passed to this method must therefore come - // from a trusted source. - // It is recommend that you use dojo/json's parse function for an - // implementation uses the (faster) native JSON parse when available. - // js: - // a string literal of a JavaScript expression, for instance: - // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` - - return eval("(" + js + ")"); // Object -}; - -/*===== -dojo._escapeString = function(){ - // summary: - // Adds escape sequences for non-visual characters, double quote and - // backslash and surrounds with double quotes to form a valid string - // literal. -}; -=====*/ -dojo._escapeString = json.stringify; // just delegate to json.stringify - -dojo.toJsonIndentStr = "\t"; -dojo.toJson = function(/*Object*/ it, /*Boolean?*/ prettyPrint){ - // summary: - // Returns a [JSON](http://json.org) serialization of an object. - // description: - // Returns a [JSON](http://json.org) serialization of an object. - // Note that this doesn't check for infinite recursion, so don't do that! - // It is recommend that you use dojo/json's stringify function for an lighter - // and faster implementation that matches the native JSON API and uses the - // native JSON serializer when available. - // it: - // an object to be serialized. Objects may define their own - // serialization via a special "__json__" or "json" function - // property. If a specialized serializer has been defined, it will - // be used as a fallback. - // Note that in 1.6, toJson would serialize undefined, but this no longer supported - // since it is not supported by native JSON serializer. - // prettyPrint: - // if true, we indent objects and arrays to make the output prettier. - // The variable `dojo.toJsonIndentStr` is used as the indent string -- - // to use something other than the default (tab), change that variable - // before calling dojo.toJson(). - // Note that if native JSON support is available, it will be used for serialization, - // and native implementations vary on the exact spacing used in pretty printing. - // returns: - // A JSON string serialization of the passed-in object. - // example: - // simple serialization of a trivial object - // | var jsonStr = dojo.toJson({ howdy: "stranger!", isStrange: true }); - // | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr); - // example: - // a custom serializer for an objects of a particular class: - // | dojo.declare("Furby", null, { - // | furbies: "are strange", - // | furbyCount: 10, - // | __json__: function(){ - // | }, - // | }); - - // use dojo/json - return json.stringify(it, function(key, value){ - if(value){ - var tf = value.__json__||value.json; - if(typeof tf == "function"){ - return tf.call(value); - } - } - return value; - }, prettyPrint && dojo.toJsonIndentStr); // String -}; - -return dojo; -}); diff --git a/lib/dojo/_base/kernel.js.uncompressed.js b/lib/dojo/_base/kernel.js.uncompressed.js deleted file mode 100644 index 30465dbb1..000000000 --- a/lib/dojo/_base/kernel.js.uncompressed.js +++ /dev/null @@ -1,302 +0,0 @@ -define("dojo/_base/kernel", ["../has", "./config", "require", "module"], function(has, config, require, module){ - // module: - // dojo/_base/kernel - // summary: - // This module is the foundational module of the dojo boot sequence; it defines the dojo object. - var - // loop variables for this module - i, p, - - // create dojo, dijit, and dojox - // FIXME: in 2.0 remove dijit, dojox being created by dojo - dijit = {}, - dojox = {}, - dojo = { - // notice dojo takes ownership of the value of the config module - config:config, - global:this, - dijit:dijit, - dojox:dojox - }; - - - // Configure the scope map. For a 100% AMD application, the scope map is not needed other than to provide - // a _scopeName property for the dojo, dijit, and dojox root object so those packages can create - // unique names in the global space. - // - // Built, legacy modules use the scope map to allow those modules to be expressed as if dojo, dijit, and dojox, - // where global when in fact they are either global under different names or not global at all. In v1.6-, the - // config variable "scopeMap" was used to map names as used within a module to global names. This has been - // subsumed by the dojo packageMap configuration variable which relocates packages to different names. See - // http://livedocs.dojotoolkit.org/developer/design/loader#legacy-cross-domain-mode for details. - // - // The following computations contort the packageMap for this dojo instance into a scopeMap. - var scopeMap = - // a map from a name used in a legacy module to the (global variable name, object addressed by that name) - // always map dojo, dijit, and dojox - { - dojo:["dojo", dojo], - dijit:["dijit", dijit], - dojox:["dojox", dojox] - }, - - packageMap = - // the package map for this dojo instance; note, a foreign loader or no pacakgeMap results in the above default config - (require.packs && require.packs[module.id.match(/[^\/]+/)[0]].packageMap) || {}, - - item; - - // process all mapped top-level names for this instance of dojo - for(p in packageMap){ - if(scopeMap[p]){ - // mapped dojo, dijit, or dojox - scopeMap[p][0] = packageMap[p]; - }else{ - // some other top-level name - scopeMap[p] = [packageMap[p], {}]; - } - } - - // publish those names to _scopeName and, optionally, the global namespace - for(p in scopeMap){ - item = scopeMap[p]; - item[1]._scopeName = item[0]; - if(!config.noGlobals){ - this[item[0]] = item[1]; - } - } - dojo.scopeMap = scopeMap; - - // FIXME: dojo.baseUrl and dojo.config.baseUrl should be deprecated - dojo.baseUrl = dojo.config.baseUrl = require.baseUrl; - dojo.isAsync = !1 || require.async; - dojo.locale = config.locale; - - /*===== - dojo.version = function(){ - // summary: - // Version number of the Dojo Toolkit - // major: Integer - // Major version. If total version is "1.2.0beta1", will be 1 - // minor: Integer - // Minor version. If total version is "1.2.0beta1", will be 2 - // patch: Integer - // Patch version. If total version is "1.2.0beta1", will be 0 - // flag: String - // Descriptor flag. If total version is "1.2.0beta1", will be "beta1" - // revision: Number - // The SVN rev from which dojo was pulled - this.major = 0; - this.minor = 0; - this.patch = 0; - this.flag = ""; - this.revision = 0; - } - =====*/ - var rev = "$Rev: 28982 $".match(/\d+/); - dojo.version = { - major: 1, minor: 7, patch: 3, flag: "", - revision: rev ? +rev[0] : NaN, - toString: function(){ - var v = dojo.version; - return v.major + "." + v.minor + "." + v.patch + v.flag + " (" + v.revision + ")"; // String - } - }; - - - // If 1 is truthy, then as a dojo module is defined it should push it's definitions - // into the dojo object, and conversely. In 2.0, it will likely be unusual to augment another object - // as a result of defining a module. This has feature gives a way to force 2.0 behavior as the code - // is migrated. Absent specific advice otherwise, set extend-dojo to truthy. - true || has.add("extend-dojo", 1); - - - dojo.eval = function(scriptText){ - // summary: - // A legacy method created for use exclusively by internal Dojo methods. Do not use this method - // directly unless you understand its possibly-different implications on the platforms your are targeting. - // description: - // Makes an attempt to evaluate scriptText in the global scope. The function works correctly for browsers - // that support indirect eval. - // - // As usual, IE does not. On IE, the only way to implement global eval is to - // use execScript. Unfortunately, execScript does not return a value and breaks some current usages of dojo.eval. - // This implementation uses the technique of executing eval in the scope of a function that is a single scope - // frame below the global scope; thereby coming close to the global scope. Note carefully that - // - // dojo.eval("var pi = 3.14;"); - // - // will define global pi in non-IE environments, but define pi only in a temporary local scope for IE. If you want - // to define a global variable using dojo.eval, write something like - // - // dojo.eval("window.pi = 3.14;") - // scriptText: - // The text to evaluation. - // returns: - // The result of the evaluation. Often `undefined` - }; - - (Function("d", "d.eval = function(){return d.global.eval ? d.global.eval(arguments[0]) : eval(arguments[0]);}"))(dojo); - - - if(0){ - dojo.exit = function(exitcode){ - quit(exitcode); - }; - } else{ - dojo.exit = function(){ - }; - } - - true || has.add("dojo-guarantee-console", - // ensure that console.log, console.warn, etc. are defined - 1 - ); - if(1){ - typeof console != "undefined" || (console = {}); - // Be careful to leave 'log' always at the end - var cn = [ - "assert", "count", "debug", "dir", "dirxml", "error", "group", - "groupEnd", "info", "profile", "profileEnd", "time", "timeEnd", - "trace", "warn", "log" - ]; - var tn; - i = 0; - while((tn = cn[i++])){ - if(!console[tn]){ - (function(){ - var tcn = tn + ""; - console[tcn] = ('log' in console) ? function(){ - var a = Array.apply({}, arguments); - a.unshift(tcn + ":"); - console["log"](a.join(" ")); - } : function(){}; - console[tcn]._fake = true; - })(); - } - } - } - - has.add("dojo-debug-messages", - // include dojo.deprecated/dojo.experimental implementations - !!config.isDebug - ); - if(has("dojo-debug-messages")){ - dojo.deprecated = function(/*String*/ behaviour, /*String?*/ extra, /*String?*/ removal){ - // summary: - // Log a debug message to indicate that a behavior has been - // deprecated. - // behaviour: String - // The API or behavior being deprecated. Usually in the form - // of "myApp.someFunction()". - // extra: String? - // Text to append to the message. Often provides advice on a - // new function or facility to achieve the same goal during - // the deprecation period. - // removal: String? - // Text to indicate when in the future the behavior will be - // removed. Usually a version number. - // example: - // | dojo.deprecated("myApp.getTemp()", "use myApp.getLocaleTemp() instead", "1.0"); - - var message = "DEPRECATED: " + behaviour; - if(extra){ message += " " + extra; } - if(removal){ message += " -- will be removed in version: " + removal; } - console.warn(message); - }; - - dojo.experimental = function(/* String */ moduleName, /* String? */ extra){ - // summary: Marks code as experimental. - // description: - // This can be used to mark a function, file, or module as - // experimental. Experimental code is not ready to be used, and the - // APIs are subject to change without notice. Experimental code may be - // completed deleted without going through the normal deprecation - // process. - // moduleName: String - // The name of a module, or the name of a module file or a specific - // function - // extra: String? - // some additional message for the user - // example: - // | dojo.experimental("dojo.data.Result"); - // example: - // | dojo.experimental("dojo.weather.toKelvin()", "PENDING approval from NOAA"); - - var message = "EXPERIMENTAL: " + moduleName + " -- APIs subject to change without notice."; - if(extra){ message += " " + extra; } - console.warn(message); - }; - }else{ - dojo.deprecated = dojo.experimental = function(){}; - } - - true || has.add("dojo-modulePaths", - // consume dojo.modulePaths processing - 1 - ); - if(1){ - // notice that modulePaths won't be applied to any require's before the dojo/_base/kernel factory is run; - // this is the v1.6- behavior. - if(config.modulePaths){ - dojo.deprecated("dojo.modulePaths", "use paths configuration"); - var paths = {}; - for(p in config.modulePaths){ - paths[p.replace(/\./g, "/")] = config.modulePaths[p]; - } - require({paths:paths}); - } - } - - true || has.add("dojo-moduleUrl", - // include dojo.moduleUrl - 1 - ); - if(1){ - dojo.moduleUrl = function(/*String*/module, /*String?*/url){ - // summary: - // Returns a URL relative to a module. - // example: - // | var pngPath = dojo.moduleUrl("acme","images/small.png"); - // | console.dir(pngPath); // list the object properties - // | // create an image and set it's source to pngPath's value: - // | var img = document.createElement("img"); - // | img.src = pngPath; - // | // add our image to the document - // | dojo.body().appendChild(img); - // example: - // you may de-reference as far as you like down the package - // hierarchy. This is sometimes handy to avoid lenghty relative - // urls or for building portable sub-packages. In this example, - // the `acme.widget` and `acme.util` directories may be located - // under different roots (see `dojo.registerModulePath`) but the - // the modules which reference them can be unaware of their - // relative locations on the filesystem: - // | // somewhere in a configuration block - // | dojo.registerModulePath("acme.widget", "../../acme/widget"); - // | dojo.registerModulePath("acme.util", "../../util"); - // | - // | // ... - // | - // | // code in a module using acme resources - // | var tmpltPath = dojo.moduleUrl("acme.widget","templates/template.html"); - // | var dataPath = dojo.moduleUrl("acme.util","resources/data.json"); - - dojo.deprecated("dojo.moduleUrl()", "use require.toUrl", "2.0"); - - // require.toUrl requires a filetype; therefore, just append the suffix "/*.*" to guarantee a filetype, then - // remove the suffix from the result. This way clients can request a url w/out a filetype. This should be - // rare, but it maintains backcompat for the v1.x line (note: dojo.moduleUrl will be removed in v2.0). - // Notice * is an illegal filename so it won't conflict with any real path map that may exist the paths config. - var result = null; - if(module){ - result = require.toUrl(module.replace(/\./g, "/") + (url ? ("/" + url) : "") + "/*.*").replace(/\/\*\.\*/, "") + (url ? "" : "/"); - } - return result; - }; - } - - dojo._hasResource = {}; // for backward compatibility with layers built with 1.6 tooling - - return dojo; -}); diff --git a/lib/dojo/_base/lang.js.uncompressed.js b/lib/dojo/_base/lang.js.uncompressed.js deleted file mode 100644 index 503606040..000000000 --- a/lib/dojo/_base/lang.js.uncompressed.js +++ /dev/null @@ -1,707 +0,0 @@ -define("dojo/_base/lang", ["./kernel", "../has", "./sniff"], function(dojo, has){ - // module: - // dojo/_base/lang - // summary: - // This module defines Javascript language extensions. - - has.add("bug-for-in-skips-shadowed", function(){ - // if true, the for-in interator skips object properties that exist in Object's prototype (IE 6 - ?) - for(var i in {toString: 1}){ - return 0; - } - return 1; - }); - - var _extraNames = - has("bug-for-in-skips-shadowed") ? - "hasOwnProperty.valueOf.isPrototypeOf.propertyIsEnumerable.toLocaleString.toString.constructor".split(".") : [], - - _extraLen = _extraNames.length, - - _mixin = function(dest, source, copyFunc){ - var name, s, i, empty = {}; - for(name in source){ - // the (!(name in empty) || empty[name] !== s) condition avoids copying properties in "source" - // inherited from Object.prototype. For example, if dest has a custom toString() method, - // don't overwrite it with the toString() method that source inherited from Object.prototype - s = source[name]; - if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){ - dest[name] = copyFunc ? copyFunc(s) : s; - } - } - - if(has("bug-for-in-skips-shadowed")){ - if(source){ - for(i = 0; i < _extraLen; ++i){ - name = _extraNames[i]; - s = source[name]; - if(!(name in dest) || (dest[name] !== s && (!(name in empty) || empty[name] !== s))){ - dest[name] = copyFunc ? copyFunc(s) : s; - } - } - } - } - - return dest; // Object - }, - - mixin = function(dest, sources){ - if(!dest){ dest = {}; } - for(var i = 1, l = arguments.length; i < l; i++){ - lang._mixin(dest, arguments[i]); - } - return dest; // Object - }, - - getProp = function(/*Array*/parts, /*Boolean*/create, /*Object*/context){ - var p, i = 0, dojoGlobal = dojo.global; - if(!context){ - if(!parts.length){ - return dojoGlobal; - }else{ - p = parts[i++]; - try{ - context = dojo.scopeMap[p] && dojo.scopeMap[p][1]; - }catch(e){} - context = context || (p in dojoGlobal ? dojoGlobal[p] : (create ? dojoGlobal[p] = {} : undefined)); - } - } - while(context && (p = parts[i++])){ - context = (p in context ? context[p] : (create ? context[p] = {} : undefined)); - } - return context; // mixed - }, - - setObject = function(name, value, context){ - var parts = name.split("."), p = parts.pop(), obj = getProp(parts, true, context); - return obj && p ? (obj[p] = value) : undefined; // Object - }, - - getObject = function(name, create, context){ - return getProp(name.split("."), create, context); // Object - }, - - exists = function(name, obj){ - return lang.getObject(name, false, obj) !== undefined; // Boolean - }, - - opts = Object.prototype.toString, - - // Crockford (ish) functions - - isString = function(it){ - return (typeof it == "string" || it instanceof String); // Boolean - }, - - isArray = function(it){ - return it && (it instanceof Array || typeof it == "array"); // Boolean - }, - - isFunction = function(it){ - return opts.call(it) === "[object Function]"; - }, - - isObject = function(it){ - return it !== undefined && - (it === null || typeof it == "object" || lang.isArray(it) || lang.isFunction(it)); // Boolean - }, - - isArrayLike = function(it){ - return it && it !== undefined && // Boolean - // keep out built-in constructors (Number, String, ...) which have length - // properties - !lang.isString(it) && !lang.isFunction(it) && - !(it.tagName && it.tagName.toLowerCase() == 'form') && - (lang.isArray(it) || isFinite(it.length)); - }, - - isAlien = function(it){ - return it && !lang.isFunction(it) && /\{\s*\[native code\]\s*\}/.test(String(it)); // Boolean - }, - - extend = function(constructor, props){ - for(var i=1, l=arguments.length; i 2){ - return lang._hitchArgs.apply(dojo, arguments); // Function - } - if(!method){ - method = scope; - scope = null; - } - if(lang.isString(method)){ - scope = scope || dojo.global; - if(!scope[method]){ throw(['dojo.hitch: scope["', method, '"] is null (scope="', scope, '")'].join('')); } - return function(){ return scope[method].apply(scope, arguments || []); }; // Function - } - return !scope ? method : function(){ return method.apply(scope, arguments || []); }; // Function - }, - - delegate = (function(){ - // boodman/crockford delegation w/ cornford optimization - function TMP(){} - return function(obj, props){ - TMP.prototype = obj; - var tmp = new TMP(); - TMP.prototype = null; - if(props){ - lang._mixin(tmp, props); - } - return tmp; // Object - }; - })(), - - efficient = function(obj, offset, startWith){ - return (startWith||[]).concat(Array.prototype.slice.call(obj, offset||0)); - }, - - _toArray = - has("ie") ? - (function(){ - function slow(obj, offset, startWith){ - var arr = startWith||[]; - for(var x = offset || 0; x < obj.length; x++){ - arr.push(obj[x]); - } - return arr; - } - return function(obj){ - return ((obj.item) ? slow : efficient).apply(this, arguments); - }; - })() : efficient, - - partial = function(/*Function|String*/method /*, ...*/){ - var arr = [ null ]; - return lang.hitch.apply(dojo, arr.concat(lang._toArray(arguments))); // Function - }, - - clone = function(/*anything*/ src){ - if(!src || typeof src != "object" || lang.isFunction(src)){ - // null, undefined, any non-object, or function - return src; // anything - } - if(src.nodeType && "cloneNode" in src){ - // DOM Node - return src.cloneNode(true); // Node - } - if(src instanceof Date){ - // Date - return new Date(src.getTime()); // Date - } - if(src instanceof RegExp){ - // RegExp - return new RegExp(src); // RegExp - } - var r, i, l; - if(lang.isArray(src)){ - // array - r = []; - for(i = 0, l = src.length; i < l; ++i){ - if(i in src){ - r.push(clone(src[i])); - } - } - // we don't clone functions for performance reasons - // }else if(d.isFunction(src)){ - // // function - // r = function(){ return src.apply(this, arguments); }; - }else{ - // generic objects - r = src.constructor ? new src.constructor() : {}; - } - return lang._mixin(r, src, clone); - }, - - - trim = String.prototype.trim ? - function(str){ return str.trim(); } : - function(str){ return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }, - - - _pattern = /\{([^\}]+)\}/g, - - replace = function(tmpl, map, pattern){ - return tmpl.replace(pattern || _pattern, lang.isFunction(map) ? - map : function(_, k){ return getObject(k, false, map); }); - }, - - lang = { - _extraNames:_extraNames, - _mixin:_mixin, - mixin:mixin, - setObject:setObject, - getObject:getObject, - exists:exists, - isString:isString, - isArray:isArray, - isFunction:isFunction, - isObject:isObject, - isArrayLike:isArrayLike, - isAlien:isAlien, - extend:extend, - _hitchArgs:_hitchArgs, - hitch:hitch, - delegate:delegate, - _toArray:_toArray, - partial:partial, - clone:clone, - trim:trim, - replace:replace - }; - - 1 && mixin(dojo, lang); - return lang; - - /*===== - dojo._extraNames - // summary: - // Array of strings. Lists property names that must be explicitly processed during for-in interation - // in environments that have has("bug-for-in-skips-shadowed") true. - =====*/ - - /*===== - dojo._mixin = function(dest, source, copyFunc){ - // summary: - // Copies/adds all properties of source to dest; returns dest. - // dest: Object: - // The object to which to copy/add all properties contained in source. - // source: Object: - // The object from which to draw all properties to copy into dest. - // copyFunc: Function?: - // The process used to copy/add a property in source; defaults to the Javascript assignment operator. - // returns: - // dest, as modified - // description: - // All properties, including functions (sometimes termed "methods"), excluding any non-standard extensions - // found in Object.prototype, are copied/added to dest. Copying/adding each particular property is - // delegated to copyFunc (if any); copyFunc defaults to the Javascript assignment operator if not provided. - // Notice that by default, _mixin executes a so-called "shallow copy" and aggregate types are copied/added by reference. - } - =====*/ - - /*===== - dojo.mixin = function(dest, sources){ - // summary: - // Copies/adds all properties of one or more sources to dest; returns dest. - // dest: Object - // The object to which to copy/add all properties contained in source. If dest is falsy, then - // a new object is manufactured before copying/adding properties begins. - // sources: Object... - // One of more objects from which to draw all properties to copy into dest. sources are processed - // left-to-right and if more than one of these objects contain the same property name, the right-most - // value "wins". - // returns: Object - // dest, as modified - // description: - // All properties, including functions (sometimes termed "methods"), excluding any non-standard extensions - // found in Object.prototype, are copied/added from sources to dest. sources are processed left to right. - // The Javascript assignment operator is used to copy/add each property; therefore, by default, mixin - // executes a so-called "shallow copy" and aggregate types are copied/added by reference. - // example: - // make a shallow copy of an object - // | var copy = lang.mixin({}, source); - // example: - // many class constructors often take an object which specifies - // values to be configured on the object. In this case, it is - // often simplest to call `lang.mixin` on the `this` object: - // | dojo.declare("acme.Base", null, { - // | constructor: function(properties){ - // | // property configuration: - // | lang.mixin(this, properties); - // | - // | console.log(this.quip); - // | // ... - // | }, - // | quip: "I wasn't born yesterday, you know - I've seen movies.", - // | // ... - // | }); - // | - // | // create an instance of the class and configure it - // | var b = new acme.Base({quip: "That's what it does!" }); - // example: - // copy in properties from multiple objects - // | var flattened = lang.mixin( - // | { - // | name: "Frylock", - // | braces: true - // | }, - // | { - // | name: "Carl Brutanananadilewski" - // | } - // | ); - // | - // | // will print "Carl Brutanananadilewski" - // | console.log(flattened.name); - // | // will print "true" - // | console.log(flattened.braces); - } - =====*/ - - /*===== - dojo.setObject = function(name, value, context){ - // summary: - // Set a property from a dot-separated string, such as "A.B.C" - // description: - // Useful for longer api chains where you have to test each object in - // the chain, or when you have an object reference in string format. - // Objects are created as needed along `path`. Returns the passed - // value if setting is successful or `undefined` if not. - // name: String - // Path to a property, in the form "A.B.C". - // value: anything - // value or object to place at location given by name - // context: Object? - // Optional. Object to use as root of path. Defaults to - // `dojo.global`. - // example: - // set the value of `foo.bar.baz`, regardless of whether - // intermediate objects already exist: - // | lang.setObject("foo.bar.baz", value); - // example: - // without `lang.setObject`, we often see code like this: - // | // ensure that intermediate objects are available - // | if(!obj["parent"]){ obj.parent = {}; } - // | if(!obj.parent["child"]){ obj.parent.child = {}; } - // | // now we can safely set the property - // | obj.parent.child.prop = "some value"; - // whereas with `lang.setObject`, we can shorten that to: - // | lang.setObject("parent.child.prop", "some value", obj); - } - =====*/ - - /*===== - dojo.getObject = function(name, create, context){ - // summary: - // Get a property from a dot-separated string, such as "A.B.C" - // description: - // Useful for longer api chains where you have to test each object in - // the chain, or when you have an object reference in string format. - // name: String - // Path to an property, in the form "A.B.C". - // create: Boolean? - // Optional. Defaults to `false`. If `true`, Objects will be - // created at any point along the 'path' that is undefined. - // context: Object? - // Optional. Object to use as root of path. Defaults to - // 'dojo.global'. Null may be passed. - } - =====*/ - - /*===== - dojo.exists = function(name, obj){ - // summary: - // determine if an object supports a given method - // description: - // useful for longer api chains where you have to test each object in - // the chain. Useful for object and method detection. - // name: String - // Path to an object, in the form "A.B.C". - // obj: Object? - // Object to use as root of path. Defaults to - // 'dojo.global'. Null may be passed. - // example: - // | // define an object - // | var foo = { - // | bar: { } - // | }; - // | - // | // search the global scope - // | lang.exists("foo.bar"); // true - // | lang.exists("foo.bar.baz"); // false - // | - // | // search from a particular scope - // | lang.exists("bar", foo); // true - // | lang.exists("bar.baz", foo); // false - } - =====*/ - - /*===== - dojo.isString = function(it){ - // summary: - // Return true if it is a String - // it: anything - // Item to test. - } - =====*/ - - /*===== - dojo.isArray = function(it){ - // summary: - // Return true if it is an Array. - // Does not work on Arrays created in other windows. - // it: anything - // Item to test. - } - =====*/ - - /*===== - dojo.isFunction = function(it){ - // summary: - // Return true if it is a Function - // it: anything - // Item to test. - } - =====*/ - - /*===== - dojo.isObject = function(it){ - // summary: - // Returns true if it is a JavaScript object (or an Array, a Function - // or null) - // it: anything - // Item to test. - } - =====*/ - - /*===== - dojo.isArrayLike = function(it){ - // summary: - // similar to dojo.isArray() but more permissive - // it: anything - // Item to test. - // returns: - // If it walks like a duck and quacks like a duck, return `true` - // description: - // Doesn't strongly test for "arrayness". Instead, settles for "isn't - // a string or number and has a length property". Arguments objects - // and DOM collections will return true when passed to - // dojo.isArrayLike(), but will return false when passed to - // dojo.isArray(). - } - =====*/ - - /*===== - dojo.isAlien = function(it){ - // summary: - // Returns true if it is a built-in function or some other kind of - // oddball that *should* report as a function but doesn't - } - =====*/ - - /*===== - dojo.extend = function(constructor, props){ - // summary: - // Adds all properties and methods of props to constructor's - // prototype, making them available to all instances created with - // constructor. - // constructor: Object - // Target constructor to extend. - // props: Object... - // One or more objects to mix into constructor.prototype - } - =====*/ - - /*===== - dojo.hitch = function(scope, method){ - // summary: - // Returns a function that will only ever execute in the a given scope. - // This allows for easy use of object member functions - // in callbacks and other places in which the "this" keyword may - // otherwise not reference the expected scope. - // Any number of default positional arguments may be passed as parameters - // beyond "method". - // Each of these values will be used to "placehold" (similar to curry) - // for the hitched function. - // scope: Object - // The scope to use when method executes. If method is a string, - // scope is also the object containing method. - // method: Function|String... - // A function to be hitched to scope, or the name of the method in - // scope to be hitched. - // example: - // | dojo.hitch(foo, "bar")(); - // runs foo.bar() in the scope of foo - // example: - // | dojo.hitch(foo, myFunction); - // returns a function that runs myFunction in the scope of foo - // example: - // Expansion on the default positional arguments passed along from - // hitch. Passed args are mixed first, additional args after. - // | var foo = { bar: function(a, b, c){ console.log(a, b, c); } }; - // | var fn = dojo.hitch(foo, "bar", 1, 2); - // | fn(3); // logs "1, 2, 3" - // example: - // | var foo = { bar: 2 }; - // | dojo.hitch(foo, function(){ this.bar = 10; })(); - // execute an anonymous function in scope of foo - } - =====*/ - - /*===== - dojo.delegate = function(obj, props){ - // summary: - // Returns a new object which "looks" to obj for properties which it - // does not have a value for. Optionally takes a bag of properties to - // seed the returned object with initially. - // description: - // This is a small implementaton of the Boodman/Crockford delegation - // pattern in JavaScript. An intermediate object constructor mediates - // the prototype chain for the returned object, using it to delegate - // down to obj for property lookup when object-local lookup fails. - // This can be thought of similarly to ES4's "wrap", save that it does - // not act on types but rather on pure objects. - // obj: Object - // The object to delegate to for properties not found directly on the - // return object or in props. - // props: Object... - // an object containing properties to assign to the returned object - // returns: - // an Object of anonymous type - // example: - // | var foo = { bar: "baz" }; - // | var thinger = dojo.delegate(foo, { thud: "xyzzy"}); - // | thinger.bar == "baz"; // delegated to foo - // | foo.thud == undefined; // by definition - // | thinger.thud == "xyzzy"; // mixed in from props - // | foo.bar = "thonk"; - // | thinger.bar == "thonk"; // still delegated to foo's bar - } - =====*/ - - /*===== - dojo.partial = function(method){ - // summary: - // similar to hitch() except that the scope object is left to be - // whatever the execution context eventually becomes. - // method: Function|String - // description: - // Calling dojo.partial is the functional equivalent of calling: - // | dojo.hitch(null, funcName, ...); - } - =====*/ - - /*===== - dojo.trim = function(str){ - // summary: - // Trims whitespace from both sides of the string - // str: String - // String to be trimmed - // returns: String - // Returns the trimmed string - // description: - // This version of trim() was selected for inclusion into the base due - // to its compact size and relatively good performance - // (see [Steven Levithan's blog](http://blog.stevenlevithan.com/archives/faster-trim-javascript) - // Uses String.prototype.trim instead, if available. - // The fastest but longest version of this function is located at - // dojo.string.trim() - } - =====*/ - - /*===== - dojo.clone = function(src){ - // summary: - // Clones objects (including DOM nodes) and all children. - // Warning: do not clone cyclic structures. - // src: - // The object to clone - } - =====*/ - - /*===== - dojo._toArray = function(obj, offset, startWith){ - // summary: - // Converts an array-like object (i.e. arguments, DOMCollection) to an - // array. Returns a new Array with the elements of obj. - // obj: Object - // the object to "arrayify". We expect the object to have, at a - // minimum, a length property which corresponds to integer-indexed - // properties. - // offset: Number? - // the location in obj to start iterating from. Defaults to 0. - // Optional. - // startWith: Array? - // An array to pack with the properties of obj. If provided, - // properties in obj are appended at the end of startWith and - // startWith is the returned array. - } - =====*/ - - /*===== - dojo.replace = function(tmpl, map, pattern){ - // summary: - // Performs parameterized substitutions on a string. Throws an - // exception if any parameter is unmatched. - // tmpl: String - // String to be used as a template. - // map: Object|Function - // If an object, it is used as a dictionary to look up substitutions. - // If a function, it is called for every substitution with following - // parameters: a whole match, a name, an offset, and the whole template - // string (see https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace - // for more details). - // pattern: RegEx? - // Optional regular expression objects that overrides the default pattern. - // Must be global and match one item. The default is: /\{([^\}]+)\}/g, - // which matches patterns like that: "{xxx}", where "xxx" is any sequence - // of characters, which doesn't include "}". - // returns: String - // Returns the substituted string. - // example: - // | // uses a dictionary for substitutions: - // | dojo.replace("Hello, {name.first} {name.last} AKA {nick}!", - // | { - // | nick: "Bob", - // | name: { - // | first: "Robert", - // | middle: "X", - // | last: "Cringely" - // | } - // | }); - // | // returns: Hello, Robert Cringely AKA Bob! - // example: - // | // uses an array for substitutions: - // | dojo.replace("Hello, {0} {2}!", - // | ["Robert", "X", "Cringely"]); - // | // returns: Hello, Robert Cringely! - // example: - // | // uses a function for substitutions: - // | function sum(a){ - // | var t = 0; - // | dojo.forEach(a, function(x){ t += x; }); - // | return t; - // | } - // | dojo.replace( - // | "{count} payments averaging {avg} USD per payment.", - // | dojo.hitch( - // | { payments: [11, 16, 12] }, - // | function(_, key){ - // | switch(key){ - // | case "count": return this.payments.length; - // | case "min": return Math.min.apply(Math, this.payments); - // | case "max": return Math.max.apply(Math, this.payments); - // | case "sum": return sum(this.payments); - // | case "avg": return sum(this.payments) / this.payments.length; - // | } - // | } - // | ) - // | ); - // | // prints: 3 payments averaging 13 USD per payment. - // example: - // | // uses an alternative PHP-like pattern for substitutions: - // | dojo.replace("Hello, ${0} ${2}!", - // | ["Robert", "X", "Cringely"], /\$\{([^\}]+)\}/g); - // | // returns: Hello, Robert Cringely! - return ""; // String - } - =====*/ -}); - diff --git a/lib/dojo/_base/loader.js.uncompressed.js b/lib/dojo/_base/loader.js.uncompressed.js deleted file mode 100644 index 0bc2cc5b3..000000000 --- a/lib/dojo/_base/loader.js.uncompressed.js +++ /dev/null @@ -1,718 +0,0 @@ -define("dojo/_base/loader", ["./kernel", "../has", "require", "module", "./json", "./lang", "./array"], function(dojo, has, require, thisModule, json, lang, array) { - // module: - // dojo/_base/lader - // summary: - // This module defines the v1.x synchronous loader API. - - // signal the loader in sync mode... - //>>pure-amd - - if (!1){ - console.error("cannot load the Dojo v1.x loader with a foreign loader"); - return 0; - } - - var makeErrorToken = function(id){ - return {src:thisModule.id, id:id}; - }, - - slashName = function(name){ - return name.replace(/\./g, "/"); - }, - - buildDetectRe = /\/\/>>built/, - - dojoRequireCallbacks = [], - dojoRequireModuleStack = [], - - dojoRequirePlugin = function(mid, require, loaded){ - dojoRequireCallbacks.push(loaded); - array.forEach(mid.split(","), function(mid){ - var module = getModule(mid, require.module); - dojoRequireModuleStack.push(module); - injectModule(module); - }); - checkDojoRequirePlugin(); - }, - - // checkDojoRequirePlugin inspects all of the modules demanded by a dojo/require! dependency - // to see if they have arrived. The loader does not release *any* of these modules to be instantiated - // until *all* of these modules are on board, thereby preventing the evaluation of a module with dojo.require's - // that reference modules that are not available. - // - // The algorithm works by traversing the dependency graphs (remember, there can be cycles so they are not trees) - // of each module in the dojoRequireModuleStack array (which contains the list of modules demanded by dojo/require!). - // The moment a single module is discovered that is missing, the algorithm gives up and indicates that not all - // modules are on board. dojo/loadInit! and dojo/require! are ignored because there dependencies are inserted - // directly in dojoRequireModuleStack. For example, if "your/module" module depends on "dojo/require!my/module", then - // *both* "dojo/require!my/module" and "my/module" will be in dojoRequireModuleStack. Obviously, if "my/module" - // is on board, then "dojo/require!my/module" is also satisfied, so the algorithm doesn't check for "dojo/require!my/module". - // - // Note: inserting a dojo/require! dependency in the dojoRequireModuleStack achieves nothing - // with the current algorithm; however, having such modules present makes it possible to optimize the algorithm - // - // Note: prior versions of this algorithm had an optimization that signaled loaded on dojo/require! dependencies - // individually (rather than waiting for them all to be resolved). The implementation proved problematic with cycles - // and plugins. However, it is possible to reattach that strategy in the future. - - // a set from module-id to {undefined | 1 | 0}, where... - // undefined => the module has not been inspected - // 0 => the module or at least one of its dependencies has not arrived - // 1 => the module is a loadInit! or require! plugin resource, or is currently being traversed (therefore, assume - // OK until proven otherwise), or has been completely traversed and all dependencies have arrived - touched, - - traverse = function(m){ - touched[m.mid] = 1; - for(var t, module, deps = m.deps || [], i= 0; i a built module, always AMD - // extractResult==0 => no sync API - return 0; - } - - // manufacture a synthetic module id that can never be a real mdule id (just like require does) - id = module.mid + "-*loadInit"; - - // construct the dojo/loadInit names vector which causes any relocated names to be defined as lexical variables under their not-relocated name - // the dojo/loadInit plugin assumes the first name in names is "dojo" - - for(var p in getModule("dojo", module).result.scopeMap){ - names.push(p); - namesAsStrings.push('"' + p + '"'); - } - - // rewrite the module as a synthetic dojo/loadInit plugin resource + the module expressed as an AMD module that depends on this synthetic resource - return "// xdomain rewrite of " + module.path + "\n" + - "define('" + id + "',{\n" + - "\tnames:" + dojo.toJson(names) + ",\n" + - "\tdef:function(" + names.join(",") + "){" + extractResult[1] + "}" + - "});\n\n" + - "define(" + dojo.toJson(names.concat(["dojo/loadInit!"+id])) + ", function(" + names.join(",") + "){\n" + extractResult[0] + "});"; - }, - - loaderVars = require.initSyncLoader(dojoRequirePlugin, checkDojoRequirePlugin, transformToAmd), - - sync = - loaderVars.sync, - - xd = - loaderVars.xd, - - arrived = - loaderVars.arrived, - - nonmodule = - loaderVars.nonmodule, - - executing = - loaderVars.executing, - - executed = - loaderVars.executed, - - syncExecStack = - loaderVars.syncExecStack, - - modules = - loaderVars.modules, - - execQ = - loaderVars.execQ, - - getModule = - loaderVars.getModule, - - injectModule = - loaderVars.injectModule, - - setArrived = - loaderVars.setArrived, - - signal = - loaderVars.signal, - - finishExec = - loaderVars.finishExec, - - execModule = - loaderVars.execModule, - - getLegacyMode = - loaderVars.getLegacyMode; - - dojo.provide = function(mid){ - var executingModule = syncExecStack[0], - module = lang.mixin(getModule(slashName(mid), require.module), { - executed:executing, - result:lang.getObject(mid, true) - }); - setArrived(module); - if(executingModule){ - (executingModule.provides || (executingModule.provides = [])).push(function(){ - module.result = lang.getObject(mid); - delete module.provides; - module.executed!==executed && finishExec(module); - }); - }// else dojo.provide called not consequent to loading; therefore, give up trying to publish module value to loader namespace - return module.result; - }; - - has.add("config-publishRequireResult", 1, 0, 0); - - dojo.require = function(moduleName, omitModuleCheck) { - // summary: - // loads a Javascript module from the appropriate URI - // - // moduleName: String - // module name to load, using periods for separators, - // e.g. "dojo.date.locale". Module paths are de-referenced by dojo's - // internal mapping of locations to names and are disambiguated by - // longest prefix. See `dojo.registerModulePath()` for details on - // registering new modules. - // - // omitModuleCheck: Boolean? - // if `true`, omitModuleCheck skips the step of ensuring that the - // loaded file actually defines the symbol it is referenced by. - // For example if it called as `dojo.require("a.b.c")` and the - // file located at `a/b/c.js` does not define an object `a.b.c`, - // and exception will be throws whereas no exception is raised - // when called as `dojo.require("a.b.c", true)` - // - // description: - // Modules are loaded via dojo.require by using one of two loaders: the normal loader - // and the xdomain loader. The xdomain loader is used when dojo was built with a - // custom build that specified loader=xdomain and the module lives on a modulePath - // that is a whole URL, with protocol and a domain. The versions of Dojo that are on - // the Google and AOL CDNs use the xdomain loader. - // - // If the module is loaded via the xdomain loader, it is an asynchronous load, since - // the module is added via a dynamically created script tag. This - // means that dojo.require() can return before the module has loaded. However, this - // should only happen in the case where you do dojo.require calls in the top-level - // HTML page, or if you purposely avoid the loader checking for dojo.require - // dependencies in your module by using a syntax like dojo["require"] to load the module. - // - // Sometimes it is useful to not have the loader detect the dojo.require calls in the - // module so that you can dynamically load the modules as a result of an action on the - // page, instead of right at module load time. - // - // Also, for script blocks in an HTML page, the loader does not pre-process them, so - // it does not know to download the modules before the dojo.require calls occur. - // - // So, in those two cases, when you want on-the-fly module loading or for script blocks - // in the HTML page, special care must be taken if the dojo.required code is loaded - // asynchronously. To make sure you can execute code that depends on the dojo.required - // modules, be sure to add the code that depends on the modules in a dojo.addOnLoad() - // callback. dojo.addOnLoad waits for all outstanding modules to finish loading before - // executing. - // - // This type of syntax works with both xdomain and normal loaders, so it is good - // practice to always use this idiom for on-the-fly code loading and in HTML script - // blocks. If at some point you change loaders and where the code is loaded from, - // it will all still work. - // - // More on how dojo.require - // `dojo.require("A.B")` first checks to see if symbol A.B is - // defined. If it is, it is simply returned (nothing to do). - // - // If it is not defined, it will look for `A/B.js` in the script root - // directory. - // - // `dojo.require` throws an exception if it cannot find a file - // to load, or if the symbol `A.B` is not defined after loading. - // - // It returns the object `A.B`, but note the caveats above about on-the-fly loading and - // HTML script blocks when the xdomain loader is loading a module. - // - // `dojo.require()` does nothing about importing symbols into - // the current namespace. It is presumed that the caller will - // take care of that. - // - // example: - // To use dojo.require in conjunction with dojo.ready: - // - // | dojo.require("foo"); - // | dojo.require("bar"); - // | dojo.addOnLoad(function(){ - // | //you can now safely do something with foo and bar - // | }); - // - // example: - // For example, to import all symbols into a local block, you might write: - // - // | with (dojo.require("A.B")) { - // | ... - // | } - // - // And to import just the leaf symbol to a local variable: - // - // | var B = dojo.require("A.B"); - // | ... - // - // returns: - // the required namespace object - function doRequire(mid, omitModuleCheck){ - var module = getModule(slashName(mid), require.module); - if(syncExecStack.length && syncExecStack[0].finish){ - // switched to async loading in the middle of evaluating a legacy module; stop - // applying dojo.require so the remaining dojo.requires are applied in order - syncExecStack[0].finish.push(mid); - return undefined; - } - - // recall module.executed has values {0, executing, executed}; therefore, truthy indicates executing or executed - if(module.executed){ - return module.result; - } - omitModuleCheck && (module.result = nonmodule); - - var currentMode = getLegacyMode(); - - // recall, in sync mode to inject is to *eval* the module text - // if the module is a legacy module, this is the same as executing - // but if the module is an AMD module, this means defining, not executing - injectModule(module); - // the inject may have changed the mode - currentMode = getLegacyMode(); - - // in sync mode to dojo.require is to execute - if(module.executed!==executed && module.injected===arrived){ - // the module was already here before injectModule was called probably finishing up a xdomain - // load, but maybe a module given to the loader directly rather than having the loader retrieve it - loaderVars.holdIdle(); - execModule(module); - loaderVars.releaseIdle(); - } - if(module.executed){ - return module.result; - } - - if(currentMode==sync){ - // the only way to get here is in sync mode and dojo.required a module that - // * was loaded async in the injectModule application a few lines up - // * was an AMD module that had deps that are being loaded async and therefore couldn't execute - if(module.cjs){ - // the module was an AMD module; unshift, not push, which causes the current traversal to be reattempted from the top - execQ.unshift(module); - }else{ - // the module was a legacy module - syncExecStack.length && (syncExecStack[0].finish= [mid]); - } - }else{ - // the loader wasn't in sync mode on entry; probably async mode; therefore, no expectation of getting - // the module value synchronously; make sure it gets executed though - execQ.push(module); - } - return undefined; - } - - var result = doRequire(moduleName, omitModuleCheck); - if(has("config-publishRequireResult") && !lang.exists(moduleName) && result!==undefined){ - lang.setObject(moduleName, result); - } - return result; - }; - - dojo.loadInit = function(f) { - f(); - }; - - dojo.registerModulePath = function(/*String*/moduleName, /*String*/prefix){ - // summary: - // Maps a module name to a path - // description: - // An unregistered module is given the default path of ../[module], - // relative to Dojo root. For example, module acme is mapped to - // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. - // example: - // If your dojo.js is located at this location in the web root: - // | /myapp/js/dojo/dojo/dojo.js - // and your modules are located at: - // | /myapp/js/foo/bar.js - // | /myapp/js/foo/baz.js - // | /myapp/js/foo/thud/xyzzy.js - // Your application can tell Dojo to locate the "foo" namespace by calling: - // | dojo.registerModulePath("foo", "../../foo"); - // At which point you can then use dojo.require() to load the - // modules (assuming they provide() the same things which are - // required). The full code might be: - // | - // | - - var paths = {}; - paths[moduleName.replace(/\./g, "/")] = prefix; - require({paths:paths}); - }; - - dojo.platformRequire = function(/*Object*/modMap){ - // summary: - // require one or more modules based on which host environment - // Dojo is currently operating in - // description: - // This method takes a "map" of arrays which one can use to - // optionally load dojo modules. The map is indexed by the - // possible dojo.name_ values, with two additional values: - // "default" and "common". The items in the "default" array will - // be loaded if none of the other items have been choosen based on - // dojo.name_, set by your host environment. The items in the - // "common" array will *always* be loaded, regardless of which - // list is chosen. - // example: - // | dojo.platformRequire({ - // | browser: [ - // | "foo.sample", // simple module - // | "foo.test", - // | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require) - // | ], - // | default: [ "foo.sample._base" ], - // | common: [ "important.module.common" ] - // | }); - - var result = (modMap.common || []).concat(modMap[dojo._name] || modMap["default"] || []), - temp; - while(result.length){ - if(lang.isArray(temp = result.shift())){ - dojo.require.apply(dojo, temp); - }else{ - dojo.require(temp); - } - } - }; - - dojo.requireIf = dojo.requireAfterIf = function(/*Boolean*/ condition, /*String*/ moduleName, /*Boolean?*/omitModuleCheck){ - // summary: - // If the condition is true then call `dojo.require()` for the specified - // resource - // - // example: - // | dojo.requireIf(dojo.isBrowser, "my.special.Module"); - - if(condition){ - dojo.require(moduleName, omitModuleCheck); - } - }; - - dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale){ - require(["../i18n"], function(i18n){ - i18n.getLocalization(moduleName, bundleName, locale); - }); - }; - - return { - extractLegacyApiApplications:extractLegacyApiApplications, - require:loaderVars.dojoRequirePlugin, - loadInit:dojoLoadInitPlugin - }; -}); diff --git a/lib/dojo/_base/query.js.uncompressed.js b/lib/dojo/_base/query.js.uncompressed.js deleted file mode 100644 index a1b161b0b..000000000 --- a/lib/dojo/_base/query.js.uncompressed.js +++ /dev/null @@ -1,3 +0,0 @@ -define("dojo/_base/query", ["./kernel", "../query", "./NodeList"], function(dojo){ - return dojo.query; -}); diff --git a/lib/dojo/_base/sniff.js.uncompressed.js b/lib/dojo/_base/sniff.js.uncompressed.js deleted file mode 100644 index c7e4b428a..000000000 --- a/lib/dojo/_base/sniff.js.uncompressed.js +++ /dev/null @@ -1,187 +0,0 @@ -define("dojo/_base/sniff", ["./kernel", "../has"], function(dojo, has){ - // module: - // dojo/sniff - // summary: - // This module populates the dojo browser version sniffing properties. - - if(!1){ - return has; - } - - dojo.isBrowser = true, - dojo._name = "browser"; - - var hasAdd = has.add, - n = navigator, - dua = n.userAgent, - dav = n.appVersion, - tv = parseFloat(dav), - isOpera, - isAIR, - isKhtml, - isWebKit, - isChrome, - isMac, - isSafari, - isMozilla , - isMoz, - isIE, - isFF, - isQuirks, - isIos, - isAndroid, - isWii; - - /*===== - dojo.isBrowser = { - // example: - // | if(dojo.isBrowser){ ... } - }; - - dojo.isFF = { - // example: - // | if(dojo.isFF > 1){ ... } - }; - - dojo.isIE = { - // example: - // | if(dojo.isIE > 6){ - // | // we are IE7 - // | } - }; - - dojo.isSafari = { - // example: - // | if(dojo.isSafari){ ... } - // example: - // Detect iPhone: - // | if(dojo.isSafari && navigator.userAgent.indexOf("iPhone") != -1){ - // | // we are iPhone. Note, iPod touch reports "iPod" above and fails this test. - // | } - }; - - dojo.mixin(dojo, { - // isBrowser: Boolean - // True if the client is a web-browser - isBrowser: true, - // isFF: Number | undefined - // Version as a Number if client is FireFox. undefined otherwise. Corresponds to - // major detected FireFox version (1.5, 2, 3, etc.) - isFF: 2, - // isIE: Number | undefined - // Version as a Number if client is MSIE(PC). undefined otherwise. Corresponds to - // major detected IE version (6, 7, 8, etc.) - isIE: 6, - // isKhtml: Number | undefined - // Version as a Number if client is a KHTML browser. undefined otherwise. Corresponds to major - // detected version. - isKhtml: 0, - // isWebKit: Number | undefined - // Version as a Number if client is a WebKit-derived browser (Konqueror, - // Safari, Chrome, etc.). undefined otherwise. - isWebKit: 0, - // isMozilla: Number | undefined - // Version as a Number if client is a Mozilla-based browser (Firefox, - // SeaMonkey). undefined otherwise. Corresponds to major detected version. - isMozilla: 0, - // isOpera: Number | undefined - // Version as a Number if client is Opera. undefined otherwise. Corresponds to - // major detected version. - isOpera: 0, - // isSafari: Number | undefined - // Version as a Number if client is Safari or iPhone. undefined otherwise. - isSafari: 0, - // isChrome: Number | undefined - // Version as a Number if client is Chrome browser. undefined otherwise. - isChrome: 0, - // isMac: Boolean - // True if the client runs on Mac - isMac: 0, - // isIos: Boolean - // True if client is iPhone, iPod, or iPad - isIos: 0, - // isAndroid: Number | undefined - // Version as a Number if client is android browser. undefined otherwise. - isAndroid: 0, - // isWii: Boolean - // True if client is Wii - isWii: 0 - }); - =====*/ - - // fill in the rendering support information in dojo.render.* - if(dua.indexOf("AdobeAIR") >= 0){ isAIR = 1; } - isKhtml = (dav.indexOf("Konqueror") >= 0) ? tv : 0; - isWebKit = parseFloat(dua.split("WebKit/")[1]) || undefined; - isChrome = parseFloat(dua.split("Chrome/")[1]) || undefined; - isMac = dav.indexOf("Macintosh") >= 0; - isIos = /iPhone|iPod|iPad/.test(dua); - isAndroid = parseFloat(dua.split("Android ")[1]) || undefined; - isWii = typeof opera != "undefined" && opera.wiiremote; - - // safari detection derived from: - // http://developer.apple.com/internet/safari/faq.html#anchor2 - // http://developer.apple.com/internet/safari/uamatrix.html - var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0); - if(index && !isChrome){ - // try to grab the explicit Safari version first. If we don't get - // one, look for less than 419.3 as the indication that we're on something - // "Safari 2-ish". - isSafari = parseFloat(dav.split("Version/")[1]); - if(!isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){ - isSafari = 2; - } - } - - if (!has("dojo-webkit")) { - if(dua.indexOf("Opera") >= 0){ - isOpera = tv; - // see http://dev.opera.com/articles/view/opera-ua-string-changes and http://www.useragentstring.com/pages/Opera/ - // 9.8 has both styles; <9.8, 9.9 only old style - if(isOpera >= 9.8){ - isOpera = parseFloat(dua.split("Version/")[1]) || tv; - } - } - - if(dua.indexOf("Gecko") >= 0 && !isKhtml && !isWebKit){ - isMozilla = isMoz = tv; - } - if(isMoz){ - //We really need to get away from this. Consider a sane isGecko approach for the future. - isFF = parseFloat(dua.split("Firefox/")[1] || dua.split("Minefield/")[1]) || undefined; - } - if(document.all && !isOpera){ - isIE = parseFloat(dav.split("MSIE ")[1]) || undefined; - //In cases where the page has an HTTP header or META tag with - //X-UA-Compatible, then it is in emulation mode. - //Make sure isIE reflects the desired version. - //document.documentMode of 5 means quirks mode. - //Only switch the value if documentMode's major version - //is different from isIE's major version. - var mode = document.documentMode; - if(mode && mode != 5 && Math.floor(isIE) != mode){ - isIE = mode; - } - } - } - - isQuirks = document.compatMode == "BackCompat"; - - hasAdd("opera", dojo.isOpera = isOpera); - hasAdd("air", dojo.isAIR = isAIR); - hasAdd("khtml", dojo.isKhtml = isKhtml); - hasAdd("webkit", dojo.isWebKit = isWebKit); - hasAdd("chrome", dojo.isChrome = isChrome); - hasAdd("mac", dojo.isMac = isMac ); - hasAdd("safari", dojo.isSafari = isSafari); - hasAdd("mozilla", dojo.isMozilla = dojo.isMoz = isMozilla ); - hasAdd("ie", dojo.isIE = isIE ); - hasAdd("ff", dojo.isFF = isFF); - hasAdd("quirks", dojo.isQuirks = isQuirks); - hasAdd("ios", dojo.isIos = isIos); - hasAdd("android", dojo.isAndroid = isAndroid); - - dojo.locale = dojo.locale || (isIE ? n.userLanguage : n.language).toLowerCase(); - - return has; -}); diff --git a/lib/dojo/_base/unload.js.uncompressed.js b/lib/dojo/_base/unload.js.uncompressed.js deleted file mode 100644 index e811d929d..000000000 --- a/lib/dojo/_base/unload.js.uncompressed.js +++ /dev/null @@ -1,81 +0,0 @@ -define("dojo/_base/unload", ["./kernel", "./connect"], function(dojo, connect) { - // module: - // dojo/unload - // summary: - // This module contains the document and window unload detection API. - - var win = window; - - /*===== - dojo.windowUnloaded = function(){ - // summary: - // signal fired by impending window destruction. You may use - // dojo.addOnWindowUnload() to register a listener for this - // event. NOTE: if you wish to dojo.connect() to this method - // to perform page/application cleanup, be aware that this - // event WILL NOT fire if no handler has been registered with - // dojo.addOnWindowUnload. This behavior started in Dojo 1.3. - // Previous versions always triggered dojo.windowUnloaded. See - // dojo.addOnWindowUnload for more info. - }; - =====*/ - - dojo.addOnWindowUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ - // summary: - // registers a function to be triggered when window.onunload - // fires. - // description: - // The first time that addOnWindowUnload is called Dojo - // will register a page listener to trigger your unload - // handler with. Note that registering these handlers may - // destory "fastback" page caching in browsers that support - // it. Be careful trying to modify the DOM or access - // JavaScript properties during this phase of page unloading: - // they may not always be available. Consider - // dojo.addOnUnload() if you need to modify the DOM or do - // heavy JavaScript work since it fires at the eqivalent of - // the page's "onbeforeunload" event. - // example: - // | dojo.addOnWindowUnload(functionPointer) - // | dojo.addOnWindowUnload(object, "functionName"); - // | dojo.addOnWindowUnload(object, function(){ /* ... */}); - - if (!dojo.windowUnloaded) { - connect.connect(win, "unload", (dojo.windowUnloaded= function(){})); - } - connect.connect(win, "unload", obj, functionName); - }; - - dojo.addOnUnload = function(/*Object?|Function?*/obj, /*String|Function?*/functionName){ - // summary: - // registers a function to be triggered when the page unloads. - // description: - // The first time that addOnUnload is called Dojo will - // register a page listener to trigger your unload handler - // with. - // - // In a browser enviroment, the functions will be triggered - // during the window.onbeforeunload event. Be careful of doing - // too much work in an unload handler. onbeforeunload can be - // triggered if a link to download a file is clicked, or if - // the link is a javascript: link. In these cases, the - // onbeforeunload event fires, but the document is not - // actually destroyed. So be careful about doing destructive - // operations in a dojo.addOnUnload callback. - // - // Further note that calling dojo.addOnUnload will prevent - // browsers from using a "fast back" cache to make page - // loading via back button instantaneous. - // example: - // | dojo.addOnUnload(functionPointer) - // | dojo.addOnUnload(object, "functionName") - // | dojo.addOnUnload(object, function(){ /* ... */}); - - connect.connect(win, "beforeunload", obj, functionName); - }; - - return { - addOnWindowUnload: dojo.addOnWindowUnload, - addOnUnload: dojo.addOnUnload - }; -}); diff --git a/lib/dojo/_base/url.js.uncompressed.js b/lib/dojo/_base/url.js.uncompressed.js deleted file mode 100644 index 73f447b54..000000000 --- a/lib/dojo/_base/url.js.uncompressed.js +++ /dev/null @@ -1,111 +0,0 @@ -define("dojo/_base/url", ["./kernel"], function(dojo) { - // module: - // dojo/url - // summary: - // This module contains dojo._Url - - var - ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), - ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"), - _Url = function(){ - var n = null, - _a = arguments, - uri = [_a[0]]; - // resolve uri components relative to each other - for(var i = 1; i<_a.length; i++){ - if(!_a[i]){ continue; } - - // Safari doesn't support this.constructor so we have to be explicit - // FIXME: Tracked (and fixed) in Webkit bug 3537. - // http://bugs.webkit.org/show_bug.cgi?id=3537 - var relobj = new _Url(_a[i]+""), - uriobj = new _Url(uri[0]+""); - - if( - relobj.path == "" && - !relobj.scheme && - !relobj.authority && - !relobj.query - ){ - if(relobj.fragment != n){ - uriobj.fragment = relobj.fragment; - } - relobj = uriobj; - }else if(!relobj.scheme){ - relobj.scheme = uriobj.scheme; - - if(!relobj.authority){ - relobj.authority = uriobj.authority; - - if(relobj.path.charAt(0) != "/"){ - var path = uriobj.path.substring(0, - uriobj.path.lastIndexOf("/") + 1) + relobj.path; - - var segs = path.split("/"); - for(var j = 0; j < segs.length; j++){ - if(segs[j] == "."){ - // flatten "./" references - if(j == segs.length - 1){ - segs[j] = ""; - }else{ - segs.splice(j, 1); - j--; - } - }else if(j > 0 && !(j == 1 && segs[0] == "") && - segs[j] == ".." && segs[j-1] != ".."){ - // flatten "../" references - if(j == (segs.length - 1)){ - segs.splice(j, 1); - segs[j - 1] = ""; - }else{ - segs.splice(j - 1, 2); - j -= 2; - } - } - } - relobj.path = segs.join("/"); - } - } - } - - uri = []; - if(relobj.scheme){ - uri.push(relobj.scheme, ":"); - } - if(relobj.authority){ - uri.push("//", relobj.authority); - } - uri.push(relobj.path); - if(relobj.query){ - uri.push("?", relobj.query); - } - if(relobj.fragment){ - uri.push("#", relobj.fragment); - } - } - - this.uri = uri.join(""); - - // break the uri into its main components - var r = this.uri.match(ore); - - this.scheme = r[2] || (r[1] ? "" : n); - this.authority = r[4] || (r[3] ? "" : n); - this.path = r[5]; // can never be undefined - this.query = r[7] || (r[6] ? "" : n); - this.fragment = r[9] || (r[8] ? "" : n); - - if(this.authority != n){ - // server based naming authority - r = this.authority.match(ire); - - this.user = r[3] || n; - this.password = r[4] || n; - this.host = r[6] || r[7]; // ipv6 || ipv4 - this.port = r[9] || n; - } - }; - _Url.prototype.toString = function(){ return this.uri; }; - - return dojo._Url = _Url; -}); diff --git a/lib/dojo/_base/window.js.uncompressed.js b/lib/dojo/_base/window.js.uncompressed.js deleted file mode 100644 index 0c9f236b6..000000000 --- a/lib/dojo/_base/window.js.uncompressed.js +++ /dev/null @@ -1,126 +0,0 @@ -define("dojo/_base/window", ["./kernel", "../has", "./sniff"], function(dojo, has){ - // module: - // dojo/window - // summary: - // This module provides an API to save/set/restore the global/document scope. - -/*===== -dojo.doc = { - // summary: - // Alias for the current document. 'dojo.doc' can be modified - // for temporary context shifting. Also see dojo.withDoc(). - // description: - // Refer to dojo.doc rather - // than referring to 'window.document' to ensure your code runs - // correctly in managed contexts. - // example: - // | n.appendChild(dojo.doc.createElement('div')); -} -=====*/ -dojo.doc = this["document"] || null; - -dojo.body = function(){ - // summary: - // Return the body element of the document - // return the body object associated with dojo.doc - // example: - // | dojo.body().appendChild(dojo.doc.createElement('div')); - - // Note: document.body is not defined for a strict xhtml document - // Would like to memoize this, but dojo.doc can change vi dojo.withDoc(). - return dojo.doc.body || dojo.doc.getElementsByTagName("body")[0]; // Node -}; - -dojo.setContext = function(/*Object*/globalObject, /*DocumentElement*/globalDocument){ - // summary: - // changes the behavior of many core Dojo functions that deal with - // namespace and DOM lookup, changing them to work in a new global - // context (e.g., an iframe). The varibles dojo.global and dojo.doc - // are modified as a result of calling this function and the result of - // `dojo.body()` likewise differs. - dojo.global = ret.global = globalObject; - dojo.doc = ret.doc = globalDocument; -}; - -dojo.withGlobal = function( /*Object*/globalObject, - /*Function*/callback, - /*Object?*/thisObject, - /*Array?*/cbArguments){ - // summary: - // Invoke callback with globalObject as dojo.global and - // globalObject.document as dojo.doc. - // description: - // Invoke callback with globalObject as dojo.global and - // globalObject.document as dojo.doc. If provided, globalObject - // will be executed in the context of object thisObject - // When callback() returns or throws an error, the dojo.global - // and dojo.doc will be restored to its previous state. - - var oldGlob = dojo.global; - try{ - dojo.global = ret.global = globalObject; - return dojo.withDoc.call(null, globalObject.document, callback, thisObject, cbArguments); - }finally{ - dojo.global = ret.global = oldGlob; - } -}; - -dojo.withDoc = function( /*DocumentElement*/documentObject, - /*Function*/callback, - /*Object?*/thisObject, - /*Array?*/cbArguments){ - // summary: - // Invoke callback with documentObject as dojo.doc. - // description: - // Invoke callback with documentObject as dojo.doc. If provided, - // callback will be executed in the context of object thisObject - // When callback() returns or throws an error, the dojo.doc will - // be restored to its previous state. - - var oldDoc = dojo.doc, - oldQ = dojo.isQuirks, - oldIE = dojo.isIE, isIE, mode, pwin; - - try{ - dojo.doc = ret.doc = documentObject; - // update dojo.isQuirks and the value of the has feature "quirks" - dojo.isQuirks = has.add("quirks", dojo.doc.compatMode == "BackCompat", true, true); // no need to check for QuirksMode which was Opera 7 only - - if(has("ie")){ - if((pwin = documentObject.parentWindow) && pwin.navigator){ - // re-run IE detection logic and update dojo.isIE / has("ie") - // (the only time parentWindow/navigator wouldn't exist is if we were not - // passed an actual legitimate document object) - isIE = parseFloat(pwin.navigator.appVersion.split("MSIE ")[1]) || undefined; - mode = documentObject.documentMode; - if(mode && mode != 5 && Math.floor(isIE) != mode){ - isIE = mode; - } - dojo.isIE = has.add("ie", isIE, true, true); - } - } - - if(thisObject && typeof callback == "string"){ - callback = thisObject[callback]; - } - - return callback.apply(thisObject, cbArguments || []); - }finally{ - dojo.doc = ret.doc = oldDoc; - dojo.isQuirks = has.add("quirks", oldQ, true, true); - dojo.isIE = has.add("ie", oldIE, true, true); - } -}; - -var ret = { - global: dojo.global, - doc: dojo.doc, - body: dojo.body, - setContext: dojo.setContext, - withGlobal: dojo.withGlobal, - withDoc: dojo.withDoc -}; - -return ret; - -}); diff --git a/lib/dojo/_base/xhr.js.uncompressed.js b/lib/dojo/_base/xhr.js.uncompressed.js deleted file mode 100644 index 94f5c78b1..000000000 --- a/lib/dojo/_base/xhr.js.uncompressed.js +++ /dev/null @@ -1,830 +0,0 @@ -define("dojo/_base/xhr", [ - "./kernel", "./sniff", "require", "../io-query", "../dom", "../dom-form", "./Deferred", "./json", "./lang", "./array", "../on" -], function(dojo, has, require, ioq, dom, domForm, deferred, json, lang, array, on){ - // module: - // dojo/_base.xhr - // summary: - // This modules defines the dojo.xhr* API. - - has.add("native-xhr", function() { - // if true, the environment has a native XHR implementation - return typeof XMLHttpRequest !== 'undefined'; - }); - - if(1 && require.getXhr){ - dojo._xhrObj = require.getXhr; - }else if (has("native-xhr")){ - dojo._xhrObj = function(){ - // summary: - // does the work of portably generating a new XMLHTTPRequest object. - try{ - return new XMLHttpRequest(); - }catch(e){ - throw new Error("XMLHTTP not available: "+e); - } - }; - }else{ - // PROGIDs are in order of decreasing likelihood; this will change in time. - for(var XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'], progid, i = 0; i < 3;){ - try{ - progid = XMLHTTP_PROGIDS[i++]; - if (new ActiveXObject(progid)) { - // this progid works; therefore, use it from now on - break; - } - }catch(e){ - // squelch; we're just trying to find a good ActiveX PROGID - // if they all fail, then progid ends up as the last attempt and that will signal the error - // the first time the client actually tries to exec an xhr - } - } - dojo._xhrObj= function() { - return new ActiveXObject(progid); - }; - } - - var cfg = dojo.config; - - // mix in io-query and dom-form - dojo.objectToQuery = ioq.objectToQuery; - dojo.queryToObject = ioq.queryToObject; - dojo.fieldToObject = domForm.fieldToObject; - dojo.formToObject = domForm.toObject; - dojo.formToQuery = domForm.toQuery; - dojo.formToJson = domForm.toJson; - - // need to block async callbacks from snatching this thread as the result - // of an async callback might call another sync XHR, this hangs khtml forever - // must checked by watchInFlight() - - dojo._blockAsync = false; - - // MOW: remove dojo._contentHandlers alias in 2.0 - var handlers = dojo._contentHandlers = dojo.contentHandlers = { - // summary: - // A map of availble XHR transport handle types. Name matches the - // `handleAs` attribute passed to XHR calls. - // - // description: - // 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. - // - // example: - // Creating a custom content-handler: - // | dojo.contentHandlers.makeCaps = function(xhr){ - // | return xhr.responseText.toUpperCase(); - // | } - // | // and later: - // | dojo.xhrGet({ - // | url:"foo.txt", - // | handleAs:"makeCaps", - // | load: function(data){ /* data is a toUpper version of foo.txt */ } - // | }); - - "text": function(xhr){ - // summary: A contentHandler which simply returns the plaintext response data - return xhr.responseText; - }, - "json": function(xhr){ - // summary: A contentHandler which returns a JavaScript object created from the response data - return json.fromJson(xhr.responseText || null); - }, - "json-comment-filtered": function(xhr){ - // summary: A contentHandler which expects comment-filtered JSON. - // description: - // A contentHandler which expects comment-filtered JSON. - // the json-comment-filtered option was implemented to prevent - // "JavaScript Hijacking", but it is less secure than standard JSON. Use - // standard JSON instead. JSON prefixing can be used to subvert hijacking. - // - // Will throw a notice suggesting to use application/json mimetype, as - // json-commenting can introduce security issues. To decrease the chances of hijacking, - // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& - // - // use djConfig.useCommentedJson = true to turn off the notice - if(!dojo.config.useCommentedJson){ - console.warn("Consider using the standard mimetype:application/json." - + " json-commenting can introduce security issues. To" - + " decrease the chances of hijacking, use the standard the 'json' handler and" - + " prefix your json with: {}&&\n" - + "Use djConfig.useCommentedJson=true to turn off this message."); - } - - var value = xhr.responseText; - var cStartIdx = value.indexOf("\/*"); - var cEndIdx = value.lastIndexOf("*\/"); - if(cStartIdx == -1 || cEndIdx == -1){ - throw new Error("JSON was not comment filtered"); - } - return json.fromJson(value.substring(cStartIdx+2, cEndIdx)); - }, - "javascript": function(xhr){ - // summary: A contentHandler which evaluates the response data, expecting it to be valid JavaScript - - // FIXME: try Moz and IE specific eval variants? - return dojo.eval(xhr.responseText); - }, - "xml": function(xhr){ - // summary: A contentHandler returning an XML Document parsed from the response data - var result = xhr.responseXML; - - if(has("ie")){ - if((!result || !result.documentElement)){ - //WARNING: this branch used by the xml handling in dojo.io.iframe, - //so be sure to test dojo.io.iframe if making changes below. - var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }; - var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; - array.some(dp, function(p){ - try{ - var dom = new ActiveXObject(p); - dom.async = false; - dom.loadXML(xhr.responseText); - result = dom; - }catch(e){ return false; } - return true; - }); - } - } - return result; // DOMDocument - }, - "json-comment-optional": function(xhr){ - // summary: A contentHandler which checks the presence of comment-filtered JSON and - // alternates between the `json` and `json-comment-filtered` contentHandlers. - if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ - return handlers["json-comment-filtered"](xhr); - }else{ - return handlers["json"](xhr); - } - } - }; - - /*===== - dojo.__IoArgs = function(){ - // url: String - // URL to server endpoint. - // content: Object? - // Contains properties with string values. These - // properties will be serialized as name1=value2 and - // passed in the request. - // timeout: Integer? - // Milliseconds to wait for the response. If this time - // passes, the then error callbacks are called. - // form: DOMNode? - // DOM node for a form. Used to extract the form values - // and send to the server. - // preventCache: Boolean? - // Default is false. If true, then a - // "dojo.preventCache" parameter is sent in the request - // with a value that changes with each request - // (timestamp). Useful only with GET-type requests. - // handleAs: String? - // Acceptable values depend on the type of IO - // transport (see specific IO calls for more information). - // rawBody: String? - // Sets the raw body for an HTTP request. If this is used, then the content - // property is ignored. This is mostly useful for HTTP methods that have - // a body to their requests, like PUT or POST. This property can be used instead - // of postData and putData for dojo.rawXhrPost and dojo.rawXhrPut respectively. - // ioPublish: Boolean? - // Set this explicitly to false to prevent publishing of topics related to - // IO operations. Otherwise, if djConfig.ioPublish is set to true, topics - // will be published via dojo.publish for different phases of an IO operation. - // See dojo.__IoPublish for a list of topics that are published. - // load: Function? - // This function will be - // called on a successful HTTP response code. - // error: Function? - // This function will - // be called when the request fails due to a network or server error, the url - // is invalid, etc. It will also be called if the load or handle callback throws an - // exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications - // to continue to run even when a logic error happens in the callback, while making - // it easier to troubleshoot while in debug mode. - // handle: Function? - // This function will - // be called at the end of every request, whether or not an error occurs. - this.url = url; - this.content = content; - this.timeout = timeout; - this.form = form; - this.preventCache = preventCache; - this.handleAs = handleAs; - this.ioPublish = ioPublish; - this.load = function(response, ioArgs){ - // ioArgs: dojo.__IoCallbackArgs - // Provides additional information about the request. - // response: Object - // The response in the format as defined with handleAs. - } - this.error = function(response, ioArgs){ - // ioArgs: dojo.__IoCallbackArgs - // Provides additional information about the request. - // response: Object - // The response in the format as defined with handleAs. - } - this.handle = function(loadOrError, response, ioArgs){ - // loadOrError: String - // Provides a string that tells you whether this function - // was called because of success (load) or failure (error). - // response: Object - // The response in the format as defined with handleAs. - // ioArgs: dojo.__IoCallbackArgs - // Provides additional information about the request. - } - } - =====*/ - - /*===== - dojo.__IoCallbackArgs = function(args, xhr, url, query, handleAs, id, canDelete, json){ - // args: Object - // the original object argument to the IO call. - // xhr: XMLHttpRequest - // For XMLHttpRequest calls only, the - // XMLHttpRequest object that was used for the - // request. - // url: String - // The final URL used for the call. Many times it - // will be different than the original args.url - // value. - // query: String - // For non-GET requests, the - // name1=value1&name2=value2 parameters sent up in - // the request. - // handleAs: String - // The final indicator on how the response will be - // handled. - // id: String - // For dojo.io.script calls only, the internal - // script ID used for the request. - // canDelete: Boolean - // For dojo.io.script calls only, indicates - // whether the script tag that represents the - // request can be deleted after callbacks have - // been called. Used internally to know when - // cleanup can happen on JSONP-type requests. - // json: Object - // For dojo.io.script calls only: holds the JSON - // response for JSONP-type requests. Used - // internally to hold on to the JSON responses. - // You should not need to access it directly -- - // the same object should be passed to the success - // callbacks directly. - this.args = args; - this.xhr = xhr; - this.url = url; - this.query = query; - this.handleAs = handleAs; - this.id = id; - this.canDelete = canDelete; - this.json = json; - } - =====*/ - - - /*===== - dojo.__IoPublish = function(){ - // summary: - // This is a list of IO topics that can be published - // if djConfig.ioPublish is set to true. IO topics can be - // published for any Input/Output, network operation. So, - // dojo.xhr, dojo.io.script and dojo.io.iframe can all - // trigger these topics to be published. - // start: String - // "/dojo/io/start" is sent when there are no outstanding IO - // requests, and a new IO request is started. No arguments - // are passed with this topic. - // send: String - // "/dojo/io/send" is sent whenever a new IO request is started. - // It passes the dojo.Deferred for the request with the topic. - // load: String - // "/dojo/io/load" is sent whenever an IO request has loaded - // successfully. It passes the response and the dojo.Deferred - // for the request with the topic. - // error: String - // "/dojo/io/error" is sent whenever an IO request has errored. - // It passes the error and the dojo.Deferred - // for the request with the topic. - // done: String - // "/dojo/io/done" is sent whenever an IO request has completed, - // either by loading or by erroring. It passes the error and - // the dojo.Deferred for the request with the topic. - // stop: String - // "/dojo/io/stop" is sent when all outstanding IO requests have - // finished. No arguments are passed with this topic. - this.start = "/dojo/io/start"; - this.send = "/dojo/io/send"; - this.load = "/dojo/io/load"; - this.error = "/dojo/io/error"; - this.done = "/dojo/io/done"; - this.stop = "/dojo/io/stop"; - } - =====*/ - - - dojo._ioSetArgs = function(/*dojo.__IoArgs*/args, - /*Function*/canceller, - /*Function*/okHandler, - /*Function*/errHandler){ - // summary: - // sets up the Deferred and ioArgs property on the Deferred so it - // can be used in an io call. - // args: - // The args object passed into the public io call. Recognized properties on - // the args object are: - // canceller: - // The canceller function used for the Deferred object. The function - // will receive one argument, the Deferred object that is related to the - // canceller. - // okHandler: - // The first OK callback to be registered with Deferred. It has the opportunity - // to transform the OK response. It will receive one argument -- the Deferred - // object returned from this function. - // errHandler: - // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the - // Error object) and dfd, the Deferred object returned from this function. - - var ioArgs = {args: args, url: args.url}; - - //Get values from form if requestd. - var formObject = null; - if(args.form){ - var form = dom.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, - //so use it for all. See #2844 - var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); - formObject = domForm.toObject(form); - } - - // set up the query params - var miArgs = [{}]; - - if(formObject){ - // potentially over-ride url-provided params w/ form values - miArgs.push(formObject); - } - if(args.content){ - // stuff in content over-rides what's set by form - miArgs.push(args.content); - } - if(args.preventCache){ - miArgs.push({"dojo.preventCache": new Date().valueOf()}); - } - ioArgs.query = ioq.objectToQuery(lang.mixin.apply(null, miArgs)); - - // .. and the real work of getting the deferred in order, etc. - ioArgs.handleAs = args.handleAs || "text"; - var d = new deferred(canceller); - d.addCallbacks(okHandler, function(error){ - return errHandler(error, d); - }); - - //Support specifying load, error and handle callback functions from the args. - //For those callbacks, the "this" object will be the args object. - //The callbacks will get the deferred result value as the - //first argument and the ioArgs object as the second argument. - var ld = args.load; - if(ld && lang.isFunction(ld)){ - d.addCallback(function(value){ - return ld.call(args, value, ioArgs); - }); - } - var err = args.error; - if(err && lang.isFunction(err)){ - d.addErrback(function(value){ - return err.call(args, value, ioArgs); - }); - } - var handle = args.handle; - if(handle && lang.isFunction(handle)){ - d.addBoth(function(value){ - return handle.call(args, value, ioArgs); - }); - } - - //Plug in topic publishing, if dojo.publish is loaded. - if(cfg.ioPublish && dojo.publish && ioArgs.args.ioPublish !== false){ - d.addCallbacks( - function(res){ - dojo.publish("/dojo/io/load", [d, res]); - return res; - }, - function(res){ - dojo.publish("/dojo/io/error", [d, res]); - return res; - } - ); - d.addBoth(function(res){ - dojo.publish("/dojo/io/done", [d, res]); - return res; - }); - } - - d.ioArgs = ioArgs; - - // FIXME: need to wire up the xhr object's abort method to something - // analagous in the Deferred - return d; - }; - - var _deferredCancel = function(/*Deferred*/dfd){ - // summary: canceller function for dojo._ioSetArgs call. - - dfd.canceled = true; - var xhr = dfd.ioArgs.xhr; - var _at = typeof xhr.abort; - if(_at == "function" || _at == "object" || _at == "unknown"){ - xhr.abort(); - } - var err = dfd.ioArgs.error; - if(!err){ - err = new Error("xhr cancelled"); - 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. - - if(!dfd.ioArgs.args.failOk){ - 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. - var _inFlightIntvl = null; - var _inFlight = []; - - - //Use a separate count for knowing if we are starting/stopping io calls. - //Cannot use _inFlight.length since it can change at a different time than - //when we want to do this kind of test. We only want to decrement the count - //after a callback/errback has finished, since the callback/errback should be - //considered as part of finishing a request. - var _pubCount = 0; - var _checkPubCount = function(dfd){ - if(_pubCount <= 0){ - _pubCount = 0; - if(cfg.ioPublish && dojo.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){ - dojo.publish("/dojo/io/stop"); - } - } - }; - - var _watchInFlight = function(){ - //summary: - // internal method that checks each inflight XMLHttpRequest to see - // if it has completed or if the timeout situation applies. - - var now = (new Date()).getTime(); - // make sure sync calls stay thread safe, if this callback is called - // during a sync call and this results in another sync call before the - // first sync call ends the browser hangs - if(!dojo._blockAsync){ - // we need manual loop because we often modify _inFlight (and therefore 'i') while iterating - // note: the second clause is an assigment on purpose, lint may complain - for(var i = 0, tif; i < _inFlight.length && (tif = _inFlight[i]); i++){ - var dfd = tif.dfd; - var func = function(){ - if(!dfd || dfd.canceled || !tif.validCheck(dfd)){ - _inFlight.splice(i--, 1); - _pubCount -= 1; - }else if(tif.ioCheck(dfd)){ - _inFlight.splice(i--, 1); - tif.resHandle(dfd); - _pubCount -= 1; - }else if(dfd.startTime){ - //did we timeout? - if(dfd.startTime + (dfd.ioArgs.args.timeout || 0) < now){ - _inFlight.splice(i--, 1); - var err = new Error("timeout exceeded"); - err.dojoType = "timeout"; - dfd.errback(err); - //Cancel the request so the io module can do appropriate cleanup. - dfd.cancel(); - _pubCount -= 1; - } - } - }; - if(dojo.config.debugAtAllCosts){ - func.call(this); - }else{ - try{ - func.call(this); - }catch(e){ - dfd.errback(e); - } - } - } - } - - _checkPubCount(dfd); - - if(!_inFlight.length){ - clearInterval(_inFlightIntvl); - _inFlightIntvl = null; - } - }; - - dojo._ioCancelAll = function(){ - //summary: Cancels all pending IO requests, regardless of IO type - //(xhr, script, iframe). - try{ - array.forEach(_inFlight, function(i){ - try{ - i.dfd.cancel(); - }catch(e){/*squelch*/} - }); - }catch(e){/*squelch*/} - }; - - //Automatically call cancel all io calls on unload - //in IE for trac issue #2357. - if(has("ie")){ - on(window, "unload", dojo._ioCancelAll); - } - - dojo._ioNotifyStart = function(/*Deferred*/dfd){ - // summary: - // If dojo.publish is available, publish topics - // about the start of a request queue and/or the - // the beginning of request. - // description: - // Used by IO transports. An IO transport should - // call this method before making the network connection. - if(cfg.ioPublish && dojo.publish && dfd.ioArgs.args.ioPublish !== false){ - if(!_pubCount){ - dojo.publish("/dojo/io/start"); - } - _pubCount += 1; - dojo.publish("/dojo/io/send", [dfd]); - } - }; - - dojo._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ - // summary: - // Watches the io request represented by dfd to see if it completes. - // dfd: Deferred - // The Deferred object to watch. - // validCheck: Function - // Function used to check if the IO request is still valid. Gets the dfd - // object as its only argument. - // ioCheck: Function - // Function used to check if basic IO call worked. Gets the dfd - // object as its only argument. - // resHandle: Function - // Function used to process response. Gets the dfd - // object as its only argument. - var args = dfd.ioArgs.args; - if(args.timeout){ - dfd.startTime = (new Date()).getTime(); - } - - _inFlight.push({dfd: dfd, validCheck: validCheck, ioCheck: ioCheck, resHandle: resHandle}); - if(!_inFlightIntvl){ - _inFlightIntvl = setInterval(_watchInFlight, 50); - } - // handle sync requests - //A weakness: async calls in flight - //could have their handlers called as part of the - //_watchInFlight call, before the sync's callbacks - // are called. - 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(dojo._isDocumentOk(xhr)){ - dfd.callback(dfd); - }else{ - var err = new Error("Unable to load " + dfd.ioArgs.url + " status:" + xhr.status); - err.status = xhr.status; - err.responseText = xhr.responseText; - err.xhr = xhr; - dfd.errback(err); - } - }; - - dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ - //summary: Adds query params discovered by the io deferred construction to the URL. - //Only use this for operations which are fundamentally GET-type operations. - if(ioArgs.query.length){ - ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; - ioArgs.query = null; - } - }; - - /*===== - dojo.declare("dojo.__XhrArgs", dojo.__IoArgs, { - constructor: function(){ - // summary: - // In addition to the properties listed for the dojo._IoArgs type, - // the following properties are allowed for dojo.xhr* methods. - // handleAs: String? - // Acceptable values are: text (default), json, json-comment-optional, - // json-comment-filtered, javascript, xml. See `dojo.contentHandlers` - // sync: Boolean? - // false is default. Indicates whether the request should - // be a synchronous (blocking) request. - // headers: Object? - // Additional HTTP headers to send in the request. - // failOk: Boolean? - // false is default. Indicates whether a request should be - // allowed to fail (and therefore no console error message in - // the event of a failure) - // contentType: String|Boolean - // "application/x-www-form-urlencoded" is default. Set to false to - // prevent a Content-Type header from being sent, or to a string - // to send a different Content-Type. - this.handleAs = handleAs; - this.sync = sync; - this.headers = headers; - this.failOk = failOk; - } - }); - =====*/ - - dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ - // summary: - // Sends an HTTP request with the given method. - // description: - // Sends an HTTP request with the given method. - // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts - // for those HTTP methods. There are also methods for "raw" PUT and POST methods - // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. - // method: - // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase. - // hasBody: - // If the request has an HTTP body, then pass true for hasBody. - - //Make the Deferred object for this xhr request. - var dfd = dojo._ioSetArgs(args, _deferredCancel, _deferredOk, _deferError); - var ioArgs = dfd.ioArgs; - - //Pass the args to _xhrObj, to allow alternate XHR calls based specific calls, like - //the one used for iframe proxies. - var xhr = ioArgs.xhr = dojo._xhrObj(ioArgs.args); - //If XHR factory fails, cancel the deferred. - if(!xhr){ - dfd.cancel(); - return dfd; - } - - //Allow for specifying the HTTP body completely. - if("postData" in args){ - ioArgs.query = args.postData; - }else if("putData" in args){ - ioArgs.query = args.putData; - }else if("rawBody" in args){ - ioArgs.query = args.rawBody; - }else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) == -1){ - //Check for hasBody being passed. If no hasBody, - //then only append query string if not a POST or PUT request. - dojo._ioAddQueryToUrl(ioArgs); - } - - // IE 6 is a steaming pile. It won't let you call apply() on the native function (xhr.open). - // workaround for IE6's apply() "issues" - xhr.open(method, ioArgs.url, args.sync !== true, args.user || undefined, args.password || undefined); - if(args.headers){ - for(var hdr in args.headers){ - if(hdr.toLowerCase() === "content-type" && !args.contentType){ - args.contentType = args.headers[hdr]; - }else if(args.headers[hdr]){ - //Only add header if it has a value. This allows for instnace, skipping - //insertion of X-Requested-With by specifying empty value. - xhr.setRequestHeader(hdr, args.headers[hdr]); - } - } - } - // FIXME: is this appropriate for all content types? - if(args.contentType !== false){ - xhr.setRequestHeader("Content-Type", args.contentType || _defaultContentType); - } - if(!args.headers || !("X-Requested-With" in args.headers)){ - xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); - } - // FIXME: set other headers here! - dojo._ioNotifyStart(dfd); - if(dojo.config.debugAtAllCosts){ - xhr.send(ioArgs.query); - }else{ - try{ - xhr.send(ioArgs.query); - }catch(e){ - ioArgs.error = e; - dfd.cancel(); - } - } - dojo._ioWatch(dfd, _validCheck, _ioCheck, _resHandle); - xhr = null; - return dfd; // dojo.Deferred - }; - - dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP GET request to the server. - return dojo.xhr("GET", args); // dojo.Deferred - }; - - dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP POST request to the server. In addtion to the properties - // listed for the dojo.__XhrArgs type, the following property is allowed: - // postData: - // String. Send raw data in the body of the POST request. - return dojo.xhr("POST", args, true); // dojo.Deferred - }; - - dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP PUT request to the server. In addtion to the properties - // listed for the dojo.__XhrArgs type, the following property is allowed: - // putData: - // String. Send raw data in the body of the PUT request. - return dojo.xhr("PUT", args, true); // dojo.Deferred - }; - - dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP DELETE request to the server. - return dojo.xhr("DELETE", args); //dojo.Deferred - }; - - /* - dojo.wrapForm = function(formNode){ - //summary: - // A replacement for FormBind, but not implemented yet. - - // FIXME: need to think harder about what extensions to this we might - // want. What should we allow folks to do w/ this? What events to - // set/send? - throw new Error("dojo.wrapForm not yet implemented"); - } - */ - - dojo._isDocumentOk = function(http){ - var stat = http.status || 0; - stat = - (stat >= 200 && stat < 300) || // allow any 2XX response code - stat == 304 || // or, get it out of the cache - stat == 1223 || // or, Internet Explorer mangled the status code - !stat; // or, we're Titanium/browser chrome/chrome extension requesting a local file - return stat; // Boolean - }; - - dojo._getText = function(url){ - var result; - dojo.xhrGet({url:url, sync:true, load:function(text){ - result = text; - }}); - return result; - }; - - // Add aliases for static functions to dojo.xhr since dojo.xhr is what's returned from this module - lang.mixin(dojo.xhr, { - _xhrObj: dojo._xhrObj, - fieldToObject: domForm.fieldToObject, - formToObject: domForm.toObject, - objectToQuery: ioq.objectToQuery, - formToQuery: domForm.toQuery, - formToJson: domForm.toJson, - queryToObject: ioq.queryToObject, - contentHandlers: handlers, - _ioSetArgs: dojo._ioSetArgs, - _ioCancelAll: dojo._ioCancelAll, - _ioNotifyStart: dojo._ioNotifyStart, - _ioWatch: dojo._ioWatch, - _ioAddQueryToUrl: dojo._ioAddQueryToUrl, - _isDocumentOk: dojo._isDocumentOk, - _getText: dojo._getText, - get: dojo.xhrGet, - post: dojo.xhrPost, - put: dojo.xhrPut, - del: dojo.xhrDelete // because "delete" is a reserved word - }); - - return dojo.xhr; -}); diff --git a/lib/dojo/_firebug/firebug.js.uncompressed.js b/lib/dojo/_firebug/firebug.js.uncompressed.js deleted file mode 100644 index d908c59ed..000000000 --- a/lib/dojo/_firebug/firebug.js.uncompressed.js +++ /dev/null @@ -1,1183 +0,0 @@ -define("dojo/_firebug/firebug", ["../_base/kernel", "require", "../_base/html", "../_base/sniff", "../_base/array", "../_base/lang", "../_base/event", "../_base/unload"], function(dojo, require) { - // module: - // dojo/_firebug/firebug - // summary: - -// FIREBUG LITE - // summary: Firebug Lite, the baby brother to Joe Hewitt's Firebug for Mozilla Firefox - // description: - // Opens a console for logging, debugging, and error messages. - // Contains partial functionality to Firebug. See function list below. - // 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 - // functionality by reading the function comments below or visiting http://www.getfirebug.com/docs.html - // NOTE: - // To test Firebug Lite in Firefox: - // FF2: set "console = null" before loading dojo and set djConfig.isDebug=true - // FF3: disable Firebug and set djConfig.isDebug=true - // - // example: - // Supports inline objects in object inspector window (only simple trace of dom nodes, however) - // | console.log("my object", {foo:"bar"}) - // example: - // Option for console to open in popup window - // | var djConfig = {isDebug: true, popup:true }; - // example: - // Option for console height (ignored for popup) - // | var djConfig = {isDebug: true, debugHeight:100 } - - - var isNewIE = (/Trident/.test(window.navigator.userAgent)); - if(isNewIE){ - // Fixing IE's console - // IE doesn't insert space between arguments. How annoying. - var calls = ["log", "info", "debug", "warn", "error"]; - for(var i=0;i"); - str = str.replace(/\t/g, "    "); - logRow([str], "dir"); - }, - - dirxml: function(node){ - // summary: - // - var html = []; - appendNode(node, html); - logRow(html, "dirxml"); - }, - - group: function(){ - // summary: - // collects log messages into a group, starting with this call and ending with - // groupEnd(). Missing collapse functionality - logRow(arguments, "group", pushGroup); - }, - - groupEnd: function(){ - // summary: - // Closes group. See above - logRow(arguments, "", popGroup); - }, - - time: function(name){ - // summary: - // Starts timers assigned to name given in argument. Timer stops and displays on timeEnd(title); - // example: - // | console.time("load"); - // | console.time("myFunction"); - // | console.timeEnd("load"); - // | console.timeEnd("myFunction"); - timeMap[name] = new Date().getTime(); - }, - - timeEnd: function(name){ - // summary: - // See above. - if(name in timeMap){ - var delta = (new Date()).getTime() - timeMap[name]; - logFormatted([name+ ":", delta+"ms"]); - delete timeMap[name]; - } - }, - - count: function(name){ - // summary: - // Not supported - if(!countMap[name]) countMap[name] = 0; - countMap[name]++; - logFormatted([name+": "+countMap[name]]); - }, - - trace: function(_value){ - var stackAmt = _value || 3; - var f = console.trace.caller; //function that called trace - console.log(">>> console.trace(stack)"); - for(var i=0;i=0&&s.href) { - var h=s.href.replace(/(&|%5C?)forceReload=\d+/,''); - s.href=h+(h.indexOf('?')>=0?'&':'?')+'forceReload='+new Date().valueOf(); - } - } - } - }; - - // *************************************************************************** - - function toggleConsole(forceOpen){ - frameVisible = forceOpen || !frameVisible; - if(consoleFrame){ - consoleFrame.style.display = frameVisible ? "block" : "none"; - } - } - - function focusCommandLine(){ - toggleConsole(true); - if(commandLine){ - commandLine.focus(); - } - } - - function openWin(x,y,w,h){ - var win = window.open("","_firebug","status=0,menubar=0,resizable=1,top="+y+",left="+x+",width="+w+",height="+h+",scrollbars=1,addressbar=0"); - if(!win){ - var msg = "Firebug Lite could not open a pop-up window, most likely because of a blocker.\n" + - "Either enable pop-ups for this domain, or change the djConfig to popup=false."; - alert(msg); - } - createResizeHandler(win); - var newDoc=win.document; - //Safari needs an HTML height - var HTMLstring= 'Firebug Lite\n' + - '\n' + - '
    ' + - ''; - - newDoc.write(HTMLstring); - newDoc.close(); - return win; - } - - function createResizeHandler(wn){ - // summary: - // Creates handle for onresize window. Called from script in popup's body tag (so that it will work with IE). - // - - var d = new Date(); - d.setTime(d.getTime()+(60*24*60*60*1000)); // 60 days - d = d.toUTCString(); - - var dc = wn.document, - getViewport; - - if (wn.innerWidth){ - getViewport = function(){ - return{w:wn.innerWidth, h:wn.innerHeight}; - }; - }else if (dc.documentElement && dc.documentElement.clientWidth){ - getViewport = function(){ - return{w:dc.documentElement.clientWidth, h:dc.documentElement.clientHeight}; - }; - }else if (dc.body){ - getViewport = function(){ - return{w:dc.body.clientWidth, h:dc.body.clientHeight}; - }; - } - - - window.onFirebugResize = function(){ - - //resize the height of the console log body - layout(getViewport().h); - - clearInterval(wn._firebugWin_resize); - wn._firebugWin_resize = setTimeout(function(){ - var x = wn.screenLeft, - y = wn.screenTop, - w = wn.outerWidth || wn.document.body.offsetWidth, - h = wn.outerHeight || wn.document.body.offsetHeight; - - document.cookie = "_firebugPosition=" + [x,y,w,h].join(",") + "; expires="+d+"; path=/"; - - }, 5000); //can't capture window.onMove - long timeout gives better chance of capturing a resize, then the move - - }; - } - - - /*****************************************************************************/ - - - function createFrame(){ - if(consoleFrame){ - return; - } - toggleConsole(true); - if(dojo.config.popup){ - var containerHeight = "100%"; - var cookieMatch = document.cookie.match(/(?:^|; )_firebugPosition=([^;]*)/); - var p = cookieMatch ? cookieMatch[1].split(",") : [2,2,320,480]; - - _firebugWin = openWin(p[0],p[1],p[2],p[3]); // global - _firebugDoc = _firebugWin.document; // global - - dojo.config.debugContainerId = 'fb'; - - // connecting popup - _firebugWin.console = window.console; - _firebugWin.dojo = window.dojo; - }else{ - _firebugDoc = document; - containerHeight = (dojo.config.debugHeight || 300) + "px"; - } - - var styleElement = _firebugDoc.createElement("link"); - styleElement.href = require.toUrl("./firebug.css"); - styleElement.rel = "stylesheet"; - styleElement.type = "text/css"; - var styleParent = _firebugDoc.getElementsByTagName("head"); - if(styleParent){ - styleParent = styleParent[0]; - } - if(!styleParent){ - styleParent = _firebugDoc.getElementsByTagName("html")[0]; - } - if(dojo.isIE){ - window.setTimeout(function(){ styleParent.appendChild(styleElement); }, 0); - }else{ - styleParent.appendChild(styleElement); - } - - if(dojo.config.debugContainerId){ - consoleFrame = _firebugDoc.getElementById(dojo.config.debugContainerId); - } - if(!consoleFrame){ - consoleFrame = _firebugDoc.createElement("div"); - _firebugDoc.body.appendChild(consoleFrame); - } - consoleFrame.className += " firebug"; - consoleFrame.style.height = containerHeight; - consoleFrame.style.display = (frameVisible ? "block" : "none"); - - var buildLink = function(label, title, method, _class){ - return '
  • '+label+'
  • '; - }; - consoleFrame.innerHTML = - '
    ' - + '
      ' - - + buildLink("Clear", "Remove All Console Logs", "clear", "") - + buildLink("ReCSS", "Refresh CSS without reloading page", "recss", "") - - + buildLink("Console", "Show Console Logs", "openConsole", "gap") - + buildLink("DOM", "Show DOM Inspector", "openDomInspector", "") - + buildLink("Object", "Show Object Inspector", "openObjectInspector", "") - + ((dojo.config.popup) ? "" : buildLink("Close", "Close the console", "close", "gap")) - - + '
    ' - + '
    ' - + '' - + '
    ' - + '' - + ''; - - - consoleToolbar = _firebugDoc.getElementById("firebugToolbar"); - - commandLine = _firebugDoc.getElementById("firebugCommandLine"); - addEvent(commandLine, "keydown", onCommandLineKeyDown); - - addEvent(_firebugDoc, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown); - - consoleBody = _firebugDoc.getElementById("firebugLog"); - consoleObjectInspector = _firebugDoc.getElementById("objectLog"); - consoleDomInspector = _firebugDoc.getElementById("domInspect"); - fireBugTabs = _firebugDoc.getElementById("fireBugTabs"); - layout(); - flush(); - } - - dojo.addOnLoad(createFrame); - - function clearFrame(){ - _firebugDoc = null; - - if(_firebugWin.console){ - _firebugWin.console.clear(); - } - _firebugWin = null; - consoleFrame = null; - consoleBody = null; - consoleObjectInspector = null; - consoleDomInspector = null; - commandLine = null; - messageQueue = []; - groupStack = []; - timeMap = {}; - } - - - function evalCommandLine(){ - var text = commandLine.value; - commandLine.value = ""; - - logRow(["> ", text], "command"); - - var value; - try{ - value = eval(text); - }catch(e){ - console.debug(e); // put exception on the console - } - - console.log(value); - } - - 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" : - (consoleFrame.offsetHeight - tHeight - commandLine.offsetHeight) + "px"; - - consoleBody.style.top = tHeight + "px"; - consoleBody.style.height = height; - consoleObjectInspector.style.height = height; - consoleObjectInspector.style.top = tHeight + "px"; - consoleDomInspector.style.height = height; - consoleDomInspector.style.top = tHeight + "px"; - commandLine.style.bottom = 0; - - dojo.addOnWindowUnload(clearFrame); - } - - function logRow(message, className, handler){ - if(consoleBody){ - writeMessage(message, className, handler); - }else{ - messageQueue.push([message, className, handler]); - } - } - - function flush(){ - var queue = messageQueue; - messageQueue = []; - - for(var i = 0; i < queue.length; ++i){ - writeMessage(queue[i][0], queue[i][1], queue[i][2]); - } - } - - function writeMessage(message, className, handler){ - var isScrolledToBottom = - consoleBody.scrollTop + consoleBody.offsetHeight >= consoleBody.scrollHeight; - - handler = handler||writeRow; - - handler(message, className); - - if(isScrolledToBottom){ - consoleBody.scrollTop = consoleBody.scrollHeight - consoleBody.offsetHeight; - } - } - - function appendRow(row){ - var container = groupStack.length ? groupStack[groupStack.length-1] : consoleBody; - container.appendChild(row); - } - - function writeRow(message, className){ - var row = consoleBody.ownerDocument.createElement("div"); - row.className = "logRow" + (className ? " logRow-"+className : ""); - row.innerHTML = message.join(""); - appendRow(row); - } - - function pushGroup(message, className){ - logFormatted(message, className); - - //var groupRow = consoleBody.ownerDocument.createElement("div"); - //groupRow.className = "logGroup"; - var groupRowBox = consoleBody.ownerDocument.createElement("div"); - groupRowBox.className = "logGroupBox"; - //groupRow.appendChild(groupRowBox); - appendRow(groupRowBox); - groupStack.push(groupRowBox); - } - - function popGroup(){ - groupStack.pop(); - } - - // *************************************************************************** - - function logFormatted(objects, className){ - var html = []; - - var format = objects[0]; - var objIndex = 0; - - if(typeof(format) != "string"){ - format = ""; - objIndex = -1; - } - - var parts = parseFormat(format); - - for(var i = 0; i < parts.length; ++i){ - var part = parts[i]; - if(part && typeof part == "object"){ - part.appender(objects[++objIndex], html); - }else{ - appendText(part, html); - } - } - - - var ids = []; - var obs = []; - for(i = objIndex+1; i < objects.length; ++i){ - appendText(" ", html); - - var object = objects[i]; - if(object === undefined || object === null ){ - appendNull(object, html); - - }else if(typeof(object) == "string"){ - appendText(object, html); - - }else if(object instanceof Date){ - appendText(object.toString(), html); - - }else if(object.nodeType == 9){ - appendText("[ XmlDoc ]", html); - - }else{ - // Create link for object inspector - // need to create an ID for this link, since it is currently text - var id = "_a" + __consoleAnchorId__++; - ids.push(id); - // need to save the object, so the arrays line up - obs.push(object); - var str = ''+getObjectAbbr(object)+''; - - appendLink( str , html); - } - } - - logRow(html, className); - - // Now that the row is inserted in the DOM, loop through all of the links that were just created - for(i=0; i"; - })); - } - } - - function parseFormat(format){ - var parts = []; - - 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)){ - var type = m[8] ? m[8] : m[5]; - var appender = type in appenderMap ? appenderMap[type] : appendObject; - var precision = m[3] ? parseInt(m[3]) : (m[4] == "." ? -1 : 0); - - parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1)); - parts.push({appender: appender, precision: precision}); - - format = format.substr(m.index+m[0].length); - } - - parts.push(format); - - return parts; - } - - function escapeHTML(value){ - function replaceChars(ch){ - switch(ch){ - case "<": - return "<"; - case ">": - return ">"; - case "&": - return "&"; - case "'": - return "'"; - case '"': - return """; - } - return "?"; - } - return String(value).replace(/[<>&"']/g, replaceChars); - } - - function objectToString(object){ - try{ - return object+""; - }catch(e){ - return null; - } - } - - // *************************************************************************** - function appendLink(object, html){ - // needed for object links - no HTML escaping - html.push( objectToString(object) ); - } - - function appendText(object, html){ - html.push(escapeHTML(objectToString(object))); - } - - function appendNull(object, html){ - html.push('', escapeHTML(objectToString(object)), ''); - } - - function appendString(object, html){ - html.push('"', escapeHTML(objectToString(object)), - '"'); - } - - function appendInteger(object, html){ - html.push('', escapeHTML(objectToString(object)), ''); - } - - function appendFloat(object, html){ - html.push('', escapeHTML(objectToString(object)), ''); - } - - function appendFunction(object, html){ - html.push('', getObjectAbbr(object), ''); - } - - function appendObject(object, html){ - try{ - if(object === undefined){ - appendNull("undefined", html); - }else if(object === null){ - appendNull("null", html); - }else if(typeof object == "string"){ - appendString(object, html); - }else if(typeof object == "number"){ - appendInteger(object, html); - }else if(typeof object == "function"){ - appendFunction(object, html); - }else if(object.nodeType == 1){ - appendSelector(object, html); - }else if(typeof object == "object"){ - appendObjectFormatted(object, html); - }else{ - appendText(object, html); - } - }catch(e){ - /* squelch */ - } - } - - function appendObjectFormatted(object, html){ - var text = objectToString(object); - var reObject = /\[object (.*?)\]/; - - var m = reObject.exec(text); - html.push('', m ? m[1] : text, ''); - } - - function appendSelector(object, html){ - html.push(''); - - html.push('', escapeHTML(object.nodeName.toLowerCase()), ''); - if(object.id){ - html.push('#', escapeHTML(object.id), ''); - } - if(object.className){ - html.push('.', escapeHTML(object.className), ''); - } - - html.push(''); - } - - function appendNode(node, html){ - if(node.nodeType == 1){ - html.push( - '
    ', - '<', node.nodeName.toLowerCase(), ''); - - for(var i = 0; i < node.attributes.length; ++i){ - var attr = node.attributes[i]; - if(!attr.specified){ continue; } - - html.push(' ', attr.nodeName.toLowerCase(), - '="', escapeHTML(attr.nodeValue), - '"'); - } - - if(node.firstChild){ - html.push('>
    '); - - for(var child = node.firstChild; child; child = child.nextSibling){ - appendNode(child, html); - } - - html.push('
    </', - node.nodeName.toLowerCase(), '>
    '); - }else{ - html.push('/>'); - } - }else if (node.nodeType == 3){ - html.push('
    ', escapeHTML(node.nodeValue), - '
    '); - } - } - - // *************************************************************************** - - function addEvent(object, name, handler){ - if(document.all){ - object.attachEvent("on"+name, handler); - }else{ - object.addEventListener(name, handler, false); - } - } - - function removeEvent(object, name, handler){ - if(document.all){ - object.detachEvent("on"+name, handler); - }else{ - object.removeEventListener(name, handler, false); - } - } - - function cancelEvent(event){ - if(document.all){ - event.cancelBubble = true; - }else{ - event.stopPropagation(); - } - } - - function onError(msg, href, lineNo){ - var lastSlash = href.lastIndexOf("/"); - var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1); - - var html = [ - '', msg, '', - '' - ]; - - logRow(html, "error"); - } - - - //After converting to div instead of iframe, now getting two keydowns right away in IE 6. - //Make sure there is a little bit of delay. - var onKeyDownTime = new Date().getTime(); - - function onKeyDown(event){ - var timestamp = (new Date()).getTime(); - if(timestamp > onKeyDownTime + 200){ - event = dojo.fixEvent(event); - var keys = dojo.keys; - var ekc = event.keyCode; - onKeyDownTime = timestamp; - if(ekc == keys.F12){ - toggleConsole(); - }else if( - (ekc == keys.NUMPAD_ENTER || ekc == 76) && - event.shiftKey && - (event.metaKey || event.ctrlKey) - ){ - focusCommandLine(); - }else{ - return; - } - cancelEvent(event); - } - } - - function onCommandLineKeyDown(e){ - var dk = dojo.keys; - if(e.keyCode == 13 && commandLine.value){ - addToHistory(commandLine.value); - evalCommandLine(); - }else if(e.keyCode == 27){ - commandLine.value = ""; - }else if(e.keyCode == dk.UP_ARROW || e.charCode == dk.UP_ARROW){ - navigateHistory("older"); - }else if(e.keyCode == dk.DOWN_ARROW || e.charCode == dk.DOWN_ARROW){ - navigateHistory("newer"); - }else if(e.keyCode == dk.HOME || e.charCode == dk.HOME){ - historyPosition = 1; - navigateHistory("older"); - }else if(e.keyCode == dk.END || e.charCode == dk.END){ - historyPosition = 999999; - navigateHistory("newer"); - } - } - - var historyPosition = -1; - var historyCommandLine = null; - - function addToHistory(value){ - var history = cookie("firebug_history"); - history = (history) ? dojo.fromJson(history) : []; - var pos = dojo.indexOf(history, value); - if (pos != -1){ - history.splice(pos, 1); - } - history.push(value); - cookie("firebug_history", dojo.toJson(history), 30); - while(history.length && !cookie("firebug_history")){ - history.shift(); - cookie("firebug_history", dojo.toJson(history), 30); - } - historyCommandLine = null; - historyPosition = -1; - } - - function navigateHistory(direction){ - var history = cookie("firebug_history"); - history = (history) ? dojo.fromJson(history) : []; - if(!history.length){ - return; - } - - if(historyCommandLine === null){ - historyCommandLine = commandLine.value; - } - - if(historyPosition == -1){ - historyPosition = history.length; - } - - if(direction == "older"){ - --historyPosition; - if(historyPosition < 0){ - historyPosition = 0; - } - }else if(direction == "newer"){ - ++historyPosition; - if(historyPosition > history.length){ - historyPosition = history.length; - } - } - - if(historyPosition == history.length){ - commandLine.value = historyCommandLine; - historyCommandLine = null; - }else{ - commandLine.value = history[historyPosition]; - } - } - - function cookie(name, value){ - var c = document.cookie; - if(arguments.length == 1){ - var matches = c.match(new RegExp("(?:^|; )" + name + "=([^;]*)")); - return matches ? decodeURIComponent(matches[1]) : undefined; // String or undefined - }else{ - var d = new Date(); - d.setMonth(d.getMonth()+1); - document.cookie = name + "=" + encodeURIComponent(value) + ((d.toUtcString) ? "; expires=" + d.toUTCString() : ""); - } - } - - function isArray(it){ - return it && it instanceof Array || typeof it == "array"; - } - - //*************************************************************************************************** - // Print Object Helpers - function objectLength(o){ - var cnt = 0; - for(var nm in o){ - cnt++; - } - return cnt; - } - - function printObject(o, i, txt, used){ - // Recursively trace object, indenting to represent depth for display in object inspector - var ind = " \t"; - txt = txt || ""; - i = i || ind; - used = used || []; - var opnCls; - - if(o && o.nodeType == 1){ - var html = []; - appendNode(o, html); - return html.join(""); - } - - var br=",\n", cnt = 0, length = objectLength(o); - - if(o instanceof Date){ - return i + o.toString() + br; - } - looking: - for(var nm in o){ - cnt++; - if(cnt==length){br = "\n";} - if(o[nm] === window || o[nm] === document){ - // do nothing - }else if(o[nm] === null){ - txt += i+nm + " : NULL" + br; - }else if(o[nm] && o[nm].nodeType){ - if(o[nm].nodeType == 1){ - //txt += i+nm + " : < "+o[nm].tagName+" id=\""+ o[nm].id+"\" />" + br; - }else if(o[nm].nodeType == 3){ - txt += i+nm + " : [ TextNode "+o[nm].data + " ]" + br; - } - - }else if(typeof o[nm] == "object" && (o[nm] instanceof String || o[nm] instanceof Number || o[nm] instanceof Boolean)){ - txt += i+nm + " : " + o[nm] + "," + br; - - }else if(o[nm] instanceof Date){ - txt += i+nm + " : " + o[nm].toString() + br; - - }else if(typeof(o[nm]) == "object" && o[nm]){ - for(var j = 0, seen; seen = used[j]; j++){ - if(o[nm] === seen){ - txt += i+nm + " : RECURSION" + br; - continue looking; - } - } - used.push(o[nm]); - - opnCls = (isArray(o[nm]))?["[","]"]:["{","}"]; - txt += i+nm +" : " + opnCls[0] + "\n";//non-standard break, (no comma) - txt += printObject(o[nm], i+ind, "", used); - txt += i + opnCls[1] + br; - - }else if(typeof o[nm] == "undefined"){ - txt += i+nm + " : undefined" + br; - }else if(nm == "toString" && typeof o[nm] == "function"){ - var toString = o[nm](); - if(typeof toString == "string" && toString.match(/function ?(.*?)\(/)){ - toString = escapeHTML(getObjectAbbr(o[nm])); - } - txt += i+nm +" : " + toString + br; - }else{ - txt += i+nm +" : "+ escapeHTML(getObjectAbbr(o[nm])) + br; - } - } - return txt; - } - - function getObjectAbbr(obj){ - // Gets an abbreviation of an object for display in log - // X items in object, including id - // X items in an array - // TODO: Firebug Sr. actually goes by char count - var isError = (obj instanceof Error); - if(obj.nodeType == 1){ - return escapeHTML('< '+obj.tagName.toLowerCase()+' id=\"'+ obj.id+ '\" />'); - } - if(obj.nodeType == 3){ - return escapeHTML('[TextNode: "'+obj.nodeValue+'"]'); - } - var nm = (obj && (obj.id || obj.name || obj.ObjectID || obj.widgetId)); - if(!isError && nm){ return "{"+nm+"}"; } - - var obCnt = 2; - var arCnt = 4; - var cnt = 0; - - if(isError){ - nm = "[ Error: "+(obj.message || obj.description || obj)+" ]"; - }else if(isArray(obj)){ - nm = "[" + obj.slice(0,arCnt).join(","); - if(obj.length > arCnt){ - nm += " ... ("+obj.length+" items)"; - } - nm += "]"; - }else if(typeof obj == "function"){ - nm = obj + ""; - var reg = /function\s*([^\(]*)(\([^\)]*\))[^\{]*\{/; - var m = reg.exec(nm); - if(m){ - if(!m[1]){ - m[1] = "function"; - } - nm = m[1] + m[2]; - }else{ - nm = "function()"; - } - }else if(typeof obj != "object" || typeof obj == "string"){ - nm = obj + ""; - }else{ - nm = "{"; - for(var i in obj){ - cnt++; - if(cnt > obCnt){ break; } - nm += i+":"+escapeHTML(obj[i])+" "; - } - nm+="}"; - } - - return nm; - } - - //************************************************************************************* - - //window.onerror = onError; - - addEvent(document, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown); - - if( (document.documentElement.getAttribute("debug") == "true")|| - (dojo.config.isDebug) - ){ - toggleConsole(true); - } - - dojo.addOnWindowUnload(function(){ - // Erase the globals and event handlers I created, to prevent spurious leak warnings - removeEvent(document, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown); - window.onFirebugResize = null; - window.console = null; - }); - -}); diff --git a/lib/dojo/aspect.js.uncompressed.js b/lib/dojo/aspect.js.uncompressed.js deleted file mode 100644 index 506c4ca43..000000000 --- a/lib/dojo/aspect.js.uncompressed.js +++ /dev/null @@ -1,207 +0,0 @@ -define("dojo/aspect", [], function(){ - -// TODOC: after/before/around return object -// TODOC: after/before/around param types. - -/*===== - dojo.aspect = { - // summary: provides aspect oriented programming functionality, allowing for - // one to add before, around, or after advice on existing methods. - // - // example: - // | define(["dojo/aspect"], function(aspect){ - // | var signal = aspect.after(targetObject, "methodName", function(someArgument){ - // | this will be called when targetObject.methodName() is called, after the original function is called - // | }); - // - // example: - // The returned signal object can be used to cancel the advice. - // | signal.remove(); // this will stop the advice from being executed anymore - // | aspect.before(targetObject, "methodName", function(someArgument){ - // | // this will be called when targetObject.methodName() is called, before the original function is called - // | }); - - after: function(target, methodName, advice, receiveArguments){ - // summary: The "after" export of the aspect module is a function that can be used to attach - // "after" advice to a method. This function will be executed after the original method - // is executed. By default the function will be called with a single argument, the return - // value of the original method, or the the return value of the last executed advice (if a previous one exists). - // The fourth (optional) argument can be set to true to so the function receives the original - // arguments (from when the original method was called) rather than the return value. - // If there are multiple "after" advisors, they are executed in the order they were registered. - // target: Object - // This is the target object - // methodName: String - // This is the name of the method to attach to. - // advice: Function - // This is function to be called after the original method - // receiveArguments: Boolean? - // If this is set to true, the advice function receives the original arguments (from when the original mehtod - // was called) rather than the return value of the original/previous method. - // returns: - // A signal object that can be used to cancel the advice. If remove() is called on this signal object, it will - // stop the advice function from being executed. - }, - - before: function(target, methodName, advice){ - // summary: The "before" export of the aspect module is a function that can be used to attach - // "before" advice to a method. This function will be executed before the original method - // is executed. This function will be called with the arguments used to call the method. - // This function may optionally return an array as the new arguments to use to call - // the original method (or the previous, next-to-execute before advice, if one exists). - // If the before method doesn't return anything (returns undefined) the original arguments - // will be preserved. - // If there are multiple "before" advisors, they are executed in the reverse order they were registered. - // - // target: Object - // This is the target object - // methodName: String - // This is the name of the method to attach to. - // advice: Function - // This is function to be called before the original method - }, - - around: function(target, methodName, advice){ - // summary: The "around" export of the aspect module is a function that can be used to attach - // "around" advice to a method. The advisor function is immediately executed when - // the around() is called, is passed a single argument that is a function that can be - // called to continue execution of the original method (or the next around advisor). - // The advisor function should return a function, and this function will be called whenever - // the method is called. It will be called with the arguments used to call the method. - // Whatever this function returns will be returned as the result of the method call (unless after advise changes it). - // - // example: - // If there are multiple "around" advisors, the most recent one is executed first, - // which can then delegate to the next one and so on. For example: - // | around(obj, "foo", function(originalFoo){ - // | return function(){ - // | var start = new Date().getTime(); - // | var results = originalFoo.apply(this, arguments); // call the original - // | var end = new Date().getTime(); - // | console.log("foo execution took " + (end - start) + " ms"); - // | return results; - // | }; - // | }); - // - // target: Object - // This is the target object - // methodName: String - // This is the name of the method to attach to. - // advice: Function - // This is function to be called around the original method - } - - }; -=====*/ - - "use strict"; - var nextId = 0; - function advise(dispatcher, type, advice, receiveArguments){ - var previous = dispatcher[type]; - var around = type == "around"; - var signal; - if(around){ - var advised = advice(function(){ - return previous.advice(this, arguments); - }); - signal = { - remove: function(){ - signal.cancelled = true; - }, - advice: function(target, args){ - return signal.cancelled ? - previous.advice(target, args) : // cancelled, skip to next one - advised.apply(target, args); // called the advised function - } - }; - }else{ - // create the remove handler - signal = { - remove: function(){ - var previous = signal.previous; - var next = signal.next; - if(!next && !previous){ - delete dispatcher[type]; - }else{ - if(previous){ - previous.next = next; - }else{ - dispatcher[type] = next; - } - if(next){ - next.previous = previous; - } - } - }, - id: nextId++, - advice: advice, - receiveArguments: receiveArguments - }; - } - if(previous && !around){ - if(type == "after"){ - // add the listener to the end of the list - var next = previous; - while(next){ - previous = next; - next = next.next; - } - previous.next = signal; - signal.previous = previous; - }else if(type == "before"){ - // add to beginning - dispatcher[type] = signal; - signal.next = previous; - previous.previous = signal; - } - }else{ - // around or first one just replaces - dispatcher[type] = signal; - } - return signal; - } - function aspect(type){ - return function(target, methodName, advice, receiveArguments){ - var existing = target[methodName], dispatcher; - if(!existing || existing.target != target){ - // no dispatcher in place - target[methodName] = dispatcher = function(){ - var executionId = nextId; - // before advice - var args = arguments; - var before = dispatcher.before; - while(before){ - args = before.advice.apply(this, args) || args; - before = before.next; - } - // around advice - if(dispatcher.around){ - var results = dispatcher.around.advice(this, args); - } - // after advice - var after = dispatcher.after; - while(after && after.id < executionId){ - results = after.receiveArguments ? after.advice.apply(this, args) || results : - after.advice.call(this, results); - after = after.next; - } - return results; - }; - if(existing){ - dispatcher.around = {advice: function(target, args){ - return existing.apply(target, args); - }}; - } - dispatcher.target = target; - } - var results = advise((dispatcher || existing), type, advice, receiveArguments); - advice = null; - return results; - }; - } - return { - before: aspect("before"), - around: aspect("around"), - after: aspect("after") - }; -}); diff --git a/lib/dojo/back.js.uncompressed.js b/lib/dojo/back.js.uncompressed.js deleted file mode 100644 index 4be031c14..000000000 --- a/lib/dojo/back.js.uncompressed.js +++ /dev/null @@ -1,397 +0,0 @@ -define("dojo/back", ["./_base/kernel", "./_base/lang", "./_base/sniff", "./dom", "./dom-construct", "./_base/window", "require"], function(dojo, lang, sniff, dom, domConstruct, baseWindow, require) { - // module: - // dojo/back - // summary: - // TODOC - - lang.getObject("back", true, dojo); - -/*===== -dojo.back = { - // summary: Browser history management resources -}; -=====*/ - - var back = dojo.back, - - // everyone deals with encoding the hash slightly differently - - getHash = back.getHash = function(){ - var h = window.location.hash; - if(h.charAt(0) == "#"){ h = h.substring(1); } - return sniff("mozilla") ? h : decodeURIComponent(h); - }, - - setHash = back.setHash = function(h){ - if(!h){ h = ""; } - window.location.hash = encodeURIComponent(h); - historyCounter = history.length; - }; - - var initialHref = (typeof(window) !== "undefined") ? window.location.href : ""; - var initialHash = (typeof(window) !== "undefined") ? getHash() : ""; - var initialState = null; - - var locationTimer = null; - var bookmarkAnchor = null; - var historyIframe = null; - var forwardStack = []; - var historyStack = []; - var moveForward = false; - var changingUrl = false; - var historyCounter; - - function handleBackButton(){ - //summary: private method. Do not call this directly. - - //The "current" page is always at the top of the history stack. - var current = historyStack.pop(); - if(!current){ return; } - var last = historyStack[historyStack.length-1]; - if(!last && historyStack.length == 0){ - last = initialState; - } - if(last){ - if(last.kwArgs["back"]){ - last.kwArgs["back"](); - }else if(last.kwArgs["backButton"]){ - last.kwArgs["backButton"](); - }else if(last.kwArgs["handle"]){ - last.kwArgs.handle("back"); - } - } - forwardStack.push(current); - } - - back.goBack = handleBackButton; - - function handleForwardButton(){ - //summary: private method. Do not call this directly. - var last = forwardStack.pop(); - if(!last){ return; } - if(last.kwArgs["forward"]){ - last.kwArgs.forward(); - }else if(last.kwArgs["forwardButton"]){ - last.kwArgs.forwardButton(); - }else if(last.kwArgs["handle"]){ - last.kwArgs.handle("forward"); - } - historyStack.push(last); - } - - back.goForward = handleForwardButton; - - function createState(url, args, hash){ - //summary: private method. Do not call this directly. - return {"url": url, "kwArgs": args, "urlHash": hash}; //Object - } - - function getUrlQuery(url){ - //summary: private method. Do not call this directly. - var segments = url.split("?"); - if(segments.length < 2){ - return null; //null - } - else{ - return segments[1]; //String - } - } - - function loadIframeHistory(){ - //summary: private method. Do not call this directly. - var url = (dojo.config["dojoIframeHistoryUrl"] || require.toUrl("./resources/iframe_history.html")) + "?" + (new Date()).getTime(); - moveForward = true; - if(historyIframe){ - sniff("webkit") ? historyIframe.location = url : window.frames[historyIframe.name].location = url; - }else{ - //console.warn("dojo.back: Not initialised. You need to call dojo.back.init() from a - // - return new dojo.NodeList(); // dojo.NodeList -}; -=====*/ - -function queryForEngine(engine, NodeList){ - var query = function(/*String*/ query, /*String|DOMNode?*/ root){ - // summary: - // Returns nodes which match the given CSS selector, searching the - // entire document by default but optionally taking a node to scope - // the search by. Returns an instance of dojo.NodeList. - if(typeof root == "string"){ - root = dom.byId(root); - if(!root){ - return new NodeList([]); - } - } - var results = typeof query == "string" ? engine(query, root) : query.orphan ? query : [query]; - if(results.orphan){ - // already wrapped - return results; - } - return new NodeList(results); - }; - query.matches = engine.match || function(node, selector, root){ - // summary: - // Test to see if a node matches a selector - return query.filter([node], selector, root).length > 0; - }; - // the engine provides a filtering function, use it to for matching - query.filter = engine.filter || function(nodes, selector, root){ - // summary: - // Filters an array of nodes. Note that this does not guarantee to return a dojo.NodeList, just an array. - return query(selector, root).filter(function(node){ - return array.indexOf(nodes, node) > -1; - }); - }; - if(typeof engine != "function"){ - var search = engine.search; - engine = function(selector, root){ - // Slick does it backwards (or everyone else does it backwards, probably the latter) - return search(root || document, selector); - }; - } - return query; -} -var query = queryForEngine(defaultEngine, NodeList); -// the query that is returned from this module is slightly different than dojo.query, -// because dojo.query has to maintain backwards compatibility with returning a -// true array which has performance problems. The query returned from the module -// does not use true arrays, but rather inherits from Array, making it much faster to -// instantiate. -dojo.query = queryForEngine(defaultEngine, function(array){ - // call it without the new operator to invoke the back-compat behavior that returns a true array - return NodeList(array); -}); - -query.load = /*===== dojo.query.load= ======*/ function(id, parentRequire, loaded, config){ - // summary: can be used as AMD plugin to conditionally load new query engine - // example: - // | define(["dojo/query!custom"], function(qsa){ - // | // loaded selector/custom.js as engine - // | qsa("#foobar").forEach(...); - // | }); - loader.load(id, parentRequire, function(engine){ - loaded(queryForEngine(engine, NodeList)); - }); -}; - -dojo._filterQueryResult = query._filterResult = function(nodes, selector, root){ - return new NodeList(query.filter(nodes, selector, root)); -}; -dojo.NodeList = query.NodeList = NodeList; -return query; -}); - -}, -'dojo/has':function(){ -define(["require"], function(require) { - // module: - // dojo/has - // summary: - // Defines the has.js API and several feature tests used by dojo. - // description: - // This module defines the has API as described by the project has.js with the following additional features: - // - // * the has test cache is exposed at has.cache. - // * the method has.add includes a forth parameter that controls whether or not existing tests are replaced - // * the loader's has cache may be optionally copied into this module's has cahce. - // - // This module adopted from https://github.com/phiggins42/has.js; thanks has.js team! - - // try to pull the has implementation from the loader; both the dojo loader and bdLoad provide one - // WARNING: if a foreign loader defines require.has to be something other than the has.js API, then this implementation fail - var has = require.has || function(){}; - if(!1){ - // notice the condition is written so that if 1 is transformed to 1 during a build - // the conditional will be (!1 && typeof has=="function") which is statically false and the closure - // compiler will discard the block. - var - isBrowser = - // the most fundamental decision: are we in the browser? - typeof window != "undefined" && - typeof location != "undefined" && - typeof document != "undefined" && - window.location == location && window.document == document, - - // has API variables - global = this, - doc = isBrowser && document, - element = doc && doc.createElement("DiV"), - cache = {}; - - has = /*===== dojo.has= =====*/ function(name){ - // summary: - // Return the current value of the named feature. - // - // name: String|Integer - // The name (if a string) or identifier (if an integer) of the feature to test. - // - // description: - // Returns the value of the feature named by name. The feature must have been - // previously added to the cache by has.add. - - return typeof cache[name] == "function" ? (cache[name] = cache[name](global, doc, element)) : cache[name]; // Boolean - }; - - has.cache = cache; - - has.add = /*====== dojo.has.add= ======*/ function(name, test, now, force){ - // summary: - // Register a new feature test for some named feature. - // - // name: String|Integer - // The name (if a string) or identifier (if an integer) of the feature to test. - // - // test: Function - // A test function to register. If a function, queued for testing until actually - // needed. The test function should return a boolean indicating - // the presence of a feature or bug. - // - // now: Boolean? - // Optional. Omit if `test` is not a function. Provides a way to immediately - // run the test and cache the result. - // - // force: Boolean? - // Optional. If the test already exists and force is truthy, then the existing - // test will be replaced; otherwise, add does not replace an existing test (that - // is, by default, the first test advice wins). - // - // example: - // A redundant test, testFn with immediate execution: - // | has.add("javascript", function(){ return true; }, true); - // - // example: - // Again with the redundantness. You can do this in your tests, but we should - // not be doing this in any internal has.js tests - // | has.add("javascript", true); - // - // example: - // Three things are passed to the testFunction. `global`, `document`, and a generic element - // from which to work your test should the need arise. - // | has.add("bug-byid", function(g, d, el){ - // | // g == global, typically window, yadda yadda - // | // d == document object - // | // el == the generic element. a `has` element. - // | return false; // fake test, byid-when-form-has-name-matching-an-id is slightly longer - // | }); - - (typeof cache[name]=="undefined" || force) && (cache[name]= test); - return now && has(name); - }; - - // since we're operating under a loader that doesn't provide a has API, we must explicitly initialize - // has as it would have otherwise been initialized by the dojo loader; use has.add to the builder - // can optimize these away iff desired - true || has.add("host-browser", isBrowser); - true || has.add("dom", isBrowser); - true || has.add("dojo-dom-ready-api", 1); - true || has.add("dojo-sniff", 1); - } - - if(1){ - var agent = navigator.userAgent; - // Common application level tests - has.add("dom-addeventlistener", !!document.addEventListener); - has.add("touch", "ontouchstart" in document); - // I don't know if any of these tests are really correct, just a rough guess - has.add("device-width", screen.availWidth || innerWidth); - has.add("agent-ios", !!agent.match(/iPhone|iP[ao]d/)); - has.add("agent-android", agent.indexOf("android") > 1); - } - - has.clearElement = /*===== dojo.has.clearElement= ======*/ function(element) { - // summary: - // Deletes the contents of the element passed to test functions. - element.innerHTML= ""; - return element; - }; - - has.normalize = /*===== dojo.has.normalize= ======*/ function(id, toAbsMid){ - // summary: - // Resolves id into a module id based on possibly-nested tenary expression that branches on has feature test value(s). - // - // toAbsMid: Function - // Resolves a relative module id into an absolute module id - var - tokens = id.match(/[\?:]|[^:\?]*/g), i = 0, - get = function(skip){ - var term = tokens[i++]; - if(term == ":"){ - // empty string module name, resolves to 0 - return 0; - }else{ - // postfixed with a ? means it is a feature to branch on, the term is the name of the feature - if(tokens[i++] == "?"){ - if(!skip && has(term)){ - // matched the feature, get the first value from the options - return get(); - }else{ - // did not match, get the second value, passing over the first - get(true); - return get(skip); - } - } - // a module - return term || 0; - } - }; - id = get(); - return id && toAbsMid(id); - }; - - has.load = /*===== dojo.has.load= ======*/ function(id, parentRequire, loaded){ - // summary: - // Conditional loading of AMD modules based on a has feature test value. - // - // id: String - // Gives the resolved module id to load. - // - // parentRequire: Function - // The loader require function with respect to the module that contained the plugin resource in it's - // dependency list. - // - // loaded: Function - // Callback to loader that consumes result of plugin demand. - - if(id){ - parentRequire([id], loaded); - }else{ - loaded(); - } - }; - - return has; -}); - -}, -'dojo/_base/loader':function(){ -define(["./kernel", "../has", "require", "module", "./json", "./lang", "./array"], function(dojo, has, require, thisModule, json, lang, array) { - // module: - // dojo/_base/lader - // summary: - // This module defines the v1.x synchronous loader API. - - // signal the loader in sync mode... - //>>pure-amd - - if (!1){ - console.error("cannot load the Dojo v1.x loader with a foreign loader"); - return 0; - } - - var makeErrorToken = function(id){ - return {src:thisModule.id, id:id}; - }, - - slashName = function(name){ - return name.replace(/\./g, "/"); - }, - - buildDetectRe = /\/\/>>built/, - - dojoRequireCallbacks = [], - dojoRequireModuleStack = [], - - dojoRequirePlugin = function(mid, require, loaded){ - dojoRequireCallbacks.push(loaded); - array.forEach(mid.split(","), function(mid){ - var module = getModule(mid, require.module); - dojoRequireModuleStack.push(module); - injectModule(module); - }); - checkDojoRequirePlugin(); - }, - - // checkDojoRequirePlugin inspects all of the modules demanded by a dojo/require! dependency - // to see if they have arrived. The loader does not release *any* of these modules to be instantiated - // until *all* of these modules are on board, thereby preventing the evaluation of a module with dojo.require's - // that reference modules that are not available. - // - // The algorithm works by traversing the dependency graphs (remember, there can be cycles so they are not trees) - // of each module in the dojoRequireModuleStack array (which contains the list of modules demanded by dojo/require!). - // The moment a single module is discovered that is missing, the algorithm gives up and indicates that not all - // modules are on board. dojo/loadInit! and dojo/require! are ignored because there dependencies are inserted - // directly in dojoRequireModuleStack. For example, if "your/module" module depends on "dojo/require!my/module", then - // *both* "dojo/require!my/module" and "my/module" will be in dojoRequireModuleStack. Obviously, if "my/module" - // is on board, then "dojo/require!my/module" is also satisfied, so the algorithm doesn't check for "dojo/require!my/module". - // - // Note: inserting a dojo/require! dependency in the dojoRequireModuleStack achieves nothing - // with the current algorithm; however, having such modules present makes it possible to optimize the algorithm - // - // Note: prior versions of this algorithm had an optimization that signaled loaded on dojo/require! dependencies - // individually (rather than waiting for them all to be resolved). The implementation proved problematic with cycles - // and plugins. However, it is possible to reattach that strategy in the future. - - // a set from module-id to {undefined | 1 | 0}, where... - // undefined => the module has not been inspected - // 0 => the module or at least one of its dependencies has not arrived - // 1 => the module is a loadInit! or require! plugin resource, or is currently being traversed (therefore, assume - // OK until proven otherwise), or has been completely traversed and all dependencies have arrived - touched, - - traverse = function(m){ - touched[m.mid] = 1; - for(var t, module, deps = m.deps || [], i= 0; i a built module, always AMD - // extractResult==0 => no sync API - return 0; - } - - // manufacture a synthetic module id that can never be a real mdule id (just like require does) - id = module.mid + "-*loadInit"; - - // construct the dojo/loadInit names vector which causes any relocated names to be defined as lexical variables under their not-relocated name - // the dojo/loadInit plugin assumes the first name in names is "dojo" - - for(var p in getModule("dojo", module).result.scopeMap){ - names.push(p); - namesAsStrings.push('"' + p + '"'); - } - - // rewrite the module as a synthetic dojo/loadInit plugin resource + the module expressed as an AMD module that depends on this synthetic resource - return "// xdomain rewrite of " + module.path + "\n" + - "define('" + id + "',{\n" + - "\tnames:" + dojo.toJson(names) + ",\n" + - "\tdef:function(" + names.join(",") + "){" + extractResult[1] + "}" + - "});\n\n" + - "define(" + dojo.toJson(names.concat(["dojo/loadInit!"+id])) + ", function(" + names.join(",") + "){\n" + extractResult[0] + "});"; - }, - - loaderVars = require.initSyncLoader(dojoRequirePlugin, checkDojoRequirePlugin, transformToAmd), - - sync = - loaderVars.sync, - - xd = - loaderVars.xd, - - arrived = - loaderVars.arrived, - - nonmodule = - loaderVars.nonmodule, - - executing = - loaderVars.executing, - - executed = - loaderVars.executed, - - syncExecStack = - loaderVars.syncExecStack, - - modules = - loaderVars.modules, - - execQ = - loaderVars.execQ, - - getModule = - loaderVars.getModule, - - injectModule = - loaderVars.injectModule, - - setArrived = - loaderVars.setArrived, - - signal = - loaderVars.signal, - - finishExec = - loaderVars.finishExec, - - execModule = - loaderVars.execModule, - - getLegacyMode = - loaderVars.getLegacyMode; - - dojo.provide = function(mid){ - var executingModule = syncExecStack[0], - module = lang.mixin(getModule(slashName(mid), require.module), { - executed:executing, - result:lang.getObject(mid, true) - }); - setArrived(module); - if(executingModule){ - (executingModule.provides || (executingModule.provides = [])).push(function(){ - module.result = lang.getObject(mid); - delete module.provides; - module.executed!==executed && finishExec(module); - }); - }// else dojo.provide called not consequent to loading; therefore, give up trying to publish module value to loader namespace - return module.result; - }; - - has.add("config-publishRequireResult", 1, 0, 0); - - dojo.require = function(moduleName, omitModuleCheck) { - // summary: - // loads a Javascript module from the appropriate URI - // - // moduleName: String - // module name to load, using periods for separators, - // e.g. "dojo.date.locale". Module paths are de-referenced by dojo's - // internal mapping of locations to names and are disambiguated by - // longest prefix. See `dojo.registerModulePath()` for details on - // registering new modules. - // - // omitModuleCheck: Boolean? - // if `true`, omitModuleCheck skips the step of ensuring that the - // loaded file actually defines the symbol it is referenced by. - // For example if it called as `dojo.require("a.b.c")` and the - // file located at `a/b/c.js` does not define an object `a.b.c`, - // and exception will be throws whereas no exception is raised - // when called as `dojo.require("a.b.c", true)` - // - // description: - // Modules are loaded via dojo.require by using one of two loaders: the normal loader - // and the xdomain loader. The xdomain loader is used when dojo was built with a - // custom build that specified loader=xdomain and the module lives on a modulePath - // that is a whole URL, with protocol and a domain. The versions of Dojo that are on - // the Google and AOL CDNs use the xdomain loader. - // - // If the module is loaded via the xdomain loader, it is an asynchronous load, since - // the module is added via a dynamically created script tag. This - // means that dojo.require() can return before the module has loaded. However, this - // should only happen in the case where you do dojo.require calls in the top-level - // HTML page, or if you purposely avoid the loader checking for dojo.require - // dependencies in your module by using a syntax like dojo["require"] to load the module. - // - // Sometimes it is useful to not have the loader detect the dojo.require calls in the - // module so that you can dynamically load the modules as a result of an action on the - // page, instead of right at module load time. - // - // Also, for script blocks in an HTML page, the loader does not pre-process them, so - // it does not know to download the modules before the dojo.require calls occur. - // - // So, in those two cases, when you want on-the-fly module loading or for script blocks - // in the HTML page, special care must be taken if the dojo.required code is loaded - // asynchronously. To make sure you can execute code that depends on the dojo.required - // modules, be sure to add the code that depends on the modules in a dojo.addOnLoad() - // callback. dojo.addOnLoad waits for all outstanding modules to finish loading before - // executing. - // - // This type of syntax works with both xdomain and normal loaders, so it is good - // practice to always use this idiom for on-the-fly code loading and in HTML script - // blocks. If at some point you change loaders and where the code is loaded from, - // it will all still work. - // - // More on how dojo.require - // `dojo.require("A.B")` first checks to see if symbol A.B is - // defined. If it is, it is simply returned (nothing to do). - // - // If it is not defined, it will look for `A/B.js` in the script root - // directory. - // - // `dojo.require` throws an exception if it cannot find a file - // to load, or if the symbol `A.B` is not defined after loading. - // - // It returns the object `A.B`, but note the caveats above about on-the-fly loading and - // HTML script blocks when the xdomain loader is loading a module. - // - // `dojo.require()` does nothing about importing symbols into - // the current namespace. It is presumed that the caller will - // take care of that. - // - // example: - // To use dojo.require in conjunction with dojo.ready: - // - // | dojo.require("foo"); - // | dojo.require("bar"); - // | dojo.addOnLoad(function(){ - // | //you can now safely do something with foo and bar - // | }); - // - // example: - // For example, to import all symbols into a local block, you might write: - // - // | with (dojo.require("A.B")) { - // | ... - // | } - // - // And to import just the leaf symbol to a local variable: - // - // | var B = dojo.require("A.B"); - // | ... - // - // returns: - // the required namespace object - function doRequire(mid, omitModuleCheck){ - var module = getModule(slashName(mid), require.module); - if(syncExecStack.length && syncExecStack[0].finish){ - // switched to async loading in the middle of evaluating a legacy module; stop - // applying dojo.require so the remaining dojo.requires are applied in order - syncExecStack[0].finish.push(mid); - return undefined; - } - - // recall module.executed has values {0, executing, executed}; therefore, truthy indicates executing or executed - if(module.executed){ - return module.result; - } - omitModuleCheck && (module.result = nonmodule); - - var currentMode = getLegacyMode(); - - // recall, in sync mode to inject is to *eval* the module text - // if the module is a legacy module, this is the same as executing - // but if the module is an AMD module, this means defining, not executing - injectModule(module); - // the inject may have changed the mode - currentMode = getLegacyMode(); - - // in sync mode to dojo.require is to execute - if(module.executed!==executed && module.injected===arrived){ - // the module was already here before injectModule was called probably finishing up a xdomain - // load, but maybe a module given to the loader directly rather than having the loader retrieve it - loaderVars.holdIdle(); - execModule(module); - loaderVars.releaseIdle(); - } - if(module.executed){ - return module.result; - } - - if(currentMode==sync){ - // the only way to get here is in sync mode and dojo.required a module that - // * was loaded async in the injectModule application a few lines up - // * was an AMD module that had deps that are being loaded async and therefore couldn't execute - if(module.cjs){ - // the module was an AMD module; unshift, not push, which causes the current traversal to be reattempted from the top - execQ.unshift(module); - }else{ - // the module was a legacy module - syncExecStack.length && (syncExecStack[0].finish= [mid]); - } - }else{ - // the loader wasn't in sync mode on entry; probably async mode; therefore, no expectation of getting - // the module value synchronously; make sure it gets executed though - execQ.push(module); - } - return undefined; - } - - var result = doRequire(moduleName, omitModuleCheck); - if(has("config-publishRequireResult") && !lang.exists(moduleName) && result!==undefined){ - lang.setObject(moduleName, result); - } - return result; - }; - - dojo.loadInit = function(f) { - f(); - }; - - dojo.registerModulePath = function(/*String*/moduleName, /*String*/prefix){ - // summary: - // Maps a module name to a path - // description: - // An unregistered module is given the default path of ../[module], - // relative to Dojo root. For example, module acme is mapped to - // ../acme. If you want to use a different module name, use - // dojo.registerModulePath. - // example: - // If your dojo.js is located at this location in the web root: - // | /myapp/js/dojo/dojo/dojo.js - // and your modules are located at: - // | /myapp/js/foo/bar.js - // | /myapp/js/foo/baz.js - // | /myapp/js/foo/thud/xyzzy.js - // Your application can tell Dojo to locate the "foo" namespace by calling: - // | dojo.registerModulePath("foo", "../../foo"); - // At which point you can then use dojo.require() to load the - // modules (assuming they provide() the same things which are - // required). The full code might be: - // | - // | - - var paths = {}; - paths[moduleName.replace(/\./g, "/")] = prefix; - require({paths:paths}); - }; - - dojo.platformRequire = function(/*Object*/modMap){ - // summary: - // require one or more modules based on which host environment - // Dojo is currently operating in - // description: - // This method takes a "map" of arrays which one can use to - // optionally load dojo modules. The map is indexed by the - // possible dojo.name_ values, with two additional values: - // "default" and "common". The items in the "default" array will - // be loaded if none of the other items have been choosen based on - // dojo.name_, set by your host environment. The items in the - // "common" array will *always* be loaded, regardless of which - // list is chosen. - // example: - // | dojo.platformRequire({ - // | browser: [ - // | "foo.sample", // simple module - // | "foo.test", - // | ["foo.bar.baz", true] // skip object check in _loadModule (dojo.require) - // | ], - // | default: [ "foo.sample._base" ], - // | common: [ "important.module.common" ] - // | }); - - var result = (modMap.common || []).concat(modMap[dojo._name] || modMap["default"] || []), - temp; - while(result.length){ - if(lang.isArray(temp = result.shift())){ - dojo.require.apply(dojo, temp); - }else{ - dojo.require(temp); - } - } - }; - - dojo.requireIf = dojo.requireAfterIf = function(/*Boolean*/ condition, /*String*/ moduleName, /*Boolean?*/omitModuleCheck){ - // summary: - // If the condition is true then call `dojo.require()` for the specified - // resource - // - // example: - // | dojo.requireIf(dojo.isBrowser, "my.special.Module"); - - if(condition){ - dojo.require(moduleName, omitModuleCheck); - } - }; - - dojo.requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale){ - require(["../i18n"], function(i18n){ - i18n.getLocalization(moduleName, bundleName, locale); - }); - }; - - return { - extractLegacyApiApplications:extractLegacyApiApplications, - require:loaderVars.dojoRequirePlugin, - loadInit:dojoLoadInitPlugin - }; -}); - -}, -'dojo/json':function(){ -define(["./has"], function(has){ - "use strict"; - var hasJSON = typeof JSON != "undefined"; - has.add("json-parse", hasJSON); // all the parsers work fine - // Firefox 3.5/Gecko 1.9 fails to use replacer in stringify properly https://bugzilla.mozilla.org/show_bug.cgi?id=509184 - has.add("json-stringify", hasJSON && JSON.stringify({a:0}, function(k,v){return v||1;}) == '{"a":1}'); - if(has("json-stringify")){ - return JSON; - } - else{ - var escapeString = function(/*String*/str){ - //summary: - // Adds escape sequences for non-visual characters, double quote and - // backslash and surrounds with double quotes to form a valid string - // literal. - 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 - }; - return { - parse: has("json-parse") ? JSON.parse : function(str, strict){ - // summary: - // Parses a [JSON](http://json.org) string to return a JavaScript object. - // description: - // This function follows [native JSON API](https://developer.mozilla.org/en/JSON) - // Throws for invalid JSON strings. This delegates to eval() if native JSON - // support is not available. By default this will evaluate any valid JS expression. - // With the strict parameter set to true, the parser will ensure that only - // valid JSON strings are parsed (otherwise throwing an error). Without the strict - // parameter, the content passed to this method must come - // from a trusted source. - // str: - // a string literal of a JSON item, for instance: - // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` - // strict: - // When set to true, this will ensure that only valid, secure JSON is ever parsed. - // Make sure this is set to true for untrusted content. Note that on browsers/engines - // without native JSON support, setting this to true will run slower. - if(strict && !/^([\s\[\{]*(?:"(?:\\.|[^"])+"|-?\d[\d\.]*(?:[Ee][+-]?\d+)?|null|true|false|)[\s\]\}]*(?:,|:|$))+$/.test(str)){ - throw new SyntaxError("Invalid characters in JSON"); - } - return eval('(' + str + ')'); - }, - stringify: function(value, replacer, spacer){ - // summary: - // Returns a [JSON](http://json.org) serialization of an object. - // description: - // Returns a [JSON](http://json.org) serialization of an object. - // This function follows [native JSON API](https://developer.mozilla.org/en/JSON) - // Note that this doesn't check for infinite recursion, so don't do that! - // value: - // A value to be serialized. - // replacer: - // A replacer function that is called for each value and can return a replacement - // spacer: - // A spacer string to be used for pretty printing of JSON - // - // example: - // simple serialization of a trivial object - // | define(["dojo/json"], function(JSON){ - // | var jsonStr = JSON.stringify({ howdy: "stranger!", isStrange: true }); - // | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr); - var undef; - if(typeof replacer == "string"){ - spacer = replacer; - replacer = null; - } - function stringify(it, indent, key){ - if(replacer){ - it = replacer(key, it); - } - var val, objtype = typeof it; - if(objtype == "number"){ - return isFinite(it) ? it + "" : "null"; - } - if(objtype == "boolean"){ - return it + ""; - } - if(it === null){ - return "null"; - } - if(typeof it == "string"){ - return escapeString(it); - } - if(objtype == "function" || objtype == "undefined"){ - return undef; // undefined - } - // short-circuit for objects that support "json" serialization - // if they return "self" then just pass-through... - if(typeof it.toJSON == "function"){ - return stringify(it.toJSON(key), indent, key); - } - if(it instanceof Date){ - return '"{FullYear}-{Month+}-{Date}T{Hours}:{Minutes}:{Seconds}Z"'.replace(/\{(\w+)(\+)?\}/g, function(t, prop, plus){ - var num = it["getUTC" + prop]() + (plus ? 1 : 0); - return num < 10 ? "0" + num : num; - }); - } - if(it.valueOf() !== it){ - // primitive wrapper, try again unwrapped: - return stringify(it.valueOf(), indent, key); - } - var nextIndent= spacer ? (indent + spacer) : ""; - /* we used to test for DOM nodes and throw, but FF serializes them as {}, so cross-browser consistency is probably not efficiently attainable */ - - var sep = spacer ? " " : ""; - var newLine = spacer ? "\n" : ""; - - // array - if(it instanceof Array){ - var itl = it.length, res = []; - for(key = 0; key < itl; key++){ - var obj = it[key]; - val = stringify(obj, nextIndent, key); - if(typeof val != "string"){ - val = "null"; - } - res.push(newLine + nextIndent + val); - } - return "[" + res.join(",") + newLine + indent + "]"; - } - // generic object code path - var output = []; - for(key in it){ - var keyStr; - if(typeof key == "number"){ - keyStr = '"' + key + '"'; - }else if(typeof key == "string"){ - keyStr = escapeString(key); - }else{ - // skip non-string or number keys - continue; - } - val = stringify(it[key], nextIndent, key); - if(typeof val != "string"){ - // skip non-serializable values - continue; - } - // At this point, the most non-IE browsers don't get in this branch - // (they have native JSON), so push is definitely the way to - output.push(newLine + nextIndent + keyStr + ":" + sep + val); - } - return "{" + output.join(",") + newLine + indent + "}"; // String - } - return stringify(value, "", ""); - } - }; - } -}); - -}, -'dojo/_base/declare':function(){ -define(["./kernel", "../has", "./lang"], function(dojo, has, lang){ - // module: - // dojo/_base/declare - // summary: - // This module defines dojo.declare. - - var mix = lang.mixin, op = Object.prototype, opts = op.toString, - xtor = new Function, counter = 0, cname = "constructor"; - - 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, className){ - var result = [], roots = [{cls: 0, refs: []}], nameMap = {}, clsCount = 1, - l = bases.length, i = 0, j, lin, base, top, proto, rec, name, refs; - - // build a list of bases naming them if needed - for(; i < l; ++i){ - base = bases[i]; - if(!base){ - 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.", className); - } - lin = base._meta ? base._meta.bases : [base]; - top = 0; - // add bases to the name map - for(j = lin.length - 1; j >= 0; --j){ - proto = lin[j].prototype; - if(!proto.hasOwnProperty("declaredClass")){ - proto.declaredClass = "uniqName_" + (counter++); - } - name = proto.declaredClass; - if(!nameMap.hasOwnProperty(name)){ - nameMap[name] = {count: 0, refs: [], cls: lin[j]}; - ++clsCount; - } - rec = nameMap[name]; - if(top && top !== rec){ - rec.refs.push(top); - ++top.count; - } - top = rec; - } - ++top.count; - roots[0].refs.push(top); - } - - // remove classes without external references recursively - while(roots.length){ - top = roots.pop(); - result.push(top.cls); - --clsCount; - // optimization: follow a single-linked chain - while(refs = top.refs, refs.length == 1){ - top = refs[0]; - if(!top || --top.count){ - // branch or end of chain => do not end to roots - top = 0; - break; - } - result.push(top.cls); - --clsCount; - } - if(top){ - // branch - for(i = 0, l = refs.length; i < l; ++i){ - top = refs[i]; - if(!--top.count){ - roots.push(top); - } - } - } - } - if(clsCount){ - err("can't build consistent linearization", className); - } - - // calculate the superclass offset - base = bases[0]; - result[0] = base ? - base._meta && base === result[result.length - base._meta.bases.length] ? - base._meta.bases.length : 1 : 0; - - return result; - } - - function inherited(args, a, f){ - var name, chains, bases, caller, meta, base, proto, opf, pos, - cache = this._inherited = this._inherited || {}; - - // crack arguments - if(typeof args == "string"){ - name = args; - args = a; - a = f; - } - f = 0; - - caller = args.callee; - name = name || caller.nom; - if(!name){ - err("can't deduce a name to call inherited()", this.declaredClass); - } - - meta = this.constructor._meta; - bases = meta.bases; - - pos = cache.p; - if(name != cname){ - // method - if(cache.c !== caller){ - // cache bust - pos = 0; - base = bases[0]; - meta = base._meta; - if(meta.hidden[name] !== caller){ - // error detection - chains = meta.chains; - if(chains && typeof chains[name] == "string"){ - err("calling chained method with inherited: " + name, this.declaredClass); - } - // find caller - do{ - meta = base._meta; - proto = base.prototype; - if(meta && (proto[name] === caller && proto.hasOwnProperty(name) || meta.hidden[name] === caller)){ - break; - } - }while(base = bases[++pos]); // intentional assignment - pos = base ? pos : -1; - } - } - // find next - base = bases[++pos]; - if(base){ - proto = base.prototype; - if(base._meta && proto.hasOwnProperty(name)){ - f = proto[name]; - }else{ - opf = op[name]; - do{ - proto = base.prototype; - f = proto[name]; - if(f && (base._meta ? proto.hasOwnProperty(name) : f !== opf)){ - break; - } - }while(base = bases[++pos]); // intentional assignment - } - } - f = base && f || op[name]; - }else{ - // constructor - if(cache.c !== caller){ - // cache bust - pos = 0; - meta = bases[0]._meta; - if(meta && meta.ctor !== caller){ - // error detection - chains = meta.chains; - if(!chains || chains.constructor !== "manual"){ - err("calling chained constructor with inherited", this.declaredClass); - } - // find caller - while(base = bases[++pos]){ // intentional assignment - meta = base._meta; - if(meta && meta.ctor === caller){ - break; - } - } - pos = base ? pos : -1; - } - } - // find next - while(base = bases[++pos]){ // intentional assignment - meta = base._meta; - f = meta ? meta.ctor : base; - if(f){ - break; - } - } - f = base && f; - } - - // cache the found super method - cache.c = f; - cache.p = pos; - - // now we have the result - if(f){ - return a === true ? f : f.apply(this, a || args); - } - // intentionally no return if a super method was not found - } - - function getInherited(name, args){ - if(typeof name == "string"){ - return this.__inherited(name, args, true); - } - return this.__inherited(name, true); - } - - function inherited__debug(args, a1, a2){ - var f = this.getInherited(args, a1); - if(f){ return f.apply(this, a2 || a1 || args); } - // intentionally no return if a super method was not found - } - - var inheritedImpl = dojo.config.isDebug ? inherited__debug : inherited; - - // emulation of "instanceof" - function isInstanceOf(cls){ - var bases = this.constructor._meta.bases; - for(var i = 0, l = bases.length; i < l; ++i){ - if(bases[i] === cls){ - return true; - } - } - return this instanceof cls; - } - - function mixOwn(target, source){ - // add props adding metadata for incoming functions skipping a constructor - for(var name in source){ - if(name != cname && source.hasOwnProperty(name)){ - target[name] = source[name]; - } - } - if(has("bug-for-in-skips-shadowed")){ - for(var extraNames= lang._extraNames, i= extraNames.length; i;){ - name = extraNames[--i]; - if(name != cname && source.hasOwnProperty(name)){ - target[name] = source[name]; - } - } - } - } - - // implementation of safe mixin function - function safeMixin(target, source){ - var name, t; - // add props adding metadata for incoming functions skipping a constructor - for(name in source){ - t = source[name]; - if((t !== op[name] || !(name in op)) && name != cname){ - if(opts.call(t) == "[object Function]"){ - // non-trivial function method => attach its name - t.nom = name; - } - target[name] = t; - } - } - if(has("bug-for-in-skips-shadowed")){ - for(var extraNames= lang._extraNames, i= extraNames.length; i;){ - name = extraNames[--i]; - t = source[name]; - if((t !== op[name] || !(name in op)) && name != cname){ - if(opts.call(t) == "[object Function]"){ - // non-trivial function method => attach its name - t.nom = name; - } - target[name] = t; - } - } - } - return target; - } - - function extend(source){ - declare.safeMixin(this.prototype, source); - return this; - } - - // chained constructor compatible with the legacy dojo.declare() - function chainedConstructor(bases, ctorSpecial){ - return function(){ - var a = arguments, args = a, a0 = a[0], f, i, m, - l = bases.length, preArgs; - - if(!(this instanceof a.callee)){ - // not called via new, so force it - return applyNew(a); - } - - //this._inherited = {}; - // perform the shaman's rituals of the original dojo.declare() - // 1) call two types of the preamble - if(ctorSpecial && (a0 && a0.preamble || this.preamble)){ - // full blown ritual - preArgs = new Array(bases.length); - // prepare parameters - preArgs[0] = a; - for(i = 0;;){ - // process the preamble of the 1st argument - a0 = a[0]; - if(a0){ - f = a0.preamble; - if(f){ - a = f.apply(this, a) || a; - } - } - // process the preamble of this class - f = bases[i].prototype; - f = f.hasOwnProperty("preamble") && f.preamble; - if(f){ - a = f.apply(this, a) || a; - } - // one peculiarity of the preamble: - // it is called if it is not needed, - // e.g., there is no constructor to call - // let's watch for the last constructor - // (see ticket #9795) - if(++i == l){ - break; - } - preArgs[i] = a; - } - } - // 2) call all non-trivial constructors using prepared arguments - for(i = l - 1; i >= 0; --i){ - f = bases[i]; - m = f._meta; - f = m ? m.ctor : f; - if(f){ - f.apply(this, preArgs ? preArgs[i] : a); - } - } - // 3) continue the original ritual: call the postscript - f = this.postscript; - if(f){ - f.apply(this, args); - } - }; - } - - - // chained constructor compatible with the legacy dojo.declare() - function singleConstructor(ctor, ctorSpecial){ - return function(){ - var a = arguments, t = a, a0 = a[0], f; - - if(!(this instanceof a.callee)){ - // not called via new, so force it - return applyNew(a); - } - - //this._inherited = {}; - // perform the shaman's rituals of the original dojo.declare() - // 1) call two types of the preamble - if(ctorSpecial){ - // full blown ritual - if(a0){ - // process the preamble of the 1st argument - f = a0.preamble; - if(f){ - t = f.apply(this, t) || t; - } - } - f = this.preamble; - if(f){ - // process the preamble of this class - f.apply(this, t); - // one peculiarity of the preamble: - // it is called even if it is not needed, - // e.g., there is no constructor to call - // let's watch for the last constructor - // (see ticket #9795) - } - } - // 2) call a constructor - if(ctor){ - ctor.apply(this, a); - } - // 3) continue the original ritual: call the postscript - f = this.postscript; - if(f){ - f.apply(this, a); - } - }; - } - - // plain vanilla constructor (can use inherited() to call its base constructor) - function simpleConstructor(bases){ - return function(){ - var a = arguments, i = 0, f, m; - - if(!(this instanceof a.callee)){ - // not called via new, so force it - return applyNew(a); - } - - //this._inherited = {}; - // perform the shaman's rituals of the original dojo.declare() - // 1) do not call the preamble - // 2) call the top constructor (it can use this.inherited()) - for(; f = bases[i]; ++i){ // intentional assignment - m = f._meta; - f = m ? m.ctor : f; - if(f){ - f.apply(this, a); - break; - } - } - // 3) call the postscript - f = this.postscript; - if(f){ - f.apply(this, a); - } - }; - } - - function chain(name, bases, reversed){ - return function(){ - var b, m, f, i = 0, step = 1; - if(reversed){ - i = bases.length - 1; - step = -1; - } - for(; b = bases[i]; i += step){ // intentional assignment - m = b._meta; - f = (m ? m.hidden : b.prototype)[name]; - if(f){ - f.apply(this, arguments); - } - } - }; - } - - // forceNew(ctor) - // return a new object that inherits from ctor.prototype but - // without actually running ctor on the object. - function forceNew(ctor){ - // create object with correct prototype using a do-nothing - // constructor - xtor.prototype = ctor.prototype; - var t = new xtor; - xtor.prototype = null; // clean up - return t; - } - - // applyNew(args) - // just like 'new ctor()' except that the constructor and its arguments come - // from args, which must be an array or an arguments object - function applyNew(args){ - // create an object with ctor's prototype but without - // calling ctor on it. - var ctor = args.callee, t = forceNew(ctor); - // execute the real constructor on the new object - ctor.apply(t, args); - return t; - } - - function declare(className, superclass, props){ - // crack parameters - if(typeof className != "string"){ - props = superclass; - superclass = className; - className = ""; - } - props = props || {}; - - var proto, i, t, ctor, name, bases, chains, mixins = 1, parents = superclass; - - // build a prototype - if(opts.call(superclass) == "[object Array]"){ - // C3 MRO - bases = c3mro(superclass, className); - t = bases[0]; - mixins = bases.length - t; - superclass = bases[mixins]; - }else{ - bases = [0]; - if(superclass){ - if(opts.call(superclass) == "[object Function]"){ - t = superclass._meta; - bases = bases.concat(t ? t.bases : superclass); - }else{ - 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?", className); - } - } - if(superclass){ - for(i = mixins - 1;; --i){ - proto = forceNew(superclass); - if(!i){ - // stop if nothing to add (the last base) - break; - } - // mix in properties - t = bases[i]; - (t._meta ? mixOwn : mix)(proto, t.prototype); - // chain in new constructor - ctor = new Function; - ctor.superclass = superclass; - ctor.prototype = proto; - superclass = proto.constructor = ctor; - } - }else{ - proto = {}; - } - // add all properties - declare.safeMixin(proto, props); - // add constructor - t = props.constructor; - if(t !== op.constructor){ - t.nom = cname; - proto.constructor = t; - } - - // collect chains and flags - for(i = mixins - 1; i; --i){ // intentional assignment - t = bases[i]._meta; - if(t && t.chains){ - chains = mix(chains || {}, t.chains); - } - } - if(proto["-chains-"]){ - chains = mix(chains || {}, proto["-chains-"]); - } - - // build ctor - t = !chains || !chains.hasOwnProperty(cname); - bases[0] = ctor = (chains && chains.constructor === "manual") ? simpleConstructor(bases) : - (bases.length == 1 ? singleConstructor(props.constructor, t) : chainedConstructor(bases, t)); - - // add meta information to the constructor - ctor._meta = {bases: bases, hidden: props, chains: chains, - parents: parents, ctor: props.constructor}; - ctor.superclass = superclass && superclass.prototype; - ctor.extend = extend; - ctor.prototype = proto; - proto.constructor = ctor; - - // add "standard" methods to the prototype - proto.getInherited = getInherited; - proto.isInstanceOf = isInstanceOf; - proto.inherited = inheritedImpl; - proto.__inherited = inherited; - - // add name if specified - if(className){ - proto.declaredClass = className; - lang.setObject(className, ctor); - } - - // build chains and add them to the prototype - if(chains){ - for(name in chains){ - if(proto[name] && typeof chains[name] == "string" && name != cname){ - t = proto[name] = chain(name, bases, chains[name] === "after"); - t.nom = name; - } - } - } - // chained methods do not return values - // no need to chain "invisible" functions - - return ctor; // Function - } - - /*===== - dojo.declare = function(className, superclass, props){ - // summary: - // Create a feature-rich constructor from compact notation. - // className: String?: - // The optional name of the constructor (loosely, a "class") - // stored in the "declaredClass" property in the created prototype. - // It will be used as a global name for a created constructor. - // superclass: Function|Function[]: - // May be null, a Function, or an Array of Functions. This argument - // specifies a list of bases (the left-most one is the most deepest - // base). - // props: Object: - // An object whose properties are copied to the created prototype. - // Add an instance-initialization function by making it a property - // named "constructor". - // returns: - // New constructor function. - // description: - // Create a constructor using a compact notation for inheritance and - // prototype extension. - // - // Mixin ancestors provide a type of multiple inheritance. - // Prototypes of mixin ancestors are copied to the new class: - // changes to mixin prototypes will not affect classes to which - // they have been mixed in. - // - // Ancestors can be compound classes created by this version of - // dojo.declare. In complex cases all base classes are going to be - // linearized according to C3 MRO algorithm - // (see http://www.python.org/download/releases/2.3/mro/ for more - // details). - // - // "className" is cached in "declaredClass" property of the new class, - // if it was supplied. The immediate super class will be cached in - // "superclass" property of the new class. - // - // Methods in "props" will be copied and modified: "nom" property - // (the declared name of the method) will be added to all copied - // functions to help identify them for the internal machinery. Be - // very careful, while reusing methods: if you use the same - // function under different names, it can produce errors in some - // cases. - // - // It is possible to use constructors created "manually" (without - // dojo.declare) as bases. They will be called as usual during the - // creation of an instance, their methods will be chained, and even - // called by "this.inherited()". - // - // Special property "-chains-" governs how to chain methods. It is - // a dictionary, which uses method names as keys, and hint strings - // as values. If a hint string is "after", this method will be - // called after methods of its base classes. If a hint string is - // "before", this method will be called before methods of its base - // classes. - // - // If "constructor" is not mentioned in "-chains-" property, it will - // be chained using the legacy mode: using "after" chaining, - // calling preamble() method before each constructor, if available, - // and calling postscript() after all constructors were executed. - // If the hint is "after", it is chained as a regular method, but - // postscript() will be called after the chain of constructors. - // "constructor" cannot be chained "before", but it allows - // a special hint string: "manual", which means that constructors - // are not going to be chained in any way, and programmer will call - // them manually using this.inherited(). In the latter case - // postscript() will be called after the construction. - // - // All chaining hints are "inherited" from base classes and - // potentially can be overridden. Be very careful when overriding - // hints! Make sure that all chained methods can work in a proposed - // manner of chaining. - // - // Once a method was chained, it is impossible to unchain it. The - // only exception is "constructor". You don't need to define a - // method in order to supply a chaining hint. - // - // If a method is chained, it cannot use this.inherited() because - // all other methods in the hierarchy will be called automatically. - // - // Usually constructors and initializers of any kind are chained - // using "after" and destructors of any kind are chained as - // "before". Note that chaining assumes that chained methods do not - // return any value: any returned value will be discarded. - // - // example: - // | dojo.declare("my.classes.bar", my.classes.foo, { - // | // properties to be added to the class prototype - // | someValue: 2, - // | // initialization function - // | constructor: function(){ - // | this.myComplicatedObject = new ReallyComplicatedObject(); - // | }, - // | // other functions - // | someMethod: function(){ - // | doStuff(); - // | } - // | }); - // - // example: - // | var MyBase = dojo.declare(null, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var MyClass1 = dojo.declare(MyBase, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var MyClass2 = dojo.declare(MyBase, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var MyDiamond = dojo.declare([MyClass1, MyClass2], { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // - // example: - // | var F = function(){ console.log("raw constructor"); }; - // | F.prototype.method = function(){ - // | console.log("raw method"); - // | }; - // | var A = dojo.declare(F, { - // | constructor: function(){ - // | console.log("A.constructor"); - // | }, - // | method: function(){ - // | console.log("before calling F.method..."); - // | this.inherited(arguments); - // | console.log("...back in A"); - // | } - // | }); - // | new A().method(); - // | // will print: - // | // raw constructor - // | // A.constructor - // | // before calling F.method... - // | // raw method - // | // ...back in A - // - // example: - // | var A = dojo.declare(null, { - // | "-chains-": { - // | destroy: "before" - // | } - // | }); - // | var B = dojo.declare(A, { - // | constructor: function(){ - // | console.log("B.constructor"); - // | }, - // | destroy: function(){ - // | console.log("B.destroy"); - // | } - // | }); - // | var C = dojo.declare(B, { - // | constructor: function(){ - // | console.log("C.constructor"); - // | }, - // | destroy: function(){ - // | console.log("C.destroy"); - // | } - // | }); - // | new C().destroy(); - // | // prints: - // | // B.constructor - // | // C.constructor - // | // C.destroy - // | // B.destroy - // - // example: - // | var A = dojo.declare(null, { - // | "-chains-": { - // | constructor: "manual" - // | } - // | }); - // | var B = dojo.declare(A, { - // | constructor: function(){ - // | // ... - // | // call the base constructor with new parameters - // | this.inherited(arguments, [1, 2, 3]); - // | // ... - // | } - // | }); - // - // example: - // | var A = dojo.declare(null, { - // | "-chains-": { - // | m1: "before" - // | }, - // | m1: function(){ - // | console.log("A.m1"); - // | }, - // | m2: function(){ - // | console.log("A.m2"); - // | } - // | }); - // | var B = dojo.declare(A, { - // | "-chains-": { - // | m2: "after" - // | }, - // | m1: function(){ - // | console.log("B.m1"); - // | }, - // | m2: function(){ - // | console.log("B.m2"); - // | } - // | }); - // | var x = new B(); - // | x.m1(); - // | // prints: - // | // B.m1 - // | // A.m1 - // | x.m2(); - // | // prints: - // | // A.m2 - // | // B.m2 - return new Function(); // Function - }; - =====*/ - - /*===== - dojo.safeMixin = function(target, source){ - // summary: - // Mix in properties skipping a constructor and decorating functions - // like it is done by dojo.declare. - // target: Object - // Target object to accept new properties. - // source: Object - // Source object for new properties. - // description: - // This function is used to mix in properties like lang.mixin does, - // but it skips a constructor property and decorates functions like - // dojo.declare does. - // - // It is meant to be used with classes and objects produced with - // dojo.declare. Functions mixed in with dojo.safeMixin can use - // this.inherited() like normal methods. - // - // This function is used to implement extend() method of a constructor - // produced with dojo.declare(). - // - // example: - // | var A = dojo.declare(null, { - // | m1: function(){ - // | console.log("A.m1"); - // | }, - // | m2: function(){ - // | console.log("A.m2"); - // | } - // | }); - // | var B = dojo.declare(A, { - // | m1: function(){ - // | this.inherited(arguments); - // | console.log("B.m1"); - // | } - // | }); - // | B.extend({ - // | m2: function(){ - // | this.inherited(arguments); - // | console.log("B.m2"); - // | } - // | }); - // | var x = new B(); - // | dojo.safeMixin(x, { - // | m1: function(){ - // | this.inherited(arguments); - // | console.log("X.m1"); - // | }, - // | m2: function(){ - // | this.inherited(arguments); - // | console.log("X.m2"); - // | } - // | }); - // | x.m2(); - // | // prints: - // | // A.m1 - // | // B.m1 - // | // X.m1 - }; - =====*/ - - /*===== - Object.inherited = function(name, args, newArgs){ - // summary: - // Calls a super method. - // name: String? - // The optional method name. Should be the same as the caller's - // name. Usually "name" is specified in complex dynamic cases, when - // the calling method was dynamically added, undecorated by - // dojo.declare, and it cannot be determined. - // args: Arguments - // The caller supply this argument, which should be the original - // "arguments". - // newArgs: Object? - // If "true", the found function will be returned without - // executing it. - // If Array, it will be used to call a super method. Otherwise - // "args" will be used. - // returns: - // Whatever is returned by a super method, or a super method itself, - // if "true" was specified as newArgs. - // description: - // This method is used inside method of classes produced with - // dojo.declare to call a super method (next in the chain). It is - // used for manually controlled chaining. Consider using the regular - // chaining, because it is faster. Use "this.inherited()" only in - // complex cases. - // - // This method cannot me called from automatically chained - // constructors including the case of a special (legacy) - // constructor chaining. It cannot be called from chained methods. - // - // If "this.inherited()" cannot find the next-in-chain method, it - // does nothing and returns "undefined". The last method in chain - // can be a default method implemented in Object, which will be - // called last. - // - // If "name" is specified, it is assumed that the method that - // received "args" is the parent method for this call. It is looked - // up in the chain list and if it is found the next-in-chain method - // is called. If it is not found, the first-in-chain method is - // called. - // - // If "name" is not specified, it will be derived from the calling - // method (using a methoid property "nom"). - // - // example: - // | var B = dojo.declare(A, { - // | method1: function(a, b, c){ - // | this.inherited(arguments); - // | }, - // | method2: function(a, b){ - // | return this.inherited(arguments, [a + b]); - // | } - // | }); - // | // next method is not in the chain list because it is added - // | // manually after the class was created. - // | B.prototype.method3 = function(){ - // | console.log("This is a dynamically-added method."); - // | this.inherited("method3", arguments); - // | }; - // example: - // | var B = dojo.declare(A, { - // | method: function(a, b){ - // | var super = this.inherited(arguments, true); - // | // ... - // | if(!super){ - // | console.log("there is no super method"); - // | return 0; - // | } - // | return super.apply(this, arguments); - // | } - // | }); - return {}; // Object - } - =====*/ - - /*===== - Object.getInherited = function(name, args){ - // summary: - // Returns a super method. - // name: String? - // The optional method name. Should be the same as the caller's - // name. Usually "name" is specified in complex dynamic cases, when - // the calling method was dynamically added, undecorated by - // dojo.declare, and it cannot be determined. - // args: Arguments - // The caller supply this argument, which should be the original - // "arguments". - // returns: - // Returns a super method (Function) or "undefined". - // description: - // This method is a convenience method for "this.inherited()". - // It uses the same algorithm but instead of executing a super - // method, it returns it, or "undefined" if not found. - // - // example: - // | var B = dojo.declare(A, { - // | method: function(a, b){ - // | var super = this.getInherited(arguments); - // | // ... - // | if(!super){ - // | console.log("there is no super method"); - // | return 0; - // | } - // | return super.apply(this, arguments); - // | } - // | }); - return {}; // Object - } - =====*/ - - /*===== - Object.isInstanceOf = function(cls){ - // summary: - // Checks the inheritance chain to see if it is inherited from this - // class. - // cls: Function - // Class constructor. - // returns: - // "true", if this object is inherited from this class, "false" - // otherwise. - // description: - // This method is used with instances of classes produced with - // dojo.declare to determine of they support a certain interface or - // not. It models "instanceof" operator. - // - // example: - // | var A = dojo.declare(null, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var B = dojo.declare(null, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var C = dojo.declare([A, B], { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | var D = dojo.declare(A, { - // | // constructor, properties, and methods go here - // | // ... - // | }); - // | - // | var a = new A(), b = new B(), c = new C(), d = new D(); - // | - // | console.log(a.isInstanceOf(A)); // true - // | console.log(b.isInstanceOf(A)); // false - // | console.log(c.isInstanceOf(A)); // true - // | console.log(d.isInstanceOf(A)); // true - // | - // | console.log(a.isInstanceOf(B)); // false - // | console.log(b.isInstanceOf(B)); // true - // | console.log(c.isInstanceOf(B)); // true - // | console.log(d.isInstanceOf(B)); // false - // | - // | console.log(a.isInstanceOf(C)); // false - // | console.log(b.isInstanceOf(C)); // false - // | console.log(c.isInstanceOf(C)); // true - // | console.log(d.isInstanceOf(C)); // false - // | - // | console.log(a.isInstanceOf(D)); // false - // | console.log(b.isInstanceOf(D)); // false - // | console.log(c.isInstanceOf(D)); // false - // | console.log(d.isInstanceOf(D)); // true - return {}; // Object - } - =====*/ - - /*===== - Object.extend = function(source){ - // summary: - // Adds all properties and methods of source to constructor's - // prototype, making them available to all instances created with - // constructor. This method is specific to constructors created with - // dojo.declare. - // source: Object - // Source object which properties are going to be copied to the - // constructor's prototype. - // description: - // Adds source properties to the constructor's prototype. It can - // override existing properties. - // - // This method is similar to dojo.extend function, but it is specific - // to constructors produced by dojo.declare. It is implemented - // using dojo.safeMixin, and it skips a constructor property, - // and properly decorates copied functions. - // - // example: - // | var A = dojo.declare(null, { - // | m1: function(){}, - // | s1: "Popokatepetl" - // | }); - // | A.extend({ - // | m1: function(){}, - // | m2: function(){}, - // | f1: true, - // | d1: 42 - // | }); - }; - =====*/ - - dojo.safeMixin = declare.safeMixin = safeMixin; - dojo.declare = declare; - - return declare; -}); - -}, -'dojo/dom':function(){ -define(["./_base/sniff", "./_base/lang", "./_base/window"], - function(has, lang, win){ - // module: - // dojo/dom - // summary: - // This module defines the core dojo DOM API. - - // FIXME: need to add unit tests for all the semi-public methods - - try{ - document.execCommand("BackgroundImageCache", false, true); - }catch(e){ - // sane browsers don't have cache "issues" - } - - // ============================= - // DOM Functions - // ============================= - - /*===== - dojo.byId = function(id, doc){ - // summary: - // Returns DOM node with matching `id` attribute or `null` - // if not found. If `id` is a DomNode, this function is a no-op. - // - // id: String|DOMNode - // A string to match an HTML id attribute or a reference to a DOM Node - // - // doc: Document? - // Document to work in. Defaults to the current value of - // dojo.doc. Can be used to retrieve - // node references from other documents. - // - // example: - // Look up a node by ID: - // | var n = dojo.byId("foo"); - // - // example: - // Check if a node exists, and use it. - // | var n = dojo.byId("bar"); - // | if(n){ doStuff() ... } - // - // example: - // Allow string or DomNode references to be passed to a custom function: - // | var foo = function(nodeOrId){ - // | nodeOrId = dojo.byId(nodeOrId); - // | // ... more stuff - // | } - =====*/ - - /*===== - dojo.isDescendant = function(node, ancestor){ - // summary: - // Returns true if node is a descendant of ancestor - // node: DOMNode|String - // string id or node reference to test - // ancestor: DOMNode|String - // string id or node reference of potential parent to test against - // - // example: - // Test is node id="bar" is a descendant of node id="foo" - // | if(dojo.isDescendant("bar", "foo")){ ... } - }; - =====*/ - - // TODO: do we need this function in the base? - - /*===== - dojo.setSelectable = function(node, selectable){ - // summary: - // Enable or disable selection on a node - // node: DOMNode|String - // id or reference to node - // selectable: Boolean - // state to put the node in. false indicates unselectable, true - // allows selection. - // example: - // Make the node id="bar" unselectable - // | dojo.setSelectable("bar"); - // example: - // Make the node id="bar" selectable - // | dojo.setSelectable("bar", true); - }; - =====*/ - - var dom = {}; // the result object - - if(has("ie")){ - dom.byId = function(id, doc){ - if(typeof id != "string"){ - return id; - } - var _d = doc || win.doc, te = id && _d.getElementById(id); - // 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; - }else{ - var eles = _d.all[id]; - if(!eles || eles.nodeName){ - eles = [eles]; - } - // if more than 1, choose first with the correct id - var i = 0; - while((te = eles[i++])){ - if((te.attributes && te.attributes.id && te.attributes.id.value == id) || te.id == id){ - return te; - } - } - } - }; - }else{ - dom.byId = function(id, doc){ - // inline'd type check. - // be sure to return null per documentation, to match IE branch. - return ((typeof id == "string") ? (doc || win.doc).getElementById(id) : id) || null; // DOMNode - }; - } - /*===== - }; - =====*/ - - dom.isDescendant = function(/*DOMNode|String*/node, /*DOMNode|String*/ancestor){ - try{ - node = dom.byId(node); - ancestor = dom.byId(ancestor); - while(node){ - if(node == ancestor){ - return true; // Boolean - } - node = node.parentNode; - } - }catch(e){ /* squelch, return false */ } - return false; // Boolean - }; - - // TODO: do we need this function in the base? - - dom.setSelectable = function(/*DOMNode|String*/node, /*Boolean*/selectable){ - node = dom.byId(node); - if(has("mozilla")){ - node.style.MozUserSelect = selectable ? "" : "none"; - }else if(has("khtml") || has("webkit")){ - node.style.KhtmlUserSelect = selectable ? "auto" : "none"; - }else if(has("ie")){ - var v = (node.unselectable = selectable ? "" : "on"), - cs = node.getElementsByTagName("*"), i = 0, l = cs.length; - for(; i < l; ++i){ - cs.item(i).unselectable = v; - } - } - //FIXME: else? Opera? - }; - - return dom; -}); - -}, -'dojo/_base/browser':function(){ -if(require.has){ - require.has.add("config-selectorEngine", "acme"); -} -define("dojo/_base/browser", [ - "../ready", - "./kernel", - "./connect", // until we decide if connect is going back into non-browser environments - "./unload", - "./window", - "./event", - "./html", - "./NodeList", - "../query", - "./xhr", - "./fx"], function(dojo) { - // module: - // dojo/_base/browser - // summary: - // This module causes the browser-only base modules to be loaded. - return dojo; -}); - -}, -'dojo/dom-style':function(){ -define(["./_base/sniff", "./dom"], function(has, dom){ - // module: - // dojo/dom-style - // summary: - // This module defines the core dojo DOM style API. - - // ============================= - // Style Functions - // ============================= - - // getComputedStyle drives most of the style code. - // Wherever possible, reuse the returned object. - // - // API functions below that need to access computed styles accept an - // optional computedStyle parameter. - // If this parameter is omitted, the functions will call getComputedStyle themselves. - // This way, calling code can access computedStyle once, and then pass the reference to - // multiple API functions. - - /*===== - dojo.getComputedStyle = function(node){ - // summary: - // Returns a "computed style" object. - // - // description: - // Gets a "computed style" object which can be used to gather - // information about the current state of the rendered node. - // - // Note that this may behave differently on different browsers. - // Values may have different formats and value encodings across - // browsers. - // - // Note also that this method is expensive. Wherever possible, - // reuse the returned object. - // - // Use the dojo.style() method for more consistent (pixelized) - // return values. - // - // node: DOMNode - // A reference to a DOM node. Does NOT support taking an - // ID string for speed reasons. - // example: - // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth; - // - // example: - // Reusing the returned object, avoiding multiple lookups: - // | var cs = dojo.getComputedStyle(dojo.byId("someNode")); - // | var w = cs.width, h = cs.height; - return; // CSS2Properties - } - =====*/ - - /*===== - dojo.toPixelValue = function(node, value){ - // summary: - // converts style value to pixels on IE or return a numeric value. - // node: DOMNode - // value: String - // returns: Number - }; - =====*/ - - /*===== - dojo._toPixelValue = function(node, value){ - // summary: - // Existing alias for `dojo._toPixelValue`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getStyle = function(node, name){ - // summary: - // Accesses styles on a node. - // description: - // Getting the style value uses the computed style for the node, so the value - // will be a calculated value, not just the immediate node.style value. - // Also when getting values, use specific style names, - // like "borderBottomWidth" instead of "border" since compound values like - // "border" are not necessarily reflected as expected. - // If you want to get node dimensions, use `dojo.marginBox()`, - // `dojo.contentBox()` or `dojo.position()`. - // node: DOMNode|String - // id or reference to node to get style for - // name: String? - // the style property to get - // example: - // Passing only an ID or node returns the computed style object of - // the node: - // | dojo.getStyle("thinger"); - // example: - // Passing a node and a style property returns the current - // normalized, computed value for that property: - // | dojo.getStyle("thinger", "opacity"); // 1 by default - }; - =====*/ - - /*===== - dojo.setStyle = function(node, name, value){ - // summary: - // Sets styles on a node. - // node: DOMNode|String - // id or reference to node to set style for - // name: String|Object - // the style property to set in DOM-accessor format - // ("borderWidth", not "border-width") or an object with key/value - // pairs suitable for setting each property. - // value: String? - // If passed, sets value on the node for style, handling - // cross-browser concerns. When setting a pixel value, - // be sure to include "px" in the value. For instance, top: "200px". - // Otherwise, in some cases, some browsers will not apply the style. - // - // example: - // Passing a node, a style property, and a value changes the - // current display of the node and returns the new computed value - // | dojo.setStyle("thinger", "opacity", 0.5); // == 0.5 - // - // example: - // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: - // | dojo.setStyle("thinger", { - // | "opacity": 0.5, - // | "border": "3px solid black", - // | "height": "300px" - // | }); - // - // example: - // When the CSS style property is hyphenated, the JavaScript property is camelCased. - // font-size becomes fontSize, and so on. - // | dojo.setStyle("thinger",{ - // | fontSize:"14pt", - // | letterSpacing:"1.2em" - // | }); - // - // example: - // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling - // dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()` - // | dojo.query(".someClassName").style("visibility","hidden"); - // | // or - // | dojo.query("#baz > div").style({ - // | opacity:0.75, - // | fontSize:"13pt" - // | }); - }; - =====*/ - - // Although we normally eschew argument validation at this - // level, here we test argument 'node' for (duck)type, - // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' - // it is frequently sent to this function even - // though it is not Element. - var getComputedStyle, style = {}; - if(has("webkit")){ - getComputedStyle = function(/*DomNode*/node){ - var s; - if(node.nodeType == 1){ - var dv = node.ownerDocument.defaultView; - s = dv.getComputedStyle(node, null); - if(!s && node.style){ - node.style.display = ""; - s = dv.getComputedStyle(node, null); - } - } - return s || {}; - }; - }else if(has("ie") && (has("ie") < 9 || has("quirks"))){ - getComputedStyle = function(node){ - // IE (as of 7) doesn't expose Element like sane browsers - return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {}; - }; - }else{ - getComputedStyle = function(node){ - return node.nodeType == 1 ? - node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; - }; - } - style.getComputedStyle = getComputedStyle; - - var toPixel; - if(!has("ie")){ - toPixel = function(element, value){ - // style values can be floats, client code may want - // to round for integer pixels. - return parseFloat(value) || 0; - }; - }else{ - toPixel = function(element, avalue){ - if(!avalue){ return 0; } - // on IE7, medium is usually 4 pixels - if(avalue == "medium"){ return 4; } - // style values can be floats, client code may - // want to round this value for integer pixels. - if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); } - var s = element.style, rs = element.runtimeStyle, cs = element.currentStyle, - sLeft = s.left, rsLeft = rs.left; - rs.left = cs.left; - try{ - // 'avalue' may be incompatible with style.left, which can cause IE to throw - // this has been observed for border widths using "thin", "medium", "thick" constants - // those particular constants could be trapped by a lookup - // but perhaps there are more - s.left = avalue; - avalue = s.pixelLeft; - }catch(e){ - avalue = 0; - } - s.left = sLeft; - rs.left = rsLeft; - return avalue; - } - } - style.toPixelValue = toPixel; - - // FIXME: there opacity quirks on FF that we haven't ported over. Hrm. - - var astr = "DXImageTransform.Microsoft.Alpha"; - var af = function(n, f){ - try{ - return n.filters.item(astr); - }catch(e){ - return f ? {} : null; - } - }; - - var _getOpacity = - has("ie") < 9 || (has("ie") && has("quirks")) ? function(node){ - try{ - return af(node).Opacity / 100; // Number - }catch(e){ - return 1; // Number - } - } : - function(node){ - return getComputedStyle(node).opacity; - }; - - var _setOpacity = - has("ie") < 9 || (has("ie") && has("quirks")) ? function(/*DomNode*/node, /*Number*/opacity){ - var ov = opacity * 100, opaque = opacity == 1; - node.style.zoom = opaque ? "" : 1; - - if(!af(node)){ - if(opaque){ - return opacity; - } - node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")"; - }else{ - af(node, 1).Opacity = ov; - } - - // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661), - //but still update the opacity value so we can get a correct reading if it is read later. - af(node, 1).Enabled = !opaque; - - if(node.tagName.toLowerCase() == "tr"){ - for(var td = node.firstChild; td; td = td.nextSibling){ - if(td.tagName.toLowerCase() == "td"){ - _setOpacity(td, opacity); - } - } - } - return opacity; - } : - function(node, opacity){ - return node.style.opacity = opacity; - }; - - var _pixelNamesCache = { - left: true, top: true - }; - var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border - function _toStyleValue(node, type, value){ - //TODO: should we really be doing string case conversion here? Should we cache it? Need to profile! - type = type.toLowerCase(); - if(has("ie")){ - if(value == "auto"){ - if(type == "height"){ return node.offsetHeight; } - if(type == "width"){ return node.offsetWidth; } - } - if(type == "fontweight"){ - switch(value){ - case 700: return "bold"; - case 400: - default: return "normal"; - } - } - } - if(!(type in _pixelNamesCache)){ - _pixelNamesCache[type] = _pixelRegExp.test(type); - } - return _pixelNamesCache[type] ? toPixel(node, value) : value; - } - - var _floatStyle = has("ie") ? "styleFloat" : "cssFloat", - _floatAliases = {"cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle}; - - // public API - - style.get = function getStyle(/*DOMNode|String*/ node, /*String?*/ name){ - var n = dom.byId(node), l = arguments.length, op = (name == "opacity"); - if(l == 2 && op){ - return _getOpacity(n); - } - name = _floatAliases[name] || name; - var s = style.getComputedStyle(n); - return (l == 1) ? s : _toStyleValue(n, name, s[name] || n.style[name]); /* CSS2Properties||String||Number */ - }; - - style.set = function setStyle(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){ - var n = dom.byId(node), l = arguments.length, op = (name == "opacity"); - name = _floatAliases[name] || name; - if(l == 3){ - return op ? _setOpacity(n, value) : n.style[name] = value; // Number - } - for(var x in name){ - style.set(node, x, name[x]); - } - return style.getComputedStyle(n); - }; - - return style; -}); - -}, -'dojo/dom-geometry':function(){ -define(["./_base/sniff", "./_base/window","./dom", "./dom-style"], - function(has, win, dom, style){ - // module: - // dojo/dom-geometry - // summary: - // This module defines the core dojo DOM geometry API. - - var geom = {}; // the result object - - // Box functions will assume this model. - // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. - // Can be set to change behavior of box setters. - - // can be either: - // "border-box" - // "content-box" (default) - geom.boxModel = "content-box"; - - // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit - // that overrides existing code to include per-node box sensitivity. - - // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. - // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. - // IIRC, earlier versions of Opera did in fact use border-box. - // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. - - if(has("ie") /*|| has("opera")*/){ - // client code may have to adjust if compatMode varies across iframes - geom.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; - } - - // ============================= - // Box Functions - // ============================= - - /*===== - dojo.getPadExtents = function(node, computedStyle){ - // summary: - // Returns object with special values specifically useful for node - // fitting. - // description: - // Returns an object with `w`, `h`, `l`, `t` properties: - // | l/t/r/b = left/top/right/bottom padding (respectively) - // | w = the total of the left and right padding - // | h = the total of the top and bottom padding - // If 'node' has position, l/t forms the origin for child nodes. - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - - - }; - =====*/ - - /*===== - dojo._getPadExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getPadExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getBorderExtents = function(node, computedStyle){ - // summary: - // returns an object with properties useful for noting the border - // dimensions. - // description: - // * l/t/r/b = the sum of left/top/right/bottom border (respectively) - // * w = the sum of the left and right border - // * h = the sum of the top and bottom border - // - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - - - }; - =====*/ - - /*===== - dojo._getBorderExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getBorderExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getPadBorderExtents = function(node, computedStyle){ - // summary: - // Returns object with properties useful for box fitting with - // regards to padding. - // description: - // * l/t/r/b = the sum of left/top/right/bottom padding and left/top/right/bottom border (respectively) - // * w = the sum of the left and right padding and border - // * h = the sum of the top and bottom padding and border - // - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - - - }; - =====*/ - - /*===== - dojo._getPadBorderExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getPadBorderExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getMarginExtents = function(node, computedStyle){ - // summary: - // returns object with properties useful for box fitting with - // regards to box margins (i.e., the outer-box). - // - // * l/t = marginLeft, marginTop, respectively - // * w = total width, margin inclusive - // * h = total height, margin inclusive - // - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getMarginExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getMarginExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getMarginSize = function(node, computedStyle){ - // summary: - // returns an object that encodes the width and height of - // the node's margin box - // node: DOMNode|String - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getMarginSize = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getMarginSize`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getMarginBox = function(node, computedStyle){ - // summary: - // returns an object that encodes the width, height, left and top - // positions of the node's margin box. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getMarginBox = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getMarginBox`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.setMarginBox = function(node, box, computedStyle){ - // summary: - // sets the size of the node's margin box and placement - // (left/top), irrespective of box model. Think of it as a - // passthrough to setBox that handles box-model vagaries for - // you. - // node: DOMNode - // box: Object - // hash with optional "l", "t", "w", and "h" properties for "left", "right", "width", and "height" - // respectively. All specified properties should have numeric values in whole pixels. - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo.getContentBox = function(node, computedStyle){ - // summary: - // Returns an object that encodes the width, height, left and top - // positions of the node's content box, irrespective of the - // current box model. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getContentBox = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getContentBox`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.setContentSize = function(node, box, computedStyle){ - // summary: - // Sets the size of the node's contents, irrespective of margins, - // padding, or borders. - // node: DOMNode - // box: Object - // hash with optional "w", and "h" properties for "width", and "height" - // respectively. All specified properties should have numeric values in whole pixels. - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo.isBodyLtr = function(){ - // summary: - // Returns true if the current language is left-to-right, and false otherwise. - // returns: Boolean - }; - =====*/ - - /*===== - dojo._isBodyLtr = function(){ - // summary: - // Existing alias for `dojo.isBodyLtr`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.docScroll = function(){ - // summary: - // Returns an object with {node, x, y} with corresponding offsets. - // returns: Object - }; - =====*/ - - /*===== - dojo._docScroll = function(){ - // summary: - // Existing alias for `dojo.docScroll`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getIeDocumentElementOffset = function(){ - // summary: - // returns the offset in x and y from the document body to the - // visual edge of the page for IE - // description: - // The following values in IE contain an offset: - // | event.clientX - // | event.clientY - // | node.getBoundingClientRect().left - // | node.getBoundingClientRect().top - // But other position related values do not contain this offset, - // such as node.offsetLeft, node.offsetTop, node.style.left and - // node.style.top. The offset is always (2, 2) in LTR direction. - // When the body is in RTL direction, the offset counts the width - // of left scroll bar's width. This function computes the actual - // offset. - }; - =====*/ - - /*===== - dojo._getIeDocumentElementOffset = function(){ - // summary: - // Existing alias for `dojo.getIeDocumentElementOffset`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.fixIeBiDiScrollLeft = function(scrollLeft){ - // summary: - // 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. - // scrollLeft: NUmber - // returns: Number - }; - =====*/ - - /*===== - dojo._fixIeBiDiScrollLeft = function(scrollLeft){ - // summary: - // Existing alias for `dojo.fixIeBiDiScrollLeft`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.position = function(node, includeScroll){ - // summary: - // Gets the position and size of the passed element relative to - // the viewport (if includeScroll==false), or relative to the - // document root (if includeScroll==true). - // - // description: - // Returns an object of the form: - // { x: 100, y: 300, w: 20, h: 15 } - // If includeScroll==true, the x and y values will include any - // document offsets that may affect the position relative to the - // viewport. - // Uses the border-box model (inclusive of border and padding but - // not margin). Does not act as a setter. - // node: DOMNode|String - // includeScroll: Boolean? - // returns: Object - }; - =====*/ - - geom.getPadExtents = function getPadExtents(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue, - l = px(node, s.paddingLeft), t = px(node, s.paddingTop), r = px(node, s.paddingRight), b = px(node, s.paddingBottom); - return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; - }; - - var none = "none"; - - geom.getBorderExtents = function getBorderExtents(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var px = style.toPixelValue, s = computedStyle || style.getComputedStyle(node), - l = s.borderLeftStyle != none ? px(node, s.borderLeftWidth) : 0, - t = s.borderTopStyle != none ? px(node, s.borderTopWidth) : 0, - r = s.borderRightStyle != none ? px(node, s.borderRightWidth) : 0, - b = s.borderBottomStyle != none ? px(node, s.borderBottomWidth) : 0; - return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; - }; - - geom.getPadBorderExtents = function getPadBorderExtents(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), - p = geom.getPadExtents(node, s), - b = geom.getBorderExtents(node, s); - return { - l: p.l + b.l, - t: p.t + b.t, - r: p.r + b.r, - b: p.b + b.b, - w: p.w + b.w, - h: p.h + b.h - }; - }; - - geom.getMarginExtents = function getMarginExtents(node, computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue, - l = px(node, s.marginLeft), t = px(node, s.marginTop), r = px(node, s.marginRight), b = px(node, s.marginBottom); - if(has("webkit") && (s.position != "absolute")){ - // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge - // of our offsetParent. - // What we are looking for is the actual margin value as - // determined by CSS. - // Hack solution is to assume left/right margins are the same. - r = l; - } - return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; - }; - - // Box getters work in any box context because offsetWidth/clientWidth - // are invariant wrt box context - // - // They do *not* work for display: inline objects that have padding styles - // because the user agent ignores padding (it's bogus styling in any case) - // - // Be careful with IMGs because they are inline or block depending on - // browser and browser mode. - - // Although it would be easier to read, there are not separate versions of - // _getMarginBox for each browser because: - // 1. the branching is not expensive - // 2. factoring the shared code wastes cycles (function call overhead) - // 3. duplicating the shared code wastes bytes - - geom.getMarginBox = function getMarginBox(/*DomNode*/node, /*Object*/computedStyle){ - // summary: - // returns an object that encodes the width, height, left and top - // positions of the node's margin box. - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), me = geom.getMarginExtents(node, s), - l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode, px = style.toPixelValue, pcs; - if(has("mozilla")){ - // Mozilla: - // If offsetParent has a computed overflow != visible, the offsetLeft is decreased - // by the parent's border. - // We don't want to compute the parent's style, so instead we examine node's - // computed left/top which is more stable. - var sl = parseFloat(s.left), st = parseFloat(s.top); - if(!isNaN(sl) && !isNaN(st)){ - l = sl, t = st; - }else{ - // If child's computed left/top are not parseable as a number (e.g. "auto"), we - // have no choice but to examine the parent's computed style. - if(p && p.style){ - pcs = style.getComputedStyle(p); - if(pcs.overflow != "visible"){ - l += pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0; - t += pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0; - } - } - } - }else if(has("opera") || (has("ie") == 8 && !has("quirks"))){ - // On Opera and IE 8, offsetLeft/Top includes the parent's border - if(p){ - pcs = style.getComputedStyle(p); - l -= pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0; - t -= pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0; - } - } - return {l: l, t: t, w: node.offsetWidth + me.w, h: node.offsetHeight + me.h}; - }; - - geom.getContentBox = function getContentBox(node, computedStyle){ - // clientWidth/Height are important since the automatically account for scrollbars - // fallback to offsetWidth/Height for special cases (see #3378) - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), w = node.clientWidth, h, - pe = geom.getPadExtents(node, s), be = geom.getBorderExtents(node, s); - if(!w){ - w = node.offsetWidth; - h = node.offsetHeight; - }else{ - h = node.clientHeight; - be.w = be.h = 0; - } - // On Opera, offsetLeft includes the parent's border - if(has("opera")){ - pe.l += be.l; - pe.t += be.t; - } - return {l: pe.l, t: pe.t, w: w - pe.w - be.w, h: h - pe.h - be.h}; - }; - - // Box setters depend on box context because interpretation of width/height styles - // vary wrt box context. - // - // The value of dojo.boxModel is used to determine box context. - // dojo.boxModel can be set directly to change behavior. - // - // Beware of display: inline objects that have padding styles - // because the user agent ignores padding (it's a bogus setup anyway) - // - // Be careful with IMGs because they are inline or block depending on - // browser and browser mode. - // - // Elements other than DIV may have special quirks, like built-in - // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear - // at all in computedStyle on Mozilla. - - function setBox(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ - // summary: - // sets width/height/left/top in the current (native) box-model - // dimensions. Uses the unit passed in u. - // node: - // DOM Node reference. Id string not supported for performance - // reasons. - // l: - // left offset from parent. - // t: - // top offset from parent. - // w: - // width in current box model. - // h: - // width in current box model. - // u: - // unit measure to use for other measures. Defaults to "px". - u = u || "px"; - var s = node.style; - if(!isNaN(l)){ - s.left = l + u; - } - if(!isNaN(t)){ - s.top = t + u; - } - if(w >= 0){ - s.width = w + u; - } - if(h >= 0){ - s.height = h + u; - } - } - - function isButtonTag(/*DomNode*/node){ - // summary: - // True if the node is BUTTON or INPUT.type="button". - return node.tagName.toLowerCase() == "button" || - node.tagName.toLowerCase() == "input" && (node.getAttribute("type") || "").toLowerCase() == "button"; // boolean - } - - function usesBorderBox(/*DomNode*/node){ - // summary: - // True if the node uses border-box layout. - - // We could test the computed style of node to see if a particular box - // has been specified, but there are details and we choose not to bother. - - // TABLE and BUTTON (and INPUT type=button) are always border-box by default. - // If you have assigned a different box to either one via CSS then - // box functions will break. - - return geom.boxModel == "border-box" || node.tagName.toLowerCase() == "table" || isButtonTag(node); // boolean - } - - geom.setContentSize = function setContentSize(/*DomNode*/node, /*Object*/box, /*Object*/computedStyle){ - // summary: - // Sets the size of the node's contents, irrespective of margins, - // padding, or borders. - - node = dom.byId(node); - var w = box.w, h = box.h; - if(usesBorderBox(node)){ - var pb = geom.getPadBorderExtents(node, computedStyle); - if(w >= 0){ - w += pb.w; - } - if(h >= 0){ - h += pb.h; - } - } - setBox(node, NaN, NaN, w, h); - }; - - var nilExtents = {l: 0, t: 0, w: 0, h: 0}; - - geom.setMarginBox = function setMarginBox(/*DomNode*/node, /*Object*/box, /*Object*/computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), w = box.w, h = box.h, - // Some elements have special padding, margin, and box-model settings. - // To use box functions you may need to set padding, margin explicitly. - // Controlling box-model is harder, in a pinch you might set dojo.boxModel. - pb = usesBorderBox(node) ? nilExtents : geom.getPadBorderExtents(node, s), - mb = geom.getMarginExtents(node, s); - if(has("webkit")){ - // on Safari (3.1.2), button nodes with no explicit size have a default margin - // setting an explicit size eliminates the margin. - // We have to swizzle the width to get correct margin reading. - if(isButtonTag(node)){ - var ns = node.style; - if(w >= 0 && !ns.width){ - ns.width = "4px"; - } - if(h >= 0 && !ns.height){ - ns.height = "4px"; - } - } - } - if(w >= 0){ - w = Math.max(w - pb.w - mb.w, 0); - } - if(h >= 0){ - h = Math.max(h - pb.h - mb.h, 0); - } - setBox(node, box.l, box.t, w, h); - }; - - // ============================= - // Positioning - // ============================= - - geom.isBodyLtr = function isBodyLtr(){ - return (win.body().dir || win.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean - }; - - geom.docScroll = function docScroll(){ - var node = win.doc.parentWindow || win.doc.defaultView; // use UI window, not dojo.global window - return "pageXOffset" in node ? {x: node.pageXOffset, y: node.pageYOffset } : - (node = has("quirks") ? win.body() : win.doc.documentElement, - {x: geom.fixIeBiDiScrollLeft(node.scrollLeft || 0), y: node.scrollTop || 0 }); - }; - - geom.getIeDocumentElementOffset = function getIeDocumentElementOffset(){ - //NOTE: assumes we're being called in an IE browser - - var de = win.doc.documentElement; // only deal with HTML element here, position() handles body/quirks - - if(has("ie") < 8){ - var r = de.getBoundingClientRect(), // works well for IE6+ - l = r.left, t = r.top; - if(has("ie") < 7){ - l += de.clientLeft; // scrollbar size in strict/RTL, or, - t += de.clientTop; // HTML border size in strict - } - return { - x: l < 0 ? 0 : l, // FRAME element border size can lead to inaccurate negative values - y: t < 0 ? 0 : t - }; - }else{ - return { - x: 0, - y: 0 - }; - } - }; - - geom.fixIeBiDiScrollLeft = function fixIeBiDiScrollLeft(/*Integer*/ scrollLeft){ - // 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 ie = has("ie"); - if(ie && !geom.isBodyLtr()){ - var qk = has("quirks"), - de = qk ? win.body() : win.doc.documentElement; - if(ie == 6 && !qk && win.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 - }; - - geom.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ - node = dom.byId(node); - var db = win.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(has("ie")){ - // On IE there's a 2px offset that we need to adjust for, see dojo.getIeDocumentElementOffset() - var offset = geom.getIeDocumentElementOffset(); - - // fixes the position in IE, quirks mode - ret.x -= offset.x + (has("quirks") ? db.clientLeft + db.offsetLeft : 0); - ret.y -= offset.y + (has("quirks") ? db.clientTop + db.offsetTop : 0); - }else if(has("ff") == 3){ - // In FF3 you have to subtract the document element margins. - // Fixed in FF3.5 though. - var cs = style.getComputedStyle(dh), px = style.toPixelValue; - ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); - ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); - } - // 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 - if(includeScroll){ - var scroll = geom.docScroll(); - ret.x += scroll.x; - ret.y += scroll.y; - } - - return ret; // Object - }; - - // random "private" functions wildly used throughout the toolkit - - geom.getMarginSize = function getMarginSize(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var me = geom.getMarginExtents(node, computedStyle || style.getComputedStyle(node)); - var size = node.getBoundingClientRect(); - return { - w: (size.right - size.left) + me.w, - h: (size.bottom - size.top) + me.h - } - }; - - geom.normalizeEvent = function(event){ - // summary: - // Normalizes the geometry of a DOM event, normalizing the pageX, pageY, - // offsetX, offsetY, layerX, and layerX properties - // event: Object - if(!("layerX" in event)){ - event.layerX = event.offsetX; - event.layerY = event.offsetY; - } - if(!has("dom-addeventlistener")){ - // old IE version - // FIXME: scroll position query is duped from dojo.html to - // avoid dependency on that entire module. Now that HTML is in - // Base, we should convert back to something similar there. - var se = event.target; - var doc = (se && se.ownerDocument) || document; - // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used - // here rather than document.body - var docBody = has("quirks") ? doc.body : doc.documentElement; - var offset = geom.getIeDocumentElementOffset(); - event.pageX = event.clientX + geom.fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; - event.pageY = event.clientY + (docBody.scrollTop || 0) - offset.y; - } - }; - - // TODO: evaluate separate getters/setters for position and sizes? - - return geom; -}); - -}, -'dojo/dom-prop':function(){ -define("dojo/dom-prop", ["exports", "./_base/kernel", "./_base/sniff", "./_base/lang", "./dom", "./dom-style", "./dom-construct", "./_base/connect"], - function(exports, dojo, has, lang, dom, style, ctr, conn){ - // module: - // dojo/dom-prop - // summary: - // This module defines the core dojo DOM properties API. - // Indirectly depends on dojo.empty() and dojo.toDom(). - - // ============================= - // Element properties Functions - // ============================= - - /*===== - prop.get = function(node, name){ - // summary: - // Gets a property on an HTML element. - // description: - // Handles normalized getting of properties on DOM nodes. - // - // node: DOMNode|String - // id or reference to the element to get the property on - // name: String - // the name of the property to get. - // returns: - // the value of the requested property or its default value - // - // example: - // | // get the current value of the "foo" property on a node - // | dojo.getProp(dojo.byId("nodeId"), "foo"); - // | // or we can just pass the id: - // | dojo.getProp("nodeId", "foo"); - }; - =====*/ - - /*===== - prop.set = function(node, name, value){ - // summary: - // Sets a property on an HTML element. - // description: - // Handles normalized setting of properties on DOM nodes. - // - // When passing functions as values, note that they will not be - // directly assigned to slots on the node, but rather the default - // behavior will be removed and the new behavior will be added - // using `dojo.connect()`, meaning that event handler properties - // will be normalized and that some caveats with regards to - // non-standard behaviors for onsubmit apply. Namely that you - // should cancel form submission using `dojo.stopEvent()` on the - // passed event object instead of returning a boolean value from - // the handler itself. - // node: DOMNode|String - // id or reference to the element to set the property on - // name: String|Object - // the name of the property to set, or a hash object to set - // multiple properties at once. - // value: String? - // The value to set for the property - // returns: - // the DOM node - // - // example: - // | // use prop() to set the tab index - // | dojo.setProp("nodeId", "tabIndex", 3); - // | - // - // example: - // Set multiple values at once, including event handlers: - // | dojo.setProp("formId", { - // | "foo": "bar", - // | "tabIndex": -1, - // | "method": "POST", - // | "onsubmit": function(e){ - // | // stop submitting the form. Note that the IE behavior - // | // of returning true or false will have no effect here - // | // since our handler is connect()ed to the built-in - // | // onsubmit behavior and so we need to use - // | // dojo.stopEvent() to ensure that the submission - // | // doesn't proceed. - // | dojo.stopEvent(e); - // | - // | // submit the form with Ajax - // | dojo.xhrPost({ form: "formId" }); - // | } - // | }); - // - // example: - // Style is s special case: Only set with an object hash of styles - // | dojo.setProp("someNode",{ - // | id:"bar", - // | style:{ - // | width:"200px", height:"100px", color:"#000" - // | } - // | }); - // - // example: - // Again, only set style as an object hash of styles: - // | var obj = { color:"#fff", backgroundColor:"#000" }; - // | dojo.setProp("someNode", "style", obj); - // | - // | // though shorter to use `dojo.style()` in this case: - // | dojo.style("someNode", obj); - }; - =====*/ - - // helper to connect events - var _evtHdlrMap = {}, _ctr = 0, _attrId = dojo._scopeName + "attrid"; - - // the next dictionary lists elements with read-only innerHTML on IE - var _roInnerHtml = {col: 1, colgroup: 1, - // frameset: 1, head: 1, html: 1, style: 1, - table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}; - - exports.names = { - // properties renamed to avoid clashes with reserved words - "class": "className", - "for": "htmlFor", - // properties written as camelCase - tabindex: "tabIndex", - readonly: "readOnly", - colspan: "colSpan", - frameborder: "frameBorder", - rowspan: "rowSpan", - valuetype: "valueType" - }; - - exports.get = function getProp(/*DOMNode|String*/node, /*String*/name){ - node = dom.byId(node); - var lc = name.toLowerCase(), propName = exports.names[lc] || name; - return node[propName]; // Anything - }; - - exports.set = function setProp(/*DOMNode|String*/node, /*String|Object*/name, /*String?*/value){ - node = dom.byId(node); - var l = arguments.length; - if(l == 2 && typeof name != "string"){ // inline'd type check - // the object form of setter: the 2nd argument is a dictionary - for(var x in name){ - exports.set(node, x, name[x]); - } - return node; // DomNode - } - var lc = name.toLowerCase(), propName = exports.names[lc] || name; - if(propName == "style" && typeof value != "string"){ // inline'd type check - // special case: setting a style - style.style(node, value); - return node; // DomNode - } - if(propName == "innerHTML"){ - // special case: assigning HTML - if(has("ie") && node.tagName.toLowerCase() in _roInnerHtml){ - ctr.empty(node); - node.appendChild(ctr.toDom(value, node.ownerDocument)); - }else{ - node[propName] = value; - } - return node; // DomNode - } - if(lang.isFunction(value)){ - // special case: assigning an event handler - // clobber if we can - var attrId = node[_attrId]; - if(!attrId){ - attrId = _ctr++; - node[_attrId] = attrId; - } - if(!_evtHdlrMap[attrId]){ - _evtHdlrMap[attrId] = {}; - } - var h = _evtHdlrMap[attrId][propName]; - if(h){ - //h.remove(); - conn.disconnect(h); - }else{ - try{ - delete node[propName]; - }catch(e){} - } - // ensure that event objects are normalized, etc. - if(value){ - //_evtHdlrMap[attrId][propName] = on(node, propName, value); - _evtHdlrMap[attrId][propName] = conn.connect(node, propName, value); - }else{ - node[propName] = null; - } - return node; // DomNode - } - node[propName] = value; - return node; // DomNode - }; -}); - -}, -'dojo/dom-attr':function(){ -define(["exports", "./_base/sniff", "./_base/lang", "./dom", "./dom-style", "./dom-prop"], - function(exports, has, lang, dom, style, prop){ - // module: - // dojo/dom-attr - // summary: - // This module defines the core dojo DOM attributes API. - - // ============================= - // Element attribute Functions - // ============================= - - // This module will be obsolete soon. Use dojo.prop instead. - - // dojo.attr() should conform to http://www.w3.org/TR/DOM-Level-2-Core/ - - // attribute-related functions (to be obsolete soon) - - /*===== - dojo.hasAttr = function(node, name){ - // summary: - // Returns true if the requested attribute is specified on the - // given element, and false otherwise. - // node: DOMNode|String - // id or reference to the element to check - // name: String - // the name of the attribute - // returns: Boolean - // true if the requested attribute is specified on the - // given element, and false otherwise - }; - =====*/ - - /*===== - dojo.getAttr = function(node, name){ - // summary: - // Gets an attribute on an HTML element. - // description: - // Handles normalized getting of attributes on DOM Nodes. - // node: DOMNode|String - // id or reference to the element to get the attribute on - // name: String - // the name of the attribute to get. - // returns: - // the value of the requested attribute or null if that attribute does not have a specified or - // default value; - // - // example: - // | // get the current value of the "foo" attribute on a node - // | dojo.getAttr(dojo.byId("nodeId"), "foo"); - // | // or we can just pass the id: - // | dojo.getAttr("nodeId", "foo"); - }; - =====*/ - - /*===== - dojo.setAttr = function(node, name, value){ - // summary: - // Sets an attribute on an HTML element. - // description: - // Handles normalized setting of attributes on DOM Nodes. - // - // When passing functions as values, note that they will not be - // directly assigned to slots on the node, but rather the default - // behavior will be removed and the new behavior will be added - // using `dojo.connect()`, meaning that event handler properties - // will be normalized and that some caveats with regards to - // non-standard behaviors for onsubmit apply. Namely that you - // should cancel form submission using `dojo.stopEvent()` on the - // passed event object instead of returning a boolean value from - // the handler itself. - // node: DOMNode|String - // id or reference to the element to set the attribute on - // name: String|Object - // the name of the attribute to set, or a hash of key-value pairs to set. - // value: String? - // the value to set for the attribute, if the name is a string. - // returns: - // the DOM node - // - // example: - // | // use attr() to set the tab index - // | dojo.setAttr("nodeId", "tabIndex", 3); - // - // example: - // Set multiple values at once, including event handlers: - // | dojo.setAttr("formId", { - // | "foo": "bar", - // | "tabIndex": -1, - // | "method": "POST", - // | "onsubmit": function(e){ - // | // stop submitting the form. Note that the IE behavior - // | // of returning true or false will have no effect here - // | // since our handler is connect()ed to the built-in - // | // onsubmit behavior and so we need to use - // | // dojo.stopEvent() to ensure that the submission - // | // doesn't proceed. - // | dojo.stopEvent(e); - // | - // | // submit the form with Ajax - // | dojo.xhrPost({ form: "formId" }); - // | } - // | }); - // - // example: - // Style is s special case: Only set with an object hash of styles - // | dojo.setAttr("someNode",{ - // | id:"bar", - // | style:{ - // | width:"200px", height:"100px", color:"#000" - // | } - // | }); - // - // example: - // Again, only set style as an object hash of styles: - // | var obj = { color:"#fff", backgroundColor:"#000" }; - // | dojo.setAttr("someNode", "style", obj); - // | - // | // though shorter to use `dojo.style()` in this case: - // | dojo.setStyle("someNode", obj); - }; - =====*/ - - /*===== - dojo.removeAttr = function(node, name){ - // summary: - // Removes an attribute from an HTML element. - // node: DOMNode|String - // id or reference to the element to remove the attribute from - // name: String - // the name of the attribute to remove - }; - =====*/ - - /*===== - dojo.getNodeProp = function(node, name){ - // summary: - // Returns an effective value of a property or an attribute. - // node: DOMNode|String - // id or reference to the element to remove the attribute from - // name: String - // the name of the attribute - // returns: - // the value of the attribute - }; - =====*/ - - var forcePropNames = { - innerHTML: 1, - className: 1, - htmlFor: has("ie"), - value: 1 - }, - attrNames = { - // original attribute names - classname: "class", - htmlfor: "for", - // for IE - tabindex: "tabIndex", - readonly: "readOnly" - }; - - function _hasAttr(node, name){ - var attr = node.getAttributeNode && node.getAttributeNode(name); - return attr && attr.specified; // Boolean - } - - // There is a difference in the presence of certain properties and their default values - // between browsers. For example, on IE "disabled" is present on all elements, - // but it is value is "false"; "tabIndex" of
    returns 0 by default on IE, yet other browsers - // can return -1. - - exports.has = function hasAttr(/*DOMNode|String*/node, /*String*/name){ - var lc = name.toLowerCase(); - return forcePropNames[prop.names[lc] || name] || _hasAttr(dom.byId(node), attrNames[lc] || name); // Boolean - }; - - exports.get = function getAttr(/*DOMNode|String*/node, /*String*/name){ - node = dom.byId(node); - var lc = name.toLowerCase(), - propName = prop.names[lc] || name, - forceProp = forcePropNames[propName]; - // should we access this attribute via a property or via getAttribute()? - value = node[propName]; - if(forceProp && typeof value != "undefined"){ - // node's property - return value; // Anything - } - if(propName != "href" && (typeof value == "boolean" || lang.isFunction(value))){ - // node's property - return value; // Anything - } - // node's attribute - // we need _hasAttr() here to guard against IE returning a default value - var attrName = attrNames[lc] || name; - return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything - }; - - exports.set = function setAttr(/*DOMNode|String*/node, /*String|Object*/name, /*String?*/value){ - node = dom.byId(node); - if(arguments.length == 2){ // inline'd type check - // the object form of setter: the 2nd argument is a dictionary - for(var x in name){ - exports.set(node, x, name[x]); - } - return node; // DomNode - } - var lc = name.toLowerCase(), - propName = prop.names[lc] || name, - forceProp = forcePropNames[propName]; - if(propName == "style" && typeof value != "string"){ // inline'd type check - // special case: setting a style - style.set(node, value); - return node; // DomNode - } - if(forceProp || typeof value == "boolean" || lang.isFunction(value)){ - return prop.set(node, name, value) - } - // node's attribute - node.setAttribute(attrNames[lc] || name, value); - return node; // DomNode - }; - - exports.remove = function removeAttr(/*DOMNode|String*/ node, /*String*/ name){ - dom.byId(node).removeAttribute(attrNames[name.toLowerCase()] || name); - }; - - exports.getNodeProp = function getNodeProp(/*DomNode|String*/ node, /*String*/ name){ - node = dom.byId(node); - var lc = name.toLowerCase(), propName = prop.names[lc] || name; - if((propName in node) && propName != "href"){ - // node's property - return node[propName]; // Anything - } - // node's attribute - var attrName = attrNames[lc] || name; - return _hasAttr(node, attrName) ? node.getAttribute(attrName) : null; // Anything - }; -}); - -}, -'dojo/dom-construct':function(){ -define("dojo/dom-construct", ["exports", "./_base/kernel", "./_base/sniff", "./_base/window", "./dom", "./dom-attr", "./on"], - function(exports, dojo, has, win, dom, attr, on){ - // module: - // dojo/dom-construct - // summary: - // This module defines the core dojo DOM construction API. - - /*===== - dojo.toDom = function(frag, doc){ - // summary: - // instantiates an HTML fragment returning the corresponding DOM. - // frag: String - // the HTML fragment - // doc: DocumentNode? - // optional document to use when creating DOM nodes, defaults to - // dojo.doc if not specified. - // returns: DocumentFragment - // - // example: - // Create a table row: - // | var tr = dojo.toDom("First!"); - }; - =====*/ - - /*===== - dojo._toDom = function(frag, doc){ - // summary: - // Existing alias for `dojo.toDom`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.place = function(node, refNode, position){ - // summary: - // Attempt to insert node into the DOM, choosing from various positioning options. - // Returns the first argument resolved to a DOM node. - // - // node: DOMNode|String - // id or node reference, or HTML fragment starting with "<" to place relative to refNode - // - // refNode: DOMNode|String - // id or node reference to use as basis for placement - // - // position: String|Number? - // string noting the position of node relative to refNode or a - // number indicating the location in the childNodes collection of refNode. - // Accepted string values are: - // | * before - // | * after - // | * replace - // | * only - // | * first - // | * last - // "first" and "last" indicate positions as children of refNode, "replace" replaces refNode, - // "only" replaces all children. position defaults to "last" if not specified - // - // returns: DOMNode - // Returned values is the first argument resolved to a DOM node. - // - // .place() is also a method of `dojo.NodeList`, allowing `dojo.query` node lookups. - // - // example: - // Place a node by string id as the last child of another node by string id: - // | dojo.place("someNode", "anotherNode"); - // - // example: - // Place a node by string id before another node by string id - // | dojo.place("someNode", "anotherNode", "before"); - // - // example: - // Create a Node, and place it in the body element (last child): - // | dojo.place("
    ", dojo.body()); - // - // example: - // Put a new LI as the first child of a list by id: - // | dojo.place("
  • ", "someUl", "first"); - }; - =====*/ - - /*===== - dojo.create = function(tag, attrs, refNode, pos){ - // summary: - // Create an element, allowing for optional attribute decoration - // and placement. - // - // description: - // A DOM Element creation function. A shorthand method for creating a node or - // a fragment, and allowing for a convenient optional attribute setting step, - // as well as an optional DOM placement reference. - //| - // Attributes are set by passing the optional object through `dojo.setAttr`. - // See `dojo.setAttr` for noted caveats and nuances, and API if applicable. - //| - // Placement is done via `dojo.place`, assuming the new node to be the action - // node, passing along the optional reference node and position. - // - // tag: DOMNode|String - // A string of the element to create (eg: "div", "a", "p", "li", "script", "br"), - // or an existing DOM node to process. - // - // attrs: Object - // An object-hash of attributes to set on the newly created node. - // Can be null, if you don't want to set any attributes/styles. - // See: `dojo.setAttr` for a description of available attributes. - // - // refNode: DOMNode?|String? - // Optional reference node. Used by `dojo.place` to place the newly created - // node somewhere in the dom relative to refNode. Can be a DomNode reference - // or String ID of a node. - // - // pos: String? - // Optional positional reference. Defaults to "last" by way of `dojo.place`, - // though can be set to "first","after","before","last", "replace" or "only" - // to further control the placement of the new node relative to the refNode. - // 'refNode' is required if a 'pos' is specified. - // - // returns: DOMNode - // - // example: - // Create a DIV: - // | var n = dojo.create("div"); - // - // example: - // Create a DIV with content: - // | var n = dojo.create("div", { innerHTML:"

    hi

    " }); - // - // example: - // Place a new DIV in the BODY, with no attributes set - // | 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 - // node with id="someId": - // | var ul = dojo.create("ul", null, "someId", "first"); - // | var items = ["one", "two", "three", "four"]; - // | dojo.forEach(items, function(data){ - // | dojo.create("li", { innerHTML: data }, ul); - // | }); - // - // example: - // Create an anchor, with an href. Place in BODY: - // | dojo.create("a", { href:"foo.html", title:"Goto FOO!" }, dojo.body()); - // - // example: - // Create a `dojo.NodeList()` from a new element (for syntatic sugar): - // | dojo.query(dojo.create('div')) - // | .addClass("newDiv") - // | .onclick(function(e){ console.log('clicked', e.target) }) - // | .place("#someNode"); // redundant, but cleaner. - }; - =====*/ - - /*===== - dojo.empty = function(node){ - // summary: - // safely removes all children of the node. - // node: DOMNode|String - // a reference to a DOM node or an id. - // example: - // Destroy node's children byId: - // | dojo.empty("someId"); - // - // example: - // Destroy all nodes' children in a list by reference: - // | dojo.query(".someNode").forEach(dojo.empty); - } - =====*/ - - /*===== - dojo.destroy = function(node){ - // summary: - // Removes a node from its parent, clobbering it and all of its - // children. - // - // description: - // Removes a node from its parent, clobbering it and all of its - // children. Function only works with DomNodes, and returns nothing. - // - // node: DOMNode|String - // A String ID or DomNode reference of the element to be destroyed - // - // example: - // Destroy a node byId: - // | dojo.destroy("someId"); - // - // example: - // Destroy all nodes in a list by reference: - // | dojo.query(".someNode").forEach(dojo.destroy); - }; - =====*/ - - /*===== - dojo._destroyElement = function(node){ - // summary: - // Existing alias for `dojo.destroy`. Deprecated, will be removed in 2.0. - }; - =====*/ - - // support stuff for dojo.toDom - var tagWrap = { - option: ["select"], - tbody: ["table"], - thead: ["table"], - tfoot: ["table"], - tr: ["table", "tbody"], - td: ["table", "tbody", "tr"], - th: ["table", "thead", "tr"], - legend: ["fieldset"], - caption: ["table"], - colgroup: ["table"], - col: ["table", "colgroup"], - li: ["ul"] - }, - reTag = /<\s*([\w\:]+)/, - masterNode = {}, masterNum = 0, - masterName = "__" + dojo._scopeName + "ToDomId"; - - // generate start/end tag strings to use - // for the injection for each special tag wrap case. - for(var param in tagWrap){ - if(tagWrap.hasOwnProperty(param)){ - 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 - } - } - - function _insertBefore(/*DomNode*/node, /*DomNode*/ref){ - var parent = ref.parentNode; - if(parent){ - parent.insertBefore(node, ref); - } - } - - function _insertAfter(/*DomNode*/node, /*DomNode*/ref){ - // summary: - // Try to insert node after ref - var parent = ref.parentNode; - if(parent){ - if(parent.lastChild == ref){ - parent.appendChild(node); - }else{ - parent.insertBefore(node, ref.nextSibling); - } - } - } - - var _destroyContainer = null, - _destroyDoc; - on(window, "unload", function(){ - _destroyContainer = null; //prevent IE leak - }); - - exports.toDom = function toDom(frag, doc){ - doc = doc || win.doc; - var masterId = doc[masterName]; - if(!masterId){ - doc[masterName] = masterId = ++masterNum + ""; - masterNode[masterId] = doc.createElement("div"); - } - - // make sure the frag is a string. - frag += ""; - - // find the starting tag, and get node wrapper - var match = frag.match(reTag), - tag = match ? match[1].toLowerCase() : "", - master = masterNode[masterId], - wrap, i, fc, df; - if(match && tagWrap[tag]){ - wrap = tagWrap[tag]; - master.innerHTML = wrap.pre + frag + wrap.post; - for(i = wrap.length; i; --i){ - master = master.firstChild; - } - }else{ - master.innerHTML = frag; - } - - // one node shortcut => return the node itself - if(master.childNodes.length == 1){ - return master.removeChild(master.firstChild); // DOMNode - } - - // return multiple nodes as a document fragment - df = doc.createDocumentFragment(); - while(fc = master.firstChild){ // intentional assignment - df.appendChild(fc); - } - return df; // DOMNode - }; - - exports.place = function place(/*DOMNode|String*/node, /*DOMNode|String*/refNode, /*String|Number?*/position){ - refNode = dom.byId(refNode); - if(typeof node == "string"){ // inline'd type check - node = /^\s* - // | - // | - // | - // | - // | - // - // yields this object structure as the result of a call to - // formToObject(): - // - // | { - // | blah: "blah", - // | multi: [ - // | "thud", - // | "thonk" - // | ] - // | }; - }; - =====*/ - - /*===== - dojo.formToQuery = function(formNode){ - // summary: - // Returns a URL-encoded string representing the form passed as either a - // node or string ID identifying the form to serialize - // formNode: DOMNode|String - // returns: String - }; - =====*/ - - /*===== - dojo.formToJson = function(formNode, prettyPrint){ - // summary: - // Create a serialized JSON string from a form node or string - // ID identifying the form to serialize - // formNode: DOMNode|String - // prettyPrint: Boolean? - // returns: String - }; - =====*/ - - function setValue(/*Object*/obj, /*String*/name, /*String*/value){ - // summary: - // For the named property in object, set the value. If a value - // already exists and it is a string, convert the value to be an - // array of values. - - // Skip it if there is no value - if(value === null){ - return; - } - - var val = obj[name]; - if(typeof val == "string"){ // inline'd type check - obj[name] = [val, value]; - }else if(lang.isArray(val)){ - val.push(value); - }else{ - obj[name] = value; - } - } - - var exclude = "file|submit|image|reset|button"; - - var form = { - fieldToObject: function fieldToObject(/*DOMNode|String*/ inputNode){ - var ret = null; - inputNode = dom.byId(inputNode); - if(inputNode){ - var _in = inputNode.name, type = (inputNode.type || "").toLowerCase(); - if(_in && type && !inputNode.disabled){ - if(type == "radio" || type == "checkbox"){ - if(inputNode.checked){ - ret = inputNode.value; - } - }else if(inputNode.multiple){ - ret = []; - var nodes = [inputNode.firstChild]; - while(nodes.length){ - for(var node = nodes.pop(); node; node = node.nextSibling){ - if(node.nodeType == 1 && node.tagName.toLowerCase() == "option"){ - if(node.selected){ - ret.push(node.value); - } - }else{ - if(node.nextSibling){ - nodes.push(node.nextSibling); - } - if(node.firstChild){ - nodes.push(node.firstChild); - } - break; - } - } - } - }else{ - ret = inputNode.value; - } - } - } - return ret; // Object - }, - - toObject: function formToObject(/*DOMNode|String*/ formNode){ - var ret = {}, elems = dom.byId(formNode).elements; - for(var i = 0, l = elems.length; i < l; ++i){ - var item = elems[i], _in = item.name, type = (item.type || "").toLowerCase(); - if(_in && type && exclude.indexOf(type) < 0 && !item.disabled){ - setValue(ret, _in, form.fieldToObject(item)); - if(type == "image"){ - ret[_in + ".x"] = ret[_in + ".y"] = ret[_in].x = ret[_in].y = 0; - } - } - } - return ret; // Object - }, - - toQuery: function formToQuery(/*DOMNode|String*/ formNode){ - return ioq.objectToQuery(form.toObject(formNode)); // String - }, - - toJson: function formToJson(/*DOMNode|String*/ formNode, /*Boolean?*/prettyPrint){ - return json.stringify(form.toObject(formNode), null, prettyPrint ? 4 : 0); // String - } - }; - - return form; -}); diff --git a/lib/dojo/dom-geometry.js.uncompressed.js b/lib/dojo/dom-geometry.js.uncompressed.js deleted file mode 100644 index 0e3234a9e..000000000 --- a/lib/dojo/dom-geometry.js.uncompressed.js +++ /dev/null @@ -1,751 +0,0 @@ -define("dojo/dom-geometry", ["./_base/sniff", "./_base/window","./dom", "./dom-style"], - function(has, win, dom, style){ - // module: - // dojo/dom-geometry - // summary: - // This module defines the core dojo DOM geometry API. - - var geom = {}; // the result object - - // Box functions will assume this model. - // On IE/Opera, BORDER_BOX will be set if the primary document is in quirks mode. - // Can be set to change behavior of box setters. - - // can be either: - // "border-box" - // "content-box" (default) - geom.boxModel = "content-box"; - - // We punt per-node box mode testing completely. - // If anybody cares, we can provide an additional (optional) unit - // that overrides existing code to include per-node box sensitivity. - - // Opera documentation claims that Opera 9 uses border-box in BackCompat mode. - // but experiments (Opera 9.10.8679 on Windows Vista) indicate that it actually continues to use content-box. - // IIRC, earlier versions of Opera did in fact use border-box. - // Opera guys, this is really confusing. Opera being broken in quirks mode is not our fault. - - if(has("ie") /*|| has("opera")*/){ - // client code may have to adjust if compatMode varies across iframes - geom.boxModel = document.compatMode == "BackCompat" ? "border-box" : "content-box"; - } - - // ============================= - // Box Functions - // ============================= - - /*===== - dojo.getPadExtents = function(node, computedStyle){ - // summary: - // Returns object with special values specifically useful for node - // fitting. - // description: - // Returns an object with `w`, `h`, `l`, `t` properties: - // | l/t/r/b = left/top/right/bottom padding (respectively) - // | w = the total of the left and right padding - // | h = the total of the top and bottom padding - // If 'node' has position, l/t forms the origin for child nodes. - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - - - }; - =====*/ - - /*===== - dojo._getPadExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getPadExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getBorderExtents = function(node, computedStyle){ - // summary: - // returns an object with properties useful for noting the border - // dimensions. - // description: - // * l/t/r/b = the sum of left/top/right/bottom border (respectively) - // * w = the sum of the left and right border - // * h = the sum of the top and bottom border - // - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - - - }; - =====*/ - - /*===== - dojo._getBorderExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getBorderExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getPadBorderExtents = function(node, computedStyle){ - // summary: - // Returns object with properties useful for box fitting with - // regards to padding. - // description: - // * l/t/r/b = the sum of left/top/right/bottom padding and left/top/right/bottom border (respectively) - // * w = the sum of the left and right padding and border - // * h = the sum of the top and bottom padding and border - // - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - - - }; - =====*/ - - /*===== - dojo._getPadBorderExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getPadBorderExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getMarginExtents = function(node, computedStyle){ - // summary: - // returns object with properties useful for box fitting with - // regards to box margins (i.e., the outer-box). - // - // * l/t = marginLeft, marginTop, respectively - // * w = total width, margin inclusive - // * h = total height, margin inclusive - // - // The w/h are used for calculating boxes. - // Normally application code will not need to invoke this - // directly, and will use the ...box... functions instead. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getMarginExtents = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getMarginExtents`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getMarginSize = function(node, computedStyle){ - // summary: - // returns an object that encodes the width and height of - // the node's margin box - // node: DOMNode|String - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getMarginSize = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getMarginSize`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getMarginBox = function(node, computedStyle){ - // summary: - // returns an object that encodes the width, height, left and top - // positions of the node's margin box. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getMarginBox = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getMarginBox`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.setMarginBox = function(node, box, computedStyle){ - // summary: - // sets the size of the node's margin box and placement - // (left/top), irrespective of box model. Think of it as a - // passthrough to setBox that handles box-model vagaries for - // you. - // node: DOMNode - // box: Object - // hash with optional "l", "t", "w", and "h" properties for "left", "right", "width", and "height" - // respectively. All specified properties should have numeric values in whole pixels. - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo.getContentBox = function(node, computedStyle){ - // summary: - // Returns an object that encodes the width, height, left and top - // positions of the node's content box, irrespective of the - // current box model. - // node: DOMNode - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo._getContentBox = function(node, computedStyle){ - // summary: - // Existing alias for `dojo.getContentBox`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.setContentSize = function(node, box, computedStyle){ - // summary: - // Sets the size of the node's contents, irrespective of margins, - // padding, or borders. - // node: DOMNode - // box: Object - // hash with optional "w", and "h" properties for "width", and "height" - // respectively. All specified properties should have numeric values in whole pixels. - // computedStyle: Object? - // This parameter accepts computed styles object. - // If this parameter is omitted, the functions will call - // dojo.getComputedStyle to get one. It is a better way, calling - // dojo.computedStyle once, and then pass the reference to this - // computedStyle parameter. Wherever possible, reuse the returned - // object of dojo.getComputedStyle. - }; - =====*/ - - /*===== - dojo.isBodyLtr = function(){ - // summary: - // Returns true if the current language is left-to-right, and false otherwise. - // returns: Boolean - }; - =====*/ - - /*===== - dojo._isBodyLtr = function(){ - // summary: - // Existing alias for `dojo.isBodyLtr`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.docScroll = function(){ - // summary: - // Returns an object with {node, x, y} with corresponding offsets. - // returns: Object - }; - =====*/ - - /*===== - dojo._docScroll = function(){ - // summary: - // Existing alias for `dojo.docScroll`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getIeDocumentElementOffset = function(){ - // summary: - // returns the offset in x and y from the document body to the - // visual edge of the page for IE - // description: - // The following values in IE contain an offset: - // | event.clientX - // | event.clientY - // | node.getBoundingClientRect().left - // | node.getBoundingClientRect().top - // But other position related values do not contain this offset, - // such as node.offsetLeft, node.offsetTop, node.style.left and - // node.style.top. The offset is always (2, 2) in LTR direction. - // When the body is in RTL direction, the offset counts the width - // of left scroll bar's width. This function computes the actual - // offset. - }; - =====*/ - - /*===== - dojo._getIeDocumentElementOffset = function(){ - // summary: - // Existing alias for `dojo.getIeDocumentElementOffset`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.fixIeBiDiScrollLeft = function(scrollLeft){ - // summary: - // 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. - // scrollLeft: NUmber - // returns: Number - }; - =====*/ - - /*===== - dojo._fixIeBiDiScrollLeft = function(scrollLeft){ - // summary: - // Existing alias for `dojo.fixIeBiDiScrollLeft`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.position = function(node, includeScroll){ - // summary: - // Gets the position and size of the passed element relative to - // the viewport (if includeScroll==false), or relative to the - // document root (if includeScroll==true). - // - // description: - // Returns an object of the form: - // { x: 100, y: 300, w: 20, h: 15 } - // If includeScroll==true, the x and y values will include any - // document offsets that may affect the position relative to the - // viewport. - // Uses the border-box model (inclusive of border and padding but - // not margin). Does not act as a setter. - // node: DOMNode|String - // includeScroll: Boolean? - // returns: Object - }; - =====*/ - - geom.getPadExtents = function getPadExtents(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue, - l = px(node, s.paddingLeft), t = px(node, s.paddingTop), r = px(node, s.paddingRight), b = px(node, s.paddingBottom); - return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; - }; - - var none = "none"; - - geom.getBorderExtents = function getBorderExtents(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var px = style.toPixelValue, s = computedStyle || style.getComputedStyle(node), - l = s.borderLeftStyle != none ? px(node, s.borderLeftWidth) : 0, - t = s.borderTopStyle != none ? px(node, s.borderTopWidth) : 0, - r = s.borderRightStyle != none ? px(node, s.borderRightWidth) : 0, - b = s.borderBottomStyle != none ? px(node, s.borderBottomWidth) : 0; - return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; - }; - - geom.getPadBorderExtents = function getPadBorderExtents(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), - p = geom.getPadExtents(node, s), - b = geom.getBorderExtents(node, s); - return { - l: p.l + b.l, - t: p.t + b.t, - r: p.r + b.r, - b: p.b + b.b, - w: p.w + b.w, - h: p.h + b.h - }; - }; - - geom.getMarginExtents = function getMarginExtents(node, computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), px = style.toPixelValue, - l = px(node, s.marginLeft), t = px(node, s.marginTop), r = px(node, s.marginRight), b = px(node, s.marginBottom); - if(has("webkit") && (s.position != "absolute")){ - // FIXME: Safari's version of the computed right margin - // is the space between our right edge and the right edge - // of our offsetParent. - // What we are looking for is the actual margin value as - // determined by CSS. - // Hack solution is to assume left/right margins are the same. - r = l; - } - return {l: l, t: t, r: r, b: b, w: l + r, h: t + b}; - }; - - // Box getters work in any box context because offsetWidth/clientWidth - // are invariant wrt box context - // - // They do *not* work for display: inline objects that have padding styles - // because the user agent ignores padding (it's bogus styling in any case) - // - // Be careful with IMGs because they are inline or block depending on - // browser and browser mode. - - // Although it would be easier to read, there are not separate versions of - // _getMarginBox for each browser because: - // 1. the branching is not expensive - // 2. factoring the shared code wastes cycles (function call overhead) - // 3. duplicating the shared code wastes bytes - - geom.getMarginBox = function getMarginBox(/*DomNode*/node, /*Object*/computedStyle){ - // summary: - // returns an object that encodes the width, height, left and top - // positions of the node's margin box. - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), me = geom.getMarginExtents(node, s), - l = node.offsetLeft - me.l, t = node.offsetTop - me.t, p = node.parentNode, px = style.toPixelValue, pcs; - if(has("mozilla")){ - // Mozilla: - // If offsetParent has a computed overflow != visible, the offsetLeft is decreased - // by the parent's border. - // We don't want to compute the parent's style, so instead we examine node's - // computed left/top which is more stable. - var sl = parseFloat(s.left), st = parseFloat(s.top); - if(!isNaN(sl) && !isNaN(st)){ - l = sl, t = st; - }else{ - // If child's computed left/top are not parseable as a number (e.g. "auto"), we - // have no choice but to examine the parent's computed style. - if(p && p.style){ - pcs = style.getComputedStyle(p); - if(pcs.overflow != "visible"){ - l += pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0; - t += pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0; - } - } - } - }else if(has("opera") || (has("ie") == 8 && !has("quirks"))){ - // On Opera and IE 8, offsetLeft/Top includes the parent's border - if(p){ - pcs = style.getComputedStyle(p); - l -= pcs.borderLeftStyle != none ? px(node, pcs.borderLeftWidth) : 0; - t -= pcs.borderTopStyle != none ? px(node, pcs.borderTopWidth) : 0; - } - } - return {l: l, t: t, w: node.offsetWidth + me.w, h: node.offsetHeight + me.h}; - }; - - geom.getContentBox = function getContentBox(node, computedStyle){ - // clientWidth/Height are important since the automatically account for scrollbars - // fallback to offsetWidth/Height for special cases (see #3378) - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), w = node.clientWidth, h, - pe = geom.getPadExtents(node, s), be = geom.getBorderExtents(node, s); - if(!w){ - w = node.offsetWidth; - h = node.offsetHeight; - }else{ - h = node.clientHeight; - be.w = be.h = 0; - } - // On Opera, offsetLeft includes the parent's border - if(has("opera")){ - pe.l += be.l; - pe.t += be.t; - } - return {l: pe.l, t: pe.t, w: w - pe.w - be.w, h: h - pe.h - be.h}; - }; - - // Box setters depend on box context because interpretation of width/height styles - // vary wrt box context. - // - // The value of dojo.boxModel is used to determine box context. - // dojo.boxModel can be set directly to change behavior. - // - // Beware of display: inline objects that have padding styles - // because the user agent ignores padding (it's a bogus setup anyway) - // - // Be careful with IMGs because they are inline or block depending on - // browser and browser mode. - // - // Elements other than DIV may have special quirks, like built-in - // margins or padding, or values not detectable via computedStyle. - // In particular, margins on TABLE do not seems to appear - // at all in computedStyle on Mozilla. - - function setBox(/*DomNode*/node, /*Number?*/l, /*Number?*/t, /*Number?*/w, /*Number?*/h, /*String?*/u){ - // summary: - // sets width/height/left/top in the current (native) box-model - // dimensions. Uses the unit passed in u. - // node: - // DOM Node reference. Id string not supported for performance - // reasons. - // l: - // left offset from parent. - // t: - // top offset from parent. - // w: - // width in current box model. - // h: - // width in current box model. - // u: - // unit measure to use for other measures. Defaults to "px". - u = u || "px"; - var s = node.style; - if(!isNaN(l)){ - s.left = l + u; - } - if(!isNaN(t)){ - s.top = t + u; - } - if(w >= 0){ - s.width = w + u; - } - if(h >= 0){ - s.height = h + u; - } - } - - function isButtonTag(/*DomNode*/node){ - // summary: - // True if the node is BUTTON or INPUT.type="button". - return node.tagName.toLowerCase() == "button" || - node.tagName.toLowerCase() == "input" && (node.getAttribute("type") || "").toLowerCase() == "button"; // boolean - } - - function usesBorderBox(/*DomNode*/node){ - // summary: - // True if the node uses border-box layout. - - // We could test the computed style of node to see if a particular box - // has been specified, but there are details and we choose not to bother. - - // TABLE and BUTTON (and INPUT type=button) are always border-box by default. - // If you have assigned a different box to either one via CSS then - // box functions will break. - - return geom.boxModel == "border-box" || node.tagName.toLowerCase() == "table" || isButtonTag(node); // boolean - } - - geom.setContentSize = function setContentSize(/*DomNode*/node, /*Object*/box, /*Object*/computedStyle){ - // summary: - // Sets the size of the node's contents, irrespective of margins, - // padding, or borders. - - node = dom.byId(node); - var w = box.w, h = box.h; - if(usesBorderBox(node)){ - var pb = geom.getPadBorderExtents(node, computedStyle); - if(w >= 0){ - w += pb.w; - } - if(h >= 0){ - h += pb.h; - } - } - setBox(node, NaN, NaN, w, h); - }; - - var nilExtents = {l: 0, t: 0, w: 0, h: 0}; - - geom.setMarginBox = function setMarginBox(/*DomNode*/node, /*Object*/box, /*Object*/computedStyle){ - node = dom.byId(node); - var s = computedStyle || style.getComputedStyle(node), w = box.w, h = box.h, - // Some elements have special padding, margin, and box-model settings. - // To use box functions you may need to set padding, margin explicitly. - // Controlling box-model is harder, in a pinch you might set dojo.boxModel. - pb = usesBorderBox(node) ? nilExtents : geom.getPadBorderExtents(node, s), - mb = geom.getMarginExtents(node, s); - if(has("webkit")){ - // on Safari (3.1.2), button nodes with no explicit size have a default margin - // setting an explicit size eliminates the margin. - // We have to swizzle the width to get correct margin reading. - if(isButtonTag(node)){ - var ns = node.style; - if(w >= 0 && !ns.width){ - ns.width = "4px"; - } - if(h >= 0 && !ns.height){ - ns.height = "4px"; - } - } - } - if(w >= 0){ - w = Math.max(w - pb.w - mb.w, 0); - } - if(h >= 0){ - h = Math.max(h - pb.h - mb.h, 0); - } - setBox(node, box.l, box.t, w, h); - }; - - // ============================= - // Positioning - // ============================= - - geom.isBodyLtr = function isBodyLtr(){ - return (win.body().dir || win.doc.documentElement.dir || "ltr").toLowerCase() == "ltr"; // Boolean - }; - - geom.docScroll = function docScroll(){ - var node = win.doc.parentWindow || win.doc.defaultView; // use UI window, not dojo.global window - return "pageXOffset" in node ? {x: node.pageXOffset, y: node.pageYOffset } : - (node = has("quirks") ? win.body() : win.doc.documentElement, - {x: geom.fixIeBiDiScrollLeft(node.scrollLeft || 0), y: node.scrollTop || 0 }); - }; - - geom.getIeDocumentElementOffset = function getIeDocumentElementOffset(){ - //NOTE: assumes we're being called in an IE browser - - var de = win.doc.documentElement; // only deal with HTML element here, position() handles body/quirks - - if(has("ie") < 8){ - var r = de.getBoundingClientRect(), // works well for IE6+ - l = r.left, t = r.top; - if(has("ie") < 7){ - l += de.clientLeft; // scrollbar size in strict/RTL, or, - t += de.clientTop; // HTML border size in strict - } - return { - x: l < 0 ? 0 : l, // FRAME element border size can lead to inaccurate negative values - y: t < 0 ? 0 : t - }; - }else{ - return { - x: 0, - y: 0 - }; - } - }; - - geom.fixIeBiDiScrollLeft = function fixIeBiDiScrollLeft(/*Integer*/ scrollLeft){ - // 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 ie = has("ie"); - if(ie && !geom.isBodyLtr()){ - var qk = has("quirks"), - de = qk ? win.body() : win.doc.documentElement; - if(ie == 6 && !qk && win.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 - }; - - geom.position = function(/*DomNode*/node, /*Boolean?*/includeScroll){ - node = dom.byId(node); - var db = win.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(has("ie")){ - // On IE there's a 2px offset that we need to adjust for, see dojo.getIeDocumentElementOffset() - var offset = geom.getIeDocumentElementOffset(); - - // fixes the position in IE, quirks mode - ret.x -= offset.x + (has("quirks") ? db.clientLeft + db.offsetLeft : 0); - ret.y -= offset.y + (has("quirks") ? db.clientTop + db.offsetTop : 0); - }else if(has("ff") == 3){ - // In FF3 you have to subtract the document element margins. - // Fixed in FF3.5 though. - var cs = style.getComputedStyle(dh), px = style.toPixelValue; - ret.x -= px(dh, cs.marginLeft) + px(dh, cs.borderLeftWidth); - ret.y -= px(dh, cs.marginTop) + px(dh, cs.borderTopWidth); - } - // 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 - if(includeScroll){ - var scroll = geom.docScroll(); - ret.x += scroll.x; - ret.y += scroll.y; - } - - return ret; // Object - }; - - // random "private" functions wildly used throughout the toolkit - - geom.getMarginSize = function getMarginSize(/*DomNode*/node, /*Object*/computedStyle){ - node = dom.byId(node); - var me = geom.getMarginExtents(node, computedStyle || style.getComputedStyle(node)); - var size = node.getBoundingClientRect(); - return { - w: (size.right - size.left) + me.w, - h: (size.bottom - size.top) + me.h - } - }; - - geom.normalizeEvent = function(event){ - // summary: - // Normalizes the geometry of a DOM event, normalizing the pageX, pageY, - // offsetX, offsetY, layerX, and layerX properties - // event: Object - if(!("layerX" in event)){ - event.layerX = event.offsetX; - event.layerY = event.offsetY; - } - if(!has("dom-addeventlistener")){ - // old IE version - // FIXME: scroll position query is duped from dojo.html to - // avoid dependency on that entire module. Now that HTML is in - // Base, we should convert back to something similar there. - var se = event.target; - var doc = (se && se.ownerDocument) || document; - // DO NOT replace the following to use dojo.body(), in IE, document.documentElement should be used - // here rather than document.body - var docBody = has("quirks") ? doc.body : doc.documentElement; - var offset = geom.getIeDocumentElementOffset(); - event.pageX = event.clientX + geom.fixIeBiDiScrollLeft(docBody.scrollLeft || 0) - offset.x; - event.pageY = event.clientY + (docBody.scrollTop || 0) - offset.y; - } - }; - - // TODO: evaluate separate getters/setters for position and sizes? - - return geom; -}); diff --git a/lib/dojo/dom-prop.js.uncompressed.js b/lib/dojo/dom-prop.js.uncompressed.js deleted file mode 100644 index 04e690e62..000000000 --- a/lib/dojo/dom-prop.js.uncompressed.js +++ /dev/null @@ -1,190 +0,0 @@ -define("dojo/dom-prop", ["exports", "./_base/kernel", "./_base/sniff", "./_base/lang", "./dom", "./dom-style", "./dom-construct", "./_base/connect"], - function(exports, dojo, has, lang, dom, style, ctr, conn){ - // module: - // dojo/dom-prop - // summary: - // This module defines the core dojo DOM properties API. - // Indirectly depends on dojo.empty() and dojo.toDom(). - - // ============================= - // Element properties Functions - // ============================= - - /*===== - prop.get = function(node, name){ - // summary: - // Gets a property on an HTML element. - // description: - // Handles normalized getting of properties on DOM nodes. - // - // node: DOMNode|String - // id or reference to the element to get the property on - // name: String - // the name of the property to get. - // returns: - // the value of the requested property or its default value - // - // example: - // | // get the current value of the "foo" property on a node - // | dojo.getProp(dojo.byId("nodeId"), "foo"); - // | // or we can just pass the id: - // | dojo.getProp("nodeId", "foo"); - }; - =====*/ - - /*===== - prop.set = function(node, name, value){ - // summary: - // Sets a property on an HTML element. - // description: - // Handles normalized setting of properties on DOM nodes. - // - // When passing functions as values, note that they will not be - // directly assigned to slots on the node, but rather the default - // behavior will be removed and the new behavior will be added - // using `dojo.connect()`, meaning that event handler properties - // will be normalized and that some caveats with regards to - // non-standard behaviors for onsubmit apply. Namely that you - // should cancel form submission using `dojo.stopEvent()` on the - // passed event object instead of returning a boolean value from - // the handler itself. - // node: DOMNode|String - // id or reference to the element to set the property on - // name: String|Object - // the name of the property to set, or a hash object to set - // multiple properties at once. - // value: String? - // The value to set for the property - // returns: - // the DOM node - // - // example: - // | // use prop() to set the tab index - // | dojo.setProp("nodeId", "tabIndex", 3); - // | - // - // example: - // Set multiple values at once, including event handlers: - // | dojo.setProp("formId", { - // | "foo": "bar", - // | "tabIndex": -1, - // | "method": "POST", - // | "onsubmit": function(e){ - // | // stop submitting the form. Note that the IE behavior - // | // of returning true or false will have no effect here - // | // since our handler is connect()ed to the built-in - // | // onsubmit behavior and so we need to use - // | // dojo.stopEvent() to ensure that the submission - // | // doesn't proceed. - // | dojo.stopEvent(e); - // | - // | // submit the form with Ajax - // | dojo.xhrPost({ form: "formId" }); - // | } - // | }); - // - // example: - // Style is s special case: Only set with an object hash of styles - // | dojo.setProp("someNode",{ - // | id:"bar", - // | style:{ - // | width:"200px", height:"100px", color:"#000" - // | } - // | }); - // - // example: - // Again, only set style as an object hash of styles: - // | var obj = { color:"#fff", backgroundColor:"#000" }; - // | dojo.setProp("someNode", "style", obj); - // | - // | // though shorter to use `dojo.style()` in this case: - // | dojo.style("someNode", obj); - }; - =====*/ - - // helper to connect events - var _evtHdlrMap = {}, _ctr = 0, _attrId = dojo._scopeName + "attrid"; - - // the next dictionary lists elements with read-only innerHTML on IE - var _roInnerHtml = {col: 1, colgroup: 1, - // frameset: 1, head: 1, html: 1, style: 1, - table: 1, tbody: 1, tfoot: 1, thead: 1, tr: 1, title: 1}; - - exports.names = { - // properties renamed to avoid clashes with reserved words - "class": "className", - "for": "htmlFor", - // properties written as camelCase - tabindex: "tabIndex", - readonly: "readOnly", - colspan: "colSpan", - frameborder: "frameBorder", - rowspan: "rowSpan", - valuetype: "valueType" - }; - - exports.get = function getProp(/*DOMNode|String*/node, /*String*/name){ - node = dom.byId(node); - var lc = name.toLowerCase(), propName = exports.names[lc] || name; - return node[propName]; // Anything - }; - - exports.set = function setProp(/*DOMNode|String*/node, /*String|Object*/name, /*String?*/value){ - node = dom.byId(node); - var l = arguments.length; - if(l == 2 && typeof name != "string"){ // inline'd type check - // the object form of setter: the 2nd argument is a dictionary - for(var x in name){ - exports.set(node, x, name[x]); - } - return node; // DomNode - } - var lc = name.toLowerCase(), propName = exports.names[lc] || name; - if(propName == "style" && typeof value != "string"){ // inline'd type check - // special case: setting a style - style.style(node, value); - return node; // DomNode - } - if(propName == "innerHTML"){ - // special case: assigning HTML - if(has("ie") && node.tagName.toLowerCase() in _roInnerHtml){ - ctr.empty(node); - node.appendChild(ctr.toDom(value, node.ownerDocument)); - }else{ - node[propName] = value; - } - return node; // DomNode - } - if(lang.isFunction(value)){ - // special case: assigning an event handler - // clobber if we can - var attrId = node[_attrId]; - if(!attrId){ - attrId = _ctr++; - node[_attrId] = attrId; - } - if(!_evtHdlrMap[attrId]){ - _evtHdlrMap[attrId] = {}; - } - var h = _evtHdlrMap[attrId][propName]; - if(h){ - //h.remove(); - conn.disconnect(h); - }else{ - try{ - delete node[propName]; - }catch(e){} - } - // ensure that event objects are normalized, etc. - if(value){ - //_evtHdlrMap[attrId][propName] = on(node, propName, value); - _evtHdlrMap[attrId][propName] = conn.connect(node, propName, value); - }else{ - node[propName] = null; - } - return node; // DomNode - } - node[propName] = value; - return node; // DomNode - }; -}); diff --git a/lib/dojo/dom-style.js.uncompressed.js b/lib/dojo/dom-style.js.uncompressed.js deleted file mode 100644 index e6b3822c9..000000000 --- a/lib/dojo/dom-style.js.uncompressed.js +++ /dev/null @@ -1,321 +0,0 @@ -define("dojo/dom-style", ["./_base/sniff", "./dom"], function(has, dom){ - // module: - // dojo/dom-style - // summary: - // This module defines the core dojo DOM style API. - - // ============================= - // Style Functions - // ============================= - - // getComputedStyle drives most of the style code. - // Wherever possible, reuse the returned object. - // - // API functions below that need to access computed styles accept an - // optional computedStyle parameter. - // If this parameter is omitted, the functions will call getComputedStyle themselves. - // This way, calling code can access computedStyle once, and then pass the reference to - // multiple API functions. - - /*===== - dojo.getComputedStyle = function(node){ - // summary: - // Returns a "computed style" object. - // - // description: - // Gets a "computed style" object which can be used to gather - // information about the current state of the rendered node. - // - // Note that this may behave differently on different browsers. - // Values may have different formats and value encodings across - // browsers. - // - // Note also that this method is expensive. Wherever possible, - // reuse the returned object. - // - // Use the dojo.style() method for more consistent (pixelized) - // return values. - // - // node: DOMNode - // A reference to a DOM node. Does NOT support taking an - // ID string for speed reasons. - // example: - // | dojo.getComputedStyle(dojo.byId('foo')).borderWidth; - // - // example: - // Reusing the returned object, avoiding multiple lookups: - // | var cs = dojo.getComputedStyle(dojo.byId("someNode")); - // | var w = cs.width, h = cs.height; - return; // CSS2Properties - } - =====*/ - - /*===== - dojo.toPixelValue = function(node, value){ - // summary: - // converts style value to pixels on IE or return a numeric value. - // node: DOMNode - // value: String - // returns: Number - }; - =====*/ - - /*===== - dojo._toPixelValue = function(node, value){ - // summary: - // Existing alias for `dojo._toPixelValue`. Deprecated, will be removed in 2.0. - }; - =====*/ - - /*===== - dojo.getStyle = function(node, name){ - // summary: - // Accesses styles on a node. - // description: - // Getting the style value uses the computed style for the node, so the value - // will be a calculated value, not just the immediate node.style value. - // Also when getting values, use specific style names, - // like "borderBottomWidth" instead of "border" since compound values like - // "border" are not necessarily reflected as expected. - // If you want to get node dimensions, use `dojo.marginBox()`, - // `dojo.contentBox()` or `dojo.position()`. - // node: DOMNode|String - // id or reference to node to get style for - // name: String? - // the style property to get - // example: - // Passing only an ID or node returns the computed style object of - // the node: - // | dojo.getStyle("thinger"); - // example: - // Passing a node and a style property returns the current - // normalized, computed value for that property: - // | dojo.getStyle("thinger", "opacity"); // 1 by default - }; - =====*/ - - /*===== - dojo.setStyle = function(node, name, value){ - // summary: - // Sets styles on a node. - // node: DOMNode|String - // id or reference to node to set style for - // name: String|Object - // the style property to set in DOM-accessor format - // ("borderWidth", not "border-width") or an object with key/value - // pairs suitable for setting each property. - // value: String? - // If passed, sets value on the node for style, handling - // cross-browser concerns. When setting a pixel value, - // be sure to include "px" in the value. For instance, top: "200px". - // Otherwise, in some cases, some browsers will not apply the style. - // - // example: - // Passing a node, a style property, and a value changes the - // current display of the node and returns the new computed value - // | dojo.setStyle("thinger", "opacity", 0.5); // == 0.5 - // - // example: - // Passing a node, an object-style style property sets each of the values in turn and returns the computed style object of the node: - // | dojo.setStyle("thinger", { - // | "opacity": 0.5, - // | "border": "3px solid black", - // | "height": "300px" - // | }); - // - // example: - // When the CSS style property is hyphenated, the JavaScript property is camelCased. - // font-size becomes fontSize, and so on. - // | dojo.setStyle("thinger",{ - // | fontSize:"14pt", - // | letterSpacing:"1.2em" - // | }); - // - // example: - // dojo.NodeList implements .style() using the same syntax, omitting the "node" parameter, calling - // dojo.style() on every element of the list. See: `dojo.query()` and `dojo.NodeList()` - // | dojo.query(".someClassName").style("visibility","hidden"); - // | // or - // | dojo.query("#baz > div").style({ - // | opacity:0.75, - // | fontSize:"13pt" - // | }); - }; - =====*/ - - // Although we normally eschew argument validation at this - // level, here we test argument 'node' for (duck)type, - // by testing nodeType, ecause 'document' is the 'parentNode' of 'body' - // it is frequently sent to this function even - // though it is not Element. - var getComputedStyle, style = {}; - if(has("webkit")){ - getComputedStyle = function(/*DomNode*/node){ - var s; - if(node.nodeType == 1){ - var dv = node.ownerDocument.defaultView; - s = dv.getComputedStyle(node, null); - if(!s && node.style){ - node.style.display = ""; - s = dv.getComputedStyle(node, null); - } - } - return s || {}; - }; - }else if(has("ie") && (has("ie") < 9 || has("quirks"))){ - getComputedStyle = function(node){ - // IE (as of 7) doesn't expose Element like sane browsers - return node.nodeType == 1 /* ELEMENT_NODE*/ ? node.currentStyle : {}; - }; - }else{ - getComputedStyle = function(node){ - return node.nodeType == 1 ? - node.ownerDocument.defaultView.getComputedStyle(node, null) : {}; - }; - } - style.getComputedStyle = getComputedStyle; - - var toPixel; - if(!has("ie")){ - toPixel = function(element, value){ - // style values can be floats, client code may want - // to round for integer pixels. - return parseFloat(value) || 0; - }; - }else{ - toPixel = function(element, avalue){ - if(!avalue){ return 0; } - // on IE7, medium is usually 4 pixels - if(avalue == "medium"){ return 4; } - // style values can be floats, client code may - // want to round this value for integer pixels. - if(avalue.slice && avalue.slice(-2) == 'px'){ return parseFloat(avalue); } - var s = element.style, rs = element.runtimeStyle, cs = element.currentStyle, - sLeft = s.left, rsLeft = rs.left; - rs.left = cs.left; - try{ - // 'avalue' may be incompatible with style.left, which can cause IE to throw - // this has been observed for border widths using "thin", "medium", "thick" constants - // those particular constants could be trapped by a lookup - // but perhaps there are more - s.left = avalue; - avalue = s.pixelLeft; - }catch(e){ - avalue = 0; - } - s.left = sLeft; - rs.left = rsLeft; - return avalue; - } - } - style.toPixelValue = toPixel; - - // FIXME: there opacity quirks on FF that we haven't ported over. Hrm. - - var astr = "DXImageTransform.Microsoft.Alpha"; - var af = function(n, f){ - try{ - return n.filters.item(astr); - }catch(e){ - return f ? {} : null; - } - }; - - var _getOpacity = - has("ie") < 9 || (has("ie") && has("quirks")) ? function(node){ - try{ - return af(node).Opacity / 100; // Number - }catch(e){ - return 1; // Number - } - } : - function(node){ - return getComputedStyle(node).opacity; - }; - - var _setOpacity = - has("ie") < 9 || (has("ie") && has("quirks")) ? function(/*DomNode*/node, /*Number*/opacity){ - var ov = opacity * 100, opaque = opacity == 1; - node.style.zoom = opaque ? "" : 1; - - if(!af(node)){ - if(opaque){ - return opacity; - } - node.style.filter += " progid:" + astr + "(Opacity=" + ov + ")"; - }else{ - af(node, 1).Opacity = ov; - } - - // on IE7 Alpha(Filter opacity=100) makes text look fuzzy so disable it altogether (bug #2661), - //but still update the opacity value so we can get a correct reading if it is read later. - af(node, 1).Enabled = !opaque; - - if(node.tagName.toLowerCase() == "tr"){ - for(var td = node.firstChild; td; td = td.nextSibling){ - if(td.tagName.toLowerCase() == "td"){ - _setOpacity(td, opacity); - } - } - } - return opacity; - } : - function(node, opacity){ - return node.style.opacity = opacity; - }; - - var _pixelNamesCache = { - left: true, top: true - }; - var _pixelRegExp = /margin|padding|width|height|max|min|offset/; // |border - function _toStyleValue(node, type, value){ - //TODO: should we really be doing string case conversion here? Should we cache it? Need to profile! - type = type.toLowerCase(); - if(has("ie")){ - if(value == "auto"){ - if(type == "height"){ return node.offsetHeight; } - if(type == "width"){ return node.offsetWidth; } - } - if(type == "fontweight"){ - switch(value){ - case 700: return "bold"; - case 400: - default: return "normal"; - } - } - } - if(!(type in _pixelNamesCache)){ - _pixelNamesCache[type] = _pixelRegExp.test(type); - } - return _pixelNamesCache[type] ? toPixel(node, value) : value; - } - - var _floatStyle = has("ie") ? "styleFloat" : "cssFloat", - _floatAliases = {"cssFloat": _floatStyle, "styleFloat": _floatStyle, "float": _floatStyle}; - - // public API - - style.get = function getStyle(/*DOMNode|String*/ node, /*String?*/ name){ - var n = dom.byId(node), l = arguments.length, op = (name == "opacity"); - if(l == 2 && op){ - return _getOpacity(n); - } - name = _floatAliases[name] || name; - var s = style.getComputedStyle(n); - return (l == 1) ? s : _toStyleValue(n, name, s[name] || n.style[name]); /* CSS2Properties||String||Number */ - }; - - style.set = function setStyle(/*DOMNode|String*/ node, /*String|Object*/ name, /*String?*/ value){ - var n = dom.byId(node), l = arguments.length, op = (name == "opacity"); - name = _floatAliases[name] || name; - if(l == 3){ - return op ? _setOpacity(n, value) : n.style[name] = value; // Number - } - for(var x in name){ - style.set(node, x, name[x]); - } - return style.getComputedStyle(n); - }; - - return style; -}); diff --git a/lib/dojo/dom.js.uncompressed.js b/lib/dojo/dom.js.uncompressed.js deleted file mode 100644 index 00bb8e757..000000000 --- a/lib/dojo/dom.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define("dojo/dom", ["./_base/sniff", "./_base/lang", "./_base/window"], - function(has, lang, win){ - // module: - // dojo/dom - // summary: - // This module defines the core dojo DOM API. - - // FIXME: need to add unit tests for all the semi-public methods - - try{ - document.execCommand("BackgroundImageCache", false, true); - }catch(e){ - // sane browsers don't have cache "issues" - } - - // ============================= - // DOM Functions - // ============================= - - /*===== - dojo.byId = function(id, doc){ - // summary: - // Returns DOM node with matching `id` attribute or `null` - // if not found. If `id` is a DomNode, this function is a no-op. - // - // id: String|DOMNode - // A string to match an HTML id attribute or a reference to a DOM Node - // - // doc: Document? - // Document to work in. Defaults to the current value of - // dojo.doc. Can be used to retrieve - // node references from other documents. - // - // example: - // Look up a node by ID: - // | var n = dojo.byId("foo"); - // - // example: - // Check if a node exists, and use it. - // | var n = dojo.byId("bar"); - // | if(n){ doStuff() ... } - // - // example: - // Allow string or DomNode references to be passed to a custom function: - // | var foo = function(nodeOrId){ - // | nodeOrId = dojo.byId(nodeOrId); - // | // ... more stuff - // | } - =====*/ - - /*===== - dojo.isDescendant = function(node, ancestor){ - // summary: - // Returns true if node is a descendant of ancestor - // node: DOMNode|String - // string id or node reference to test - // ancestor: DOMNode|String - // string id or node reference of potential parent to test against - // - // example: - // Test is node id="bar" is a descendant of node id="foo" - // | if(dojo.isDescendant("bar", "foo")){ ... } - }; - =====*/ - - // TODO: do we need this function in the base? - - /*===== - dojo.setSelectable = function(node, selectable){ - // summary: - // Enable or disable selection on a node - // node: DOMNode|String - // id or reference to node - // selectable: Boolean - // state to put the node in. false indicates unselectable, true - // allows selection. - // example: - // Make the node id="bar" unselectable - // | dojo.setSelectable("bar"); - // example: - // Make the node id="bar" selectable - // | dojo.setSelectable("bar", true); - }; - =====*/ - - var dom = {}; // the result object - - if(has("ie")){ - dom.byId = function(id, doc){ - if(typeof id != "string"){ - return id; - } - var _d = doc || win.doc, te = id && _d.getElementById(id); - // 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; - }else{ - var eles = _d.all[id]; - if(!eles || eles.nodeName){ - eles = [eles]; - } - // if more than 1, choose first with the correct id - var i = 0; - while((te = eles[i++])){ - if((te.attributes && te.attributes.id && te.attributes.id.value == id) || te.id == id){ - return te; - } - } - } - }; - }else{ - dom.byId = function(id, doc){ - // inline'd type check. - // be sure to return null per documentation, to match IE branch. - return ((typeof id == "string") ? (doc || win.doc).getElementById(id) : id) || null; // DOMNode - }; - } - /*===== - }; - =====*/ - - dom.isDescendant = function(/*DOMNode|String*/node, /*DOMNode|String*/ancestor){ - try{ - node = dom.byId(node); - ancestor = dom.byId(ancestor); - while(node){ - if(node == ancestor){ - return true; // Boolean - } - node = node.parentNode; - } - }catch(e){ /* squelch, return false */ } - return false; // Boolean - }; - - // TODO: do we need this function in the base? - - dom.setSelectable = function(/*DOMNode|String*/node, /*Boolean*/selectable){ - node = dom.byId(node); - if(has("mozilla")){ - node.style.MozUserSelect = selectable ? "" : "none"; - }else if(has("khtml") || has("webkit")){ - node.style.KhtmlUserSelect = selectable ? "auto" : "none"; - }else if(has("ie")){ - var v = (node.unselectable = selectable ? "" : "on"), - cs = node.getElementsByTagName("*"), i = 0, l = cs.length; - for(; i < l; ++i){ - cs.item(i).unselectable = v; - } - } - //FIXME: else? Opera? - }; - - return dom; -}); diff --git a/lib/dojo/domReady.js.uncompressed.js b/lib/dojo/domReady.js.uncompressed.js deleted file mode 100644 index bc0ea8b3c..000000000 --- a/lib/dojo/domReady.js.uncompressed.js +++ /dev/null @@ -1,95 +0,0 @@ -define("dojo/domReady", ['./has'], function(has){ - var global = this, - doc = document, - readyStates = { 'loaded': 1, 'complete': 1 }, - fixReadyState = typeof doc.readyState != "string", - ready = !!readyStates[doc.readyState]; - - // For FF <= 3.5 - if(fixReadyState){ doc.readyState = "loading"; } - - if(!ready){ - var readyQ = [], tests = [], - detectReady = function(evt){ - evt = evt || global.event; - if(ready || (evt.type == "readystatechange" && !readyStates[doc.readyState])){ return; } - ready = 1; - - // For FF <= 3.5 - if(fixReadyState){ doc.readyState = "complete"; } - - while(readyQ.length){ - (readyQ.shift())(); - } - }, - on = function(node, event){ - node.addEventListener(event, detectReady, false); - readyQ.push(function(){ node.removeEventListener(event, detectReady, false); }); - }; - - if(!has("dom-addeventlistener")){ - on = function(node, event){ - event = "on" + event; - node.attachEvent(event, detectReady); - readyQ.push(function(){ node.detachEvent(event, detectReady); }); - }; - - var div = doc.createElement("div"); - try{ - if(div.doScroll && global.frameElement === null){ - // the doScroll test is only useful if we're in the top-most frame - tests.push(function(){ - // Derived with permission from Diego Perini's IEContentLoaded - // http://javascript.nwbox.com/IEContentLoaded/ - try{ - div.doScroll("left"); - return 1; - }catch(e){} - }); - } - }catch(e){} - } - - on(doc, "DOMContentLoaded"); - on(global, "load"); - - if("onreadystatechange" in doc){ - on(doc, "readystatechange"); - }else if(!fixReadyState){ - // if the ready state property exists and there's - // no readystatechange event, poll for the state - // to change - tests.push(function(){ - return readyStates[doc.readyState]; - }); - } - - if(tests.length){ - var poller = function(){ - if(ready){ return; } - var i = tests.length; - while(i--){ - if(tests[i]()){ - detectReady("poller"); - return; - } - } - setTimeout(poller, 30); - }; - poller(); - } - } - - function domReady(callback){ - if(ready){ - callback(1); - }else{ - readyQ.push(callback); - } - } - domReady.load = function(id, req, load){ - domReady(load); - }; - - return domReady; -}); diff --git a/lib/dojo/fx.js.uncompressed.js b/lib/dojo/fx.js.uncompressed.js deleted file mode 100644 index 7853e3ec4..000000000 --- a/lib/dojo/fx.js.uncompressed.js +++ /dev/null @@ -1,426 +0,0 @@ -define("dojo/fx", [ - "./_base/lang", - "./Evented", - "./_base/kernel", - "./_base/array", - "./_base/connect", - "./_base/fx", - "./dom", - "./dom-style", - "./dom-geometry", - "./ready", - "require" // for context sensitive loading of Toggler -], function(lang, Evented, dojo, arrayUtil, connect, baseFx, dom, domStyle, geom, ready, require) { - - // module: - // dojo/fx - // summary: - // TODOC - - - /*===== - dojo.fx = { - // summary: Effects library on top of Base animations - }; - var coreFx = dojo.fx; - =====*/ - -// For back-compat, remove in 2.0. -if(!dojo.isAsync){ - ready(0, function(){ - var requires = ["./fx/Toggler"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - - var coreFx = dojo.fx = {}; - - var _baseObj = { - _fire: function(evt, args){ - if(this[evt]){ - this[evt].apply(this, args||[]); - } - return this; - } - }; - - var _chain = function(animations){ - this._index = -1; - this._animations = animations||[]; - this._current = this._onAnimateCtx = this._onEndCtx = null; - - this.duration = 0; - arrayUtil.forEach(this._animations, function(a){ - this.duration += a.duration; - if(a.delay){ this.duration += a.delay; } - }, this); - }; - _chain.prototype = new Evented(); - lang.extend(_chain, { - _onAnimate: function(){ - this._fire("onAnimate", arguments); - }, - _onEnd: function(){ - connect.disconnect(this._onAnimateCtx); - connect.disconnect(this._onEndCtx); - this._onAnimateCtx = this._onEndCtx = null; - if(this._index + 1 == this._animations.length){ - this._fire("onEnd"); - }else{ - // switch animations - this._current = this._animations[++this._index]; - this._onAnimateCtx = connect.connect(this._current, "onAnimate", this, "_onAnimate"); - this._onEndCtx = connect.connect(this._current, "onEnd", this, "_onEnd"); - this._current.play(0, true); - } - }, - play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ - if(!this._current){ this._current = this._animations[this._index = 0]; } - if(!gotoStart && this._current.status() == "playing"){ return this; } - var beforeBegin = connect.connect(this._current, "beforeBegin", this, function(){ - this._fire("beforeBegin"); - }), - onBegin = connect.connect(this._current, "onBegin", this, function(arg){ - this._fire("onBegin", arguments); - }), - onPlay = connect.connect(this._current, "onPlay", this, function(arg){ - this._fire("onPlay", arguments); - connect.disconnect(beforeBegin); - connect.disconnect(onBegin); - connect.disconnect(onPlay); - }); - if(this._onAnimateCtx){ - connect.disconnect(this._onAnimateCtx); - } - this._onAnimateCtx = connect.connect(this._current, "onAnimate", this, "_onAnimate"); - if(this._onEndCtx){ - connect.disconnect(this._onEndCtx); - } - this._onEndCtx = connect.connect(this._current, "onEnd", this, "_onEnd"); - this._current.play.apply(this._current, arguments); - return this; - }, - pause: function(){ - if(this._current){ - var e = connect.connect(this._current, "onPause", this, function(arg){ - this._fire("onPause", arguments); - connect.disconnect(e); - }); - this._current.pause(); - } - return this; - }, - gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){ - this.pause(); - var offset = this.duration * percent; - this._current = null; - arrayUtil.some(this._animations, function(a){ - if(a.duration <= offset){ - this._current = a; - return true; - } - offset -= a.duration; - return false; - }); - if(this._current){ - this._current.gotoPercent(offset / this._current.duration, andPlay); - } - return this; - }, - stop: function(/*boolean?*/ gotoEnd){ - if(this._current){ - if(gotoEnd){ - for(; this._index + 1 < this._animations.length; ++this._index){ - this._animations[this._index].stop(true); - } - this._current = this._animations[this._index]; - } - var e = connect.connect(this._current, "onStop", this, function(arg){ - this._fire("onStop", arguments); - connect.disconnect(e); - }); - this._current.stop(); - } - return this; - }, - status: function(){ - return this._current ? this._current.status() : "stopped"; - }, - destroy: function(){ - if(this._onAnimateCtx){ connect.disconnect(this._onAnimateCtx); } - if(this._onEndCtx){ connect.disconnect(this._onEndCtx); } - } - }); - lang.extend(_chain, _baseObj); - - coreFx.chain = /*===== dojo.fx.chain = =====*/ function(/*dojo.Animation[]*/ animations){ - // 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, - // not the individual animations within) - // - // example: - // Once `node` is faded out, fade in `otherNode` - // | dojo.fx.chain([ - // | dojo.fadeIn({ node:node }), - // | dojo.fadeOut({ node:otherNode }) - // | ]).play(); - // - return new _chain(animations); // dojo.Animation - }; - - var _combine = function(animations){ - this._animations = animations||[]; - this._connects = []; - this._finished = 0; - - this.duration = 0; - arrayUtil.forEach(animations, function(a){ - var duration = a.duration; - if(a.delay){ duration += a.delay; } - if(this.duration < duration){ this.duration = duration; } - this._connects.push(connect.connect(a, "onEnd", this, "_onEnd")); - }, this); - - this._pseudoAnimation = new baseFx.Animation({curve: [0, 1], duration: this.duration}); - var self = this; - arrayUtil.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], - function(evt){ - self._connects.push(connect.connect(self._pseudoAnimation, evt, - function(){ self._fire(evt, arguments); } - )); - } - ); - }; - lang.extend(_combine, { - _doAction: function(action, args){ - arrayUtil.forEach(this._animations, function(a){ - a[action].apply(a, args); - }); - return this; - }, - _onEnd: function(){ - if(++this._finished > this._animations.length){ - this._fire("onEnd"); - } - }, - _call: function(action, args){ - var t = this._pseudoAnimation; - t[action].apply(t, args); - }, - play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ - 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(/*Decimal*/percent, /*Boolean?*/ andPlay){ - var ms = this.duration * percent; - arrayUtil.forEach(this._animations, function(a){ - a.gotoPercent(a.duration < ms ? 1 : (ms / a.duration), andPlay); - }); - this._call("gotoPercent", arguments); - return this; - }, - stop: function(/*boolean?*/ gotoEnd){ - this._doAction("stop", arguments); - this._call("stop", arguments); - return this; - }, - status: function(){ - return this._pseudoAnimation.status(); - }, - destroy: function(){ - arrayUtil.forEach(this._connects, connect.disconnect); - } - }); - lang.extend(_combine, _baseObj); - - coreFx.combine = /*===== dojo.fx.combine = =====*/ function(/*dojo.Animation[]*/ animations){ - // summary: - // Combine a list of `dojo.Animation`s to run in parallel - // - // description: - // Combine an array of `dojo.Animation`s to run in parallel, - // providing a new `dojo.Animation` instance encompasing each - // animation, firing standard animation events. - // - // example: - // Fade out `node` while fading in `otherNode` simultaneously - // | dojo.fx.combine([ - // | dojo.fadeIn({ node:node }), - // | dojo.fadeOut({ node:otherNode }) - // | ]).play(); - // - // example: - // When the longest animation ends, execute a function: - // | var anim = dojo.fx.combine([ - // | dojo.fadeIn({ node: n, duration:700 }), - // | dojo.fadeOut({ node: otherNode, duration: 300 }) - // | ]); - // | dojo.connect(anim, "onEnd", function(){ - // | // overall animation is done. - // | }); - // | anim.play(); // play the animation - // - return new _combine(animations); // dojo.Animation - }; - - coreFx.wipeIn = /*===== dojo.fx.wipeIn = =====*/ function(/*Object*/ args){ - // summary: - // Expand a node to it's natural height. - // - // description: - // Returns an animation that will expand the - // node defined in 'args' object from it's current height to - // it's natural height (with no scrollbar). - // Node must have no margin/border/padding. - // - // args: Object - // A hash-map of standard `dojo.Animation` constructor properties - // (such as easing: node: duration: and so on) - // - // example: - // | dojo.fx.wipeIn({ - // | node:"someId" - // | }).play() - var node = args.node = dom.byId(args.node), s = node.style, o; - - var anim = baseFx.animateProperty(lang.mixin({ - properties: { - height: { - // wrapped in functions so we wait till the last second to query (in case value has changed) - start: function(){ - // start at current [computed] height, but use 1px rather than 0 - // because 0 causes IE to display the whole panel - o = s.overflow; - s.overflow = "hidden"; - if(s.visibility == "hidden" || s.display == "none"){ - s.height = "1px"; - s.display = ""; - s.visibility = ""; - return 1; - }else{ - var height = domStyle.get(node, "height"); - return Math.max(height, 1); - } - }, - end: function(){ - return node.scrollHeight; - } - } - } - }, args)); - - var fini = function(){ - s.height = "auto"; - s.overflow = o; - }; - connect.connect(anim, "onStop", fini); - connect.connect(anim, "onEnd", fini); - - return anim; // dojo.Animation - }; - - coreFx.wipeOut = /*===== dojo.fx.wipeOut = =====*/ function(/*Object*/ args){ - // summary: - // Shrink a node to nothing and hide it. - // - // description: - // Returns an animation that will shrink node defined in "args" - // from it's current height to 1px, and then hide it. - // - // 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() - - var node = args.node = dom.byId(args.node), s = node.style, o; - - var anim = baseFx.animateProperty(lang.mixin({ - properties: { - height: { - end: 1 // 0 causes IE to display the whole panel - } - } - }, args)); - - connect.connect(anim, "beforeBegin", function(){ - o = s.overflow; - s.overflow = "hidden"; - s.display = ""; - }); - var fini = function(){ - s.overflow = o; - s.height = "auto"; - s.display = "none"; - }; - connect.connect(anim, "onStop", fini); - connect.connect(anim, "onEnd", fini); - - return anim; // dojo.Animation - }; - - coreFx.slideTo = /*===== dojo.fx.slideTo = =====*/ function(/*Object*/ args){ - // summary: - // Slide a node to a new top/left position - // - // description: - // Returns an animation that will slide "node" - // defined in args Object from its current position to - // the position defined by (args.left, args.top). - // - // args: Object - // A hash-map of standard `dojo.Animation` constructor properties - // (such as easing: node: duration: and so on). Special args members - // are `top` and `left`, which indicate the new position to slide to. - // - // example: - // | .slideTo({ node: node, left:"40", top:"50", units:"px" }).play() - - var node = args.node = dom.byId(args.node), - top = null, left = null; - - var init = (function(n){ - return function(){ - var cs = domStyle.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 = geom.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 = baseFx.animateProperty(lang.mixin({ - properties: { - top: args.top || 0, - left: args.left || 0 - } - }, args)); - connect.connect(anim, "beforeBegin", anim, init); - - return anim; // dojo.Animation - }; - - return coreFx; -}); diff --git a/lib/dojo/fx/Toggler.js.uncompressed.js b/lib/dojo/fx/Toggler.js.uncompressed.js deleted file mode 100644 index 3e4891af2..000000000 --- a/lib/dojo/fx/Toggler.js.uncompressed.js +++ /dev/null @@ -1,103 +0,0 @@ -define("dojo/fx/Toggler", ["../_base/lang","../_base/declare","../_base/fx", "../_base/connect"], - function(lang, declare, baseFx, connectUtil) { - // module: - // dojo/fx/Toggler - // summary: - // TODOC - -return declare("dojo.fx.Toggler", null, { - // summary: - // A simple `dojo.Animation` toggler API. - // - // 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`). - // - // example: - // | var t = new dojo.fx.Toggler({ - // | node: "nodeId", - // | showDuration: 500, - // | // hideDuration will default to "200" - // | showFunc: dojo.fx.wipeIn, - // | // hideFunc will default to "fadeOut" - // | }); - // | t.show(100); // delay showing for 100ms - // | // ...time passes... - // | t.hide(); - - // node: DomNode - // the node to target for the showing and hiding animations - node: null, - - // showFunc: Function - // The function that returns the `dojo.Animation` to show the node - showFunc: baseFx.fadeIn, - - // hideFunc: Function - // The function that returns the `dojo.Animation` to hide the node - hideFunc: baseFx.fadeOut, - - // showDuration: - // Time in milliseconds to run the show Animation - showDuration: 200, - - // hideDuration: - // Time in milliseconds to run the hide Animation - hideDuration: 200, - - // FIXME: need a policy for where the toggler should "be" the next - // time show/hide are called if we're stopped somewhere in the - // middle. - // FIXME: also would be nice to specify individual showArgs/hideArgs mixed into - // each animation individually. - // FIXME: also would be nice to have events from the animations exposed/bridged - - /*===== - _showArgs: null, - _showAnim: null, - - _hideArgs: null, - _hideAnim: null, - - _isShowing: false, - _isHiding: false, - =====*/ - - constructor: function(args){ - var _t = this; - - lang.mixin(_t, args); - _t.node = args.node; - _t._showArgs = lang.mixin({}, args); - _t._showArgs.node = _t.node; - _t._showArgs.duration = _t.showDuration; - _t.showAnim = _t.showFunc(_t._showArgs); - - _t._hideArgs = lang.mixin({}, args); - _t._hideArgs.node = _t.node; - _t._hideArgs.duration = _t.hideDuration; - _t.hideAnim = _t.hideFunc(_t._hideArgs); - - connectUtil.connect(_t.showAnim, "beforeBegin", lang.hitch(_t.hideAnim, "stop", true)); - connectUtil.connect(_t.hideAnim, "beforeBegin", lang.hitch(_t.showAnim, "stop", true)); - }, - - show: function(delay){ - // summary: Toggle the node to showing - // delay: Integer? - // Ammount of time to stall playing the show animation - return this.showAnim.play(delay || 0); - }, - - hide: function(delay){ - // summary: Toggle the node to hidden - // delay: Integer? - // Ammount of time to stall playing the hide animation - return this.hideAnim.play(delay || 0); - } -}); - -}); diff --git a/lib/dojo/fx/easing.js.uncompressed.js b/lib/dojo/fx/easing.js.uncompressed.js deleted file mode 100644 index 6663deb2b..000000000 --- a/lib/dojo/fx/easing.js.uncompressed.js +++ /dev/null @@ -1,284 +0,0 @@ -define("dojo/fx/easing", ["../_base/lang"], function(lang) { -// module: -// dojo/fx/easing -// summary: -// This module defines standard easing functions that are useful for animations. - -var easingFuncs = /*===== dojo.fx.easing= =====*/ { - // summary: - // Collection of easing functions to use beyond the default - // `dojo._defaultEasing` function. - // - // description: - // - // Easing functions are used to manipulate the iteration through - // an `dojo.Animation`s _Line. _Line being the properties of an Animation, - // 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. - // - // 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', - // | duration: 2000, - // | // note there is no () - // | easing: dojo.fx.easing.quadIn - // | }).play(); - // - - linear: function(/* Decimal? */n){ - // summary: A linear easing function - return n; - }, - - quadIn: function(/* Decimal? */n){ - return Math.pow(n, 2); - }, - - quadOut: function(/* Decimal? */n){ - return n * (n - 2) * -1; - }, - - quadInOut: function(/* Decimal? */n){ - n = n * 2; - if(n < 1){ return Math.pow(n, 2) / 2; } - return -1 * ((--n) * (n - 2) - 1) / 2; - }, - - cubicIn: function(/* Decimal? */n){ - return Math.pow(n, 3); - }, - - cubicOut: function(/* Decimal? */n){ - return Math.pow(n - 1, 3) + 1; - }, - - cubicInOut: function(/* Decimal? */n){ - n = n * 2; - if(n < 1){ return Math.pow(n, 3) / 2; } - n -= 2; - return (Math.pow(n, 3) + 2) / 2; - }, - - quartIn: function(/* Decimal? */n){ - return Math.pow(n, 4); - }, - - quartOut: function(/* Decimal? */n){ - return -1 * (Math.pow(n - 1, 4) - 1); - }, - - quartInOut: function(/* Decimal? */n){ - n = n * 2; - if(n < 1){ return Math.pow(n, 4) / 2; } - n -= 2; - return -1 / 2 * (Math.pow(n, 4) - 2); - }, - - quintIn: function(/* Decimal? */n){ - return Math.pow(n, 5); - }, - - quintOut: function(/* Decimal? */n){ - return Math.pow(n - 1, 5) + 1; - }, - - quintInOut: function(/* Decimal? */n){ - n = n * 2; - if(n < 1){ return Math.pow(n, 5) / 2; } - n -= 2; - return (Math.pow(n, 5) + 2) / 2; - }, - - sineIn: function(/* Decimal? */n){ - return -1 * Math.cos(n * (Math.PI / 2)) + 1; - }, - - sineOut: function(/* Decimal? */n){ - return Math.sin(n * (Math.PI / 2)); - }, - - sineInOut: function(/* Decimal? */n){ - return -1 * (Math.cos(Math.PI * n) - 1) / 2; - }, - - expoIn: function(/* Decimal? */n){ - return (n == 0) ? 0 : Math.pow(2, 10 * (n - 1)); - }, - - expoOut: function(/* Decimal? */n){ - return (n == 1) ? 1 : (-1 * Math.pow(2, -10 * n) + 1); - }, - - expoInOut: function(/* Decimal? */n){ - if(n == 0){ return 0; } - if(n == 1){ return 1; } - n = n * 2; - if(n < 1){ return Math.pow(2, 10 * (n - 1)) / 2; } - --n; - return (-1 * Math.pow(2, -10 * n) + 2) / 2; - }, - - circIn: function(/* Decimal? */n){ - return -1 * (Math.sqrt(1 - Math.pow(n, 2)) - 1); - }, - - circOut: function(/* Decimal? */n){ - n = n - 1; - return Math.sqrt(1 - Math.pow(n, 2)); - }, - - circInOut: function(/* Decimal? */n){ - n = n * 2; - if(n < 1){ return -1 / 2 * (Math.sqrt(1 - Math.pow(n, 2)) - 1); } - n -= 2; - return 1 / 2 * (Math.sqrt(1 - Math.pow(n, 2)) + 1); - }, - - backIn: function(/* Decimal? */n){ - // 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 - // 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. - // - // description: - // 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 - // properties cannot be set to negative values. - - n = n - 1; - var s = 1.70158; - return Math.pow(n, 2) * ((s + 1) * n + s) + 1; - }, - - backInOut: function(/* Decimal? */n){ - // 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 - // as some properties cannot be set to negative values. - var s = 1.70158 * 1.525; - n = n * 2; - if(n < 1){ return (Math.pow(n, 2) * ((s + 1) * n - s)) / 2; } - n-=2; - return (Math.pow(n, 2) * ((s + 1) * n + s) + 2) / 2; - }, - - elasticIn: function(/* Decimal? */n){ - // 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 - // as some properties cannot be set to negative values. - if(n == 0 || n == 1){ return n; } - var p = .3; - var s = p / 4; - n = n - 1; - return -1 * Math.pow(2, 10 * n) * Math.sin((n - s) * (2 * Math.PI) / p); - }, - - elasticOut: function(/* Decimal? */n){ - // summary: - // An easing function that elasticly snaps around the target value, - // near the end of the Animation - // - // description: - // 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 - // negative as some properties cannot be set to negative values. - if(n==0 || n == 1){ return n; } - var p = .3; - var s = p / 4; - return Math.pow(2, -10 * n) * Math.sin((n - s) * (2 * Math.PI) / p) + 1; - }, - - elasticInOut: function(/* Decimal? */n){ - // summary: - // An easing function that elasticly snaps around the value, near - // the beginning and end of the Animation. - // - // description: - // 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 - // negative as some properties cannot be set to negative values. - if(n == 0) return 0; - n = n * 2; - if(n == 2) return 1; - var p = .3 * 1.5; - var s = p / 4; - if(n < 1){ - n -= 1; - return -.5 * (Math.pow(2, 10 * n) * Math.sin((n - s) * (2 * Math.PI) / p)); - } - n -= 1; - return .5 * (Math.pow(2, -10 * n) * Math.sin((n - s) * (2 * Math.PI) / p)) + 1; - }, - - bounceIn: function(/* Decimal? */n){ - // summary: - // An easing function that 'bounces' near the beginning of an Animation - return (1 - easingFuncs.bounceOut(1 - n)); // Decimal - }, - - bounceOut: function(/* Decimal? */n){ - // summary: - // An easing function that 'bounces' near the end of an Animation - var s = 7.5625; - var p = 2.75; - var l; - if(n < (1 / p)){ - l = s * Math.pow(n, 2); - }else if(n < (2 / p)){ - n -= (1.5 / p); - l = s * Math.pow(n, 2) + .75; - }else if(n < (2.5 / p)){ - n -= (2.25 / p); - l = s * Math.pow(n, 2) + .9375; - }else{ - n -= (2.625 / p); - l = s * Math.pow(n, 2) + .984375; - } - return l; - }, - - bounceInOut: function(/* Decimal? */n){ - // summary: - // An easing function that 'bounces' at the beginning and end of the Animation - if(n < 0.5){ return easingFuncs.bounceIn(n * 2) / 2; } - return (easingFuncs.bounceOut(n * 2 - 1) / 2) + 0.5; // Decimal - } -}; - -lang.setObject("dojo.fx.easing", easingFuncs); - -return easingFuncs; -}); diff --git a/lib/dojo/gears.js.uncompressed.js b/lib/dojo/gears.js.uncompressed.js deleted file mode 100644 index 8ab6c9568..000000000 --- a/lib/dojo/gears.js.uncompressed.js +++ /dev/null @@ -1,61 +0,0 @@ -define("dojo/gears", ["./_base/kernel", "./_base/lang", "./_base/sniff"], - function(dojo, lang, has) { - // module: - // dojo/gears - // summary: - // TODOC - -lang.getObject("gears", true, dojo); - -dojo.gears._gearsObject = function(){ - // summary: - // factory method to get a Google Gears plugin instance to - // expose in the browser runtime environment, if present - var factory; - - var gearsObj = lang.getObject("google.gears"); - if(gearsObj){ return gearsObj; } // already defined elsewhere - - if(typeof GearsFactory != "undefined"){ // Firefox - factory = new GearsFactory(); - }else{ - if(has("ie")){ - // IE - try{ - factory = new ActiveXObject("Gears.Factory"); - }catch(e){ - // ok to squelch; there's no gears factory. move on. - } - }else if(navigator.mimeTypes["application/x-googlegears"]){ - // Safari? - factory = document.createElement("object"); - factory.setAttribute("type", "application/x-googlegears"); - factory.setAttribute("width", 0); - factory.setAttribute("height", 0); - factory.style.display = "none"; - document.documentElement.appendChild(factory); - } - } - - // still nothing? - if(!factory){ return null; } - - // define the global objects now; don't overwrite them though if they - // were somehow set internally by the Gears plugin, which is on their - // dev roadmap for the future - lang.setObject("google.gears.factory", factory); - return lang.getObject("google.gears"); -}; - -/*===== -dojo.gears.available = { - // summary: True if client is using Google Gears -}; -=====*/ -// see if we have Google Gears installed, and if -// so, make it available in the runtime environment -// and in the Google standard 'google.gears' global object -dojo.gears.available = (!!dojo.gears._gearsObject())||0; - -return dojo.gears; -}); diff --git a/lib/dojo/has.js.uncompressed.js b/lib/dojo/has.js.uncompressed.js deleted file mode 100644 index 18ed4f581..000000000 --- a/lib/dojo/has.js.uncompressed.js +++ /dev/null @@ -1,178 +0,0 @@ -define("dojo/has", ["require"], function(require) { - // module: - // dojo/has - // summary: - // Defines the has.js API and several feature tests used by dojo. - // description: - // This module defines the has API as described by the project has.js with the following additional features: - // - // * the has test cache is exposed at has.cache. - // * the method has.add includes a forth parameter that controls whether or not existing tests are replaced - // * the loader's has cache may be optionally copied into this module's has cahce. - // - // This module adopted from https://github.com/phiggins42/has.js; thanks has.js team! - - // try to pull the has implementation from the loader; both the dojo loader and bdLoad provide one - // WARNING: if a foreign loader defines require.has to be something other than the has.js API, then this implementation fail - var has = require.has || function(){}; - if(!1){ - // notice the condition is written so that if 1 is transformed to 1 during a build - // the conditional will be (!1 && typeof has=="function") which is statically false and the closure - // compiler will discard the block. - var - isBrowser = - // the most fundamental decision: are we in the browser? - typeof window != "undefined" && - typeof location != "undefined" && - typeof document != "undefined" && - window.location == location && window.document == document, - - // has API variables - global = this, - doc = isBrowser && document, - element = doc && doc.createElement("DiV"), - cache = {}; - - has = /*===== dojo.has= =====*/ function(name){ - // summary: - // Return the current value of the named feature. - // - // name: String|Integer - // The name (if a string) or identifier (if an integer) of the feature to test. - // - // description: - // Returns the value of the feature named by name. The feature must have been - // previously added to the cache by has.add. - - return typeof cache[name] == "function" ? (cache[name] = cache[name](global, doc, element)) : cache[name]; // Boolean - }; - - has.cache = cache; - - has.add = /*====== dojo.has.add= ======*/ function(name, test, now, force){ - // summary: - // Register a new feature test for some named feature. - // - // name: String|Integer - // The name (if a string) or identifier (if an integer) of the feature to test. - // - // test: Function - // A test function to register. If a function, queued for testing until actually - // needed. The test function should return a boolean indicating - // the presence of a feature or bug. - // - // now: Boolean? - // Optional. Omit if `test` is not a function. Provides a way to immediately - // run the test and cache the result. - // - // force: Boolean? - // Optional. If the test already exists and force is truthy, then the existing - // test will be replaced; otherwise, add does not replace an existing test (that - // is, by default, the first test advice wins). - // - // example: - // A redundant test, testFn with immediate execution: - // | has.add("javascript", function(){ return true; }, true); - // - // example: - // Again with the redundantness. You can do this in your tests, but we should - // not be doing this in any internal has.js tests - // | has.add("javascript", true); - // - // example: - // Three things are passed to the testFunction. `global`, `document`, and a generic element - // from which to work your test should the need arise. - // | has.add("bug-byid", function(g, d, el){ - // | // g == global, typically window, yadda yadda - // | // d == document object - // | // el == the generic element. a `has` element. - // | return false; // fake test, byid-when-form-has-name-matching-an-id is slightly longer - // | }); - - (typeof cache[name]=="undefined" || force) && (cache[name]= test); - return now && has(name); - }; - - // since we're operating under a loader that doesn't provide a has API, we must explicitly initialize - // has as it would have otherwise been initialized by the dojo loader; use has.add to the builder - // can optimize these away iff desired - true || has.add("host-browser", isBrowser); - true || has.add("dom", isBrowser); - true || has.add("dojo-dom-ready-api", 1); - true || has.add("dojo-sniff", 1); - } - - if(1){ - var agent = navigator.userAgent; - // Common application level tests - has.add("dom-addeventlistener", !!document.addEventListener); - has.add("touch", "ontouchstart" in document); - // I don't know if any of these tests are really correct, just a rough guess - has.add("device-width", screen.availWidth || innerWidth); - has.add("agent-ios", !!agent.match(/iPhone|iP[ao]d/)); - has.add("agent-android", agent.indexOf("android") > 1); - } - - has.clearElement = /*===== dojo.has.clearElement= ======*/ function(element) { - // summary: - // Deletes the contents of the element passed to test functions. - element.innerHTML= ""; - return element; - }; - - has.normalize = /*===== dojo.has.normalize= ======*/ function(id, toAbsMid){ - // summary: - // Resolves id into a module id based on possibly-nested tenary expression that branches on has feature test value(s). - // - // toAbsMid: Function - // Resolves a relative module id into an absolute module id - var - tokens = id.match(/[\?:]|[^:\?]*/g), i = 0, - get = function(skip){ - var term = tokens[i++]; - if(term == ":"){ - // empty string module name, resolves to 0 - return 0; - }else{ - // postfixed with a ? means it is a feature to branch on, the term is the name of the feature - if(tokens[i++] == "?"){ - if(!skip && has(term)){ - // matched the feature, get the first value from the options - return get(); - }else{ - // did not match, get the second value, passing over the first - get(true); - return get(skip); - } - } - // a module - return term || 0; - } - }; - id = get(); - return id && toAbsMid(id); - }; - - has.load = /*===== dojo.has.load= ======*/ function(id, parentRequire, loaded){ - // summary: - // Conditional loading of AMD modules based on a has feature test value. - // - // id: String - // Gives the resolved module id to load. - // - // parentRequire: Function - // The loader require function with respect to the module that contained the plugin resource in it's - // dependency list. - // - // loaded: Function - // Callback to loader that consumes result of plugin demand. - - if(id){ - parentRequire([id], loaded); - }else{ - loaded(); - } - }; - - return has; -}); diff --git a/lib/dojo/hash.js.uncompressed.js b/lib/dojo/hash.js.uncompressed.js deleted file mode 100644 index 6824f818c..000000000 --- a/lib/dojo/hash.js.uncompressed.js +++ /dev/null @@ -1,243 +0,0 @@ -define("dojo/hash", ["./_base/kernel", "require", "./_base/connect", "./_base/lang", "./ready", "./_base/sniff"], - function(dojo, require, connect, lang, ready, has) { - // module: - // dojo/hash - // summary: - // TODOC - - -//TODOC: where does this go? -// summary: -// Methods for monitoring and updating the hash in the browser URL. -// -// example: -// dojo.subscribe("/dojo/hashchange", context, callback); -// -// function callback (hashValue){ -// // do something based on the hash value. -// } - - dojo.hash = function(/* String? */ hash, /* Boolean? */ replace){ - // summary: - // Gets or sets the hash string. - // description: - // 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: - // the hash is set - #string. - // replace: - // 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. - - // getter - if(!arguments.length){ - return _getHash(); - } - // setter - if(hash.charAt(0) == "#"){ - hash = hash.substring(1); - } - if(replace){ - _replace(hash); - }else{ - location.href = "#" + hash; - } - return hash; // String - }; - - // Global vars - 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) : ""; - } - - function _getHash(){ - return _getSegment(location.href, "#"); - } - - function _dispatchEvent(){ - connect.publish("/dojo/hashchange", [_getHash()]); - } - - function _pollLocation(){ - if(_getHash() === _recentHash){ - return; - } - _recentHash = _getHash(); - _dispatchEvent(); - } - - function _replace(hash){ - if(_ieUriMonitor){ - if(_ieUriMonitor.isTransitioning()){ - setTimeout(lang.hitch(null,_replace,hash), _pollFrequency); - return; - } - var href = _ieUriMonitor.iframe.location.href; - var index = href.indexOf('?'); - // main frame will detect and update itself - _ieUriMonitor.iframe.location.replace(href.substring(0, index) + "?" + hash); - return; - } - location.replace("#"+hash); - !_connect && _pollLocation(); - } - - function IEUriMonitor(){ - // summary: - // Determine if the browser's URI has changed or if the user has pressed the - // back or forward button. If so, call _dispatchEvent. - // - // description: - // IE doesn't add changes to the URI's hash into the history unless the hash - // value corresponds to an actual named anchor in the document. To get around - // this IE difference, we use a background IFrame to maintain a back-forward - // history, by updating the IFrame's query string to correspond to the - // value of the main browser location's hash value. - // - // E.g. if the value of the browser window's location changes to - // - // #action=someAction - // - // ... then we'd update the IFrame's source to: - // - // ?action=someAction - // - // This design leads to a somewhat complex state machine, which is - // described below: - // - // s1: Stable state - neither the window's location has changed nor - // has the IFrame's location. Note that this is the 99.9% case, so - // we optimize for it. - // Transitions: s1, s2, s3 - // s2: Window's location changed - when a user clicks a hyperlink or - // code programmatically changes the window's URI. - // Transitions: s4 - // s3: Iframe's location changed as a result of user pressing back or - // forward - when the user presses back or forward, the location of - // the background's iframe changes to the previous or next value in - // its history. - // Transitions: s1 - // s4: IEUriMonitor has programmatically changed the location of the - // background iframe, but it's location hasn't yet changed. In this - // case we do nothing because we need to wait for the iframe's - // location to reflect its actual state. - // Transitions: s4, s5 - // s5: IEUriMonitor has programmatically changed the location of the - // background iframe, and the iframe's location has caught up with - // reality. In this case we need to transition to s1. - // Transitions: s1 - // - // The hashchange event is always dispatched on the transition back to s1. - // - - // create and append iframe - var ifr = document.createElement("iframe"), - IFRAME_ID = "dojo-hash-iframe", - ifrSrc = dojo.config.dojoBlankHtmlUrl || require.toUrl("./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"; - document.body.appendChild(ifr); - - this.iframe = dojo.global[IFRAME_ID]; - var recentIframeQuery, transitioning, expectedIFrameQuery, docTitle, ifrOffline, - iframeLoc = this.iframe.location; - - function resetState(){ - _recentHash = _getHash(); - recentIframeQuery = ifrOffline ? _recentHash : _getSegment(iframeLoc.href, "?"); - transitioning = false; - expectedIFrameQuery = null; - } - - this.isTransitioning = function(){ - return transitioning; - }; - - this.pollLocation = function(){ - if(!ifrOffline) { - try{ - //see if we can access the iframe's location without a permission denied error - var iframeSearch = _getSegment(iframeLoc.href, "?"); - //good, the iframe is same origin (no thrown exception) - if(document.title != docTitle){ //sync title of main window with title of iframe. - docTitle = this.iframe.document.title = document.title; - } - }catch(e){ - //permission denied - server cannot be reached. - ifrOffline = true; - console.error("dojo.hash: Error adding history entry. Server unreachable."); - } - } - var hash = _getHash(); - if(transitioning && _recentHash === hash){ - // we're in an iframe transition (s4 or s5) - if(ifrOffline || iframeSearch === expectedIFrameQuery){ - // s5 (iframe caught up to main window or iframe offline), transition back to s1 - resetState(); - _dispatchEvent(); - }else{ - // s4 (waiting for iframe to catch up to main window) - setTimeout(lang.hitch(this,this.pollLocation),0); - return; - } - }else if(_recentHash === hash && (ifrOffline || recentIframeQuery === iframeSearch)){ - // we're in stable state (s1, iframe query == main window hash), do nothing - }else{ - // the user has initiated a URL change somehow. - // sync iframe query <-> main window hash - if(_recentHash !== hash){ - // s2 (main window location changed), set iframe url and transition to s4 - _recentHash = hash; - transitioning = true; - expectedIFrameQuery = hash; - ifr.src = ifrSrc + "?" + expectedIFrameQuery; - ifrOffline = false; //we're updating the iframe src - set offline to false so we can check again on next poll. - setTimeout(lang.hitch(this,this.pollLocation),0); //yielded transition to s4 while iframe reloads. - return; - }else if(!ifrOffline){ - // s3 (iframe location changed via back/forward button), set main window url and transition to s1. - location.href = "#" + iframeLoc.search.substring(1); - resetState(); - _dispatchEvent(); - } - } - setTimeout(lang.hitch(this,this.pollLocation), _pollFrequency); - }; - resetState(); // initialize state (transition to s1) - setTimeout(lang.hitch(this,this.pollLocation), _pollFrequency); - } - ready(function(){ - if("onhashchange" in dojo.global && (!has("ie") || (has("ie") >= 8 && document.compatMode != "BackCompat"))){ //need this IE browser test because "onhashchange" exists in IE8 in IE7 mode - _connect = connect.connect(dojo.global,"onhashchange",_dispatchEvent); - }else{ - if(document.addEventListener){ // Non-IE - _recentHash = _getHash(); - setInterval(_pollLocation, _pollFrequency); //Poll the window location for changes - }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. - } - }); - - return dojo.hash; - -}); diff --git a/lib/dojo/html.js.uncompressed.js b/lib/dojo/html.js.uncompressed.js deleted file mode 100644 index 696973102..000000000 --- a/lib/dojo/html.js.uncompressed.js +++ /dev/null @@ -1,342 +0,0 @@ -define("dojo/html", ["./_base/kernel", "./_base/lang", "./_base/array", "./_base/declare", "./dom", "./dom-construct", "./parser"], function(dojo, lang, darray, declare, dom, domConstruct, parser) { - // module: - // dojo/html - // summary: - // TODOC - - lang.getObject("html", true, dojo); - - // the parser might be needed.. - - // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes - var idCounter = 0; - - 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 - }; - -/*==== - dojo.html._emptyNode = function(node){ - // summary: - // removes all child nodes from the given node - // node: DOMNode - // the parent element - }; -=====*/ - dojo.html._emptyNode = domConstruct.empty; - - dojo.html._setNodeContent = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont){ - // summary: - // inserts the given content into the given node - // node: - // the parent element - // content: - // 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 - domConstruct.empty(node); - - if(cont) { - if(typeof cont == "string") { - cont = domConstruct.toDom(cont, node.ownerDocument); - } - if(!cont.nodeType && lang.isArrayLike(cont)) { - // handle as enumerable, but it may shrink as we enumerate it - for(var startlen=cont.length, i=0; i<cont.length; i=startlen==cont.length ? i+1 : 0) { - domConstruct.place( cont[i], node, "last"); - } - } else { - // pass nodes, documentFragments and unknowns through to dojo.place - domConstruct.place(cont, node, "last"); - } - } - - // return DomNode - return node; - }; - - // we wrap up the content-setting operation in a object - declare("dojo.html._ContentSetter", null, - { - // node: DomNode|String - // An node which will be the parent element that we set content into - node: "", - - // content: String|DomNode|DomNode[] - // The content to be placed in the node. Can be an HTML string, a node reference, or a enumerable list of nodes - content: "", - - // id: String? - // Usually only used internally, and auto-generated with each instance - id: "", - - // cleanContent: Boolean - // Should the content be treated as a full html document, - // and the real content stripped of <html>, <body> wrapper before injection - cleanContent: false, - - // extractContent: Boolean - // Should the content be treated as a full html document, and the real content stripped of <html>, <body> wrapper before injection - extractContent: false, - - // 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){ - // summary: - // Provides a configurable, extensible object to wrap the setting on content on a node - // call the set() method to actually set the content.. - - // the original params are mixed directly into the instance "this" - lang.mixin(this, params || {}); - - // give precedence to params.node vs. the node argument - // and ensure its a node, not an id string - node = this.node = dom.byId( this.node || node ); - - if(!this.id){ - this.id = [ - "Setter", - (node) ? node.id || node.tagName : "", - idCounter++ - ].join("_"); - } - }, - set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){ - // summary: - // 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 - if(undefined !== cont){ - this.content = cont; - } - // in the re-use scenario, set needs to be able to mixin new configuration - if(params){ - this._mixin(params); - } - - this.onBegin(); - this.setContent(); - this.onEnd(); - - return this.node; - }, - setContent: function(){ - // summary: - // sets the content on the node - - var node = this.node; - if(!node) { - // can't proceed - throw new Error(this.declaredClass + ": setContent given no node"); - } - try{ - node = dojo.html._setNodeContent(node, this.content); - }catch(e){ - // check if a domfault occurs when we are appending this.errorMessage - // like for instance if domNode is a UL and we try append a DIV - - // FIXME: need to allow the user to provide a content error message string - var errMess = this.onContentError(e); - try{ - node.innerHTML = errMess; - }catch(e){ - console.error('Fatal ' + this.declaredClass + '.setContent could not change content due to '+e.message, e); - } - } - // always put back the node for the next method - this.node = node; // DomNode - }, - - empty: function() { - // summary - // cleanly empty out existing content - - // destroy any widgets from a previous run - // 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) { - darray.forEach(this.parseResults, function(w) { - if(w.destroy){ - w.destroy(); - } - }); - delete this.parseResults; - } - // 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 - // - including the node and content provided - before the set operation actually takes place - // This default implementation checks for cleanContent and extractContent flags to - // optionally pre-process html string content - var cont = this.content; - - if(lang.isString(cont)){ - if(this.cleanContent){ - cont = dojo.html._secureForInnerHtml(cont); - } - - if(this.extractContent){ - var match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im); - if(match){ cont = match[1]; } - } - } - - // clean out the node and any cruft associated with it - like widgets - this.empty(); - - this.content = cont; - return this.node; /* DomNode */ - }, - - onEnd: function(){ - // summary - // Called after set(), when the new content has been pushed into the node - // It provides an opportunity for post-processing before handing back the node to the caller - // This default implementation checks a parseContent flag to optionally run the dojo parser over the new content - if(this.parseContent){ - // populates this.parseResults if you need those.. - this._parse(); - } - return this.node; /* DomNode */ - }, - - tearDown: function(){ - // summary - // manually reset the Setter instance if its being re-used for example for another set() - // description - // 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; - }, - - onContentError: function(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 - // 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; - for(key in params){ - 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]; - } - }, - _parse: function(){ - // 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 = {}; - darray.forEach(["dir", "lang", "textDir"], function(name){ - if(this[name]){ - inherited[name] = this[name]; - } - }, this); - this.parseResults = parser.parse({ - rootNode: rootNode, - noStart: !this.startup, - inherited: inherited, - scope: this.parserScope - }); - }catch(e){ - this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id); - } - }, - - _onError: function(type, err, consoleText){ - // summary: - // shows user the string that is returned by on[type]Error - // overide/implement on[type]Error and return your own string to customize - var errText = this['on' + type + 'Error'].call(this, err); - if(consoleText){ - console.error(consoleText, err); - }else if(errText){ // a empty string won't change current content - dojo.html._setNodeContent(this.node, errText, true); - } - } - }); // end dojo.declare() - - dojo.html.set = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont, /* Object? */ params){ - // summary: - // inserts (replaces) the given content into the given node. dojo.place(cont, node, "only") - // may be a better choice for simple HTML insertion. - // description: - // Unless you need to use the params capabilities of this method, you should use - // dojo.place(cont, node, "only"). dojo.place() has more robust support for injecting - // an HTML string into the DOM, but it only handles inserting an HTML string as DOM - // elements, or inserting a DOM node. dojo.place does not handle NodeList insertions - // or the other capabilities as defined by the params object for this method. - // node: - // the parent element that will receive the content - // cont: - // 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: - // 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}); - 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{ - // 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(lang.mixin( - params, - { content: cont, node: node } - )); - return op.set(); - } - }; - - return dojo.html; -}); diff --git a/lib/dojo/i18n.js.uncompressed.js b/lib/dojo/i18n.js.uncompressed.js deleted file mode 100644 index ebc94c265..000000000 --- a/lib/dojo/i18n.js.uncompressed.js +++ /dev/null @@ -1,514 +0,0 @@ -define("dojo/i18n", ["./_base/kernel", "require", "./has", "./_base/array", "./_base/config", "./_base/lang", "./_base/xhr", "./json"], - function(dojo, require, has, array, config, lang, xhr, json) { - // module: - // dojo/i18n - // summary: - // This module implements the !dojo/i18n plugin and the v1.6- i18n API - // description: - // We choose to include our own plugin to leverage functionality already contained in dojo - // and thereby reduce the size of the plugin compared to various loader implementations. Also, this - // allows foreign AMD loaders to be used without their plugins. - - - has.add("dojo-preload-i18n-Api", - // if true, define the preload localizations machinery - 1 - ); - - true || has.add("dojo-v1x-i18n-Api", - // if true, define the v1.x i18n functions - 1 - ); - - var - thisModule= dojo.i18n= - // the dojo.i18n module - {}, - - 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. - // - // If root===false indicates we're working with a pre-AMD i18n bundle that doesn't tell about the available locales; - // therefore, assume everything is available and get 404 errors that indicate a particular localization is not available - // - - for(var result= [bundlePath + bundleName], localeParts= locale.split("-"), current= "", i= 0; i<localeParts.length; i++){ - current+= (current ? "-" : "") + localeParts[i]; - if(!root || root[current]){ - result.push(bundlePath + current + "/" + bundleName); - } - } - return result; - }, - - cache= {}, - - getL10nName= dojo.getL10nName = function(moduleName, bundleName, locale){ - locale = locale ? locale.toLowerCase() : dojo.locale; - moduleName = "dojo/i18n!" + moduleName.replace(/\./g, "/"); - bundleName = bundleName.replace(/\./g, "/"); - return (/root/i.test(locale)) ? - (moduleName + "/nls/" + bundleName) : - (moduleName + "/nls/" + locale + "/" + bundleName); - }, - - doLoad = function(require, bundlePathAndName, bundlePath, bundleName, locale, load){ - // get the root bundle which instructs which other bundles are required to construct the localized bundle - require([bundlePathAndName], function(root){ - var current= lang.clone(root.root), - availableLocales= getAvailableLocales(!root._v1x && root, locale, bundlePath, bundleName); - require(availableLocales, function(){ - for (var i= 1; i<availableLocales.length; i++){ - current= lang.mixin(lang.clone(current), arguments[i]); - } - // target may not have been resolve (e.g., maybe only "fr" exists when "fr-ca" was requested) - var target= bundlePathAndName + "/" + locale; - cache[target]= current; - load(); - }); - }); - }, - - normalize = function(id, toAbsMid){ - // id may be relative - // preload has form *preload*<path>/nls/<module>*<flattened locales> and - // therefore never looks like a relative - return /^\./.test(id) ? toAbsMid(id) : id; - }, - - getLocalesToLoad = function(targetLocale){ - var list = config.extraLocale || []; - list = lang.isArray(list) ? list : [list]; - list.push(targetLocale); - return list; - }, - - load = function(id, require, load){ - // - // id is in one of the following formats - // - // 1. <path>/nls/<bundle> - // => load the bundle, localized to config.locale; load all bundles localized to - // config.extraLocale (if any); return the loaded bundle localized to config.locale. - // - // 2. <path>/nls/<locale>/<bundle> - // => load then return the bundle localized to <locale> - // - // 3. *preload*<path>/nls/<module>*<JSON array of available locales> - // => for config.locale and all config.extraLocale, load all bundles found - // in the best-matching bundle rollup. A value of 1 is returned, which - // is meaningless other than to say the plugin is executing the requested - // preloads - // - // In cases 1 and 2, <path> is always normalized to an absolute module id upon entry; see - // normalize. In case 3, it <path> is assumed to be absolue; this is arranged by the builder. - // - // To load a bundle means to insert the bundle into the plugin's cache and publish the bundle - // value to the loader. Given <path>, <bundle>, and a particular <locale>, the cache key - // - // <path>/nls/<bundle>/<locale> - // - // will hold the value. Similarly, then plugin will publish this value to the loader by - // - // define("<path>/nls/<bundle>/<locale>", <bundle-value>); - // - // Given this algorithm, other machinery can provide fast load paths be preplacing - // values in the plugin's cache, which is public. When a load is demanded the - // cache is inspected before starting any loading. Explicitly placing values in the plugin - // cache is an advanced/experimental feature that should not be needed; use at your own risk. - // - // For the normal AMD algorithm, the root bundle is loaded first, which instructs the - // plugin what additional localized bundles are required for a particular locale. These - // additional locales are loaded and a mix of the root and each progressively-specific - // locale is returned. For example: - // - // 1. The client demands "dojo/i18n!some/path/nls/someBundle - // - // 2. The loader demands load(some/path/nls/someBundle) - // - // 3. This plugin require's "some/path/nls/someBundle", which is the root bundle. - // - // 4. Assuming config.locale is "ab-cd-ef" and the root bundle indicates that localizations - // are available for "ab" and "ab-cd-ef" (note the missing "ab-cd", then the plugin - // requires "some/path/nls/ab/someBundle" and "some/path/nls/ab-cd-ef/someBundle" - // - // 5. Upon receiving all required bundles, the plugin constructs the value of the bundle - // ab-cd-ef as... - // - // mixin(mixin(mixin({}, require("some/path/nls/someBundle"), - // require("some/path/nls/ab/someBundle")), - // require("some/path/nls/ab-cd-ef/someBundle")); - // - // This value is inserted into the cache and published to the loader at the - // key/module-id some/path/nls/someBundle/ab-cd-ef. - // - // The special preload signature (case 3) instructs the plugin to stop servicing all normal requests - // (further preload requests will be serviced) until all ongoing preloading has completed. - // - // The preload signature instructs the plugin that a special rollup module is available that contains - // one or more flattened, localized bundles. The JSON array of available locales indicates which locales - // are available. Here is an example: - // - // *preload*some/path/nls/someModule*["root", "ab", "ab-cd-ef"] - // - // This indicates the following rollup modules are available: - // - // some/path/nls/someModule_ROOT - // some/path/nls/someModule_ab - // some/path/nls/someModule_ab-cd-ef - // - // Each of these modules is a normal AMD module that contains one or more flattened bundles in a hash. - // For example, assume someModule contained the bundles some/bundle/path/someBundle and - // some/bundle/path/someOtherBundle, then some/path/nls/someModule_ab would be expressed as folllows: - // - // define({ - // some/bundle/path/someBundle:<value of someBundle, flattened with respect to locale ab>, - // some/bundle/path/someOtherBundle:<value of someOtherBundle, flattened with respect to locale ab>, - // }); - // - // E.g., given this design, preloading for locale=="ab" can execute the following algorithm: - // - // require(["some/path/nls/someModule_ab"], function(rollup){ - // for(var p in rollup){ - // var id = p + "/ab", - // cache[id] = rollup[p]; - // define(id, rollup[p]); - // } - // }); - // - // Similarly, if "ab-cd" is requested, the algorithm can determine that "ab" is the best available and - // load accordingly. - // - // The builder will write such rollups for every layer if a non-empty localeList profile property is - // provided. Further, the builder will include the following cache entry in the cache associated with - // any layer. - // - // "*now":function(r){r(['dojo/i18n!*preload*<path>/nls/<module>*<JSON array of available locales>']);} - // - // The *now special cache module instructs the loader to apply the provided function to context-require - // with respect to the particular layer being defined. This causes the plugin to hold all normal service - // requests until all preloading is complete. - // - // Notice that this algorithm is rarely better than the standard AMD load algorithm. Consider the normal case - // where the target locale has a single segment and a layer depends on a single bundle: - // - // Without Preloads: - // - // 1. Layer loads root bundle. - // 2. bundle is demanded; plugin loads single localized bundle. - // - // With Preloads: - // - // 1. Layer causes preloading of target bundle. - // 2. bundle is demanded; service is delayed until preloading complete; bundle is returned. - // - // In each case a single transaction is required to load the target bundle. In cases where multiple bundles - // are required and/or the locale has multiple segments, preloads still requires a single transaction whereas - // the normal path requires an additional transaction for each additional bundle/locale-segment. However all - // of these additional transactions can be done concurrently. Owing to this analysis, the entire preloading - // algorithm can be discard during a build by setting the has feature dojo-preload-i18n-Api to false. - // - if(has("dojo-preload-i18n-Api")){ - var split = id.split("*"), - preloadDemand = split[1]=="preload"; - if(preloadDemand){ - if(!cache[id]){ - // use cache[id] to prevent multiple preloads of the same preload; this shouldn't happen, but - // who knows what over-aggressive human optimizers may attempt - cache[id] = 1; - preloadL10n(split[2], json.parse(split[3]), 1); - } - // don't stall the loader! - load(1); - } - if(preloadDemand || waitForPreloads(id, require, load)){ - return; - } - } - - var match= nlsRe.exec(id), - bundlePath= match[1] + "/", - bundleName= match[5] || match[4], - bundlePathAndName= bundlePath + bundleName, - localeSpecified = (match[5] && match[4]), - targetLocale= localeSpecified || dojo.locale, - loadTarget= bundlePathAndName + "/" + targetLocale, - loadList = localeSpecified ? [targetLocale] : getLocalesToLoad(targetLocale), - remaining = loadList.length, - finish = function(){ - if(!--remaining){ - load(lang.delegate(cache[loadTarget])); - } - }; - array.forEach(loadList, function(locale){ - var target = bundlePathAndName + "/" + locale; - if(has("dojo-preload-i18n-Api")){ - checkForLegacyModules(target); - } - if(!cache[target]){ - doLoad(require, bundlePathAndName, bundlePath, bundleName, locale, finish); - }else{ - finish(); - } - }); - }; - - if(has("dojo-unit-tests")){ - var unitTests = thisModule.unitTests = []; - } - - if(has("dojo-preload-i18n-Api") || 1){ - var normalizeLocale = thisModule.normalizeLocale= function(locale){ - var result = locale ? locale.toLowerCase() : dojo.locale; - return result == "root" ? "ROOT" : result; - }, - - isXd = function(mid){ - return (1 && 1) ? - require.isXdUrl(require.toUrl(mid + ".js")) : - true; - }, - - preloading = 0, - - preloadWaitQueue = [], - - preloadL10n = thisModule._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated, /*boolean*/ guaranteedAmdFormat){ - // summary: - // Load available flattened resource bundles associated with a particular module for dojo.locale and all dojo.config.extraLocale (if any) - // - // descirption: - // Only called by built layer files. The entire locale hierarchy is loaded. For example, - // if locale=="ab-cd", then ROOT, "ab", and "ab-cd" are loaded. This is different than v1.6- - // in that the v1.6- would lonly load ab-cd...which was *always* flattened. - // - // If guaranteedAmdFormat is true, then the module can be loaded with require thereby circumventing the detection algorithm - // and the extra possible extra transaction. - // - - function forEachLocale(locale, func){ - // given locale= "ab-cd-ef", calls func on "ab-cd-ef", "ab-cd", "ab", "ROOT"; stops calling the first time func returns truthy - var parts = locale.split("-"); - while(parts.length){ - if(func(parts.join("-"))){ - return true; - } - parts.pop(); - } - return func("ROOT"); - } - - function preload(locale){ - locale = normalizeLocale(locale); - forEachLocale(locale, function(loc){ - if(array.indexOf(localesGenerated, loc)>=0){ - var mid = bundlePrefix.replace(/\./g, "/")+"_"+loc; - preloading++; - (isXd(mid) || guaranteedAmdFormat ? require : syncRequire)([mid], function(rollup){ - for(var p in rollup){ - cache[p + "/" + locale] = rollup[p]; - } - --preloading; - while(!preloading && preloadWaitQueue.length){ - load.apply(null, preloadWaitQueue.shift()); - } - }); - return true; - } - return false; - }); - } - - preload(); - array.forEach(dojo.config.extraLocale, preload); - }, - - waitForPreloads = function(id, require, load){ - if(preloading){ - preloadWaitQueue.push([id, require, load]); - } - return preloading; - }; - } - - if(1){ - // this code path assumes the dojo loader and won't work with a standard AMD loader - var evalBundle= - // use the function ctor to keep the minifiers away (also come close to global scope, but this is secondary) - new Function( - "__bundle", // the bundle to evalutate - "__checkForLegacyModules", // a function that checks if __bundle defined __mid in the global space - "__mid", // the mid that __bundle is intended to define - - // returns one of: - // 1 => the bundle was an AMD bundle - // a legacy bundle object that is the value of __mid - // instance of Error => could not figure out how to evaluate bundle - - // used to detect when __bundle calls define - "var define = function(){define.called = 1;}," - + " require = function(){define.called = 1;};" - - + "try{" - + "define.called = 0;" - + "eval(__bundle);" - + "if(define.called==1)" - // bundle called define; therefore signal it's an AMD bundle - + "return 1;" - - + "if((__checkForLegacyModules = __checkForLegacyModules(__mid)))" - // bundle was probably a v1.6- built NLS flattened NLS bundle that defined __mid in the global space - + "return __checkForLegacyModules;" - - + "}catch(e){}" - // evaulating the bundle was *neither* an AMD *nor* a legacy flattened bundle - // either way, re-eval *after* surrounding with parentheses - - + "try{" - + "return eval('('+__bundle+')');" - + "}catch(e){" - + "return e;" - + "}" - ), - - syncRequire= function(deps, callback){ - var results= []; - array.forEach(deps, function(mid){ - var url= require.toUrl(mid + ".js"); - - function load(text){ - var result = evalBundle(text, checkForLegacyModules, mid); - if(result===1){ - // the bundle was an AMD module; re-inject it through the normal AMD path - // we gotta do this since it could be an anonymous module and simply evaluating - // the text here won't provide the loader with the context to know what - // module is being defined()'d. With browser caching, this should be free; further - // this entire code path can be circumvented by using the AMD format to begin with - require([mid], function(bundle){ - results.push(cache[url]= bundle); - }); - }else{ - if(result instanceof Error){ - console.error("failed to evaluate i18n bundle; url=" + url, result); - result = {}; - } - // nls/<locale>/<bundle-name> indicates not the root. - results.push(cache[url] = (/nls\/[^\/]+\/[^\/]+$/.test(url) ? result : {root:result, _v1x:1})); - } - } - - if(cache[url]){ - results.push(cache[url]); - }else{ - var bundle= require.syncLoadNls(mid); - // don't need to check for legacy since syncLoadNls returns a module if the module - // (1) was already loaded, or (2) was in the cache. In case 1, if syncRequire is called - // from getLocalization --> load, then load will have called checkForLegacyModules() before - // calling syncRequire; if syncRequire is called from preloadLocalizations, then we - // don't care about checkForLegacyModules() because that will be done when a particular - // bundle is actually demanded. In case 2, checkForLegacyModules() is never relevant - // because cached modules are always v1.7+ built modules. - if(bundle){ - results.push(bundle); - }else{ - if(!xhr){ - try{ - require.getText(url, true, load); - }catch(e){ - results.push(cache[url]= {}); - } - }else{ - xhr.get({ - url:url, - sync:true, - load:load, - error:function(){ - results.push(cache[url]= {}); - } - }); - } - } - } - }); - callback && callback.apply(null, results); - }, - - checkForLegacyModules = function(target){ - // legacy code may have already loaded [e.g] the raw bundle x/y/z at x.y.z; when true, push into the cache - for(var result, names = target.split("/"), object = dojo.global[names[0]], i = 1; object && i<names.length-1; object = object[names[i++]]){} - if(object){ - result = object[names[i]]; - if(!result){ - // fallback for incorrect bundle build of 1.6 - result = object[names[i].replace(/-/g,"_")]; - } - if(result){ - cache[target] = result; - } - } - return result; - }; - - thisModule.getLocalization= function(moduleName, bundleName, locale){ - var result, - l10nName= getL10nName(moduleName, bundleName, locale).substring(10); - load(l10nName, (!isXd(l10nName) ? syncRequire : require), function(result_){ result= result_; }); - return result; - }; - - if(has("dojo-unit-tests")){ - unitTests.push(function(doh){ - doh.register("tests.i18n.unit", function(t){ - var check; - - check = evalBundle("{prop:1}"); - t.is({prop:1}, check); t.is(undefined, check[1]); - - check = evalBundle("({prop:1})"); - t.is({prop:1}, check); t.is(undefined, check[1]); - - check = evalBundle("{'prop-x':1}"); - t.is({'prop-x':1}, check); t.is(undefined, check[1]); - - check = evalBundle("({'prop-x':1})"); - t.is({'prop-x':1}, check); t.is(undefined, check[1]); - - check = evalBundle("define({'prop-x':1})"); - t.is(1, check); - - check = evalBundle("this is total nonsense and should throw an error"); - t.is(check instanceof Error, true); - }); - }); - } - } - - return lang.mixin(thisModule, { - dynamic:true, - normalize:normalize, - load:load, - cache:cache - }); -}); diff --git a/lib/dojo/io-query.js.uncompressed.js b/lib/dojo/io-query.js.uncompressed.js deleted file mode 100644 index a5799bfc2..000000000 --- a/lib/dojo/io-query.js.uncompressed.js +++ /dev/null @@ -1,98 +0,0 @@ -define("dojo/io-query", ["./_base/lang"], function(lang){ - // module: - // dojo/io-query - // summary: - // This module defines query string processing functions. - - var backstop = {}; - - function objectToQuery(/*Object*/ map){ - // summary: - // takes a name/value mapping object and returns a string representing - // a URL-encoded version of that object. - // example: - // this object: - // - // | { - // | blah: "blah", - // | multi: [ - // | "thud", - // | "thonk" - // | ] - // | }; - // - // yields the following query string: - // - // | "blah=blah&multi=thud&multi=thonk" - - // FIXME: need to implement encodeAscii!! - var enc = encodeURIComponent, pairs = []; - for(var name in map){ - var value = map[name]; - if(value != backstop[name]){ - var assign = enc(name) + "="; - if(lang.isArray(value)){ - for(var i = 0, l = value.length; i < l; ++i){ - pairs.push(assign + enc(value[i])); - } - }else{ - pairs.push(assign + enc(value)); - } - } - } - return pairs.join("&"); // String - } - - function queryToObject(/*String*/ str){ - // summary: - // Create an object representing a de-serialized query section of a - // URL. Query keys with multiple values are returned in an array. - // - // example: - // This string: - // - // | "foo=bar&foo=baz&thinger=%20spaces%20=blah&zonk=blarg&" - // - // results in this object structure: - // - // | { - // | foo: [ "bar", "baz" ], - // | thinger: " spaces =blah", - // | zonk: "blarg" - // | } - // - // Note that spaces and other urlencoded entities are correctly - // handled. - - // FIXME: should we grab the URL string if we're not passed one? - var dec = decodeURIComponent, qp = str.split("&"), ret = {}, name, val; - for(var i = 0, l = qp.length, item; i < l; ++i){ - item = qp[i]; - if(item.length){ - var s = item.indexOf("="); - if(s < 0){ - name = dec(item); - val = ""; - }else{ - name = dec(item.slice(0, s)); - val = dec(item.slice(s + 1)); - } - if(typeof ret[name] == "string"){ // inline'd type check - ret[name] = [ret[name]]; - } - - if(lang.isArray(ret[name])){ - ret[name].push(val); - }else{ - ret[name] = val; - } - } - } - return ret; // Object - } - - return { - objectToQuery: objectToQuery, - queryToObject: queryToObject - }; -}); \ No newline at end of file diff --git a/lib/dojo/io/iframe.js.uncompressed.js b/lib/dojo/io/iframe.js.uncompressed.js deleted file mode 100644 index 9ac948278..000000000 --- a/lib/dojo/io/iframe.js.uncompressed.js +++ /dev/null @@ -1,376 +0,0 @@ -define("dojo/io/iframe", ["../main", "require"], function(dojo, require) { - // module: - // dojo/io/iframe - // summary: - // TODOC - -dojo.getObject("io", true, dojo); - -/*===== -dojo.declare("dojo.io.iframe.__ioArgs", dojo.__IoArgs, { - constructor: function(){ - // summary: - // All the properties described in the dojo.__ioArgs type, apply - // to this type. The following additional properties are allowed - // for dojo.io.iframe.send(): - // method: String? - // The HTTP method to use. "GET" or "POST" are the only supported - // values. It will try to read the value from the form node's - // method, then try this argument. If neither one exists, then it - // defaults to POST. - // handleAs: String? - // Specifies what format the result data should be given to the - // load/handle callback. Valid values are: text, html, xml, json, - // javascript. IMPORTANT: For all values EXCEPT html and xml, The - // server response should be an HTML file with a textarea element. - // The response data should be inside the textarea element. Using an - // HTML document the only reliable, cross-browser way this - // transport can know when the response has loaded. For the html - // handleAs value, just return a normal HTML document. NOTE: xml - // is now supported with this transport (as of 1.1+); a known issue - // is if the XML document in question is malformed, Internet Explorer - // will throw an uncatchable error. - // content: Object? - // If "form" is one of the other args properties, then the content - // object properties become hidden form form elements. For - // instance, a content object of {name1 : "value1"} is converted - // to a hidden form element with a name of "name1" and a value of - // "value1". If there is not a "form" property, then the content - // object is converted into a name=value&name=value string, by - // using dojo.objectToQuery(). - this.method = method; - this.handleAs = handleAs; - this.content = content; - } -}); -=====*/ - -dojo.io.iframe = { - // summary: - // Sends an Ajax I/O call using and Iframe (for instance, to upload files) - - create: function(/*String*/fname, /*String*/onloadstr, /*String?*/uri){ - // summary: - // Creates a hidden iframe in the page. Used mostly for IO - // transports. You do not need to call this to start a - // dojo.io.iframe request. Just call send(). - // fname: String - // The name of the iframe. Used for the name attribute on the - // iframe. - // onloadstr: String - // A string of JavaScript that will be executed when the content - // in the iframe loads. - // uri: String - // The value of the src attribute on the iframe element. If a - // value is not given, then dojo/resources/blank.html will be - // used. - if(window[fname]){ return window[fname]; } - if(window.frames[fname]){ return window.frames[fname]; } - var turi = uri; - if(!turi){ - if(dojo.config["useXDomain"] && !dojo.config["dojoBlankHtmlUrl"]){ - console.warn("dojo.io.iframe.create: 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"); - } - turi = (dojo.config["dojoBlankHtmlUrl"]||require.toUrl("../resources/blank.html")); - } - 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()); - - window[fname] = cframe; - - return cframe; - }, - - setSrc: function(/*DOMNode*/iframe, /*String*/src, /*Boolean*/replace){ - //summary: - // Sets the URL that is loaded in an IFrame. The replace parameter - // indicates whether location.replace() should be used when - // changing the location of the iframe. - try{ - if(!replace){ - if(dojo.isWebKit){ - iframe.location = src; - }else{ - frames[iframe.name].location = src; - } - }else{ - // Fun with DOM 0 incompatibilities! - var idoc; - if(dojo.isIE || dojo.isWebKit){ - idoc = iframe.contentWindow.document; - }else{ // if(d.isMozilla){ - idoc = iframe.contentWindow; - } - - //For Safari (at least 2.0.3) and Opera, if the iframe - //has just been created but it doesn't have content - //yet, then iframe.document may be null. In that case, - //use iframe.location and return. - if(!idoc){ - iframe.location = src; - }else{ - idoc.location.replace(src); - } - } - }catch(e){ - console.log("dojo.io.iframe.setSrc: ", e); - } - }, - - doc: function(/*DOMNode*/iframeNode){ - //summary: Returns the document object associated with the iframe DOM Node argument. - return iframeNode.contentDocument || // W3 - ( - ( - (iframeNode.name) && (iframeNode.document) && - (dojo.doc.getElementsByTagName("iframe")[iframeNode.name].contentWindow) && - (dojo.doc.getElementsByTagName("iframe")[iframeNode.name].contentWindow.document) - ) - ) || // IE - ( - (iframeNode.name)&&(dojo.doc.frames[iframeNode.name])&& - (dojo.doc.frames[iframeNode.name].document) - ) || null; - }, - - send: function(/*dojo.io.iframe.__ioArgs*/args){ - //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. - if(!this["_frame"]){ - this._frame = this.create(this._iframeName, dojo._scopeName + ".io.iframe._iframeOnload();"); - } - - //Set up the deferred. - var dfd = dojo._ioSetArgs( - args, - function(/*Deferred*/dfd){ - //summary: canceller function for dojo._ioSetArgs call. - dfd.canceled = true; - dfd.ioArgs._callNext(); - }, - function(/*Deferred*/dfd){ - //summary: okHandler function for dojo._ioSetArgs call. - var value = null; - try{ - var ioArgs = dfd.ioArgs; - var dii = dojo.io.iframe; - var ifd = dii.doc(dii._frame); - var handleAs = ioArgs.handleAs; - - //Assign correct value based on handleAs value. - value = ifd; //html - 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 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, "><"); - xmlText=dojo.trim(xmlText); - //Reusing some code in base dojo for handling XML content. Simpler and keeps - //Core from duplicating the effort needed to locate the XML Parser on IE. - var fauxXhr = { responseText: xmlText }; - value = dojo._contentHandlers["xml"](fauxXhr); // DOMDocument - } - }else{ - value = ifd.getElementsByTagName("textarea")[0].value; //text - if(handleAs == "json"){ - value = dojo.fromJson(value); //json - }else if(handleAs == "javascript"){ - value = dojo.eval(value); //javascript - } - } - } - }catch(e){ - value = e; - }finally{ - ioArgs._callNext(); - } - return value; - }, - function(/*Error*/error, /*Deferred*/dfd){ - //summary: errHandler function for dojo._ioSetArgs call. - dfd.ioArgs._hasError = true; - dfd.ioArgs._callNext(); - return error; - } - ); - - //Set up a function that will fire the next iframe request. Make sure it only - //happens once per deferred. - dfd.ioArgs._callNext = function(){ - if(!this["_calledNext"]){ - this._calledNext = true; - dojo.io.iframe._currentDfd = null; - dojo.io.iframe._fireNextRequest(); - } - }; - - this._dfdQueue.push(dfd); - this._fireNextRequest(); - - //Add it the IO watch queue, to get things like timeout support. - dojo._ioWatch( - dfd, - function(/*Deferred*/dfd){ - //validCheck - return !dfd.ioArgs["_hasError"]; - }, - function(dfd){ - //ioCheck - return (!!dfd.ioArgs["_finished"]); - }, - function(dfd){ - //resHandle - if(dfd.ioArgs._finished){ - dfd.callback(dfd); - }else{ - dfd.errback(new Error("Invalid dojo.io.iframe request state")); - } - } - ); - - return dfd; - }, - - _currentDfd: null, - _dfdQueue: [], - _iframeName: dojo._scopeName + "IoIframe", - - _fireNextRequest: function(){ - //summary: Internal method used to fire the next request in the bind queue. - try{ - if((this._currentDfd)||(this._dfdQueue.length == 0)){ return; } - //Find next deferred, skip the canceled ones. - do{ - var dfd = this._currentDfd = this._dfdQueue.shift(); - } while(dfd && dfd.canceled && this._dfdQueue.length); - - //If no more dfds, cancel. - if(!dfd || dfd.canceled){ - this._currentDfd = null; - return; - } - - var ioArgs = dfd.ioArgs; - var args = ioArgs.args; - - ioArgs._contentToClean = []; - var fn = dojo.byId(args["form"]); - var content = args["content"] || {}; - if(fn){ - if(content){ - // if we have things in content, we need to add them to the form - // before submission - var pHandler = function(name, value) { - dojo.create("input", {type: "hidden", name: name, value: value}, fn); - ioArgs._contentToClean.push(name); - }; - for(var x in content){ - var val = content[x]; - if(dojo.isArray(val) && val.length > 1){ - var i; - for (i = 0; i < val.length; i++) { - pHandler(x,val[i]); - } - }else{ - if(!fn[x]){ - pHandler(x,val); - }else{ - fn[x].value = val; - } - } - } - } - //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"); - var trgtNode = fn.getAttributeNode("target"); - if(args["url"]){ - ioArgs._originalAction = actnNode ? actnNode.value : null; - if(actnNode){ - actnNode.value = args.url; - }else{ - fn.setAttribute("action",args.url); - } - } - if(!mthdNode || !mthdNode.value){ - if(mthdNode){ - mthdNode.value= (args["method"]) ? args["method"] : "post"; - }else{ - fn.setAttribute("method", (args["method"]) ? args["method"] : "post"); - } - } - ioArgs._originalTarget = trgtNode ? trgtNode.value: null; - if(trgtNode){ - trgtNode.value = this._iframeName; - }else{ - fn.setAttribute("target", this._iframeName); - } - fn.target = this._iframeName; - dojo._ioNotifyStart(dfd); - fn.submit(); - }else{ - // otherwise we post a GET string by changing URL location for the - // iframe - var tmpUrl = args.url + (args.url.indexOf("?") > -1 ? "&" : "?") + ioArgs.query; - dojo._ioNotifyStart(dfd); - this.setSrc(this._frame, tmpUrl, true); - } - }catch(e){ - dfd.errback(e); - } - }, - - _iframeOnload: function(){ - var dfd = this._currentDfd; - if(!dfd){ - this._fireNextRequest(); - return; - } - - var ioArgs = dfd.ioArgs; - var args = ioArgs.args; - var fNode = dojo.byId(args.form); - - if(fNode){ - // remove all the hidden content inputs - var toClean = ioArgs._contentToClean; - for(var i = 0; i < toClean.length; i++) { - var key = toClean[i]; - //Need to cycle over all nodes since we may have added - //an array value which means that more than one node could - //have the same .name value. - for(var j = 0; j < fNode.childNodes.length; j++){ - var chNode = fNode.childNodes[j]; - if(chNode.name == key){ - dojo.destroy(chNode); - break; - } - } - } - - // restore original action + target - if(ioArgs["_originalAction"]){ - fNode.setAttribute("action", ioArgs._originalAction); - } - if(ioArgs["_originalTarget"]){ - fNode.setAttribute("target", ioArgs._originalTarget); - fNode.target = ioArgs._originalTarget; - } - } - - ioArgs._finished = true; - } -}; - -return dojo.io.iframe; -}); diff --git a/lib/dojo/io/script.js.uncompressed.js b/lib/dojo/io/script.js.uncompressed.js deleted file mode 100644 index 628e31948..000000000 --- a/lib/dojo/io/script.js.uncompressed.js +++ /dev/null @@ -1,256 +0,0 @@ -define("dojo/io/script", ["../main"], function(dojo) { - // module: - // dojo/io/script - // summary: - // TODOC - - dojo.getObject("io", true, dojo); - -/*===== -dojo.declare("dojo.io.script.__ioArgs", dojo.__IoArgs, { - constructor: function(){ - // summary: - // All the properties described in the dojo.__ioArgs type, apply to this - // type as well, EXCEPT "handleAs". It is not applicable to - // dojo.io.script.get() calls, since it is implied by the usage of - // "jsonp" (response will be a JSONP call returning JSON) - // or the response is pure JavaScript defined in - // the body of the script that was attached. - // callbackParamName: String - // Deprecated as of Dojo 1.4 in favor of "jsonp", but still supported for - // 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 - // jsonp: "c". - // checkString: String - // A string of JavaScript that when evaluated like so: - // "typeof(" + checkString + ") != 'undefined'" - // 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 - // will be attached to that document. This can be helpful in some comet long-polling - // scenarios with Firefox and Opera. - this.callbackParamName = callbackParamName; - this.jsonp = jsonp; - this.checkString = checkString; - this.frameDoc = frameDoc; - } -}); -=====*/ - - var loadEvent = dojo.isIE ? "onreadystatechange" : "load", - readyRegExp = /complete|loaded/; - - dojo.io.script = { - get: function(/*dojo.io.script.__ioArgs*/args){ - // summary: - // sends a get request using a dynamically created script tag. - var dfd = this._makeScriptDeferred(args); - var ioArgs = dfd.ioArgs; - dojo._ioAddQueryToUrl(ioArgs); - - dojo._ioNotifyStart(dfd); - - if(this._canAttach(ioArgs)){ - var node = this.attach(ioArgs.id, ioArgs.url, args.frameDoc); - - //If not a jsonp callback or a polling checkString case, bind - //to load event on the script tag. - if(!ioArgs.jsonp && !ioArgs.args.checkString){ - var handle = dojo.connect(node, loadEvent, function(evt){ - if(evt.type == "load" || readyRegExp.test(node.readyState)){ - dojo.disconnect(handle); - ioArgs.scriptLoaded = evt; - } - }); - } - } - - dojo._ioWatch(dfd, this._validCheck, this._ioCheck, this._resHandle); - return dfd; - }, - - attach: function(/*String*/id, /*String*/url, /*Document?*/frameDocument){ - // summary: - // creates a new <script> tag pointing to the specified URL and - // adds it to the document. - // description: - // Attaches the script element to the DOM. Use this method if you - // just want to attach a script to the DOM and do not care when or - // if it loads. - var doc = (frameDocument || dojo.doc); - var element = doc.createElement("script"); - element.type = "text/javascript"; - element.src = url; - element.id = id; - element.async = true; - element.charset = "utf-8"; - return doc.getElementsByTagName("head")[0].appendChild(element); - }, - - remove: function(/*String*/id, /*Document?*/frameDocument){ - //summary: removes the script element with the given id, from the given frameDocument. - //If no frameDocument is passed, the current document is used. - dojo.destroy(dojo.byId(id, frameDocument)); - - //Remove the jsonp callback on dojo.io.script, if it exists. - if(this["jsonp_" + id]){ - delete this["jsonp_" + id]; - } - }, - - _makeScriptDeferred: function(/*Object*/args){ - //summary: - // sets up a Deferred object for an IO request. - var dfd = dojo._ioSetArgs(args, this._deferredCancel, this._deferredOk, this._deferredError); - - var ioArgs = dfd.ioArgs; - ioArgs.id = dojo._scopeName + "IoScript" + (this._counter++); - ioArgs.canDelete = false; - - //Special setup for jsonp case - ioArgs.jsonp = args.callbackParamName || args.jsonp; - if(ioArgs.jsonp){ - //Add the jsonp parameter. - ioArgs.query = ioArgs.query || ""; - if(ioArgs.query.length > 0){ - ioArgs.query += "&"; - } - ioArgs.query += ioArgs.jsonp - + "=" - + (args.frameDoc ? "parent." : "") - + dojo._scopeName + ".io.script.jsonp_" + ioArgs.id + "._jsonpCallback"; - - ioArgs.frameDoc = args.frameDoc; - - //Setup the Deferred to have the jsonp callback. - ioArgs.canDelete = true; - dfd._jsonpCallback = this._jsonpCallback; - this["jsonp_" + ioArgs.id] = dfd; - } - return dfd; // dojo.Deferred - }, - - _deferredCancel: function(/*Deferred*/dfd){ - //summary: canceller function for dojo._ioSetArgs call. - - //DO NOT use "this" and expect it to be dojo.io.script. - dfd.canceled = true; - if(dfd.ioArgs.canDelete){ - dojo.io.script._addDeadScript(dfd.ioArgs); - } - }, - - _deferredOk: function(/*Deferred*/dfd){ - //summary: okHandler function for dojo._ioSetArgs call. - - //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. - if(ioArgs.canDelete){ - dojo.io.script._addDeadScript(ioArgs); - } - - //Favor JSONP responses, script load events then lastly ioArgs. - //The ioArgs are goofy, but cannot return the dfd since that stops - //the callback chain in Deferred. The return value is not that important - //in that case, probably a checkString case. - return ioArgs.json || ioArgs.scriptLoaded || ioArgs; - }, - - _deferredError: function(/*Error*/error, /*Deferred*/dfd){ - //summary: errHandler function for dojo._ioSetArgs call. - - if(dfd.ioArgs.canDelete){ - //DO NOT use "this" and expect it to be dojo.io.script. - if(error.dojoType == "timeout"){ - //For timeouts, remove the script element immediately to - //avoid a response from it coming back later and causing trouble. - dojo.io.script.remove(dfd.ioArgs.id, dfd.ioArgs.frameDoc); - }else{ - dojo.io.script._addDeadScript(dfd.ioArgs); - } - } - console.log("dojo.io.script error", error); - return error; - }, - - _deadScripts: [], - _counter: 1, - - _addDeadScript: function(/*Object*/ioArgs){ - //summary: sets up an entry in the deadScripts array. - dojo.io.script._deadScripts.push({id: ioArgs.id, frameDoc: ioArgs.frameDoc}); - //Being extra paranoid about leaks: - ioArgs.frameDoc = null; - }, - - _validCheck: function(/*Deferred*/dfd){ - //summary: inflight check function to see if dfd is still valid. - - //Do script cleanup here. We wait for one inflight pass - //to make sure we don't get any weird things by trying to remove a script - //tag that is part of the call chain (IE 6 has been known to - //crash in that case). - var _self = dojo.io.script; - var deadScripts = _self._deadScripts; - if(deadScripts && deadScripts.length > 0){ - for(var i = 0; i < deadScripts.length; i++){ - //Remove the script tag - _self.remove(deadScripts[i].id, deadScripts[i].frameDoc); - deadScripts[i].frameDoc = null; - } - dojo.io.script._deadScripts = []; - } - - return true; - }, - - _ioCheck: function(/*Deferred*/dfd){ - //summary: inflight check function to see if IO finished. - var ioArgs = dfd.ioArgs; - //Check for finished jsonp - if(ioArgs.json || (ioArgs.scriptLoaded && !ioArgs.args.checkString)){ - return true; - } - - //Check for finished "checkString" case. - var checkString = ioArgs.args.checkString; - return checkString && eval("typeof(" + checkString + ") != 'undefined'"); - - - }, - - _resHandle: function(/*Deferred*/dfd){ - //summary: inflight function to handle a completed response. - if(dojo.io.script._ioCheck(dfd)){ - dfd.callback(dfd); - }else{ - //This path should never happen since the only way we can get - //to _resHandle is if _ioCheck is true. - dfd.errback(new Error("inconceivable dojo.io.script._resHandle error")); - } - }, - - _canAttach: function(/*Object*/ioArgs){ - //summary: A method that can be overridden by other modules - //to control when the script attachment occurs. - return true; - }, - - _jsonpCallback: function(/*JSON Object*/json){ - //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; - } - }; - - return dojo.io.script; -}); diff --git a/lib/dojo/jaxer.js.uncompressed.js b/lib/dojo/jaxer.js.uncompressed.js deleted file mode 100644 index b5b12da24..000000000 --- a/lib/dojo/jaxer.js.uncompressed.js +++ /dev/null @@ -1,19 +0,0 @@ -define("dojo/jaxer", ["./main"], function(dojo) { - // module: - // dojo/jaxer - // summary: - // TODOC - - -if(typeof print == "function"){ - console.debug = Jaxer.Log.debug; - console.warn = Jaxer.Log.warn; - console.error = Jaxer.Log.error; - console.info = Jaxer.Log.info; - console.log = Jaxer.Log.warn; -} - -onserverload = dojo._loadInit; - -return dojo; -}); diff --git a/lib/dojo/json.js.uncompressed.js b/lib/dojo/json.js.uncompressed.js deleted file mode 100644 index 307730f03..000000000 --- a/lib/dojo/json.js.uncompressed.js +++ /dev/null @@ -1,149 +0,0 @@ -define("dojo/json", ["./has"], function(has){ - "use strict"; - var hasJSON = typeof JSON != "undefined"; - has.add("json-parse", hasJSON); // all the parsers work fine - // Firefox 3.5/Gecko 1.9 fails to use replacer in stringify properly https://bugzilla.mozilla.org/show_bug.cgi?id=509184 - has.add("json-stringify", hasJSON && JSON.stringify({a:0}, function(k,v){return v||1;}) == '{"a":1}'); - if(has("json-stringify")){ - return JSON; - } - else{ - var escapeString = function(/*String*/str){ - //summary: - // Adds escape sequences for non-visual characters, double quote and - // backslash and surrounds with double quotes to form a valid string - // literal. - 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 - }; - return { - parse: has("json-parse") ? JSON.parse : function(str, strict){ - // summary: - // Parses a [JSON](http://json.org) string to return a JavaScript object. - // description: - // This function follows [native JSON API](https://developer.mozilla.org/en/JSON) - // Throws for invalid JSON strings. This delegates to eval() if native JSON - // support is not available. By default this will evaluate any valid JS expression. - // With the strict parameter set to true, the parser will ensure that only - // valid JSON strings are parsed (otherwise throwing an error). Without the strict - // parameter, the content passed to this method must come - // from a trusted source. - // str: - // a string literal of a JSON item, for instance: - // `'{ "foo": [ "bar", 1, { "baz": "thud" } ] }'` - // strict: - // When set to true, this will ensure that only valid, secure JSON is ever parsed. - // Make sure this is set to true for untrusted content. Note that on browsers/engines - // without native JSON support, setting this to true will run slower. - if(strict && !/^([\s\[\{]*(?:"(?:\\.|[^"])+"|-?\d[\d\.]*(?:[Ee][+-]?\d+)?|null|true|false|)[\s\]\}]*(?:,|:|$))+$/.test(str)){ - throw new SyntaxError("Invalid characters in JSON"); - } - return eval('(' + str + ')'); - }, - stringify: function(value, replacer, spacer){ - // summary: - // Returns a [JSON](http://json.org) serialization of an object. - // description: - // Returns a [JSON](http://json.org) serialization of an object. - // This function follows [native JSON API](https://developer.mozilla.org/en/JSON) - // Note that this doesn't check for infinite recursion, so don't do that! - // value: - // A value to be serialized. - // replacer: - // A replacer function that is called for each value and can return a replacement - // spacer: - // A spacer string to be used for pretty printing of JSON - // - // example: - // simple serialization of a trivial object - // | define(["dojo/json"], function(JSON){ - // | var jsonStr = JSON.stringify({ howdy: "stranger!", isStrange: true }); - // | doh.is('{"howdy":"stranger!","isStrange":true}', jsonStr); - var undef; - if(typeof replacer == "string"){ - spacer = replacer; - replacer = null; - } - function stringify(it, indent, key){ - if(replacer){ - it = replacer(key, it); - } - var val, objtype = typeof it; - if(objtype == "number"){ - return isFinite(it) ? it + "" : "null"; - } - if(objtype == "boolean"){ - return it + ""; - } - if(it === null){ - return "null"; - } - if(typeof it == "string"){ - return escapeString(it); - } - if(objtype == "function" || objtype == "undefined"){ - return undef; // undefined - } - // short-circuit for objects that support "json" serialization - // if they return "self" then just pass-through... - if(typeof it.toJSON == "function"){ - return stringify(it.toJSON(key), indent, key); - } - if(it instanceof Date){ - return '"{FullYear}-{Month+}-{Date}T{Hours}:{Minutes}:{Seconds}Z"'.replace(/\{(\w+)(\+)?\}/g, function(t, prop, plus){ - var num = it["getUTC" + prop]() + (plus ? 1 : 0); - return num < 10 ? "0" + num : num; - }); - } - if(it.valueOf() !== it){ - // primitive wrapper, try again unwrapped: - return stringify(it.valueOf(), indent, key); - } - var nextIndent= spacer ? (indent + spacer) : ""; - /* we used to test for DOM nodes and throw, but FF serializes them as {}, so cross-browser consistency is probably not efficiently attainable */ - - var sep = spacer ? " " : ""; - var newLine = spacer ? "\n" : ""; - - // array - if(it instanceof Array){ - var itl = it.length, res = []; - for(key = 0; key < itl; key++){ - var obj = it[key]; - val = stringify(obj, nextIndent, key); - if(typeof val != "string"){ - val = "null"; - } - res.push(newLine + nextIndent + val); - } - return "[" + res.join(",") + newLine + indent + "]"; - } - // generic object code path - var output = []; - for(key in it){ - var keyStr; - if(typeof key == "number"){ - keyStr = '"' + key + '"'; - }else if(typeof key == "string"){ - keyStr = escapeString(key); - }else{ - // skip non-string or number keys - continue; - } - val = stringify(it[key], nextIndent, key); - if(typeof val != "string"){ - // skip non-serializable values - continue; - } - // At this point, the most non-IE browsers don't get in this branch - // (they have native JSON), so push is definitely the way to - output.push(newLine + nextIndent + keyStr + ":" + sep + val); - } - return "{" + output.join(",") + newLine + indent + "}"; // String - } - return stringify(value, "", ""); - } - }; - } -}); diff --git a/lib/dojo/keys.js.uncompressed.js b/lib/dojo/keys.js.uncompressed.js deleted file mode 100644 index e6dbd3d61..000000000 --- a/lib/dojo/keys.js.uncompressed.js +++ /dev/null @@ -1,80 +0,0 @@ -define("dojo/keys", ["./_base/kernel", "./_base/sniff"], function(dojo, has) { - // module: - // dojo/keys - // summary: - // key constants -// Constants - -// Public: client code should test -// keyCode against these named constants, as the -// actual codes can vary by browser. -return dojo.keys = { - // summary: - // Definitions for common key values - BACKSPACE: 8, - TAB: 9, - CLEAR: 12, - ENTER: 13, - SHIFT: 16, - CTRL: 17, - ALT: 18, - META: has("safari") ? 91 : 224, // the apple key on macs - PAUSE: 19, - CAPS_LOCK: 20, - ESCAPE: 27, - SPACE: 32, - PAGE_UP: 33, - PAGE_DOWN: 34, - END: 35, - HOME: 36, - LEFT_ARROW: 37, - UP_ARROW: 38, - RIGHT_ARROW: 39, - DOWN_ARROW: 40, - INSERT: 45, - DELETE: 46, - HELP: 47, - LEFT_WINDOW: 91, - RIGHT_WINDOW: 92, - SELECT: 93, - NUMPAD_0: 96, - NUMPAD_1: 97, - NUMPAD_2: 98, - NUMPAD_3: 99, - NUMPAD_4: 100, - NUMPAD_5: 101, - NUMPAD_6: 102, - NUMPAD_7: 103, - NUMPAD_8: 104, - NUMPAD_9: 105, - NUMPAD_MULTIPLY: 106, - NUMPAD_PLUS: 107, - NUMPAD_ENTER: 108, - NUMPAD_MINUS: 109, - NUMPAD_PERIOD: 110, - NUMPAD_DIVIDE: 111, - F1: 112, - F2: 113, - F3: 114, - F4: 115, - F5: 116, - F6: 117, - F7: 118, - F8: 119, - F9: 120, - F10: 121, - F11: 122, - F12: 123, - F13: 124, - F14: 125, - F15: 126, - NUM_LOCK: 144, - SCROLL_LOCK: 145, - UP_DPAD: 175, - DOWN_DPAD: 176, - LEFT_DPAD: 177, - RIGHT_DPAD: 178, - // virtual key mapping - copyKey: has("mac") && !has("air") ? (has("safari") ? 91 : 224 ) : 17 -}; -}); diff --git a/lib/dojo/loadInit.js.uncompressed.js b/lib/dojo/loadInit.js.uncompressed.js deleted file mode 100644 index 373931d12..000000000 --- a/lib/dojo/loadInit.js.uncompressed.js +++ /dev/null @@ -1,7 +0,0 @@ -define("dojo/loadInit", ["./_base/loader"], function(loader){ - return { - dynamic:0, - normalize:function(id){return id;}, - load:loader.loadInit - }; -}); diff --git a/lib/dojo/main.js.uncompressed.js b/lib/dojo/main.js.uncompressed.js deleted file mode 100644 index 18850843c..000000000 --- a/lib/dojo/main.js.uncompressed.js +++ /dev/null @@ -1,50 +0,0 @@ -define("dojo/main", [ - "./_base/kernel", - "./has", - "require", - "./_base/sniff", - "./_base/lang", - "./_base/array", - "./ready", - "./_base/declare", - "./_base/connect", - "./_base/Deferred", - "./_base/json", - "./_base/Color", - "./has!dojo-firebug?./_firebug/firebug", - "./_base/browser", - "./_base/loader"], function(dojo, has, require, sniff, lang, array, ready){ - // module: - // dojo/main - // summary: - // This is the package main module for the dojo package; it loads dojo base appropriate for the execution environment. - - // the preferred way to load the dojo firebug console is by setting has("dojo-firebug") true in dojoConfig - // the isDebug config switch is for backcompat and will work fine in sync loading mode; it works in - // async mode too, but there's no guarantee when the module is loaded; therefore, if you need a firebug - // console guarnanteed at a particular spot in an app, either set config.has["dojo-firebug"] true before - // loading dojo.js or explicitly include dojo/_firebug/firebug in a dependency list. - if(dojo.config.isDebug){ - require(["./_firebug/firebug"]); - } - - // dojoConfig.require is deprecated; use the loader configuration property deps - true || has.add("dojo-config-require", 1); - if(1){ - var deps= dojo.config.require; - if(deps){ - // dojo.config.require may be dot notation - deps= array.map(lang.isArray(deps) ? deps : [deps], function(item){ return item.replace(/\./g, "/"); }); - if(dojo.isAsync){ - require(deps); - }else{ - // this is a bit janky; in 1.6- dojo is defined before these requires are applied; but in 1.7+ - // dojo isn't defined until returning from this module; this is only a problem in sync mode - // since we're in sync mode, we know we've got our loader with its priority ready queue - ready(1, function(){require(deps);}); - } - } - } - - return dojo; -}); diff --git a/lib/dojo/mouse.js.uncompressed.js b/lib/dojo/mouse.js.uncompressed.js deleted file mode 100644 index c6eceb476..000000000 --- a/lib/dojo/mouse.js.uncompressed.js +++ /dev/null @@ -1,127 +0,0 @@ -define("dojo/mouse", ["./_base/kernel", "./on", "./has", "./dom", "./_base/window"], function(dojo, on, has, dom, win){ - - /*===== - dojo.mouse = { - // summary: - // This module provide mouse event handling utility functions and exports - // mouseenter and mouseleave event emulation. - // enter: Synthetic Event - // This is an extension event for the mouseenter that IE provides, emulating the - // behavior on other browsers. - // leave: Synthetic Event - // This is an extension event for the mouseleave that IE provides, emulating the - // behavior on other browsers. - // isLeft: Function - // Test an event object (from a mousedown event) to see if the left button was pressed. - // isMiddle: Function - // Test an event object (from a mousedown event) to see if the middle button was pressed. - // isRight: Function - // Test an event object (from a mousedown event) to see if the right button was pressed. - // example: - // To use these events, you register a mouseenter like this: - // | define(["dojo/on", dojo/mouse"], function(on, mouse){ - // | on(targetNode, mouse.enter, function(event){ - // | dojo.addClass(targetNode, "highlighted"); - // | }); - // | on(targetNode, mouse.leave, function(event){ - // | dojo.removeClass(targetNode, "highlighted"); - // | }); - }; - ======*/ - - has.add("dom-quirks", win.doc && win.doc.compatMode == "BackCompat"); - has.add("events-mouseenter", win.doc && "onmouseenter" in win.doc.createElement("div")); - - var mouseButtons; - if(has("dom-quirks") || !has("dom-addeventlistener")){ - mouseButtons = { - LEFT: 1, - MIDDLE: 4, - RIGHT: 2, - // helper functions - isButton: function(e, button){ return e.button & button; }, - isLeft: function(e){ return e.button & 1; }, - isMiddle: function(e){ return e.button & 4; }, - isRight: function(e){ return e.button & 2; } - }; - }else{ - mouseButtons = { - LEFT: 0, - MIDDLE: 1, - RIGHT: 2, - // helper functions - isButton: function(e, button){ return e.button == button; }, - isLeft: function(e){ return e.button == 0; }, - isMiddle: function(e){ return e.button == 1; }, - isRight: function(e){ return e.button == 2; } - }; - } - dojo.mouseButtons = mouseButtons; - -/*===== - dojo.mouseButtons = { - // LEFT: Number - // Numeric value of the left mouse button for the platform. - LEFT: 0, - // MIDDLE: Number - // Numeric value of the middle mouse button for the platform. - MIDDLE: 1, - // RIGHT: Number - // Numeric value of the right mouse button for the platform. - RIGHT: 2, - - isButton: function(e, button){ - // summary: - // Checks an event object for a pressed button - // e: Event - // Event object to examine - // button: Number - // The button value (example: dojo.mouseButton.LEFT) - return e.button == button; // Boolean - }, - isLeft: function(e){ - // summary: - // Checks an event object for the pressed left button - // e: Event - // Event object to examine - return e.button == 0; // Boolean - }, - isMiddle: function(e){ - // summary: - // Checks an event object for the pressed middle button - // e: Event - // Event object to examine - return e.button == 1; // Boolean - }, - isRight: function(e){ - // summary: - // Checks an event object for the pressed right button - // e: Event - // Event object to examine - return e.button == 2; // Boolean - } - }; -=====*/ - - function eventHandler(type, mustBubble){ - // emulation of mouseenter/leave with mouseover/out using descendant checking - var handler = function(node, listener){ - return on(node, type, function(evt){ - if(!dom.isDescendant(evt.relatedTarget, mustBubble ? evt.target : node)){ - return listener.call(this, evt); - } - }); - }; - if(!mustBubble){ - handler.bubble = eventHandler(type, true); - } - return handler; - } - return { - enter: eventHandler("mouseover"), - leave: eventHandler("mouseout"), - isLeft: mouseButtons.isLeft, - isMiddle: mouseButtons.isMiddle, - isRight: mouseButtons.isRight - }; -}); diff --git a/lib/dojo/nls/ar/colors.js.uncompressed.js b/lib/dojo/nls/ar/colors.js.uncompressed.js deleted file mode 100644 index 0b7fa59db..000000000 --- a/lib/dojo/nls/ar/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/ar/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "أزرق فاتح", - antiquewhite: "أبيض عتيق", - aqua: "أزرق مائي", - aquamarine: "أزرق مائل للأخضر (زبرجد)", - azure: "أزرق سماوي", - beige: "بيج", - bisque: "أصفر برتقالي الى رمادي مصفر", - black: "أسود", - blanchedalmond: "أخضر مائل للبياض", - blue: "أزرق", - blueviolet: "أزرق-بنفسجي", - brown: "بني", - burlywood: "خشبي", - cadetblue: "أزرق ملون بالرمادي", - chartreuse: "أخضر مائل للصفرة", - chocolate: "بني غامق", - coral: "مرجاني", - cornflowerblue: "أزرق عنبري", - cornsilk: "حريري", - crimson: "قرمزي", - cyan: "أزرق سماوي", - darkblue: "أزرق داكن", - darkcyan: "أزرق سماوي داكن", - darkgoldenrod: "أصفر ذهبي داكن", - darkgray: "رمادي داكن", - darkgreen: "أخضر داكن", - darkgrey: "رمادي داكن", // same as darkgray - darkkhaki: "كاكي داكن", - darkmagenta: "قرمزي داكن", - darkolivegreen: "أخضر زيتوني داكن", - darkorange: "برتقالي داكن", - darkorchid: "أرجواني داكن", - darkred: "أحمر داكن", - darksalmon: "فضي داكن", - darkseagreen: "أخضر مائل للأزرق داكن", - darkslateblue: "أزرق اردوازي داكن", - darkslategray: "رمادي اردوازي داكن", - darkslategrey: "رمادي اردوازي داكن", // same as darkslategray - darkturquoise: "تركواز داكن", - darkviolet: "بنفسجي داكن", - deeppink: "أحمر وردي غامق", - deepskyblue: "أزرق سماوي غامق", - dimgray: "رمادي شاحب", - dimgrey: "رمادي شاحب", // same as dimgray - dodgerblue: "أزرق عنبري", - firebrick: "أصفر زاهي", - floralwhite: "أبيض زهري", - forestgreen: "أخضر بلون أشجار الغابات", - fuchsia: "فوشيا", - gainsboro: "رمادي مائل للأزرق فاتح", - ghostwhite: "أبيض شفاف", - gold: "ذهبي", - goldenrod: "أصفر ذهبي", - gray: "رمادي", - green: "أخضر", - greenyellow: "أخضر مائل للأصفر", - grey: "رمادي", // same as gray - honeydew: "أبيض مائل للأخضر", - hotpink: "أحمر وردي زاهي", - indianred: "أحمر هندي", - indigo: "نيلي", - ivory: "عاجي", - khaki: "كاكي", - lavender: "أرجواني شاحب", - lavenderblush: "أحمر أرجواني", - lawngreen: "أخضر بلون العشب", - lemonchiffon: "أصفر شفاف", - lightblue: "أزرق فاتح", - lightcoral: "مرجاني فاتح", - lightcyan: "سماوي فاتح", - lightgoldenrodyellow: "أصفر ذهبي فاتح", - lightgray: "رمادي فاتح", - lightgreen: "أخضر فاتح", - lightgrey: "رمادي فاتح", // same as lightgray - lightpink: "وردي فاتح", - lightsalmon: "فضي فاتح", - lightseagreen: "أخضر مائل للأزرق فاتح", - lightskyblue: "أزرق سماوي فاتح", - lightslategray: "رمادي اردوازي فاتح", - lightslategrey: "رمادي اردوازي فاتح", // same as lightslategray - lightsteelblue: "أزرق معدني فاتح", - lightyellow: "أصفر فاتح", - lime: "ليموني", - limegreen: "أخضر ليموني", - linen: "كتاني", - magenta: "أحمر قرمزي", - maroon: "أحمر داكن", - mediumaquamarine: "أزرق مائل للأخضر (زبرجد) متوسط", - mediumblue: "أزرق متوسط", - mediumorchid: "أرجواني متوسط", - mediumpurple: "قرمزي متوسط", - mediumseagreen: "أخضر مائل للأزرق متوسط", - mediumslateblue: "أزرق اردوازي متوسط", - mediumspringgreen: "أخضر ربيعي متوسط", - mediumturquoise: "تركواز متوسط", - mediumvioletred: "أحمر-بنفسجي متوسط", - midnightblue: "أزرق بحري", - mintcream: "أصفر شاحب مائل للأخضر الزرعي", - mistyrose: "وردي", - moccasin: "نحاسي أحمر", - navajowhite: "أبيض ملاحي", - navy: "أزرق داكن", - oldlace: "برتقالي مائل للأصفر شاحب", - olive: "أخضر زيتوني داكن", - olivedrab: "أسود فاتح", - orange: "برتقالي", - orangered: "أحمر مائل للبرتقالي", - orchid: "أرجواني فاتح", - palegoldenrod: "أصفر ذهبي شاحب", - palegreen: "أخضر شاحب", - paleturquoise: "تركواز شاحب", - palevioletred: "أحمر-بنفسجي شاحب", - papayawhip: "خوخي فاتح", - peachpuff: "خوخي مائل للأصفر", - peru: "بني جملي", - pink: "وردي", - plum: "أرجواني داكن", - powderblue: "أزرق مائل للأصفر", - purple: "ارجواني", - red: "أحمر", - rosybrown: "بني وردي", - royalblue: "أزرق ملكي", - saddlebrown: "بني فاتح", - salmon: "برتقالي وردي شاحب", - sandybrown: "بني مائل للصفرة", - seagreen: "أخضر مائل للأزرق", - seashell: "أبيض مائل للأصفر فاتح", - sienna: "بني محروق", - silver: "فضي", - skyblue: "أزرق سماوي", - slateblue: "أزرق اردوازي", - slategray: "رمادي اردوازي", - slategrey: "رمادي اردوازي", // same as slategray - snow: "أبيض ثلجي", - springgreen: "أخضر ربيعي", - steelblue: "أزرق معدني", - tan: "خمري", - teal: "بترولي", - thistle: "ارجواني شاحب", - tomato: "أحمر مائل للأصفر", - transparent: "شفاف", - turquoise: "تركواز", - violet: "بنفسجي", - wheat: "أخضر قمحي", - white: "أبيض", - whitesmoke: "دخان أبيض", - yellow: "أصفر", - yellowgreen: "أخضر مائل للأصفر" -}) -); diff --git a/lib/dojo/nls/az/colors.js.uncompressed.js b/lib/dojo/nls/az/colors.js.uncompressed.js deleted file mode 100644 index 2e435f996..000000000 --- a/lib/dojo/nls/az/colors.js.uncompressed.js +++ /dev/null @@ -1,153 +0,0 @@ -define( -"dojo/nls/az/colors", //begin v1.x content -({ - "lightsteelblue":"açıq metal mavi", - "orangered" :"narıncı qırmızı", - "midnightblue" :"gecə mavisi", - "cadetblue" :"dəniz mavisi" , - "seashell" :"dəniz səthi", - "slategrey" :"boz şifer rəngi", - "coral" :"mərcan", - "darkturquoise" :"tünd firuzəyi", - "antiquewhite" :"antik ağ", - "mediumspringgreen" :"orta bahar yaşılı", - "salmon" :"somon", - "darkgrey" :"tünd boz", - "ivory" :"fil dişi", - "greenyellow" :"yaşıl-sarı", - "mistyrose" :"gül qurusu", - "lightsalmon" :"açıq somon", - "silver" :"gümüşü", - "dimgrey" :"açıq boz", - "orange" :"narıncı", - "white" :"ağ", - "navajowhite" :"navajo ağı", - "royalblue" :"parlaq tünd mavi" , - "deeppink" :"tünd çəhrayı", - "lime" :"lomon yaşılı", - "oldlace" :"köhnə krujeva", - "chartreuse" :"chartreuse", - "darkcyan" :"tünd firuzəyi", - "yellow" :"sarı", - "linen" :"kətan", - "olive" :"zeytun", - "gold" :"qızıl", - "lawngreen" :"çəmən yaşılı", - "lightyellow" :"açıq sarı", - "tan" :"günəş yanığı", - "darkviolet" :"tünd bənövşəyi", - "lightslategrey" :"tünd şifer bozu", - "grey" :"boz", - "darkkhaki" :"tünd haki", - "green" :"yaşıl", - "deepskyblue" :"tünd səma mavisi", - "aqua" :"dəniz mavisi", - "sienna" :"tünd qəhvəyi", - "mintcream" :"nanəli krem", - "rosybrown" :"çəhrayımsı qəhvəyi", - "mediumslateblue" :"orta şıfer bozu", - "magenta" :"magenta", - "lightseagreen" :"açıq dəniz yaşılı", - "cyan" :"firuzəyi", - "olivedrab" :"əsgər yaşılı", - "darkgoldenrod" :"tünd sarı", - "slateblue" :"şifer mavisi", - "mediumaquamarine" :"orta akvamarin", - "lavender" :"lavanta", - "mediumseagreen" :"orta dəniz yaşılı", - "maroon" :"tünd qırmızı", - "darkslategray" :"tünd şifer bozu", - "mediumturquoise" :"orta firuzəyi", - "ghostwhite" :"ala", - "darkblue" :"tünd mavi", - "mediumvioletred" :"orta bənövşəyi-qırmızı", - "brown" :"qəhvəyi", - "lightgray" :"açıq boz", - "sandybrown" :"qum rəngi", - "pink" :"çəhrayı", - "firebrick" :"yanmış kərpic rəngi", - "indigo" :"indigo", - "snow" :"qar", - "darkorchid" :"tünd orkide", - "turquoise" :"firuzəyi", - "chocolate" :"şokolad", - "springgreen" :"bahar yaşılı", - "moccasin" :"mokosen", - "navy" :"tünd göy", - "lemonchiffon" :"limon rəngi", - "teal" :"teal mavi", - "floralwhite" :"çiçək ağı", - "cornflowerblue" :"peyğəmbər çiçək mavisi", - "paleturquoise" :"solğun firuzəyi", - "purple" :"tünd qırmızı", - "gainsboro" :"gainsboro", - "plum" :"gavalı", - "red" :"qırmızı", - "blue" :"göy", - "forestgreen" :"tünd dəniz yaşılı", - "darkgreen" :"tünd yaşıl", - "honeydew" :"bal saqqızı", - "darkseagreen" :"tünd dəniz yaşılı", - "lightcoral" :"açıq mərcan", - "palevioletred" :"solğun bənövşəyi-qırmızı", - "mediumpurple" :"orta tünd qırmızı", - "saddlebrown" :"açıq qəhvəyi", - "darkmagenta" :"tünd magenta", - "thistle" :"dəvə tikanı", - "whitesmoke" :"ağ duman", - "wheat" :"buğdayı", - "violet" :"bənövşəyi", - "lightskyblue" :"açıq səma mavisi" , - "goldenrod" :"sapsarı", - "mediumblue" :"orta göy", - "skyblue" :"göy mavisi", - "crimson" :"crimson", - "darksalmon" :"tünd somon", - "darkred" :"tünd qırmızı", - "darkslategrey" :"tünd şifer bozu", - "peru" :"peru", - "lightgrey" :"açıq boz", - "lightgoldenrodyellow" :"açıq qızılı", - "blanchedalmond" :"solğun badamı", - "aliceblue" :"alice mavisi", - "bisque" :"biskvit", - "slategray" :"şifer bozu", - "palegoldenrod" :"açıq qızılı", - "darkorange" :"tünd narıncı", - "aquamarine" :"akvamarin", - "lightgreen" :"açıq yaşıl", - "burlywood" :"sarımsı qəhvə rəngi", - "dodgerblue" :"toz mavisi", - "darkgray" :"tünd boz", - "lightcyan" :"açıq firuzəyi", - "powderblue" :"pudra mavisi", - "blueviolet" :"mavi-bənövşəyi", - "orchid" :"orkide", - "dimgray" :"solğun boz", - "beige" :"bej", - "fuchsia" :"fuşya", - "lavenderblush" :"lavanta tünd qırmızısı", - "hotpink" :"tünd çəhrayı", - "steelblue" :"metal mavisi", - "tomato" :"pomidor", - "lightpink" :"açıq çəhrayı", - "limegreen" :"əhəng yaşılı", - "indianred" :"qızıldərili qırmızısı", - "papayawhip" :"papaya qamçısı", - "lightslategray" :"açıq şifer bozu", - "gray" :"boz", - "mediumorchid" :"orta orkide", - "cornsilk" :"qarğıdalı rəngi", - "black" :"qara", - "seagreen" :"dəniz yaşılı", - "darkslateblue" :"tünd şifer bozu", - "khaki" :"haki", - "lightblue" :"açıq mavi", - "palegreen" :"solğun yaşıl", - "azure" :"azur mavisi", - "peachpuff" :"açıq şaftalı", - "darkolivegreen" :"tünd zeytun yaşılı", - "yellowgreen" :"sarı-yaşıl" -}) -//end v1.x content -); \ No newline at end of file diff --git a/lib/dojo/nls/ca/colors.js.uncompressed.js b/lib/dojo/nls/ca/colors.js.uncompressed.js deleted file mode 100644 index 520654d94..000000000 --- a/lib/dojo/nls/ca/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/ca/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "blau cian clar", - antiquewhite: "blanc antic", - aqua: "aigua", - aquamarine: "aiguamarina", - azure: "atzur", - beige: "beix", - bisque: "crema", - black: "negre", - blanchedalmond: "ametlla pàl·lid", - blue: "blau", - blueviolet: "blau violeta", - brown: "marró", - burlywood: "marró arenós", - cadetblue: "blau marí", - chartreuse: "Llimona pàl·lid", - chocolate: "xocolata", - coral: "corall", - cornflowerblue: "blau blauet", - cornsilk: "cru", - crimson: "carmesí", - cyan: "cian", - darkblue: "blau fosc", - darkcyan: "cian fosc", - darkgoldenrod: "ocre fosc", - darkgray: "gris fosc", - darkgreen: "verd fosc", - darkgrey: "gris fosc", // same as darkgray - darkkhaki: "caqui fosc", - darkmagenta: "magenta fosc", - darkolivegreen: "verd oliva fosc", - darkorange: "taronja fosc", - darkorchid: "orquídia fosc", - darkred: "vermell fosc", - darksalmon: "salmó fosc", - darkseagreen: "verd marí fosc", - darkslateblue: "blau pissarra fosc", - darkslategray: "gris pissarra fosc", - darkslategrey: "gris pissarra fosc", // same as darkslategray - darkturquoise: "turquesa fosc", - darkviolet: "violeta fosc", - deeppink: "rosa profund", - deepskyblue: "blau cel profund", - dimgray: "gris fosc", - dimgrey: "gris fosc", // same as dimgray - dodgerblue: "blau Dodger", - firebrick: "maó refractari", - floralwhite: "blanc floral", - forestgreen: "verd bosc", - fuchsia: "fúcsia", - gainsboro: "gainsboro", - ghostwhite: "blanc fantasma", - gold: "daurat", - goldenrod: "ocre", - gray: "gris", - green: "verd", - greenyellow: "verd grogós", - grey: "gris", // same as gray - honeydew: "rosada de mel", - hotpink: "rosa fúcsia", - indianred: "vermell indi", - indigo: "índigo", - ivory: "marbre", - khaki: "caqui", - lavender: "lavanda", - lavenderblush: "lavanda vermellosa", - lawngreen: "verd gespa", - lemonchiffon: "groc brisa", - lightblue: "blau clar", - lightcoral: "corall clar", - lightcyan: "cian clar", - lightgoldenrodyellow: "groc ocre clar", - lightgray: "gris clar", - lightgreen: "verd clar", - lightgrey: "gris clar", // same as lightgray - lightpink: "rosa clar", - lightsalmon: "salmó clar", - lightseagreen: "verd marí clar", - lightskyblue: "blau cel clar", - lightslategray: "gris pissarra clar", - lightslategrey: "gris pissarra clar", // same as lightslategray - lightsteelblue: "blau acer clar", - lightyellow: "groc clar", - lime: "verd llimona", - limegreen: "verd llimona verda", - linen: "lli", - magenta: "magenta", - maroon: "marró vermellós", - mediumaquamarine: "aiguamarina mitjana", - mediumblue: "blau mitjà", - mediumorchid: "orquídia mitjana", - mediumpurple: "porpra mitjana", - mediumseagreen: "verd marí mitjà", - mediumslateblue: "blau pissarra mitjà", - mediumspringgreen: "verd primavera mitjà", - mediumturquoise: "turquesa mitjana", - mediumvioletred: "vermell violeta mitjà", - midnightblue: "blau mitjanit", - mintcream: "menta pàl·lid", - mistyrose: "rosa dens", - moccasin: "mocassí", - navajowhite: "blanc Navajo", - navy: "blau marí", - oldlace: "rosa cremós", - olive: "oliva", - olivedrab: "gris oliva", - orange: "taronja", - orangered: "taronja vermellós", - orchid: "orquídia", - palegoldenrod: "ocre pàl·lid", - palegreen: "verd pàl·lid", - paleturquoise: "turquesa pàl·lid", - palevioletred: "vermell porpra pàl·lid", - papayawhip: "préssec pastel", - peachpuff: "préssec", - peru: "Perú", - pink: "rosa", - plum: "pruna", - powderblue: "blau grisós", - purple: "porpra", - red: "vermell", - rosybrown: "marró rosat", - royalblue: "blau marí intens", - saddlebrown: "marró mitjà", - salmon: "salmó", - sandybrown: "marró arenós", - seagreen: "verd marí", - seashell: "petxina marina", - sienna: "siena", - silver: "argent", - skyblue: "blau cel", - slateblue: "blau pissarra", - slategray: "gris pissarra", - slategrey: "gris pissarra", // same as slategray - snow: "neu", - springgreen: "verd de primavera", - steelblue: "blau acer", - tan: "tan", - teal: "verd blavós", - thistle: "card", - tomato: "tomàquet", - transparent: "transparent", - turquoise: "turquesa", - violet: "violeta", - wheat: "blat", - white: "blanc", - whitesmoke: "blanc fumat", - yellow: "groc", - yellowgreen: "verd grogós" -}) -); diff --git a/lib/dojo/nls/colors.js.uncompressed.js b/lib/dojo/nls/colors.js.uncompressed.js deleted file mode 100644 index ee619d0d8..000000000 --- a/lib/dojo/nls/colors.js.uncompressed.js +++ /dev/null @@ -1,191 +0,0 @@ -define("dojo/nls/colors", { root: -//begin v1.x content -({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - -//Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color e.g. gray vs. gray. -//TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? -aliceblue: "alice blue", -antiquewhite: "antique white", -aqua: "aqua", -aquamarine: "aquamarine", -azure: "azure", -beige: "beige", -bisque: "bisque", -black: "black", -blanchedalmond: "blanched almond", -blue: "blue", -blueviolet: "blue-violet", -brown: "brown", -burlywood: "burlywood", -cadetblue: "cadet blue", -chartreuse: "chartreuse", -chocolate: "chocolate", -coral: "coral", -cornflowerblue: "cornflower blue", -cornsilk: "cornsilk", -crimson: "crimson", -cyan: "cyan", -darkblue: "dark blue", -darkcyan: "dark cyan", -darkgoldenrod: "dark goldenrod", -darkgray: "dark gray", -darkgreen: "dark green", -darkgrey: "dark gray", // same as darkgray -darkkhaki: "dark khaki", -darkmagenta: "dark magenta", -darkolivegreen: "dark olive green", -darkorange: "dark orange", -darkorchid: "dark orchid", -darkred: "dark red", -darksalmon: "dark salmon", -darkseagreen: "dark sea green", -darkslateblue: "dark slate blue", -darkslategray: "dark slate gray", -darkslategrey: "dark slate gray", // same as darkslategray -darkturquoise: "dark turquoise", -darkviolet: "dark violet", -deeppink: "deep pink", -deepskyblue: "deep sky blue", -dimgray: "dim gray", -dimgrey: "dim gray", // same as dimgray -dodgerblue: "dodger blue", -firebrick: "fire brick", -floralwhite: "floral white", -forestgreen: "forest green", -fuchsia: "fuchsia", -gainsboro: "gainsboro", -ghostwhite: "ghost white", -gold: "gold", -goldenrod: "goldenrod", -gray: "gray", -green: "green", -greenyellow: "green-yellow", -grey: "gray", // same as gray -honeydew: "honeydew", -hotpink: "hot pink", -indianred: "indian red", -indigo: "indigo", -ivory: "ivory", -khaki: "khaki", -lavender: "lavender", -lavenderblush: "lavender blush", -lawngreen: "lawn green", -lemonchiffon: "lemon chiffon", -lightblue: "light blue", -lightcoral: "light coral", -lightcyan: "light cyan", -lightgoldenrodyellow: "light goldenrod yellow", -lightgray: "light gray", -lightgreen: "light green", -lightgrey: "light gray", // same as lightgray -lightpink: "light pink", -lightsalmon: "light salmon", -lightseagreen: "light sea green", -lightskyblue: "light sky blue", -lightslategray: "light slate gray", -lightslategrey: "light slate gray", // same as lightslategray -lightsteelblue: "light steel blue", -lightyellow: "light yellow", -lime: "lime", -limegreen: "lime green", -linen: "linen", -magenta: "magenta", -maroon: "maroon", -mediumaquamarine: "medium aquamarine", -mediumblue: "medium blue", -mediumorchid: "medium orchid", -mediumpurple: "medium purple", -mediumseagreen: "medium sea green", -mediumslateblue: "medium slate blue", -mediumspringgreen: "medium spring green", -mediumturquoise: "medium turquoise", -mediumvioletred: "medium violet-red", -midnightblue: "midnight blue", -mintcream: "mint cream", -mistyrose: "misty rose", -moccasin: "moccasin", -navajowhite: "navajo white", -navy: "navy", -oldlace: "old lace", -olive: "olive", -olivedrab: "olive drab", -orange: "orange", -orangered: "orange red", -orchid: "orchid", -palegoldenrod: "pale goldenrod", -palegreen: "pale green", -paleturquoise: "pale turquoise", -palevioletred: "pale violet-red", -papayawhip: "papaya whip", -peachpuff: "peach puff", -peru: "peru", -pink: "pink", -plum: "plum", -powderblue: "powder blue", -purple: "purple", -red: "red", -rosybrown: "rosy brown", -royalblue: "royal blue", -saddlebrown: "saddle brown", -salmon: "salmon", -sandybrown: "sandy brown", -seagreen: "sea green", -seashell: "seashell", -sienna: "sienna", -silver: "silver", -skyblue: "sky blue", -slateblue: "slate blue", -slategray: "slate gray", -slategrey: "slate gray", // same as slategray -snow: "snow", -springgreen: "spring green", -steelblue: "steel blue", -tan: "tan", -teal: "teal", -thistle: "thistle", -tomato: "tomato", -transparent: "transparent", -turquoise: "turquoise", -violet: "violet", -wheat: "wheat", -white: "white", -whitesmoke: "white smoke", -yellow: "yellow", -yellowgreen: "yellow green" -}) -//end v1.x content -, -"zh": true, -"zh-tw": true, -"tr": true, -"th": true, -"sv": true, -"sl": true, -"sk": true, -"ru": true, -"ro": true, -"pt": true, -"pt-pt": true, -"pl": true, -"nl": true, -"nb": true, -"ko": true, -"kk": true, -"ja": true, -"it": true, -"hu": true, -"hr": true, -"he": true, -"fr": true, -"fi": true, -"es": true, -"el": true, -"de": true, -"da": true, -"cs": true, -"ca": true, -"az": true, -"ar": true -}); diff --git a/lib/dojo/nls/cs/colors.js.uncompressed.js b/lib/dojo/nls/cs/colors.js.uncompressed.js deleted file mode 100644 index c625f216e..000000000 --- a/lib/dojo/nls/cs/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/cs/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "modravá", - antiquewhite: "krémově bílá", - aqua: "azurová", - aquamarine: "akvamarínová", - azure: "bledě azurová", - beige: "bledě béžová", - bisque: "bledě oranžová", - black: "černá", - blanchedalmond: "mandlová", - blue: "modrá", - blueviolet: "modrofialová", - brown: "červenohnědá", - burlywood: "krémová", - cadetblue: "šedomodrá", - chartreuse: "chartreuska", - chocolate: "hnědobéžová", - coral: "korálová červená", - cornflowerblue: "chrpově modrá", - cornsilk: "režná", - crimson: "karmínová", - cyan: "azurová", - darkblue: "tmavě modrá", - darkcyan: "tmavě azurová", - darkgoldenrod: "tmavě béžová", - darkgray: "tmavě šedá", - darkgreen: "tmavě zelená", - darkgrey: "tmavě šedá", // same as darkgray - darkkhaki: "pískově hnědá", - darkmagenta: "tmavě purpurová", - darkolivegreen: "tmavě olivová", - darkorange: "tmavě oranžová", - darkorchid: "tmavě orchidejová", - darkred: "tmavě červená", - darksalmon: "tmavě lososová", - darkseagreen: "tmavá mořská zelená", - darkslateblue: "tmavá břidlicová modrá", - darkslategray: "tmavá břidlicová šedá", - darkslategrey: "tmavá břidlicová šedá", // same as darkslategray - darkturquoise: "tmavě tyrkysová", - darkviolet: "tmavě fialová", - deeppink: "sytě růžová", - deepskyblue: "sytá nebeská modrá", - dimgray: "kouřově šedá", - dimgrey: "kouřově šedá", // same as dimgray - dodgerblue: "jasně modrá", - firebrick: "cihlová", - floralwhite: "květinově bílá", - forestgreen: "lesní zelená", - fuchsia: "fuchsiová", - gainsboro: "bledě šedá", - ghostwhite: "modravě bílá", - gold: "zlatá", - goldenrod: "béžová", - gray: "šedá", - green: "zelená", - greenyellow: "zelenožlutá", - grey: "šedá", // same as gray - honeydew: "nazelenalá", - hotpink: "jasně růžová", - indianred: "indiánská červená", - indigo: "indigově modrá", - ivory: "slonovinová", - khaki: "písková", - lavender: "levandulová", - lavenderblush: "levandulová růžová", - lawngreen: "jasně zelená", - lemonchiffon: "světle citrónová", - lightblue: "světle modrá", - lightcoral: "světle korálová", - lightcyan: "světle azurová", - lightgoldenrodyellow: "světle žlutá", - lightgray: "světle šedá", - lightgreen: "světle zelená", - lightgrey: "světle šedá", // same as lightgray - lightpink: "světle růžová", - lightsalmon: "světle lososová", - lightseagreen: "světlá mořská zelená", - lightskyblue: "světlá nebeská modrá", - lightslategray: "světlá břidlicová šedá", - lightslategrey: "světlá břidlicová šedá", // same as lightslategray - lightsteelblue: "světlá ocelová modrá", - lightyellow: "bledě žlutá", - lime: "limetková", - limegreen: "limetkově zelená", - linen: "bledě šedobéžová", - magenta: "purpurová", - maroon: "kaštanová", - mediumaquamarine: "střední akvamarínová", - mediumblue: "středně modrá", - mediumorchid: "středně orchidejová", - mediumpurple: "středně nachová", - mediumseagreen: "střední mořská zelená", - mediumslateblue: "střední břidlicová modrá", - mediumspringgreen: "střední jarní zelená", - mediumturquoise: "středně tyrkysová", - mediumvioletred: "středně fialovočervená", - midnightblue: "temně modrá", - mintcream: "mentolová", - mistyrose: "růžovobílá", - moccasin: "bledě krémová", - navajowhite: "světle krémová", - navy: "námořnická modrá", - oldlace: "světle béžová", - olive: "olivová", - olivedrab: "khaki", - orange: "oranžová", - orangered: "oranžovočervená", - orchid: "orchidejová", - palegoldenrod: "bledě písková", - palegreen: "bledě zelená", - paleturquoise: "bledě tyrkysová", - palevioletred: "bledě fialovočervená", - papayawhip: "papájová", - peachpuff: "broskvová", - peru: "karamelová", - pink: "růžová", - plum: "švestková", - powderblue: "bledě modrá", - purple: "nachová", - red: "červená", - rosybrown: "růžovohnědá", - royalblue: "královská modrá", - saddlebrown: "hnědá", - salmon: "lososová", - sandybrown: "oranžovohnědá", - seagreen: "mořská zelená", - seashell: "lasturová", - sienna: "siena", - silver: "stříbrná", - skyblue: "nebeská modrá", - slateblue: "břidlicová modrá", - slategray: "břidlicová šedá", - slategrey: "břidlicová šedá", // same as slategray - snow: "sněhobílá", - springgreen: "jarní zelená", - steelblue: "ocelová modrá", - tan: "šedobéžová", - teal: "šedozelená", - thistle: "bodláková", - tomato: "tomatová", - transparent: "průhledná", - turquoise: "tyrkysová", - violet: "fialová", - wheat: "zlatohnědá", - white: "bílá", - whitesmoke: "kouřově bílá", - yellow: "žlutá", - yellowgreen: "žlutozelená" -}) -); diff --git a/lib/dojo/nls/da/colors.js.uncompressed.js b/lib/dojo/nls/da/colors.js.uncompressed.js deleted file mode 100644 index 4b40f4834..000000000 --- a/lib/dojo/nls/da/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/da/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "babyblå", - antiquewhite: "antikhvid", - aqua: "akvablå", - aquamarine: "akvamarin", - azure: "azurblå", - beige: "beige", - bisque: "gulgrå", - black: "sort", - blanchedalmond: "blanceret mandel", - blue: "blå", - blueviolet: "blåviolet", - brown: "brun", - burlywood: "tobak", - cadetblue: "kadetblå", - chartreuse: "chartreuse", - chocolate: "rust", - coral: "koralrød", - cornflowerblue: "kornblomstblå", - cornsilk: "majs", - crimson: "blodrød", - cyan: "cyan", - darkblue: "mørkeblå", - darkcyan: "mørk cyan", - darkgoldenrod: "mørk gyldenris", - darkgray: "mørkegrå", - darkgreen: "mørkegrøn", - darkgrey: "mørkegrå", // same as darkgray - darkkhaki: "mørk khaki", - darkmagenta: "mørk magenta", - darkolivegreen: "mørk olivengrøn", - darkorange: "mørk orange", - darkorchid: "mørk orkide", - darkred: "mørkerød", - darksalmon: "mørk laksefarvet", - darkseagreen: "mørk havgrøn", - darkslateblue: "mørk skiferblå", - darkslategray: "mørk skifergrå", - darkslategrey: "mørk skifergrå", // same as darkslategray - darkturquoise: "mørk turkis", - darkviolet: "mørkelilla", - deeppink: "dyb pink", - deepskyblue: "dyb himmelblå", - dimgray: "svag grå", - dimgrey: "svag grå", // same as dimgray - dodgerblue: "dodgerblå", - firebrick: "chamottesten", - floralwhite: "blomsterhvid", - forestgreen: "skovgrøn", - fuchsia: "lyslilla", - gainsboro: "gainsboro", - ghostwhite: "spøgelseshvid", - gold: "guld", - goldenrod: "gyldenris", - gray: "grå", - green: "grøn", - greenyellow: "grøngul", - grey: "grå", // same as gray - honeydew: "honningdug", - hotpink: "mørk rosa", - indianred: "lys rødbrun", - indigo: "indigo", - ivory: "elfenben", - khaki: "khaki", - lavender: "lysviolet", - lavenderblush: "lavendelrød", - lawngreen: "græsgrøn", - lemonchiffon: "citronfromage", - lightblue: "lyseblå", - lightcoral: "lys koralrød", - lightcyan: "lys cyan", - lightgoldenrodyellow: "lys gyldenrisgul", - lightgray: "lysegrå", - lightgreen: "lysegrøn", - lightgrey: "lysegrå", // same as lightgray - lightpink: "lys pink", - lightsalmon: "lys laksefarvet", - lightseagreen: "lys havgrøn", - lightskyblue: "lys himmelblå", - lightslategray: "lys skifergrå", - lightslategrey: "lys skifergrå", // same as lightslategray - lightsteelblue: "lys stålblå", - lightyellow: "lysegul", - lime: "lime", - limegreen: "limegrøn", - linen: "lærred", - magenta: "magenta", - maroon: "rødbrun", - mediumaquamarine: "mellem akvamarin", - mediumblue: "mellemblå", - mediumorchid: "mellem orkide", - mediumpurple: "mellemlilla", - mediumseagreen: "mellemhavgrøn", - mediumslateblue: "mellemskiferblå", - mediumspringgreen: "mellemforårsgrøn", - mediumturquoise: "mellemturkis", - mediumvioletred: "mellemviolet", - midnightblue: "midnatsblå", - mintcream: "pebermyntecreme", - mistyrose: "blegrosa", - moccasin: "fruesko", - navajowhite: "navajo-hvid", - navy: "marineblå", - oldlace: "kniplingshvid", - olive: "olivengrøn", - olivedrab: "brungrøn", - orange: "orange", - orangered: "orangerød", - orchid: "orkide", - palegoldenrod: "bleg gyldenris", - palegreen: "bleggrøn", - paleturquoise: "bleg turkis", - palevioletred: "blegviolet", - papayawhip: "papaya", - peachpuff: "fersken", - peru: "peru", - pink: "pink", - plum: "blomme", - powderblue: "pudderblå", - purple: "lilla", - red: "rød", - rosybrown: "rosabrun", - royalblue: "kongeblå", - saddlebrown: "saddelbrun", - salmon: "laksefarvet", - sandybrown: "sandbrun", - seagreen: "havgrøn", - seashell: "muslingeskal", - sienna: "sienna", - silver: "sølv", - skyblue: "himmelblå", - slateblue: "skiferblå", - slategray: "skifergrå", - slategrey: "skifergrå", // same as slategray - snow: "sne", - springgreen: "forårsgrøn", - steelblue: "metalblå", - tan: "tan", - teal: "blågrøn", - thistle: "tidsel", - tomato: "tomat", - transparent: "transparent", - turquoise: "turkis", - violet: "lilla", - wheat: "korngul", - white: "hvid", - whitesmoke: "hvid røg", - yellow: "gul", - yellowgreen: "gulgrøn" -}) -); diff --git a/lib/dojo/nls/de/colors.js.uncompressed.js b/lib/dojo/nls/de/colors.js.uncompressed.js deleted file mode 100644 index 8d376c49a..000000000 --- a/lib/dojo/nls/de/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/de/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "Alice-blau", - antiquewhite: "Antikweiß", - aqua: "Wasserblau", - aquamarine: "Aquamarin", - azure: "Azur", - beige: "Beige", - bisque: "Bisquit", - black: "Schwarz", - blanchedalmond: "Mandelweiß", - blue: "Blau", - blueviolet: "Blauviolett", - brown: "Braun", - burlywood: "Burlywood", - cadetblue: "Kadettenblau", - chartreuse: "Helles Gelbgrün", - chocolate: "Schokoladenbraun", - coral: "Koralle", - cornflowerblue: "Kornblumenblau", - cornsilk: "Kornseide", - crimson: "Karmesinrot", - cyan: "Zyan", - darkblue: "Dunkelblau", - darkcyan: "Dunkelzyan", - darkgoldenrod: "Dunkelgoldgelb", - darkgray: "Dunkelgrau", - darkgreen: "Dunkelgrün", - darkgrey: "Dunkelgrau", // same as darkgray - darkkhaki: "Dunkelkhaki", - darkmagenta: "Dunkelmagenta", - darkolivegreen: "Dunkelolivgrün", - darkorange: "Dunkelorange", - darkorchid: "Dunkelorchidee", - darkred: "Dunkelrot", - darksalmon: "Dunkellachs", - darkseagreen: "Dunkles Meergrün", - darkslateblue: "Dunkelschieferblau", - darkslategray: "Dunkelschiefergrau", - darkslategrey: "Dunkelschiefergrau", // same as darkslategray - darkturquoise: "Dunkeltürkis", - darkviolet: "Dunkelviolett", - deeppink: "Tiefrosa", - deepskyblue: "Dunkles Himmelblau", - dimgray: "Blassgrau", - dimgrey: "Blassgrau", // same as dimgray - dodgerblue: "Dodger-blau", - firebrick: "Schamottestein", - floralwhite: "Blütenweiß", - forestgreen: "Forstgrün", - fuchsia: "Fuchsia", - gainsboro: "Gainsboro", - ghostwhite: "Geisterweiß", - gold: "Gold", - goldenrod: "Goldgelb", - gray: "Grau", - green: "Grün", - greenyellow: "Grüngelb", - grey: "Grau", // same as gray - honeydew: "Honigtau", - hotpink: "Knallrosa", - indianred: "Indischrot", - indigo: "Indigoblau", - ivory: "Elfenbein", - khaki: "Khaki", - lavender: "Lavendelblau", - lavenderblush: "Lavendelhauch", - lawngreen: "Grasgrün", - lemonchiffon: "Zitronenchiffon", - lightblue: "Hellblau", - lightcoral: "Hellkoralle", - lightcyan: "Hellzyan", - lightgoldenrodyellow: "Hellgoldgelb", - lightgray: "Hellgrau", - lightgreen: "Hellgrün", - lightgrey: "Hellgrau", // same as lightgray - lightpink: "Hellrosa", - lightsalmon: "Helllachs", - lightseagreen: "Helles Meergrün", - lightskyblue: "Helles Himmelblau", - lightslategray: "Helles Schiefergrau", - lightslategrey: "Helles Schiefergrau", // same as lightslategray - lightsteelblue: "Helles Stahlblau", - lightyellow: "Hellgelb", - lime: "Limone", - limegreen: "Limonengrün", - linen: "Leinen", - magenta: "Magenta", - maroon: "Kastanienbraun", - mediumaquamarine: "Mittelaquamarin", - mediumblue: "Mittelblau", - mediumorchid: "Mittelorchidee", - mediumpurple: "Mittelpurpur", - mediumseagreen: "Mittelmeeresgrün", - mediumslateblue: "Mittelschieferblau ", - mediumspringgreen: "Mittelfrühlingsgrün", - mediumturquoise: "Mitteltürkis ", - mediumvioletred: "Mittelviolettrot ", - midnightblue: "Mitternachtblau", - mintcream: "Mintcreme", - mistyrose: "Blassrose", - moccasin: "Mokassin", - navajowhite: "Navajo-weiß", - navy: "Marineblau", - oldlace: "Alte Spitze", - olive: "Oliv", - olivedrab: "Olivgrau", - orange: "Orange", - orangered: "Orangerot", - orchid: "Orchidee", - palegoldenrod: "Blassgoldgelb", - palegreen: "Blassgrün", - paleturquoise: "Blasstürkis", - palevioletred: "Blassviolettrot ", - papayawhip: "Papayacreme", - peachpuff: "Pfirsich", - peru: "Peru", - pink: "Rosa", - plum: "Pflaume", - powderblue: "Pulverblau", - purple: "Purpurrot", - red: "Rot", - rosybrown: "Rosigbraun", - royalblue: "Königsblau", - saddlebrown: "Sattelbraun", - salmon: "Lachs", - sandybrown: "Sandbraun", - seagreen: "Meeresgrün", - seashell: "Muschelweiß", - sienna: "Sienna", - silver: "Silbergrau", - skyblue: "Himmelblau", - slateblue: "Schieferblau", - slategray: "Schiefergrau", - slategrey: "Schiefergrau", // same as slategray - snow: "Schneeweiß", - springgreen: "Frühlingsgrün", - steelblue: "Stahlblau", - tan: "Hautfarben", - teal: "Smaragdgrün", - thistle: "Distel", - tomato: "Tomatenrot", - transparent: "Transparent", - turquoise: "Türkis", - violet: "Violett", - wheat: "Weizen", - white: "Weiß", - whitesmoke: "Rauchweiß", - yellow: "Gelb", - yellowgreen: "Gelbgrün" -}) -); diff --git a/lib/dojo/nls/el/colors.js.uncompressed.js b/lib/dojo/nls/el/colors.js.uncompressed.js deleted file mode 100644 index 8f4bc0eca..000000000 --- a/lib/dojo/nls/el/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/el/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "σιέλ", - antiquewhite: "ξεθωριασμένο λευκό", - aqua: "γαλάζιο", - aquamarine: "γαλαζοπράσινο", - azure: "μπλε του ουρανού", - beige: "μπεζ", - bisque: "σκούρο κρεμ", - black: "μαύρο", - blanchedalmond: "ζαχαρί", - blue: "μπλε", - blueviolet: "βιολετί", - brown: "καφέ", - burlywood: "καφέ του ξύλου", - cadetblue: "μπλε του στρατού", - chartreuse: "φωτεινό κιτρινοπράσινο", - chocolate: "σοκολατί", - coral: "κοραλί", - cornflowerblue: "μεσαίο μπλε", - cornsilk: "ασημί του καλαμποκιού", - crimson: "βαθύ κόκκινο", - cyan: "κυανό", - darkblue: "σκούρο μπλε", - darkcyan: "σκούρο κυανό", - darkgoldenrod: "σκούρο χρυσοκίτρινο", - darkgray: "σκούρο γκρι", - darkgreen: "σκούρο πράσινο", - darkgrey: "σκούρο γκρι", // same as darkgray - darkkhaki: "σκούρο χακί", - darkmagenta: "σκούρο ματζέντα", - darkolivegreen: "σκούρο πράσινο λαδί", - darkorange: "σκούρο πορτοκαλί", - darkorchid: "σκούρα ορχιδέα", - darkred: "σκούρο κόκκινο", - darksalmon: "σκούρο σομόν", - darkseagreen: "σκούρο πράσινο της θάλασσας", - darkslateblue: "σκούρο μεταλλικό μπλε", - darkslategray: "σκούρο μεταλλικό γκρι", - darkslategrey: "σκούρο μεταλλικό γκρι", // same as darkslategray - darkturquoise: "σκούρο τυρκουάζ", - darkviolet: "σκούρο βιολετί", - deeppink: "βαθύ ροζ", - deepskyblue: "βαθύ μπλε το ουρανού", - dimgray: "αχνό γκρι", - dimgrey: "αχνό γκρι", // same as dimgray - dodgerblue: "σκούρο ελεκτρίκ", - firebrick: "κεραμιδί", - floralwhite: "λευκό των ανθών", - forestgreen: "πράσινο του δάσους", - fuchsia: "φούξια", - gainsboro: "γκρι σιέλ", - ghostwhite: "άσπρο", - gold: "χρυσαφί", - goldenrod: "χρυσοκίτρινο", - gray: "γκρι", - green: "πράσινο", - greenyellow: "πρασινοκίτρινο", - grey: "γκρι", // same as gray - honeydew: "μελί", - hotpink: "έντονο ροζ", - indianred: "ινδικό κόκκινο", - indigo: "λουλακί", - ivory: "ιβουάρ", - khaki: "χακί", - lavender: "λίλα", - lavenderblush: "μωβ λεβάντας", - lawngreen: "σκούρο πράσινο", - lemonchiffon: "λεμονί", - lightblue: "ανοιχτό μπλε", - lightcoral: "ανοιχτό κοραλί", - lightcyan: "ανοιχτό κυανό", - lightgoldenrodyellow: "ανοιχτό χρυσοκίτρινο", - lightgray: "ανοιχτό γκρι", - lightgreen: "ανοιχτό πράσινο", - lightgrey: "ανοιχτό γκρι", // same as lightgray - lightpink: "ανοιχτό ροζ", - lightsalmon: "ανοιχτό σομόν", - lightseagreen: "ανοιχτό πράσινο της θάλασσας", - lightskyblue: "ανοιχτό μπλε το ουρανού", - lightslategray: "ανοιχτό μεταλλικό γκρι", - lightslategrey: "ανοιχτό μεταλλικό γκρι", // same as lightslategray - lightsteelblue: "ανοιχτό μπλε ατσαλιού", - lightyellow: "ανοιχτό κίτρινο", - lime: "λαχανί", - limegreen: "πράσινο λαχανί", - linen: "σπαγγί", - magenta: "ματζέντα", - maroon: "βυσσινί", - mediumaquamarine: "μεσαίο γαλαζοπράσινο", - mediumblue: "μεσαίο μπλε", - mediumorchid: "μεσαία ορχιδέα", - mediumpurple: "μεσαίο μωβ", - mediumseagreen: "μεσαίο πράσινο της θάλασσας", - mediumslateblue: "μεσαίο μεταλλικό μπλε", - mediumspringgreen: "μεσαίο πράσινο της άνοιξης", - mediumturquoise: "μεσαίο τυρκουάζ", - mediumvioletred: "μεσαίο κόκκινο βιολετί", - midnightblue: "πολύ σκούρο μπλε", - mintcream: "βεραμάν", - mistyrose: "τριανταφυλλί", - moccasin: "μόκα", - navajowhite: "άσπρο Ναβάχο", - navy: "μπλε του ναυτικού", - oldlace: "εκρού", - olive: "πράσινο λαδί", - olivedrab: "λαδί", - orange: "πορτοκαλί", - orangered: "πορτοκαλοκόκκινο", - orchid: "ορχιδέα", - palegoldenrod: "αχνό χρυσοκίτρινο", - palegreen: "αχνό πράσινο", - paleturquoise: "αχνό τυρκουάζ", - palevioletred: "αχνό κόκκινο βιολετί", - papayawhip: "αχνό ροζ", - peachpuff: "ροδακινί", - peru: "περού", - pink: "ροζ", - plum: "δαμασκηνί", - powderblue: "αχνό μπλε", - purple: "μωβ", - red: "κόκκινο", - rosybrown: "καστανό", - royalblue: "έντονο μπλε", - saddlebrown: "βαθύ καφέ", - salmon: "σομόν", - sandybrown: "μπεζ της άμμου", - seagreen: "πράσινο της θάλασσας", - seashell: "κοχύλι", - sienna: "καφεκίτρινο", - silver: "ασημί", - skyblue: "μπλε του ουρανού", - slateblue: "μεταλλικό μπλε", - slategray: "μεταλλικό γκρι", - slategrey: "μεταλλικό γκρι", // same as slategray - snow: "χιονί", - springgreen: "πράσινο της άνοιξης", - steelblue: "μπλε ατσαλιού", - tan: "ώχρα", - teal: "πετρόλ", - thistle: "μωβ βιολετί", - tomato: "κόκκινο της ντομάτας", - transparent: "διαφανές", - turquoise: "τυρκουάζ", - violet: "βιολετί", - wheat: "σταρένιο", - white: "λευκό", - whitesmoke: "λευκός καπνός", - yellow: "κίτρινο", - yellowgreen: "κιτρινοπράσινο" -}) -); diff --git a/lib/dojo/nls/es/colors.js.uncompressed.js b/lib/dojo/nls/es/colors.js.uncompressed.js deleted file mode 100644 index 121f3510a..000000000 --- a/lib/dojo/nls/es/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/es/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "blanco azulado", - antiquewhite: "blanco antiguo", - aqua: "aguamarina", - aquamarine: "aguamarina 2", - azure: "blanco cielo", - beige: "beige", - bisque: "miel", - black: "negro", - blanchedalmond: "almendra pálido", - blue: "azul", - blueviolet: "azul violáceo", - brown: "marrón", - burlywood: "madera", - cadetblue: "azul cadete", - chartreuse: "verde pálido 2", - chocolate: "chocolate", - coral: "coral", - cornflowerblue: "azul aciano", - cornsilk: "crudo", - crimson: "carmesí", - cyan: "cian", - darkblue: "azul oscuro", - darkcyan: "cian oscuro", - darkgoldenrod: "ocre oscuro", - darkgray: "gris oscuro", - darkgreen: "verde oscuro", - darkgrey: "gris oscuro", // same as darkgray - darkkhaki: "caqui oscuro", - darkmagenta: "magenta oscuro", - darkolivegreen: "verde oliva oscuro", - darkorange: "naranja oscuro", - darkorchid: "orquídea oscuro", - darkred: "rojo oscuro", - darksalmon: "salmón oscuro", - darkseagreen: "verde mar oscuro", - darkslateblue: "azul pizarra oscuro", - darkslategray: "gris pizarra oscuro", - darkslategrey: "gris pizarra oscuro", // same as darkslategray - darkturquoise: "turquesa oscuro", - darkviolet: "violeta oscuro", - deeppink: "rosa fuerte", - deepskyblue: "azul cielo fuerte", - dimgray: "gris marengo", - dimgrey: "gris marengo", // same as dimgray - dodgerblue: "azul fuerte", - firebrick: "teja", - floralwhite: "blanco manteca", - forestgreen: "verde pino", - fuchsia: "fucsia", - gainsboro: "azul gainsboro", - ghostwhite: "blanco ligero", - gold: "oro", - goldenrod: "ocre", - gray: "gris", - green: "verde", - greenyellow: "amarillo verdoso", - grey: "gris", // same as gray - honeydew: "flor de rocío", - hotpink: "rosa oscuro", - indianred: "rojo teja", - indigo: "añil", - ivory: "marfil", - khaki: "caqui", - lavender: "lavanda", - lavenderblush: "lavanda rosácea", - lawngreen: "verde césped", - lemonchiffon: "amarillo pastel", - lightblue: "azul claro", - lightcoral: "coral claro", - lightcyan: "cian claro", - lightgoldenrodyellow: "ocre claro", - lightgray: "gris claro", - lightgreen: "verde claro", - lightgrey: "gris claro", // same as lightgray - lightpink: "rosa claro", - lightsalmon: "salmón claro", - lightseagreen: "verde mar claro", - lightskyblue: "azul cielo claro", - lightslategray: "gris pizarra claro", - lightslategrey: "gris pizarra claro", // same as lightslategray - lightsteelblue: "azul acero claro", - lightyellow: "amarillo claro", - lime: "lima", - limegreen: "lima limón", - linen: "blanco arena", - magenta: "magenta", - maroon: "granate", - mediumaquamarine: "aguamarina medio", - mediumblue: "azul medio", - mediumorchid: "orquídea medio", - mediumpurple: "púrpura medio", - mediumseagreen: "verde mar medio", - mediumslateblue: "azul pizarra medio", - mediumspringgreen: "verde primavera medio", - mediumturquoise: "turquesa medio", - mediumvioletred: "rojo violáceo medio", - midnightblue: "azul medianoche", - mintcream: "crema menta", - mistyrose: "rosa difuminado", - moccasin: "arena", - navajowhite: "blanco navajo", - navy: "azul marino", - oldlace: "encaje antiguo", - olive: "verde oliva", - olivedrab: "verde oliva pardusco", - orange: "naranja", - orangered: "rojo anaranjado", - orchid: "orquídea", - palegoldenrod: "ocre pálido", - palegreen: "verde pálido", - paleturquoise: "turquesa pálido", - palevioletred: "rojo violáceo pálido", - papayawhip: "papaya claro", - peachpuff: "melocotón", - peru: "perú", - pink: "rosa", - plum: "ciruela", - powderblue: "azul suave", - purple: "púrpura", - red: "rojo", - rosybrown: "marrón rosáceo", - royalblue: "azul real", - saddlebrown: "cuero", - salmon: "salmón", - sandybrown: "marrón arcilla", - seagreen: "verde mar", - seashell: "blanco marfil", - sienna: "siena", - silver: "plateado", - skyblue: "azul cielo", - slateblue: "azul pizarra", - slategray: "gris pizarra", - slategrey: "gris pizarra", // same as slategray - snow: "nieve", - springgreen: "verde fuerte", - steelblue: "azul acero", - tan: "canela", - teal: "verde azulado", - thistle: "cardo", - tomato: "tomate", - transparent: "transparente", - turquoise: "turquesa", - violet: "violeta", - wheat: "trigo", - white: "blanco", - whitesmoke: "blanco ahumado", - yellow: "amarillo", - yellowgreen: "verde amarillento" -}) -); diff --git a/lib/dojo/nls/fi/colors.js.uncompressed.js b/lib/dojo/nls/fi/colors.js.uncompressed.js deleted file mode 100644 index 935c23b31..000000000 --- a/lib/dojo/nls/fi/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/fi/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "vaaleanharmaansininen", - antiquewhite: "antiikinvalkoinen", - aqua: "sinivihreä", - aquamarine: "vedenvihreä", - azure: "taivaansininen", - beige: "vaaleanruskea", - bisque: "vaaleanruskea", - black: "musta", - blanchedalmond: "kuorittu manteli", - blue: "sininen", - blueviolet: "sinivioletti", - brown: "ruskea", - burlywood: "puunruskea", - cadetblue: "meren vihreä", - chartreuse: "kellanvihreä", - chocolate: "suklaanruskea", - coral: "koralli", - cornflowerblue: "syvänsininen", - cornsilk: "maissinkeltainen", - crimson: "karmiininpunainen", - cyan: "syaani", - darkblue: "tummansininen", - darkcyan: "tumma turkoosi", - darkgoldenrod: "tumma kultapiisku", - darkgray: "tummanharmaa", - darkgreen: "tummanvihreä", - darkgrey: "tummanharmaa", // same as darkgray - darkkhaki: "tumma khaki", - darkmagenta: "tumma magenta", - darkolivegreen: "tummanoliivinvihreä", - darkorange: "tummanoranssi", - darkorchid: "tumma orkidea", - darkred: "tummanpunainen", - darksalmon: "tumma lohenpunainen", - darkseagreen: "tumma merenvihreä", - darkslateblue: "tumma siniharmaa", - darkslategray: "tummanharmaa", - darkslategrey: "tummanharmaa", // same as darkslategray - darkturquoise: "tumma turkoosi", - darkviolet: "tummanvioletti", - deeppink: "syvä vaaleanpunainen", - deepskyblue: "tumma taivaansininen", - dimgray: "himmeänharmaa", - dimgrey: "himmeänharmaa", // same as dimgray - dodgerblue: "Dodger-sininen", - firebrick: "poltetun tiilen punainen", - floralwhite: "kukanvalkoinen", - forestgreen: "metsänvihreä", - fuchsia: "purppura", - gainsboro: "gainsboro", - ghostwhite: "lakananvalkoinen", - gold: "kulta", - goldenrod: "kullanruskea", - gray: "harmaa", - green: "vihreä", - greenyellow: "vihreänkeltainen", - grey: "harmaa", // same as gray - honeydew: "hunajameloninvihreä", - hotpink: "pinkki", - indianred: "kirkkaanpunainen", - indigo: "indigo", - ivory: "norsunluu", - khaki: "khaki", - lavender: "laventeli", - lavenderblush: "laventelinpunainen", - lawngreen: "ruohonvihreä", - lemonchiffon: "sitruunankeltainen", - lightblue: "vaaleansininen", - lightcoral: "vaalea koralli", - lightcyan: "vaalea syaani", - lightgoldenrodyellow: "vaalea kultapiiskunkeltainen", - lightgray: "vaaleanharmaa", - lightgreen: "vaaleanvihreä", - lightgrey: "vaaleanharmaa", // same as lightgray - lightpink: "vaaleanpunainen", - lightsalmon: "vaalea lohenpunainen", - lightseagreen: "vaalea merenvihreä", - lightskyblue: "vaalea taivaansininen", - lightslategray: "vaaleanharmaa", - lightslategrey: "vaaleanharmaa", // same as lightslategray - lightsteelblue: "vaalea teräksensininen", - lightyellow: "vaaleankeltainen", - lime: "vaaleanvihreä", - limegreen: "limetinvihreä", - linen: "pellavanvaalea", - magenta: "magenta", - maroon: "kastanjanruskea", - mediumaquamarine: "keskivaalea vedenvihreä", - mediumblue: "keskisininen", - mediumorchid: "keskivaalea orkidea", - mediumpurple: "keskivaalea violetti", - mediumseagreen: "keskivaalea merenvihreä", - mediumslateblue: "keskivaalea siniharmaa", - mediumspringgreen: "keskivaalea keväänvihreä", - mediumturquoise: "keskivaalea turkoosi", - mediumvioletred: "keskivaalea lila", - midnightblue: "yönsininen", - mintcream: "minttukreemi", - mistyrose: "utuinen ruusu", - moccasin: "nahanruskea", - navajowhite: "navajonvalkoinen", - navy: "laivastonsininen", - oldlace: "vanha pitsi", - olive: "oliivinvihreä", - olivedrab: "oliivinruskea", - orange: "oranssi", - orangered: "oranssinpunainen", - orchid: "orkidea", - palegoldenrod: "haalea kultapiisku", - palegreen: "haalea vihreä", - paleturquoise: "haalea turkoosi", - palevioletred: "haalea lila", - papayawhip: "papaijavaahto", - peachpuff: "persikka", - peru: "peru", - pink: "vaaleanpunainen", - plum: "luumunpunainen", - powderblue: "harmaansininen", - purple: "violetti", - red: "punainen", - rosybrown: "punertavanruskea", - royalblue: "syvänsininen", - saddlebrown: "satulanruskea", - salmon: "lohenpunainen", - sandybrown: "hiekanruskea", - seagreen: "merenvihreä", - seashell: "simpukankuori", - sienna: "siena", - silver: "hopea", - skyblue: "taivaansininen", - slateblue: "savensininen", - slategray: "savenharmaa", - slategrey: "savenharmaa", // same as slategray - snow: "lumivalkoinen", - springgreen: "keväänvihreä", - steelblue: "teräksensininen", - tan: "kellanruskea", - teal: "sinivihreä", - thistle: "ohdake", - tomato: "tomaatinpunainen", - transparent: "läpinäkyvä", - turquoise: "turkoosi", - violet: "violetti", - wheat: "vehnänkeltainen", - white: "valkoinen", - whitesmoke: "savunvalkea", - yellow: "keltainen", - yellowgreen: "kellanvihreä" -}) -); diff --git a/lib/dojo/nls/fr/colors.js.uncompressed.js b/lib/dojo/nls/fr/colors.js.uncompressed.js deleted file mode 100644 index e04b51271..000000000 --- a/lib/dojo/nls/fr/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/fr/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "bleu gris", - antiquewhite: "blanc antique", - aqua: "bleu-vert", - aquamarine: "aigue-marine", - azure: "bleu azur", - beige: "beige", - bisque: "beige rosé", - black: "noir", - blanchedalmond: "coquille d'œuf", - blue: "bleu", - blueviolet: "bleu-violet", - brown: "brun", - burlywood: "bois précieux", - cadetblue: "bleu pétrole", - chartreuse: "vert vif", - chocolate: "chocolat", - coral: "corail", - cornflowerblue: "bleuet", - cornsilk: "vanille", - crimson: "cramoisi", - cyan: "cyan", - darkblue: "bleu foncé", - darkcyan: "cyan foncé", - darkgoldenrod: "jaune paille foncé", - darkgray: "gris foncé", - darkgreen: "vert foncé", - darkgrey: "gris foncé", // same as darkgray - darkkhaki: "kaki foncé", - darkmagenta: "magenta foncé", - darkolivegreen: "olive foncé", - darkorange: "orange foncé", - darkorchid: "lilas foncé", - darkred: "rouge foncé", - darksalmon: "saumon foncé", - darkseagreen: "vert d'eau foncé", - darkslateblue: "bleu ardoise foncé", - darkslategray: "gris ardoise foncé", - darkslategrey: "gris ardoise foncé", // same as darkslategray - darkturquoise: "turquoise foncé", - darkviolet: "violet foncé", - deeppink: "rose soutenu", - deepskyblue: "bleu ciel soutenu", - dimgray: "gris soutenu", - dimgrey: "gris soutenu", // same as dimgray - dodgerblue: "bleu France", - firebrick: "rouge brique", - floralwhite: "lys", - forestgreen: "vert sapin", - fuchsia: "fuchsia", - gainsboro: "gris souris", - ghostwhite: "blanc laiteux", - gold: "or", - goldenrod: "jaune paille", - gray: "gris", - green: "vert", - greenyellow: "vert-jaune", - grey: "gris", // same as gray - honeydew: "opalin", - hotpink: "rose intense", - indianred: "rose indien", - indigo: "indigo", - ivory: "ivoire", - khaki: "kaki", - lavender: "lavande", - lavenderblush: "lavandin", - lawngreen: "vert prairie", - lemonchiffon: "mousse de citron", - lightblue: "bleu clair", - lightcoral: "corail clair", - lightcyan: "cyan clair", - lightgoldenrodyellow: "jaune paille clair", - lightgray: "gris clair", - lightgreen: "vert clair", - lightgrey: "gris clair", // same as lightgray - lightpink: "rose clair", - lightsalmon: "saumon clair", - lightseagreen: "vert d'eau clair", - lightskyblue: "bleu ciel clair", - lightslategray: "gris ardoise clair", - lightslategrey: "gris ardoise clair", // same as lightslategray - lightsteelblue: "bleu acier clair", - lightyellow: "jaune clair", - lime: "vert citron", - limegreen: "citron vert", - linen: "écru", - magenta: "magenta", - maroon: "marron", - mediumaquamarine: "aigue-marine moyen", - mediumblue: "bleu moyen", - mediumorchid: "lilas moyen", - mediumpurple: "pourpre moyen", - mediumseagreen: "vert d'eau moyen", - mediumslateblue: "bleu ardoise moyen", - mediumspringgreen: "vert printemps moyen", - mediumturquoise: "turquoise moyen", - mediumvioletred: "rouge violacé moyen", - midnightblue: "bleu nuit", - mintcream: "crème de menthe", - mistyrose: "rose pâle", - moccasin: "chamois", - navajowhite: "chair", - navy: "bleu marine", - oldlace: "blanc cassé", - olive: "olive", - olivedrab: "brun verdâtre", - orange: "orange", - orangered: "rouge orangé", - orchid: "lilas", - palegoldenrod: "jaune paille pâle", - palegreen: "vert pâle", - paleturquoise: "turquoise pâle", - palevioletred: "rouge violacé pâle", - papayawhip: "crème de papaye", - peachpuff: "pêche", - peru: "caramel", - pink: "rose", - plum: "prune", - powderblue: "bleu de smalt", - purple: "pourpre", - red: "rouge", - rosybrown: "vieux rose", - royalblue: "bleu roi", - saddlebrown: "brun cuir", - salmon: "saumon", - sandybrown: "sable", - seagreen: "vert d'eau", - seashell: "coquillage", - sienna: "terre de sienne", - silver: "argent", - skyblue: "bleu ciel", - slateblue: "bleu ardoise", - slategray: "gris ardoise", - slategrey: "gris ardoise", // same as slategray - snow: "neige", - springgreen: "vert printemps", - steelblue: "bleu acier", - tan: "grège", - teal: "sarcelle", - thistle: "chardon", - tomato: "tomate", - transparent: "transparent", - turquoise: "turquoise", - violet: "violet", - wheat: "blé", - white: "blanc", - whitesmoke: "blanc cendré", - yellow: "jaune", - yellowgreen: "vert jaunâtre" -}) -); diff --git a/lib/dojo/nls/he/colors.js.uncompressed.js b/lib/dojo/nls/he/colors.js.uncompressed.js deleted file mode 100644 index e986b09c9..000000000 --- a/lib/dojo/nls/he/colors.js.uncompressed.js +++ /dev/null @@ -1,158 +0,0 @@ -define( -"dojo/nls/he/colors", //begin v1.x content -({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - -//Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color e.g. gray vs. gray. -//TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? -aliceblue: "כחול פלדה", -antiquewhite: "לבן עתיק", -aqua: "אקווה", -aquamarine: "אקוומארין", -azure: "תכלת עז", -beige: "בז'", -bisque: "לבן שקד", -black: "שחור", -blanchedalmond: "שקד", -blue: "כחול", -blueviolet: "כחול-סגול", -brown: "חום", -burlywood: "חום דהוי", -cadetblue: "כחול ים", -chartreuse: "ירוק-צהוב", -chocolate: "שוקולד", -coral: "אלמוג", -cornflowerblue: "כחול דרדר", -cornsilk: "צהבהב", -crimson: "ארגמן", -cyan: "טורקיז", -darkblue: "כחול כהה", -darkcyan: "טורקיז כהה", -darkgoldenrod: "זהוב כהה", -darkgray: "אפור כהה", -darkgreen: "ירוק כהה", -darkgrey: "אפור כהה", // same as darkgray -darkkhaki: "חאקי כהה", -darkmagenta: "בורדו כהה", -darkolivegreen: "ירוק זית כהה", -darkorange: "כתום כהה", -darkorchid: "סחלב כהה", -darkred: "אדום כהה", -darksalmon: "סלמון כהה", -darkseagreen: "ירוק ים כהה", -darkslateblue: "כחול צפחה כהה", -darkslategray: "אפור צפחה כהה", -darkslategrey: "אפור צפחה כהה", // same as darkslategray -darkturquoise: "טורקיז כהה", -darkviolet: "סגול כהה", -deeppink: "ורוד עמוק", -deepskyblue: "כחול שמיים עמוק", -dimgray: "אפור עמום", -dimgrey: "אפור עמום", // same as dimgray -dodgerblue: "כחול", -firebrick: "לבנה שרופה", -floralwhite: "לבן פרחוני", -forestgreen: "ירוק יער", -fuchsia: "ורוד בהיר", -gainsboro: "גיינסבורו", -ghostwhite: "לבן רפאים", -gold: "זהב", -goldenrod: "זהוב", -gray: "אפור", -green: "ירוק", -greenyellow: "ירוק-צהוב", -grey: "אפור", // same as gray -honeydew: "ירקרק", -hotpink: "ורוד לוהט", -indianred: "אדום דהוי", -indigo: "אינדיגו", -ivory: "שנהב", -khaki: "חאקי", -lavender: "לבנדר", -lavenderblush: "סומק לבנדר", -lawngreen: "ירוק דשא", -lemonchiffon: "ירוק לימון", -lightblue: "תכלת", -lightcoral: "אלמוג בהיר", -lightcyan: "טורקיז בהיר", -lightgoldenrodyellow: "צהוב בהיר", -lightgray: "אפור בהיר", -lightgreen: "ירוק בהיר", -lightgrey: "אפור בהיר", // same as lightgray -lightpink: "ורוד בהיר", -lightsalmon: "סלמון בהיר", -lightseagreen: "ירוק ים בהיר", -lightskyblue: "כחול שמיים בהיר", -lightslategray: "אפור צפחה בהיר", -lightslategrey: "אפור צפחה בהיר", // same as lightslategray -lightsteelblue: "כחול פלדה בהיר", -lightyellow: "צהוב בהיר", -lime: "לימון", -limegreen: "ירוק לימוני", -linen: "פשתן", -magenta: "בורדו", -maroon: "חום אדמדם", -mediumaquamarine: "כחול בינוני", -mediumblue: "תכלת בינוני", -mediumorchid: "סחלב בינוני", -mediumpurple: "סגול בינוני", -mediumseagreen: "ירוק ים בינוני", -mediumslateblue: "כחול צפחה בינוני", -mediumspringgreen: "ירוק אביב בינוני", -mediumturquoise: "טורקיז בינוני", -mediumvioletred: "סגול-אדום בינוני", -midnightblue: "כחול כהה", -mintcream: "קרם מנטה", -mistyrose: "ורוד מעורפל", -moccasin: "מוקסין", -navajowhite: "לבן נוואחו", -navy: "כחול כהה", -oldlace: "תחרה עתיקה", -olive: "זית", -olivedrab: "זית עמום", -orange: "כתום", -orangered: "כתום אדום", -orchid: "סחלב", -palegoldenrod: "זהוב בהיר", -palegreen: "ירוק בהיר", -paleturquoise: "טורקיז בהיר", -palevioletred: "סגול-אדום בהיר", -papayawhip: "פפאיה", -peachpuff: "קציפת אפרסק", -peru: "פרו", -pink: "ורוד", -plum: "שזיף", -powderblue: "כחול חיוור", -purple: "סגול", -red: "אדום", -rosybrown: "חום ורדרד", -royalblue: "כחול מלכותי", -saddlebrown: "חום דהוי", -salmon: "סלמון", -sandybrown: "חום חולי", -seagreen: "ירוק ים", -seashell: "צדף", -sienna: "סיינה", -silver: "כסף", -skyblue: "כחול שמיים", -slateblue: "כחול צפחה", -slategray: "אפור צפחה", -slategrey: "אפור צפחה", // same as slategray -snow: "שלג", -springgreen: "ירוק אביב", -steelblue: "כחול פלדה", -tan: "חום אדמדם", -teal: "כחול-ירוק כהה", -thistle: "דרדר", -tomato: "עגבניה", -turquoise: "טורקיז", -violet: "סגול", -wheat: "חיוט", -white: "לבן", -whitesmoke: "עשן לבן", -yellow: "צהוב", -yellowgreen: "ירוק צהוב" -}) -//end v1.x content -); diff --git a/lib/dojo/nls/hr/colors.js.uncompressed.js b/lib/dojo/nls/hr/colors.js.uncompressed.js deleted file mode 100644 index 2928d26ed..000000000 --- a/lib/dojo/nls/hr/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/hr/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. -//Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color e.g. gray vs. gray. -//TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? -aliceblue: "alice plava", -antiquewhite: "antique bijela", -aqua: "aqua", -aquamarine: "akvamarin", -azure: "azurna", -beige: "bež", -bisque: "svjetlo smeđe ružičasta", -black: "crna", -blanchedalmond: "slonovača", -blue: "plava", -blueviolet: "plavo ljubičasta", -brown: "smeđa", -burlywood: "pješčano smeđa", -cadetblue: "plavo siva", -chartreuse: "chartreuse", -chocolate: "čokoladna", -coral: "koraljna", -cornflowerblue: "različak plava", -cornsilk: "cornsilk", -crimson: "rumena", -cyan: "cijan", -darkblue: "tamno plava", -darkcyan: "tamno cijan", -darkgoldenrod: "tamno zlatno žuta", -darkgray: "tamno siva", -darkgreen: "tamno zelena", -darkgrey: "tamno siva", // same as darkgray -darkkhaki: "tamno sivo smeđa", -darkmagenta: "tamno grimizna", -darkolivegreen: "tamno maslinasto zelena", -darkorange: "tamno narančasta", -darkorchid: "tamno ružičasta", -darkred: "tamno crvena", -darksalmon: "tamno žuto ružičasta", -darkseagreen: "tamno plavo zelena", -darkslateblue: "tamno sivo plava", -darkslategray: "tamno plavo siva", -darkslategrey: "tamno plavo siva", // same as darkslategray -darkturquoise: "tamno tirkizna", -darkviolet: "tamno ljubičasta", -deeppink: "intenzivno ružičasta", -deepskyblue: "intenzivno nebesko plava", -dimgray: "mutno siva", -dimgrey: "mutno siva", // same as dimgray -dodgerblue: "dodger plava", -firebrick: "žarko crvena", -floralwhite: "cvjetno bijela", -forestgreen: "tamno zelena", -fuchsia: "fuksija", -gainsboro: "gainsboro", -ghostwhite: "sivo bijela", -gold: "zlatna", -goldenrod: "zlatno žuta", -gray: "siva", -green: "zelena", -greenyellow: "zeleno-žuta", -grey: "siva", // same as gray -honeydew: "honeydew", -hotpink: "žarko ružičasta", -indianred: "indijski crveno", -indigo: "indigo", -ivory: "slonovača", -khaki: "sivo smeđa", -lavender: "lavanda", -lavenderblush: "lavanda", -lawngreen: "livadno zelena", -lemonchiffon: "nježno žuta", -lightblue: "svjetlo plava", -lightcoral: "svjetlo koraljna", -lightcyan: "svjetlo cijan", -lightgoldenrodyellow: "svjetlo zlatno žuta", -lightgray: "svjetlo siva", -lightgreen: "svjetlo zelena", -lightgrey: "svjetlo siva", // same as lightgray -lightpink: "svjetlo ružičasta", -lightsalmon: "svjetlo žuto ružičasta", -lightseagreen: "svjetlo plavo zelena", -lightskyblue: "svjetlo nebesko plava", -lightslategray: "svjetlo plavo siva", -lightslategrey: "svjetlo plavo siva", // same as lightslategray -lightsteelblue: "svjetlo čelično plava", -lightyellow: "svjetlo žuta", -lime: "limeta", -limegreen: "limeta zelena", -linen: "platno", -magenta: "grimizna", -maroon: "kestenjasta", -mediumaquamarine: "srednje akvamarin", -mediumblue: "srednje plava", -mediumorchid: "srednje ružičasta", -mediumpurple: "srednje purpurna", -mediumseagreen: "srednje plavo zelena", -mediumslateblue: "srednje sivo plava", -mediumspringgreen: "srednje proljetno zelena", -mediumturquoise: "srednje tirkizna", -mediumvioletred: "srednje ljubičasto-crvena", -midnightblue: "ponoćno plava", -mintcream: "blijedo zelena", -mistyrose: "mutno ružičasta", -moccasin: "moccasin", -navajowhite: "krem bijela", -navy: "mornarsko plava", -oldlace: "old lace", -olive: "maslinasta", -olivedrab: "maslinasta", -orange: "narančasta", -orangered: "narančasto crvena", -orchid: "ružičasta", -palegoldenrod: "blijedo zlatno žuta", -palegreen: "svjetlo zelena", -paleturquoise: "blijedo tirkizna", -palevioletred: "blijedo ljubičasto crvena", -papayawhip: "blijedo narančasta", -peachpuff: "breskva", -peru: "peru", -pink: "ružičasta", -plum: "šljiva", -powderblue: "blijedo plava", -purple: "purpurna", -red: "crvena", -rosybrown: "ružičasto smeđa", -royalblue: "kraljevski plava", -saddlebrown: "srednje smeđa", -salmon: "ružičasta", -sandybrown: "pješčano smeđa", -seagreen: "plavo zelena", -seashell: "nježno ružičasta", -sienna: "sjena", -silver: "srebrna", -skyblue: "nebesko plava", -slateblue: "sivo plava", -slategray: "plavo siva", -slategrey: "plavo siva", // same as slategray -snow: "snijeg", -springgreen: "proljetno zeleno", -steelblue: "čelično plava", -tan: "ten", -teal: "teal", -thistle: "čičak", -tomato: "rajčica", -transparent: "prozirno", -turquoise: "tirkizna", -violet: "ljubičasta", -wheat: "pšenica", -white: "bijela", -whitesmoke: "bijeli dim", -yellow: "žuta", -yellowgreen: "žuto zelena" -}) -); diff --git a/lib/dojo/nls/hu/colors.js.uncompressed.js b/lib/dojo/nls/hu/colors.js.uncompressed.js deleted file mode 100644 index 92773aeab..000000000 --- a/lib/dojo/nls/hu/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/hu/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "Alice kék", - antiquewhite: "antik fehér", - aqua: "vízszín", - aquamarine: "akvamarin", - azure: "azúrkék", - beige: "bézs", - bisque: "porcelán", - black: "fekete", - blanchedalmond: "hámozott mandula", - blue: "kék", - blueviolet: "ibolyakék", - brown: "barna", - burlywood: "nyersfa", - cadetblue: "kadétkék", - chartreuse: "chartreuse", - chocolate: "csokoládé", - coral: "korall", - cornflowerblue: "búzavirágkék", - cornsilk: "kukoricahaj", - crimson: "karmazsinvörös", - cyan: "ciánkék", - darkblue: "sötétkék", - darkcyan: "sötét ciánkék", - darkgoldenrod: "sötét aranyvessző", - darkgray: "sötétszürke", - darkgreen: "sötétzöld", - darkgrey: "sötétszürke", // same as darkgray - darkkhaki: "sötét khakiszín", - darkmagenta: "sötétbíbor", - darkolivegreen: "sötét olajzöld", - darkorange: "sötét narancssárga", - darkorchid: "sötét orchidea", - darkred: "sötétvörös", - darksalmon: "sötét lazacszín", - darkseagreen: "sötét tengerzöld", - darkslateblue: "sötét palakék", - darkslategray: "sötét palaszürke", - darkslategrey: "sötét palaszürke", // same as darkslategray - darkturquoise: "sötét türkizkék", - darkviolet: "sötét ibolyaszín", - deeppink: "sötétrózsaszín", - deepskyblue: "sötét égszínkék", - dimgray: "halványszürke", - dimgrey: "halványszürke", // same as dimgray - dodgerblue: "dodger kék", - firebrick: "téglavörös", - floralwhite: "virágfehér", - forestgreen: "erdőzöld", - fuchsia: "fukszia", - gainsboro: "gainsboro", - ghostwhite: "szellemfehér", - gold: "arany", - goldenrod: "aranyvessző", - gray: "szürke", - green: "zöld", - greenyellow: "zöldessárga", - grey: "szürke", // same as gray - honeydew: "mézharmat", - hotpink: "meleg rózsaszín", - indianred: "indiánvörös", - indigo: "indigó", - ivory: "elefántcsont", - khaki: "khakiszín", - lavender: "levendula", - lavenderblush: "pirosas levendula", - lawngreen: "fűzöld", - lemonchiffon: "sárga műselyem", - lightblue: "világoskék", - lightcoral: "világos korall", - lightcyan: "világos ciánkék", - lightgoldenrodyellow: "világos aranyvessző sárga", - lightgray: "világosszürke", - lightgreen: "világoszöld", - lightgrey: "világosszürke", // same as lightgray - lightpink: "világos rózsaszín", - lightsalmon: "világos lazacszín", - lightseagreen: "világos tengerzöld", - lightskyblue: "világos égszínkék", - lightslategray: "világos palaszürke", - lightslategrey: "világos palaszürke", // same as lightslategray - lightsteelblue: "világos acélkék", - lightyellow: "világossárga", - lime: "lime", - limegreen: "limezöld", - linen: "vászonfehér", - magenta: "bíbor", - maroon: "gesztenyebarna", - mediumaquamarine: "közepes akvamarin", - mediumblue: "közepes kék", - mediumorchid: "közepes orchidea", - mediumpurple: "közepes lila", - mediumseagreen: "közepes tengerzöld", - mediumslateblue: "közepes palakék", - mediumspringgreen: "közepes tavaszzöld", - mediumturquoise: "közepes türkizkék", - mediumvioletred: "közepes ibolyavörös", - midnightblue: "éjkék", - mintcream: "mentaszósz", - mistyrose: "halvány rózsaszín", - moccasin: "mokkaszín", - navajowhite: "navajo fehér", - navy: "tengerészkék", - oldlace: "régi csipke", - olive: "olajzöld", - olivedrab: "olajzöld drapp", - orange: "narancssárga", - orangered: "narancsvörös", - orchid: "orchidea", - palegoldenrod: "halvány aranyvessző", - palegreen: "halványzöld", - paleturquoise: "halvány türkizkék", - palevioletred: "halvány ibolyavörös", - papayawhip: "papayahab", - peachpuff: "barackszín", - peru: "peru", - pink: "rózsaszín", - plum: "szilvakék", - powderblue: "púderkék", - purple: "lila", - red: "vörös", - rosybrown: "barnásrózsaszín", - royalblue: "királykék", - saddlebrown: "nyeregbarna", - salmon: "lazacszín", - sandybrown: "homokbarna", - seagreen: "tengerzöld", - seashell: "kagyló", - sienna: "vörösesbarna", - silver: "ezüst", - skyblue: "égszínkék", - slateblue: "palakék", - slategray: "palaszürke", - slategrey: "palaszürke", // same as slategray - snow: "hó", - springgreen: "tavaszzöld", - steelblue: "acélkék", - tan: "rozsdabarna", - teal: "pávakék", - thistle: "bogáncs", - tomato: "paradicsom", - transparent: "átlátszó", - turquoise: "türkizkék", - violet: "ibolyaszín", - wheat: "búza", - white: "fehér", - whitesmoke: "fehér füst", - yellow: "sárga", - yellowgreen: "sárgászöld" -}) -); diff --git a/lib/dojo/nls/it/colors.js.uncompressed.js b/lib/dojo/nls/it/colors.js.uncompressed.js deleted file mode 100644 index aafbb2d79..000000000 --- a/lib/dojo/nls/it/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/it/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "bianco ghiaccio", - antiquewhite: "rosa antico", - aqua: "verde acqua", - aquamarine: "acquamarina", - azure: "azure", - beige: "beige", - bisque: "terracotta", - black: "nero", - blanchedalmond: "beige 2", - blue: "blu", - blueviolet: "violetto bluastro", - brown: "marrone", - burlywood: "legno massiccio", - cadetblue: "verde petrolio", - chartreuse: "verde brillante", - chocolate: "cioccolato", - coral: "corallo", - cornflowerblue: "blu fiordaliso", - cornsilk: "crema", - crimson: "rosso scarlatto", - cyan: "ciano", - darkblue: "blu scuro", - darkcyan: "celeste scuro", - darkgoldenrod: "ocra scuro", - darkgray: "grigio scuro", - darkgreen: "verde scuro", - darkgrey: "grigio scuro", // same as darkgray - darkkhaki: "cachi scuro", - darkmagenta: "magenta scuro", - darkolivegreen: "verde oliva scuro", - darkorange: "arancione scuro", - darkorchid: "orchidea scuro", - darkred: "rosso scuro", - darksalmon: "salmone scuro", - darkseagreen: "verde acqua scuro", - darkslateblue: "blu ardesia scuro", - darkslategray: "grigio ardesia scuro", - darkslategrey: "grigio ardesia scuro", // same as darkslategray - darkturquoise: "turchese scuro", - darkviolet: "viola scuro", - deeppink: "ciclamino", - deepskyblue: "azzurro intenso", - dimgray: "grigio tenue", - dimgrey: "grigio tenue", // same as dimgray - dodgerblue: "dodger blue", - firebrick: "mattone", - floralwhite: "bianco grigio", - forestgreen: "verde pino scuro", - fuchsia: "fucsia", - gainsboro: "gainsboro", - ghostwhite: "bianco gesso", - gold: "oro", - goldenrod: "dorato", - gray: "grigio", - green: "verde", - greenyellow: "verde-giallo", - grey: "grigio", // same as gray - honeydew: "miele", - hotpink: "rosa acceso", - indianred: "terra indiana", - indigo: "indaco", - ivory: "avorio", - khaki: "cachi", - lavender: "lavanda", - lavenderblush: "lavanda rosa", - lawngreen: "verde brillante chiaro", - lemonchiffon: "lemon chiffon", - lightblue: "blu chiaro", - lightcoral: "corallo chiaro", - lightcyan: "ciano chiaro", - lightgoldenrodyellow: "giallo dorato chiaro", - lightgray: "grigio chiaro", - lightgreen: "verde chiaro", - lightgrey: "grigio chiaro", // same as lightgray - lightpink: "rosa chiaro", - lightsalmon: "salmone chiaro", - lightseagreen: "verde acqua chiaro", - lightskyblue: "azzurro chiaro", - lightslategray: "grigio ardesia chiaro", - lightslategrey: "grigio ardesia chiaro", // same as lightslategray - lightsteelblue: "blu acciaio chiaro", - lightyellow: "giallo chiaro", - lime: "lime", - limegreen: "verde lime", - linen: "lino", - magenta: "magenta", - maroon: "Bordeaux", - mediumaquamarine: "acquamarina medio", - mediumblue: "blu medio", - mediumorchid: "orchidea medio", - mediumpurple: "viola medio", - mediumseagreen: "verde acqua medio", - mediumslateblue: "blu ardesia medio", - mediumspringgreen: "verde brillante medio", - mediumturquoise: "turchese medio", - mediumvioletred: "violetto rosso medio", - midnightblue: "blu notte", - mintcream: "bianco nuvola", - mistyrose: "rosa pallido", - moccasin: "mocassino", - navajowhite: "sabbia", - navy: "blu scuro", - oldlace: "mandorla", - olive: "verde oliva", - olivedrab: "verde bottiglia", - orange: "arancione", - orangered: "vermiglio", - orchid: "orchidea", - palegoldenrod: "dorato pallido", - palegreen: "verde pallido", - paleturquoise: "turchese pallido", - palevioletred: "violetto rosso pallido", - papayawhip: "papaya", - peachpuff: "pesche", - peru: "perù", - pink: "rosa", - plum: "prugna", - powderblue: "azzurro polvere", - purple: "viola", - red: "rosso", - rosybrown: "caffè latte", - royalblue: "royal blue", - saddlebrown: "cacao", - salmon: "salmone", - sandybrown: "argilla", - seagreen: "verde acqua", - seashell: "sabbia rosa", - sienna: "terra di siena", - silver: "argento", - skyblue: "azzurro", - slateblue: "blu ardesia", - slategray: "grigio ardesia", - slategrey: "grigio ardesia", // same as slategray - snow: "neve", - springgreen: "verde brillante", - steelblue: "blu brillante", - tan: "tan", - teal: "verde acqua", - thistle: "rosa cenere", - tomato: "pomodoro", - transparent: "trasparente", - turquoise: "turchese", - violet: "violetto", - wheat: "tabacco", - white: "bianco", - whitesmoke: "bianco fumo", - yellow: "giallo", - yellowgreen: "giallo verde" -}) -); diff --git a/lib/dojo/nls/ja/colors.js.uncompressed.js b/lib/dojo/nls/ja/colors.js.uncompressed.js deleted file mode 100644 index 7051d786b..000000000 --- a/lib/dojo/nls/ja/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/ja/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "アリスブルー", - antiquewhite: "アンティークホワイト", - aqua: "アクア", - aquamarine: "碧緑", - azure: "薄い空色", - beige: "ベージュ", - bisque: "ビスク", - black: "黒", - blanchedalmond: "皮なしアーモンド", - blue: "青", - blueviolet: "青紫", - brown: "茶", - burlywood: "バーリーウッド", - cadetblue: "くすんだ青", - chartreuse: "淡黄緑", - chocolate: "チョコレート", - coral: "珊瑚", - cornflowerblue: "コーンフラワーブルー", - cornsilk: "コーンシルク", - crimson: "深紅", - cyan: "シアンブルー", - darkblue: "ダークブルー", - darkcyan: "ダークシアンブルー", - darkgoldenrod: "ダークゴールデンロッド", - darkgray: "ダークグレイ", - darkgreen: "ダークグリーン", - darkgrey: "ダークグレイ", // same as darkgray - darkkhaki: "ダークカーキ", - darkmagenta: "ダークマジェンタ", - darkolivegreen: "ダークオリーブグリーン", - darkorange: "ダークオレンジ", - darkorchid: "ダークオーキッド", - darkred: "ダークレッド", - darksalmon: "ダークサーモン", - darkseagreen: "ダークシーグリーン", - darkslateblue: "ダークスレートブルー", - darkslategray: "ダークスレートグレイ", - darkslategrey: "ダークスレートグレイ", // same as darkslategray - darkturquoise: "ダークターコイズ", - darkviolet: "ダークバイオレット", - deeppink: "濃いピンク", - deepskyblue: "濃い空色", - dimgray: "くすんだグレイ", - dimgrey: "くすんだグレイ", // same as dimgray - dodgerblue: "ドッジャーブルー", - firebrick: "赤煉瓦色", - floralwhite: "フローラルホワイト", - forestgreen: "フォレストグリーン", - fuchsia: "紫紅色", - gainsboro: "ゲインズボーロ", - ghostwhite: "ゴーストホワイト", - gold: "金", - goldenrod: "ゴールデンロッド", - gray: "グレイ", - green: "緑", - greenyellow: "緑黄色", - grey: "グレイ", // same as gray - honeydew: "ハニーデュー", - hotpink: "ホットピンク", - indianred: "インディアンレッド", - indigo: "藍色", - ivory: "アイボリー", - khaki: "カーキ", - lavender: "ラベンダー", - lavenderblush: "ラベンダーブラッシ", - lawngreen: "ローングリーン", - lemonchiffon: "レモンシフォン", - lightblue: "ライトブルー", - lightcoral: "ライトコーラル", - lightcyan: "ライトシアン", - lightgoldenrodyellow: "ライトゴールデンロッドイエロー", - lightgray: "ライトグレイ", - lightgreen: "ライトグリーン", - lightgrey: "ライトグレイ", // same as lightgray - lightpink: "ライトピンク", - lightsalmon: "ライトサーモン", - lightseagreen: "ライトシーグリーン", - lightskyblue: "ライトスカイブルー", - lightslategray: "ライトスレートグレイ", - lightslategrey: "ライトスレートグレイ", // same as lightslategray - lightsteelblue: "ライトスチールブルー", - lightyellow: "ライトイエロー", - lime: "ライム", - limegreen: "ライムグリーン", - linen: "亜麻色", - magenta: "赤紫", - maroon: "えび茶", - mediumaquamarine: "ミディアムアクアマリーン", - mediumblue: "ミディアムブルー", - mediumorchid: "ミディアムオーキッド", - mediumpurple: "ミディアムパープル", - mediumseagreen: "ミディアムシーグリーン", - mediumslateblue: "ミディアムスレートブルー", - mediumspringgreen: "ミディアムスプリンググリーン", - mediumturquoise: "ミディアムターコイズ", - mediumvioletred: "ミディアムバイオレットレッド", - midnightblue: "ミッドナイトブルー", - mintcream: "ミントクリーム", - mistyrose: "ミスティローズ", - moccasin: "モカシン", - navajowhite: "ナバホホワイト", - navy: "濃紺", - oldlace: "オールドレイス", - olive: "オリーブ", - olivedrab: "濃黄緑", - orange: "オレンジ", - orangered: "オレンジレッド", - orchid: "薄紫", - palegoldenrod: "ペイルゴールデンロッド", - palegreen: "ペイルグリーン", - paleturquoise: "ペイルターコイズ", - palevioletred: "ペイルバイオレットレッド", - papayawhip: "パパイアホイップ", - peachpuff: "ピーチパフ", - peru: "ペルー", - pink: "ピンク", - plum: "深紫", - powderblue: "淡青", - purple: "紫", - red: "赤", - rosybrown: "ロージーブラウン", - royalblue: "藤色", - saddlebrown: "サドルブラウン", - salmon: "サーモン", - sandybrown: "砂褐色", - seagreen: "シーグリーン", - seashell: "シーシェル", - sienna: "黄褐色", - silver: "銀", - skyblue: "スカイブルー", - slateblue: "スレートブルー", - slategray: "スレートグレイ", - slategrey: "スレートグレイ", // same as slategray - snow: "雪色", - springgreen: "スプリンググリーン", - steelblue: "鋼色", - tan: "茶褐色", - teal: "ティール", - thistle: "シスル", - tomato: "トマト色", - transparent: "透明", - turquoise: "ターコイズ", - violet: "すみれ色", - wheat: "小麦色", - white: "白", - whitesmoke: "ホワイトスモーク", - yellow: "黄", - yellowgreen: "黄緑" -}) -); diff --git a/lib/dojo/nls/kk/colors.js.uncompressed.js b/lib/dojo/nls/kk/colors.js.uncompressed.js deleted file mode 100644 index d7aa08c4c..000000000 --- a/lib/dojo/nls/kk/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/kk/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "бозғылт көк", - antiquewhite: "ақ антик", - aqua: "су түсі", - aquamarine: "жасылдау-көк", - azure: "көкшіл", - beige: "сарғыш", - bisque: "бисквит", - black: "қара", - blanchedalmond: "ағартылған бадам", - blue: "көк", - blueviolet: "көк-ақшыл көк", - brown: "қоңыр", - burlywood: "ағаш тамыры", - cadetblue: "кадет көк", - chartreuse: "жасылдау-сары", - chocolate: "шоколад", - coral: "коралл", - cornflowerblue: "көктікен көк", - cornsilk: "жібек", - crimson: "таңқұрай", - cyan: "циан", - darkblue: "күңгірт көк", - darkcyan: "күңгірт циан", - darkgoldenrod: "қара алтын", - darkgray: "қою сұры", - darkgreen: "қою жасыл", - darkgrey: "қою сұры", // same as darkgray - darkkhaki: "қою хаки", - darkmagenta: "қою қызыл күрең", - darkolivegreen: "қою қоңырлау жасыл", - darkorange: "қою қызғылт сары", - darkorchid: "күңгірт орсель", - darkred: "күңгірт қызыл", - darksalmon: "қою сарылау қызғылт", - darkseagreen: "қою теңіз толқыны", - darkslateblue: "күңгірт грифель көк", - darkslategray: "күңгірт көкшіл сұры", - darkslategrey: "күңгірт көкшіл сұры", // same as darkslategray - darkturquoise: "күңгірт көгілдір", - darkviolet: "күңгірт қызыл күрең", - deeppink: "қою қызғылт", - deepskyblue: "қою аспан көк", - dimgray: "күңгірт сұры", - dimgrey: "күңгірт сұры", // same as dimgray - dodgerblue: "көк доджер", - firebrick: "қызыл кірпіш", - floralwhite: "гүлді ақ", - forestgreen: "шөпті жасыл", - fuchsia: "фуксия", - gainsboro: "gainsboro", - ghostwhite: "елесті ақ", - gold: "алтындай", - goldenrod: "алтын", - gray: "сұры", - green: "жасыл", - greenyellow: "жасыл-сары", - grey: "сұры", // same as gray - honeydew: "балдай", - hotpink: "ашық қызғылт", - indianred: "үнділік қызыл", - indigo: "индиго", - ivory: "піл сүйег", - khaki: "хаки", - lavender: "бозғылт ақшыл көк", - lavenderblush: "күңгірт ақшыл қызыл", - lawngreen: "көгал жасыл", - lemonchiffon: "лимон шиффон", - lightblue: "ақшыл көк", - lightcoral: "ашық коралл", - lightcyan: "ашық көгілдір", - lightgoldenrodyellow: "ашық алтындай сары", - lightgray: "ашық сұры", - lightgreen: "ақшыл жасыл", - lightgrey: "ашық сұры", // same as lightgray - lightpink: "ақшыл қызғылт", - lightsalmon: "ашық сарғыш қызғылт", - lightseagreen: "ашық теңіз толқыны", - lightskyblue: "ашық аспан көк", - lightslategray: "ашық көкшіл сұры", - lightslategrey: "ашық көкшіл сұры", // same as lightslategray - lightsteelblue: "ашық сұрғылт көк", - lightyellow: "ашық сары", - lime: "әк", - limegreen: "әк жасыл", - linen: "зығыр", - magenta: "фуксин", - maroon: "сарғылт", - mediumaquamarine: "орташа жасылдау көк", - mediumblue: "орташа көк", - mediumorchid: "орташа ақшыл", - mediumpurple: "орташа қызыл күрең", - mediumseagreen: "орташа теңіз толқыны", - mediumslateblue: "орташа көкшіл сұры", - mediumspringgreen: "орташа ашық жасыл", - mediumturquoise: "орташа көгілдір", - mediumvioletred: "орташа ақшыл көк-қызыл", - midnightblue: "түн ортасы көк", - mintcream: "жалбыз майы", - mistyrose: "көмескі қызғылт", - moccasin: "мокасин", - navajowhite: "навахо ақ", - navy: "теңіз көк", - oldlace: "ескі бау", - olive: "зәйтүнді", - olivedrab: "жасылдау сары", - orange: "қызғылт сары", - orangered: "қызғылт сары қызыл", - orchid: "орхидея", - palegoldenrod: "бозғылт алтын", - palegreen: "бозғылт жасыл", - paleturquoise: "бозғылт көгілдір", - palevioletred: "бозғылт ақшыл көк-қызыл", - papayawhip: "папайя қамшысы", - peachpuff: "шабдалы", - peru: "перу", - pink: "қызғылт", - plum: "алхоры", - powderblue: "жасылдау көк", - purple: "қызыл күрең", - red: "қызыл", - rosybrown: "қызғылт қоңыр", - royalblue: "патша көк", - saddlebrown: "тоқым қоңыр", - salmon: "сомон", - sandybrown: "құмды қоңыр", - seagreen: "теңіз толқыны", - seashell: "теңіз қабыршағы", - sienna: "сиенна", - silver: "күмістей", - skyblue: "аспан көк", - slateblue: "грифель көк", - slategray: "көкшіл сұры", - slategrey: "көкшіл сұры", // same as slategray - snow: "қар", - springgreen: "көктем жасыл", - steelblue: "көкшіл сұрғылт", - tan: "сарғыш қоңыр", - teal: "шүрегей", - thistle: "артишок", - tomato: "қызанақ", - transparent: "мөлдір", - turquoise: "көгілдір", - violet: "күлгін", - wheat: "бидай", - white: "ақ", - whitesmoke: "ақ түтін", - yellow: "сары", - yellowgreen: "сарғыш жасыл" -}) -); diff --git a/lib/dojo/nls/ko/colors.js.uncompressed.js b/lib/dojo/nls/ko/colors.js.uncompressed.js deleted file mode 100644 index 901b3c9db..000000000 --- a/lib/dojo/nls/ko/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/ko/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "앨리스 블루(alice blue)", - antiquewhite: "앤틱 화이트(antique white)", - aqua: "아쿠아(aqua)", - aquamarine: "아쿠아마린(aquamarine)", - azure: "애쥬어(azure)", - beige: "베이지(beige)", - bisque: "비스크(bisque)", - black: "블랙(black)", - blanchedalmond: "블랜치 아몬드(blanched almond)", - blue: "블루(blue)", - blueviolet: "블루 바이올렛(blue-violet)", - brown: "브라운(brown)", - burlywood: "벌리우드(burlywood)", - cadetblue: "카뎃 블루(cadet blue)", - chartreuse: "샤르트뢰즈(chartreuse)", - chocolate: "초콜렛(chocolate)", - coral: "코랄(coral)", - cornflowerblue: "콘플라워 블루(cornflower blue)", - cornsilk: "콘실크(cornsilk)", - crimson: "크림슨(crimson)", - cyan: "시안(cyan)", - darkblue: "다크 블루(dark blue)", - darkcyan: "다크 시안(dark cyan)", - darkgoldenrod: "다크 골든로드(dark goldenrod)", - darkgray: "다크 그레이(dark gray)", - darkgreen: "다크 그린(dark green)", - darkgrey: "다크 그레이(dark gray)", // same as darkgray - darkkhaki: "다크 카키(dark khaki)", - darkmagenta: "다크 마젠타(dark magenta)", - darkolivegreen: "다크 올리브 그린(dark olive green)", - darkorange: "다크 오렌지(dark orange)", - darkorchid: "다크 오키드(dark orchid)", - darkred: "다크 레드(dark red)", - darksalmon: "다크 샐몬(dark salmon)", - darkseagreen: "다크 씨 그린(dark sea green)", - darkslateblue: "다크 슬레이트 블루(dark slate blue)", - darkslategray: "다크 슬레이트 그레이(dark slate gray)", - darkslategrey: "다크 슬레이트 그레이(dark slate gray)", // same as darkslategray - darkturquoise: "다크 터콰즈(dark turquoise)", - darkviolet: "다크 바이올렛(dark violet)", - deeppink: "딥 핑크(deep pink)", - deepskyblue: "딥 스카이 블루(deep sky blue)", - dimgray: "딤 그레이(dim gray)", - dimgrey: "딤 그레이(dim gray)", // same as dimgray - dodgerblue: "다저 블루(dodger blue)", - firebrick: "파이어 브릭(fire brick)", - floralwhite: "플로랄 화이트(floral white)", - forestgreen: "포레스트 그린(forest green)", - fuchsia: "후크샤(fuchsia)", - gainsboro: "게인스브로(gainsboro)", - ghostwhite: "고스트 화이트(ghost white)", - gold: "골드(gold)", - goldenrod: "골든로드(goldenrod)", - gray: "그레이(gray)", - green: "그린(green)", - greenyellow: "그린 옐로우(green-yellow)", - grey: "그레이(gray)", // same as gray - honeydew: "허니듀(honeydew)", - hotpink: "핫 핑크(hot pink)", - indianred: "인디안 레드(indian red)", - indigo: "인디고(indigo)", - ivory: "아이보리(ivory)", - khaki: "카키(khaki)", - lavender: "라벤더(lavender)", - lavenderblush: "라벤더 블러쉬(lavender blush)", - lawngreen: "론 그린(lawn green)", - lemonchiffon: "레몬 쉬폰(lemon chiffon)", - lightblue: "라이트 블루(light blue)", - lightcoral: "라이트 코랄(light coral)", - lightcyan: "라이트 시안(light cyan)", - lightgoldenrodyellow: "라이트 골든로드 옐로우(light goldenrod yellow)", - lightgray: "라이트 그레이(light gray)", - lightgreen: "라이트 그린(light green)", - lightgrey: "라이트 그레이(light gray)", // same as lightgray - lightpink: "라이트 핑크(light pink)", - lightsalmon: "라이트 샐몬(light salmon)", - lightseagreen: "라이트 씨 그린(light sea green)", - lightskyblue: "라이트 스카이 블루(light sky blue)", - lightslategray: "라이트 슬레이트 그레이(light slate gray)", - lightslategrey: "라이트 슬레이트 그레이(light slate gray)", // same as lightslategray - lightsteelblue: "라이트 스틸 블루(light steel blue)", - lightyellow: "라이트 옐로우(light yellow)", - lime: "라임(lime)", - limegreen: "라임 그린(lime green)", - linen: "리넨(linen)", - magenta: "마젠타(magenta)", - maroon: "마룬(maroon)", - mediumaquamarine: "미디엄 아쿠아마린(medium aquamarine)", - mediumblue: "미디엄 블루(medium blue)", - mediumorchid: "미디엄 오키드(medium orchid)", - mediumpurple: "미디엄 퍼플(medium purple)", - mediumseagreen: "미디엄 씨 그린(medium sea green)", - mediumslateblue: "미디엄 슬레이트 블루(medium slate blue)", - mediumspringgreen: "미디엄 스프링 그린(medium spring green)", - mediumturquoise: "미디엄 터콰즈(medium turquoise)", - mediumvioletred: "미디엄 바이올렛 레드(medium violet-red)", - midnightblue: "미드나잇 블루(midnight blue)", - mintcream: "민트 크림(mint cream)", - mistyrose: "미스티 로즈(misty rose)", - moccasin: "모카신(moccasin)", - navajowhite: "나바호 화이트(navajo white)", - navy: "네이비(navy)", - oldlace: "올드 레이스(old lace)", - olive: "올리브(olive)", - olivedrab: "올리브 드랩(olive drab)", - orange: "오렌지(orange)", - orangered: "오렌지 레드(orange red)", - orchid: "오키드(orchid)", - palegoldenrod: "페일 골든로드(pale goldenrod)", - palegreen: "페일 그린(pale green)", - paleturquoise: "페일 터콰즈(pale turquoise)", - palevioletred: "페일 바이올렛 레드(pale violet-red)", - papayawhip: "파파야 휩(papaya whip)", - peachpuff: "피치 퍼프(peach puff)", - peru: "페루(peru)", - pink: "핑크(pink)", - plum: "플럼(plum)", - powderblue: "파우더 블루(powder blue)", - purple: "퍼플(purple)", - red: "레드(red)", - rosybrown: "로지 브라운(rosy brown)", - royalblue: "로얄 블루(royal blue)", - saddlebrown: "새들 브라운(saddle brown)", - salmon: "샐몬(salmon)", - sandybrown: "샌디 브라운(sandy brown)", - seagreen: "씨 그린(sea green)", - seashell: "씨쉘(seashell)", - sienna: "시에나(sienna)", - silver: "실버(silver)", - skyblue: "스카이 블루(sky blue)", - slateblue: "슬레이트 블루(slate blue)", - slategray: "슬레이트 그레이(slate gray)", - slategrey: "슬레이트 그레이(slate gray)", // same as slategray - snow: "스노우(snow)", - springgreen: "스프링 그린(spring green)", - steelblue: "스틸 블루(steel blue)", - tan: "탠(tan)", - teal: "틸(teal)", - thistle: "시슬(thistle)", - tomato: "토마토(tomato)", - transparent: "투명(transparent)", - turquoise: "터콰즈(turquoise)", - violet: "바이올렛(violet)", - wheat: "휘트(wheat)", - white: "화이트(white)", - whitesmoke: "화이트 스모크(white smoke)", - yellow: "옐로우(yellow)", - yellowgreen: "옐로우 그린(yellow green)" -}) -); diff --git a/lib/dojo/nls/nb/colors.js.uncompressed.js b/lib/dojo/nls/nb/colors.js.uncompressed.js deleted file mode 100644 index 8345bbbea..000000000 --- a/lib/dojo/nls/nb/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/nb/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "blåhvit", - antiquewhite: "antikk hvit", - aqua: "akva", - aquamarine: "akvamarin", - azure: "asur", - beige: "beige", - bisque: "gulrosa", - black: "svart", - blanchedalmond: "lys mandel", - blue: "blå", - blueviolet: "blåfiolett", - brown: "brun", - burlywood: "matt mellombrun", - cadetblue: "mørk grønnblå", - chartreuse: "løvgrønn", - chocolate: "sjokolade", - coral: "korall", - cornflowerblue: "kornblå", - cornsilk: "cornsilk", - crimson: "karmosinrødt", - cyan: "cyan", - darkblue: "mørk blå", - darkcyan: "mørk cyan", - darkgoldenrod: "mørk gyldenris", - darkgray: "mørk grå", - darkgreen: "mørk grønn", - darkgrey: "mørk grå", // same as darkgray - darkkhaki: "mørk khaki", - darkmagenta: "mørk magenta", - darkolivegreen: "mørk olivengrønn", - darkorange: "mørk oransje", - darkorchid: "mørk orkide", - darkred: "mørk rød", - darksalmon: "mørk lakserosa", - darkseagreen: "mørk sjøgrønn", - darkslateblue: "mørk skiferblå", - darkslategray: "mørk skifergrå", - darkslategrey: "mørk skifergrå", // same as darkslategray - darkturquoise: "mørk turkis", - darkviolet: "mørk fiolett", - deeppink: "dyp rosa", - deepskyblue: "dyp himmelblå", - dimgray: "mørk mørkegrå", - dimgrey: "mørk mørkegrå", // same as dimgray - dodgerblue: "lys havblå", - firebrick: "mursteinsrød", - floralwhite: "blomsterhvit", - forestgreen: "skoggrønn", - fuchsia: "fuksia", - gainsboro: "lys lys grå", - ghostwhite: "egghvit", - gold: "gull", - goldenrod: "gyldenris", - gray: "grå", - green: "grønn", - greenyellow: "gulgrønn", - grey: "grå", // same as gray - honeydew: "grønnhvit", - hotpink: "halvmørk rosa", - indianred: "rustrød", - indigo: "indigo", - ivory: "elfenbenshvit", - khaki: "khaki", - lavender: "lavendel", - lavenderblush: "lillahvit", - lawngreen: "plengrønn", - lemonchiffon: "ferskenfarget", - lightblue: "lys blå", - lightcoral: "lys korall", - lightcyan: "lys cyan", - lightgoldenrodyellow: "lys gyldenrisgul", - lightgray: "lys grå", - lightgreen: "lys grønn", - lightgrey: "lys grå", // same as lightgray - lightpink: "lys rosa", - lightsalmon: "lys lakserosa", - lightseagreen: "lys sjøgrønn", - lightskyblue: "lys himmelblå", - lightslategray: "lys skifergrå", - lightslategrey: "lys skifergrå", // same as lightslategray - lightsteelblue: "lys stålblå", - lightyellow: "lys gul", - lime: "lime", - limegreen: "limegrønn", - linen: "lin", - magenta: "magenta", - maroon: "rødbrun", - mediumaquamarine: "middels akvamarin", - mediumblue: "mellomblå", - mediumorchid: "middels orkide", - mediumpurple: "middels purpur", - mediumseagreen: "middels sjøgrønn", - mediumslateblue: "middels skiferblå", - mediumspringgreen: "middels vårgrønn", - mediumturquoise: "middels turkis", - mediumvioletred: "middels fiolettrød", - midnightblue: "midnattsblå", - mintcream: "mintkrem", - mistyrose: "lys rosenrød", - moccasin: "lys gulbrun", - navajowhite: "gulbrun", - navy: "marineblå", - oldlace: "kniplingshvit", - olive: "oliven", - olivedrab: "middels olivengrønn", - orange: "oransje", - orangered: "rødoransje", - orchid: "orkide", - palegoldenrod: "svak gyldenris", - palegreen: "svak grønn", - paleturquoise: "svak turkis", - palevioletred: "svak fiolettrød", - papayawhip: "lys papaya", - peachpuff: "brunrosa", - peru: "lys nøttebrun", - pink: "rosa", - plum: "plommefarget", - powderblue: "lys grønnblå", - purple: "purpur", - red: "rød", - rosybrown: "brunlilla", - royalblue: "kongeblå", - saddlebrown: "mørk nøttebrun", - salmon: "lakserosa", - sandybrown: "sandbrun", - seagreen: "sjøgrønn", - seashell: "skjellhvit", - sienna: "nøttebrun", - silver: "sølvfarget", - skyblue: "himmelblå", - slateblue: "skiferblå", - slategray: "skifergrå", - slategrey: "skifergrå", // same as slategray - snow: "snøhvit", - springgreen: "vårgrønn", - steelblue: "stålblå", - tan: "matt mellombrun", - teal: "mørk grønnblå", - thistle: "lys grålilla", - tomato: "tomatrød", - transparent: "gjennomsiktig", - turquoise: "turkis", - violet: "fiolett", - wheat: "varm sienna", - white: "hvit", - whitesmoke: "røykhvit", - yellow: "gul", - yellowgreen: "gulgrønn" -}) -); diff --git a/lib/dojo/nls/nl/colors.js.uncompressed.js b/lib/dojo/nls/nl/colors.js.uncompressed.js deleted file mode 100644 index d4fa3d981..000000000 --- a/lib/dojo/nls/nl/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/nl/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "lichtblauw", - antiquewhite: "antiekwit", - aqua: "aqua", - aquamarine: "aquamarijn", - azure: "azuur", - beige: "beige", - bisque: "oranjegeel", - black: "zwart", - blanchedalmond: "amandel", - blue: "blauw", - blueviolet: "violet", - brown: "bruin", - burlywood: "lichtbruin", - cadetblue: "donkerstaalblauw", - chartreuse: "groengeel", - chocolate: "chocoladebruin", - coral: "koraalrood", - cornflowerblue: "korenbloemblauw", - cornsilk: "maïsgeel", - crimson: "karmozijnrood", - cyan: "cyaan", - darkblue: "donkerblauw", - darkcyan: "donkercyaan", - darkgoldenrod: "donkergoud", - darkgray: "donkergrijs", - darkgreen: "donkergroen", - darkgrey: "donkergrijs", // same as darkgray - darkkhaki: "donkerkaki", - darkmagenta: "donkermagenta", - darkolivegreen: "donkerolijfgroen", - darkorange: "donkeroranje", - darkorchid: "donkerorchidee", - darkred: "donkerrood", - darksalmon: "donkerzalm", - darkseagreen: "donkerzeegroen", - darkslateblue: "donkergrijsblauw", - darkslategray: "donkerblauwgrijs", - darkslategrey: "donkerblauwgrijs", // same as darkslategray - darkturquoise: "donkerturquoise", - darkviolet: "donkerviolet", - deeppink: "donkerroze", - deepskyblue: "diephemelblauw", - dimgray: "dofgrijs", - dimgrey: "dofgrijs", // same as dimgray - dodgerblue: "helderblauw", - firebrick: "vuursteenrood", - floralwhite: "rozewit", - forestgreen: "bosgroen", - fuchsia: "fuchsia", - gainsboro: "lichtblauwgrijs", - ghostwhite: "spierwit", - gold: "goud", - goldenrod: "goudbruin", - gray: "grijs", - green: "groen", - greenyellow: "groengeel", - grey: "grijs", // same as gray - honeydew: "meloen", - hotpink: "acaciaroze", - indianred: "indisch rood", - indigo: "indigo", - ivory: "ivoorwit", - khaki: "kaki", - lavender: "lavendelblauw", - lavenderblush: "lavendelblos", - lawngreen: "grasgroen", - lemonchiffon: "citroengeel", - lightblue: "lichtblauw", - lightcoral: "lichtkoraal", - lightcyan: "lichtcyaan", - lightgoldenrodyellow: "lichtgoudgeel", - lightgray: "lichtgrijs", - lightgreen: "lichtgroen", - lightgrey: "lichtgrijs", // same as lightgray - lightpink: "lichtroze", - lightsalmon: "lichtzalm", - lightseagreen: "lichtzeegroen", - lightskyblue: "lichthemelsblauw", - lightslategray: "lichtblauwgrijs", - lightslategrey: "lichtblauwgrijs", // same as lightslategray - lightsteelblue: "lichtstaalblauw", - lightyellow: "lichtgeel", - lime: "limoen", - limegreen: "limoengroen", - linen: "linnen", - magenta: "magenta", - maroon: "kastanjebruin", - mediumaquamarine: "midaquamarijn", - mediumblue: "midblauw", - mediumorchid: "midorchidee", - mediumpurple: "midpurper", - mediumseagreen: "midzeegroen", - mediumslateblue: "midgrijsblauw", - mediumspringgreen: "midlentegroen", - mediumturquoise: "midturquoise", - mediumvioletred: "midvioletrood", - midnightblue: "nachtblauw", - mintcream: "mintroomgeel", - mistyrose: "matroze", - moccasin: "moccasin", - navajowhite: "navajowit", - navy: "marineblauw", - oldlace: "kant", - olive: "olijfgroen", - olivedrab: "grijsbruin", - orange: "oranje", - orangered: "oranjerood", - orchid: "orchidee", - palegoldenrod: "bleekgeel", - palegreen: "bleekgroen", - paleturquoise: "bleekturquoise", - palevioletred: "bleekvioletrood", - papayawhip: "papajaroze", - peachpuff: "perzikroze", - peru: "bruin", - pink: "roze", - plum: "pruim", - powderblue: "lichtblauw-wit", - purple: "purper", - red: "rood", - rosybrown: "roodbruin", - royalblue: "koningsblauw", - saddlebrown: "leerbruin", - salmon: "zalm", - sandybrown: "zandbruin", - seagreen: "zeegroen", - seashell: "schelp", - sienna: "sienna", - silver: "zilvergrijs", - skyblue: "hemelsblauw", - slateblue: "leiblauw", - slategray: "leigrijs", - slategrey: "leigrijs", // same as slategray - snow: "sneeuwwit", - springgreen: "lentegroen", - steelblue: "staalblauw", - tan: "geelbruin", - teal: "grijsblauw", - thistle: "distel", - tomato: "tomaat", - transparent: "transparant", - turquoise: "turquoise", - violet: "violet", - wheat: "tarwebruin", - white: "wit", - whitesmoke: "rookwit", - yellow: "geel", - yellowgreen: "geelgroen" -}) -); diff --git a/lib/dojo/nls/pl/colors.js.uncompressed.js b/lib/dojo/nls/pl/colors.js.uncompressed.js deleted file mode 100644 index ad95f626a..000000000 --- a/lib/dojo/nls/pl/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/pl/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "bladoniebieski", - antiquewhite: "biel antyczna", - aqua: "morski", - aquamarine: "akwamaryna", - azure: "lazurowy", - beige: "beżowy", - bisque: "cielistobeżowy", - black: "czarny", - blanchedalmond: "obrany migdał", - blue: "niebieski", - blueviolet: "błękitnofiołkowy", - brown: "brązowy", - burlywood: "piaskowobeżowy", - cadetblue: "szaroniebieski", - chartreuse: "żółtooliwkowy", - chocolate: "czekoladowy", - coral: "koralowy", - cornflowerblue: "niebieskochabrowy", - cornsilk: "białożółty", - crimson: "karmazynowy", - cyan: "niebieskozielony", - darkblue: "ciemnoniebieski", - darkcyan: "ciemnoniebieskozielony", - darkgoldenrod: "ciemne stare złoto", - darkgray: "ciemnoszary", - darkgreen: "ciemnozielony", - darkgrey: "ciemnoszary", // same as darkgray - darkkhaki: "ciemny khaki", - darkmagenta: "ciemnoamarantowy", - darkolivegreen: "ciemnooliwkowozielony", - darkorange: "ciemnopomarańczowy", - darkorchid: "ciemna orchidea", - darkred: "ciemnoczerwony", - darksalmon: "ciemnołososiowy", - darkseagreen: "ciemna zieleń morska", - darkslateblue: "ciemny gołębi", - darkslategray: "ciemny mysi", - darkslategrey: "ciemny mysi", // same as darkslategray - darkturquoise: "ciemnoturkusowy", - darkviolet: "ciemnofiołkowy", - deeppink: "głęboki róż", - deepskyblue: "intensywny błękit nieba", - dimgray: "przyciemniony szary", - dimgrey: "przyciemniony szary", // same as dimgray - dodgerblue: "niebieski Dodgersów", - firebrick: "podpalana cegła", - floralwhite: "złamana biel", - forestgreen: "leśna zieleń", - fuchsia: "fuksjowy", - gainsboro: "jasnoniebieskawoszary", - ghostwhite: "sina biel", - gold: "złoty", - goldenrod: "stare złoto", - gray: "szary", - green: "zielony", - greenyellow: "zielonożółty", - grey: "szary", // same as gray - honeydew: "miodowy", - hotpink: "odblaskoworóżowy", - indianred: "kasztanowy", - indigo: "indygo", - ivory: "kość słoniowa", - khaki: "khaki", - lavender: "lawendowy", - lavenderblush: "lawendoworóżowy", - lawngreen: "trawiasty", - lemonchiffon: "babka cytrynowa", - lightblue: "jasnoniebieski", - lightcoral: "jasnokoralowy", - lightcyan: "jasnoniebieskozielony", - lightgoldenrodyellow: "jasne stare złoto", - lightgray: "jasnoszary", - lightgreen: "jasnozielony", - lightgrey: "jasnoszary", // same as lightgray - lightpink: "jasnoróżowy", - lightsalmon: "jasnołososiowy", - lightseagreen: "jasna zieleń morska", - lightskyblue: "jasny błękit nieba", - lightslategray: "jasny mysi", - lightslategrey: "jasny mysi", // same as lightslategray - lightsteelblue: "jasnostalowoniebieski", - lightyellow: "jasnożółty", - lime: "limonkowy", - limegreen: "limonkowozielony", - linen: "lniany", - magenta: "amarantowy", - maroon: "rdzawoczerwony", - mediumaquamarine: "średnia akwamaryna", - mediumblue: "średni niebieski", - mediumorchid: "średnia orchidea", - mediumpurple: "średni fioletowy", - mediumseagreen: "średnia zieleń morska", - mediumslateblue: "średni gołębi", - mediumspringgreen: "średnia wiosenna zieleń", - mediumturquoise: "średni turkusowy", - mediumvioletred: "średni fiołkowowoczerwony", - midnightblue: "atramentowoniebieski", - mintcream: "miętowokremowy", - mistyrose: "mglistoróżany", - moccasin: "mokasynowy", - navajowhite: "biel Nawaho", - navy: "granatowy", - oldlace: "ecru", - olive: "oliwkowy", - olivedrab: "oliwkowozielony", - orange: "pomarańczowy", - orangered: "czerwona pomarańcza", - orchid: "orchidea", - palegoldenrod: "blade stare złoto", - palegreen: "bladozielony", - paleturquoise: "bladoturkusowy", - palevioletred: "bladofiołkowoczerwony", - papayawhip: "kremowa papaja", - peachpuff: "cielisty brzoskwiniowy", - peru: "palona glina", - pink: "różowy", - plum: "śliwkowy", - powderblue: "jasnobladobłękitny", - purple: "fioletowy", - red: "czerwony", - rosybrown: "różanobrązowy", - royalblue: "królewska purpura", - saddlebrown: "brąz skórzany", - salmon: "łososiowy", - sandybrown: "piaskowobrązowy", - seagreen: "zieleń morska", - seashell: "matowoliliowy", - sienna: "sjena", - silver: "srebrny", - skyblue: "błękit nieba", - slateblue: "gołębi", - slategray: "mysi", - slategrey: "mysi", // same as slategray - snow: "śnieżny", - springgreen: "wiosenna zieleń", - steelblue: "stalowoniebieski", - tan: "śniady", - teal: "zielonomodry", - thistle: "kwiat ostu", - tomato: "pomidorowy", - transparent: "przezroczysty", - turquoise: "turkusowy", - violet: "fiołkowy", - wheat: "pszeniczny", - white: "biały", - whitesmoke: "siwy", - yellow: "żółty", - yellowgreen: "żółtozielony" -}) -); diff --git a/lib/dojo/nls/pt-pt/colors.js.uncompressed.js b/lib/dojo/nls/pt-pt/colors.js.uncompressed.js deleted file mode 100644 index 542b7a101..000000000 --- a/lib/dojo/nls/pt-pt/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/pt-pt/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "azul alice", - antiquewhite: "branco antigo", - aqua: "verde-água", - aquamarine: "verde-azulado", - azure: "azul-celeste", - beige: "bege", - bisque: "rosa-velho", - black: "preto", - blanchedalmond: "amêndoa claro", - blue: "azul", - blueviolet: "azul violeta", - brown: "castanho", - burlywood: "castanho pinho", - cadetblue: "azul cadete", - chartreuse: "amarelo esverdeado", - chocolate: "chocolate", - coral: "coral", - cornflowerblue: "azul-violáceo", - cornsilk: "branco seda", - crimson: "carmesim", - cyan: "ciano", - darkblue: "azul escuro", - darkcyan: "ciano escuro", - darkgoldenrod: "ouro velho escuro", - darkgray: "cinzento escuro", - darkgreen: "verde escuro", - darkgrey: "cinzento escuro", // same as darkgray - darkkhaki: "caqui escuro", - darkmagenta: "magenta escuro", - darkolivegreen: "verde-azeitona escuro", - darkorange: "laranja escuro", - darkorchid: "orquídea escuro", - darkred: "vermelho escuro", - darksalmon: "salmão escuro", - darkseagreen: "verde marinho escuro", - darkslateblue: "azul ardósia escuro", - darkslategray: "cinzento ardósia escuro", - darkslategrey: "cinzento ardósia escuro", // same as darkslategray - darkturquoise: "turquesa escuro", - darkviolet: "violeta escuro", - deeppink: "rosa profundo", - deepskyblue: "azul céu profundo", - dimgray: "cinzento esbatido", - dimgrey: "cinzento esbatido", // same as dimgray - dodgerblue: "azul furtivo", - firebrick: "tijolo fogo", - floralwhite: "branco floral", - forestgreen: "verde floresta", - fuchsia: "fúcsia", - gainsboro: "cinzento azulado claro", - ghostwhite: "branco sombreado", - gold: "dourado", - goldenrod: "ouro velho", - gray: "cinzento", - green: "verde", - greenyellow: "amarelo esverdeado", - grey: "cinzento", // same as gray - honeydew: "mel", - hotpink: "rosa forte", - indianred: "almagre", - indigo: "índigo", - ivory: "marfim", - khaki: "caqui", - lavender: "alfazema", - lavenderblush: "alfazema rosado", - lawngreen: "verde relva", - lemonchiffon: "limão chiffon", - lightblue: "azul claro", - lightcoral: "coral claro", - lightcyan: "ciano claro", - lightgoldenrodyellow: "ouro velho amarelado claro", - lightgray: "cinzento claro", - lightgreen: "verde claro", - lightgrey: "cinzento claro", // same as lightgray - lightpink: "rosa claro", - lightsalmon: "salmão claro", - lightseagreen: "verde marinho claro", - lightskyblue: "azul céu claro", - lightslategray: "cinzento ardósia claro", - lightslategrey: "cinzento ardósia claro", // same as lightslategray - lightsteelblue: "azul-aço claro", - lightyellow: "amarelo claro", - lime: "lima", - limegreen: "verde-lima", - linen: "linho", - magenta: "magenta", - maroon: "bordeaux", - mediumaquamarine: "verde-azulado médio", - mediumblue: "azul médio", - mediumorchid: "orquídea médio", - mediumpurple: "roxo médio", - mediumseagreen: "verde marinho médio", - mediumslateblue: "azul ardósia médio", - mediumspringgreen: "verde primavera médio", - mediumturquoise: "turquesa médio", - mediumvioletred: "violeta avermelhado médio", - midnightblue: "azul meia-noite", - mintcream: "creme de menta", - mistyrose: "rosa pálido", - moccasin: "mocassim", - navajowhite: "branco navajo", - navy: "azul marinho", - oldlace: "renda antiga", - olive: "azeitona", - olivedrab: "azeitona claro", - orange: "laranja", - orangered: "vermelho alaranjado", - orchid: "orquídea", - palegoldenrod: "ouro velho pálido", - palegreen: "verde pálido", - paleturquoise: "turquesa pálido", - palevioletred: "violeta avermelhado pálido", - papayawhip: "creme de papaia", - peachpuff: "pêssego", - peru: "peru", - pink: "rosa", - plum: "cor-de-ameixa", - powderblue: "azul de esmalte", - purple: "roxo", - red: "vermelho", - rosybrown: "castanho rosado", - royalblue: "azul real", - saddlebrown: "castanho sela", - salmon: "salmão", - sandybrown: "castanho areia", - seagreen: "verde marinho", - seashell: "concha", - sienna: "castanho-avermelhado", - silver: "prateado", - skyblue: "azul céu", - slateblue: "azul ardósia", - slategray: "cinzento ardósia", - slategrey: "cinzento ardósia", // same as slategray - snow: "branco-neve", - springgreen: "verde primavera", - steelblue: "azul-aço", - tan: "castanho claro", - teal: "verde-azulado", - thistle: "cardo", - tomato: "vermelho tomate", - transparent: "transparente", - turquoise: "turquesa", - violet: "violeta", - wheat: "trigo", - white: "branco", - whitesmoke: "fumo branco", - yellow: "amarelo", - yellowgreen: "verde amarelado" -}) -); diff --git a/lib/dojo/nls/pt/colors.js.uncompressed.js b/lib/dojo/nls/pt/colors.js.uncompressed.js deleted file mode 100644 index 02893b563..000000000 --- a/lib/dojo/nls/pt/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/pt/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "azul alice", - antiquewhite: "branco antigo", - aqua: "aqua", - aquamarine: "água marinha", - azure: "azul celeste", - beige: "bege", - bisque: "bisque", - black: "preto", - blanchedalmond: "amêndoa pelada", - blue: "azul", - blueviolet: "azul violeta", - brown: "marrom", - burlywood: "burlywood", - cadetblue: "azul cadet", - chartreuse: "chartreuse", - chocolate: "chocolate", - coral: "coral", - cornflowerblue: "azul centaurea", - cornsilk: "cornsilk", - crimson: "carmesim", - cyan: "ciano", - darkblue: "azul escuro", - darkcyan: "ciano escuro", - darkgoldenrod: "goldenrod escuro", - darkgray: "cinza escuro", - darkgreen: "verde escuro", - darkgrey: "cinza escuro", // same as darkgray - darkkhaki: "cáqui escuro", - darkmagenta: "magenta escuro", - darkolivegreen: "verde oliva escuro", - darkorange: "laranja escuro", - darkorchid: "orquídea escuro", - darkred: "vermelho escuro", - darksalmon: "salmão escuro", - darkseagreen: "verde marinho escuro", - darkslateblue: "azul ardósia escuro", - darkslategray: "cinza ardósia escuro", - darkslategrey: "cinza ardósia escuro", // same as darkslategray - darkturquoise: "turquesa escuro", - darkviolet: "violeta escuro", - deeppink: "rosa profundo", - deepskyblue: "azul céu intenso", - dimgray: "cinza turvo", - dimgrey: "cinza turvo", // same as dimgray - dodgerblue: "azul dodger", - firebrick: "firebrick", - floralwhite: "branco floral", - forestgreen: "verde floresta", - fuchsia: "fúcsia", - gainsboro: "gainsboro", - ghostwhite: "branco ghost", - gold: "dourado", - goldenrod: "goldenrod", - gray: "cinza", - green: "verde", - greenyellow: "amarelo esverdeado", - grey: "cinza", // same as gray - honeydew: "honeydew", - hotpink: "rosa quente", - indianred: "vermelho indiano", - indigo: "índigo", - ivory: "marfim", - khaki: "cáqui", - lavender: "lavanda", - lavenderblush: "lavanda avermelhada", - lawngreen: "verde grama", - lemonchiffon: "limão chiffon", - lightblue: "azul claro", - lightcoral: "coral claro", - lightcyan: "ciano claro", - lightgoldenrodyellow: "amarelo goldenrod claro", - lightgray: "cinza claro", - lightgreen: "verde claro", - lightgrey: "cinza claro", // same as lightgray - lightpink: "rosa claro", - lightsalmon: "salmão claro", - lightseagreen: "verde marinho claro", - lightskyblue: "azul céu claro", - lightslategray: "cinza ardósia claro", - lightslategrey: "cinza ardósia claro", // same as lightslategray - lightsteelblue: "azul aço claro", - lightyellow: "amarelo claro", - lime: "lima", - limegreen: "verde lima", - linen: "linho", - magenta: "magenta", - maroon: "castanho", - mediumaquamarine: "água marinha médio", - mediumblue: "azul médio", - mediumorchid: "orquídea médio", - mediumpurple: "roxo médio", - mediumseagreen: "verde marinho médio", - mediumslateblue: "azul ardósia médio", - mediumspringgreen: "verde primavera médio", - mediumturquoise: "turquesa médio", - mediumvioletred: "vermelho violeta médio", - midnightblue: "azul meia-noite", - mintcream: "creme de menta", - mistyrose: "rosa enevoado", - moccasin: "moccasin", - navajowhite: "branco navajo", - navy: "marinho", - oldlace: "cadarço velho", - olive: "oliva", - olivedrab: "verde oliva", - orange: "laranja", - orangered: "vermelho alaranjado", - orchid: "orquídea", - palegoldenrod: "goldenrod esbranquiçado", - palegreen: "verde esbranquiçado", - paleturquoise: "turquesa esbranquiçado", - palevioletred: "vermelho violeta esbranquiçado", - papayawhip: "creme de papaya", - peachpuff: "peach puff", - peru: "peru", - pink: "rosa", - plum: "ameixa", - powderblue: "azul talco", - purple: "roxo", - red: "vermelho", - rosybrown: "marrom rosado", - royalblue: "azul royal", - saddlebrown: "marrom saddle", - salmon: "salmão", - sandybrown: "marrom cor de areia", - seagreen: "verde marinho", - seashell: "seashell", - sienna: "sienna", - silver: "prateado", - skyblue: "azul céu", - slateblue: "azul ardósia", - slategray: "cinza ardósia", - slategrey: "cinza ardósia", // same as slategray - snow: "branco neve", - springgreen: "verde primavera", - steelblue: "azul aço", - tan: "tan", - teal: "azul esverdeado", - thistle: "thistle", - tomato: "tomate", - transparent: "transparente", - turquoise: "turquesa", - violet: "violeta", - wheat: "trigo", - white: "branco", - whitesmoke: "fumaça branca", - yellow: "amarelo", - yellowgreen: "verde amarelado" -}) -); diff --git a/lib/dojo/nls/ro/colors.js.uncompressed.js b/lib/dojo/nls/ro/colors.js.uncompressed.js deleted file mode 100644 index 5b0d11b64..000000000 --- a/lib/dojo/nls/ro/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/ro/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "alice blue", - antiquewhite: "antique white", - aqua: "aqua", - aquamarine: "aquamarine", - azure: "azuriu", - beige: "bej", - bisque: "bisque", - black: "negru", - blanchedalmond: "blanched almond", - blue: "albastru", - blueviolet: "albastru-violet", - brown: "brun", - burlywood: "burlywood", - cadetblue: "albastru cadet", - chartreuse: "chartreuse", - chocolate: "ciocolată", - coral: "coral", - cornflowerblue: "cornflower blue", - cornsilk: "cornsilk", - crimson: "stacojiu", - cyan: "cyan", - darkblue: "albastru închis", - darkcyan: "cyan închis", - darkgoldenrod: "goldenrod închis", - darkgray: "gri închis", - darkgreen: "verde închis", - darkgrey: "gri închis", // same as darkgray - darkkhaki: "kaki închis", - darkmagenta: "magenta închis", - darkolivegreen: "verde măslină închis", - darkorange: "portocaliu închis", - darkorchid: "orchid închis", - darkred: "roşu închis", - darksalmon: "somon închis", - darkseagreen: "verde marin închis", - darkslateblue: "albastru ardezie închis", - darkslategray: "gri ardezie închis", - darkslategrey: "gri ardezie închis", // same as darkslategray - darkturquoise: "turcoaz închis", - darkviolet: "violet închis", - deeppink: "roz profund", - deepskyblue: "albastru cer profund", - dimgray: "dim gray", - dimgrey: "dim gray", // same as dimgray - dodgerblue: "dodger blue", - firebrick: "cărămiziu aprins", - floralwhite: "floral white", - forestgreen: "forest green", - fuchsia: "fuchsia", - gainsboro: "gainsboro", - ghostwhite: "ghost white", - gold: "auriu", - goldenrod: "goldenrod", - gray: "gri", - green: "verde", - greenyellow: "verde-gălbui", - grey: "gri", // same as gray - honeydew: "honeydew", - hotpink: "roz aprins", - indianred: "roşu indian", - indigo: "indigo", - ivory: "ivoriu", - khaki: "kaki", - lavender: "lavandă", - lavenderblush: "lavender blush", - lawngreen: "lawn green", - lemonchiffon: "lemon chiffon", - lightblue: "albastru deschis", - lightcoral: "coral deschis", - lightcyan: "cyan deschis", - lightgoldenrodyellow: "goldenrod gălbui deschis", - lightgray: "gri deschis", - lightgreen: "verde dschis", - lightgrey: "gri deschis", // same as lightgray - lightpink: "roz deschis", - lightsalmon: "somon deschis", - lightseagreen: "verde marin deschis", - lightskyblue: "albastru cer deschis", - lightslategray: "gri ardezie deschis", - lightslategrey: "gri ardezie deschis", // same as lightslategray - lightsteelblue: "albastru metalic deschis", - lightyellow: "galben deschis", - lime: "lime", - limegreen: "verde lime", - linen: "linen", - magenta: "magenta", - maroon: "maro", - mediumaquamarine: "aquamarin mediu", - mediumblue: "albastru mediu", - mediumorchid: "orchid mediu", - mediumpurple: "purpuriu mediu", - mediumseagreen: "verde marin mediu", - mediumslateblue: "albastru ardezie mediu", - mediumspringgreen: "verde primăvară mediu", - mediumturquoise: "turcoaz mediu", - mediumvioletred: "roşu-violet mediu", - midnightblue: "midnight blue", - mintcream: "mint cream", - mistyrose: "misty rose", - moccasin: "moccasin", - navajowhite: "navajo white", - navy: "navy", - oldlace: "old lace", - olive: "oliv", - olivedrab: "oliv şters", - orange: "portocaliu", - orangered: "roşu portocaliu", - orchid: "orchid", - palegoldenrod: "goldenrod pal", - palegreen: "verde pal", - paleturquoise: "turcoaz pal", - palevioletred: "roşu-violet pal", - papayawhip: "papaya whip", - peachpuff: "peach puff", - peru: "peru", - pink: "roz", - plum: "plum", - powderblue: "powder blue", - purple: "purpuriu", - red: "roşu", - rosybrown: "rosy brown", - royalblue: "albastru regal", - saddlebrown: "saddle brown", - salmon: "somon", - sandybrown: "sandy brown", - seagreen: "verde marin", - seashell: "seashell", - sienna: "sienna", - silver: "argintiu", - skyblue: "albastru cer", - slateblue: "albastru ardezie", - slategray: "gri ardezie", - slategrey: "gri ardezie", // same as slategray - snow: "zăpadă", - springgreen: "verde primăvară", - steelblue: "albastru metalic", - tan: "tan", - teal: "teal", - thistle: "thistle", - tomato: "tomato", - transparent: "transparent", - turquoise: "turcoaz", - violet: "violet", - wheat: "wheat", - white: "alb", - whitesmoke: "white smoke", - yellow: "galben", - yellowgreen: "verde gălbui" -}) -); diff --git a/lib/dojo/nls/ru/colors.js.uncompressed.js b/lib/dojo/nls/ru/colors.js.uncompressed.js deleted file mode 100644 index 902d07baf..000000000 --- a/lib/dojo/nls/ru/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/ru/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "серо-голубой", - antiquewhite: "белый антик", - aqua: "зеленовато-голубой", - aquamarine: "аквамарин", - azure: "лазурный", - beige: "бежевый", - bisque: "бисквитный", - black: "черный", - blanchedalmond: "светло-миндальный", - blue: "синий", - blueviolet: "сине-фиолетовый", - brown: "коричневый", - burlywood: "светло-коричневый", - cadetblue: "серо-синий", - chartreuse: "желто-салатный", - chocolate: "шоколадный", - coral: "коралловый", - cornflowerblue: "фиолетово-синий", - cornsilk: "шелковый оттенок", - crimson: "малиновый", - cyan: "циан", - darkblue: "темно-синий", - darkcyan: "темный циан", - darkgoldenrod: "темно-золотистый", - darkgray: "темно-серый", - darkgreen: "темно-зеленый", - darkgrey: "темно-серый", // same as darkgray - darkkhaki: "темный хаки", - darkmagenta: "темно-пурпурный", - darkolivegreen: "темно-оливковый", - darkorange: "темно-оранжевый", - darkorchid: "темный орсель", - darkred: "темно-красный", - darksalmon: "темно-лососевый", - darkseagreen: "темный морской волны", - darkslateblue: "темный грифельно-синий", - darkslategray: "темный грифельно-серый", - darkslategrey: "темный грифельно-серый", // same as darkslategray - darkturquoise: "темный бирюзовый", - darkviolet: "темно-фиолетовый", - deeppink: "темно-розовый", - deepskyblue: "темный небесно-голубой", - dimgray: "тускло-серый", - dimgrey: "тускло-серый", // same as dimgray - dodgerblue: "бледно-синий", - firebrick: "кирпичный", - floralwhite: "цветочно-белый", - forestgreen: "зеленый лесной", - fuchsia: "фуксин", - gainsboro: "бледно-серый", - ghostwhite: "призрачно-белый", - gold: "золотой", - goldenrod: "золотистый", - gray: "серый", - green: "зеленый", - greenyellow: "зелено-желтый", - grey: "серый", // same as gray - honeydew: "медовый", - hotpink: "красно-розовый", - indianred: "индийский красный", - indigo: "индиго", - ivory: "слоновой кости", - khaki: "хаки", - lavender: "бледно-лиловый", - lavenderblush: "розовато-лиловый", - lawngreen: "зеленая лужайка", - lemonchiffon: "бледно-лимонный", - lightblue: "светло-синий", - lightcoral: "светло-коралловый", - lightcyan: "светлый циан", - lightgoldenrodyellow: "светло-золотистый", - lightgray: "светло-серый", - lightgreen: "светло-зеленый", - lightgrey: "светло-серый", // same as lightgray - lightpink: "светло-розовый", - lightsalmon: "светло-лососевый", - lightseagreen: "светлый морской волны", - lightskyblue: "светлый небесно-голубой", - lightslategray: "светлый грифельно-серый", - lightslategrey: "светлый грифельно-серый", // same as lightslategray - lightsteelblue: "светлый стальной", - lightyellow: "светло-желтый", - lime: "лайм", - limegreen: "зеленый лайм", - linen: "хлопковый", - magenta: "пурпурный", - maroon: "темно-бордовый", - mediumaquamarine: "нейтральный аквамарин", - mediumblue: "нейтральный синий", - mediumorchid: "нейтральный орсель", - mediumpurple: "нейтральный фиолетовый", - mediumseagreen: "нейтральный морской волны", - mediumslateblue: "нейтральный грифельно-синий", - mediumspringgreen: "нейтральный весенне-зеленый", - mediumturquoise: "нейтральный бирюзовый", - mediumvioletred: "нейтральный фиолетово-красный", - midnightblue: "полуночно-синий", - mintcream: "мятно-кремовый", - mistyrose: "блекло-розовый", - moccasin: "мокасин", - navajowhite: "белый навахо", - navy: "темно-синий", - oldlace: "матово-белый", - olive: "оливковый", - olivedrab: "желтовато-серый", - orange: "оранжевый", - orangered: "оранжево-красный", - orchid: "орсель", - palegoldenrod: "бледно-золотистый", - palegreen: "бледно-зеленый", - paleturquoise: "бледно-бирюзовый", - palevioletred: "бледный фиолетово-красный", - papayawhip: "черенок папайи", - peachpuff: "персиковый", - peru: "перу", - pink: "розовый", - plum: "сливовый", - powderblue: "пороховой", - purple: "фиолетовый", - red: "красный", - rosybrown: "розово-коричневый", - royalblue: "королевский голубой", - saddlebrown: "кожано-коричневый", - salmon: "лососевый", - sandybrown: "коричнево-песчаный", - seagreen: "морской волны", - seashell: "морская раковина", - sienna: "охра", - silver: "серебристый", - skyblue: "небесно-голубой", - slateblue: "грифельно-синий", - slategray: "грифельно-серый", - slategrey: "грифельно-серый", // same as slategray - snow: "белоснежный", - springgreen: "весенний зеленый", - steelblue: "стальной", - tan: "рыжевато-коричневый", - teal: "чирок", - thistle: "чертополох", - tomato: "помидор", - transparent: "прозрачный", - turquoise: "бирюзовый", - violet: "фиолетовый", - wheat: "пшеница", - white: "белый", - whitesmoke: "дымчато-белый", - yellow: "желтый", - yellowgreen: "желто-зеленый" -}) -); diff --git a/lib/dojo/nls/sk/colors.js.uncompressed.js b/lib/dojo/nls/sk/colors.js.uncompressed.js deleted file mode 100644 index 700f727ab..000000000 --- a/lib/dojo/nls/sk/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/sk/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "modrá (alice)", - antiquewhite: "antická biela", - aqua: "vodová", - aquamarine: "akvamarínová", - azure: "azúrová", - beige: "béžová", - bisque: "porcelánová", - black: "čierna", - blanchedalmond: "bledá mandľová", - blue: "modrá", - blueviolet: "modro-fialová", - brown: "hnedá", - burlywood: "drevená hnedá", - cadetblue: "červeno modrá", - chartreuse: "kartúzska", - chocolate: "čokoládová", - coral: "koralová", - cornflowerblue: "nevädzová modrá", - cornsilk: "ôstie kukurice", - crimson: "karmínová", - cyan: "zelenomodrá", - darkblue: "tmavomodrá", - darkcyan: "tmavá zelenomodrá", - darkgoldenrod: "tmavá zlatobyľ", - darkgray: "tmavosivá", - darkgreen: "tmavozelená", - darkgrey: "tmavosivá", // same as darkgray - darkkhaki: "tmavá žltohnedá", - darkmagenta: "tmavá purpurová", - darkolivegreen: "tmavá olivovo zelená", - darkorange: "tmavá oranžová", - darkorchid: "tmavá orchidea", - darkred: "tmavočervená", - darksalmon: "tmavá lososová", - darkseagreen: "tmavá morská zelená", - darkslateblue: "tmavá bridlicová modrá", - darkslategray: "tmavá bridlicová sivá", - darkslategrey: "tmavá bridlicová sivá", // same as darkslategray - darkturquoise: "tmavá tyrkysová", - darkviolet: "tmavofialová", - deeppink: "hlboká ružová", - deepskyblue: "hlboká modrá obloha", - dimgray: "matná sivá", - dimgrey: "matná sivá", // same as dimgray - dodgerblue: "modrá (dodger)", - firebrick: "pálená tehla", - floralwhite: "biely kvet", - forestgreen: "lesná zelená", - fuchsia: "fuchsia", - gainsboro: "sivá - gainsboro", - ghostwhite: "biela (ghost white)", - gold: "zlatá", - goldenrod: "zlatobyľ", - gray: "sivá", - green: "zelená", - greenyellow: "zelenožltá", - grey: "sivá", // same as gray - honeydew: "ambrózia", - hotpink: "horúca ružová", - indianred: "indiánska červená", - indigo: "indigo", - ivory: "slonovina", - khaki: "kaki", - lavender: "levanduľa", - lavenderblush: "rumencová levanduľa", - lawngreen: "trávová zelená", - lemonchiffon: "citrónový šifón", - lightblue: "svetlomodrá", - lightcoral: "svetlá koralová", - lightcyan: "svetlá zelenomodrá", - lightgoldenrodyellow: "svetlá zlatobyľová žltá", - lightgray: "svetlosivá", - lightgreen: "svetlozelená", - lightgrey: "svetlosivá", // same as lightgray - lightpink: "svetloružová", - lightsalmon: "svetlá lososová", - lightseagreen: "svetlá morská zelená", - lightskyblue: "svetlá modrá obloha", - lightslategray: "svetlá bridlicová sivá", - lightslategrey: "svetlá bridlicová sivá", // same as lightslategray - lightsteelblue: "svetlá oceľovomodrá", - lightyellow: "svetložltá", - lime: "limetková", - limegreen: "limetková zelená", - linen: "ľan", - magenta: "purpurová", - maroon: "gaštanová hnedá", - mediumaquamarine: "stredná akvamarínová", - mediumblue: "stredná modrá", - mediumorchid: "stredná orchideová", - mediumpurple: "stredná purpurová", - mediumseagreen: "stredná morská zelená", - mediumslateblue: "stredná bridlicová modrá", - mediumspringgreen: "stredná jarná zelená", - mediumturquoise: "stredná tyrkysová", - mediumvioletred: "stredná fialovočervená", - midnightblue: "polnočná modrá", - mintcream: "mätová krémová", - mistyrose: "zahmlená ruža", - moccasin: "mokasínová", - navajowhite: "navajská biela", - navy: "námornícka", - oldlace: "stará čipka", - olive: "olivová", - olivedrab: "fádna olivová", - orange: "oranžová", - orangered: "oranžovo červená", - orchid: "orchideová", - palegoldenrod: "bledá zlatobyľová", - palegreen: "bledá zelená", - paleturquoise: "bledá tyrkysová", - palevioletred: "bledá fialovo červená", - papayawhip: "papájový krém", - peachpuff: "broskyňový nádych", - peru: "peru", - pink: "ružová", - plum: "slivková", - powderblue: "prášková modrá", - purple: "purpurová", - red: "červená", - rosybrown: "ružovo hnedá", - royalblue: "kráľovská modrá", - saddlebrown: "sedlová hnedá", - salmon: "lososová", - sandybrown: "piesková hnedá", - seagreen: "morská zelená", - seashell: "lastúrová", - sienna: "sienská", - silver: "strieborná", - skyblue: "modré nebo", - slateblue: "bridlicová modrá", - slategray: "bridlicová sivá", - slategrey: "bridlicová sivá", // same as slategray - snow: "snehová", - springgreen: "jarná zelená", - steelblue: "oceľovomodrá", - tan: "žltohnedá", - teal: "zelenomodrá", - thistle: "bodliaková", - tomato: "paradajková", - transparent: "priesvitná", - turquoise: "tyrkysová", - violet: "fialová", - wheat: "pšeničná", - white: "biela", - whitesmoke: "biely dym", - yellow: "žltá", - yellowgreen: "žltozelená" -}) -); diff --git a/lib/dojo/nls/sl/colors.js.uncompressed.js b/lib/dojo/nls/sl/colors.js.uncompressed.js deleted file mode 100644 index 74b0547ca..000000000 --- a/lib/dojo/nls/sl/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/sl/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "alice blue modra", - antiquewhite: "antično bela", - aqua: "akva", - aquamarine: "akvamarin", - azure: "azurno modra", - beige: "bež", - bisque: "porcelanasta", - black: "črna", - blanchedalmond: "obledelo mandljeva", - blue: "modra", - blueviolet: "modro vijolična", - brown: "rjava", - burlywood: "peščeno sivo-rjava", - cadetblue: "kadetsko modra", - chartreuse: "chartreuse", - chocolate: "čokoladna", - coral: "koralna", - cornflowerblue: "plavičasto modra", - cornsilk: "koruzna", - crimson: "karminasta", - cyan: "cijan", - darkblue: "temno modra", - darkcyan: "temno cijan", - darkgoldenrod: "temna zlata rozga", - darkgray: "temno siva", - darkgreen: "temno zelena", - darkgrey: "temno siva", // same as darkgray - darkkhaki: "temno kaki", - darkmagenta: "temna magenta", - darkolivegreen: "temna olivno zelena", - darkorange: "temno oranžna", - darkorchid: "temno orhidejasta", - darkred: "temno rdeča", - darksalmon: "temno lososova", - darkseagreen: "temno morsko zelena", - darkslateblue: "temno skrilasto modra", - darkslategray: "temno skrilasto siva", - darkslategrey: "temno skrilasto siva", // same as darkslategray - darkturquoise: "temno turkizna", - darkviolet: "temno vijolična", - deeppink: "temno rožnata", - deepskyblue: "temno nebeško modra", - dimgray: "pepelnato siva", - dimgrey: "pepelnato siva", // same as dimgray - dodgerblue: "dodgersko modra", - firebrick: "opečnata", - floralwhite: "cvetno bela", - forestgreen: "gozdno zelena", - fuchsia: "fuksija", - gainsboro: "gainsboro", - ghostwhite: "senčnato bela", - gold: "zlata", - goldenrod: "zlata rozga", - gray: "siva", - green: "zelena", - greenyellow: "zeleno-rumena", - grey: "siva", // same as gray - honeydew: "medena rosa", - hotpink: "kričeče rožnata", - indianred: "indijansko rdeča", - indigo: "indigo", - ivory: "slonokoščena", - khaki: "kaki", - lavender: "sivka", - lavenderblush: "rožnato sivka", - lawngreen: "travniško zelena", - lemonchiffon: "limonast šifon", - lightblue: "svetlo modra", - lightcoral: "svetlo koralna", - lightcyan: "svetlo cijan", - lightgoldenrodyellow: "svetlo rumena zlata rozga", - lightgray: "svetlo siva", - lightgreen: "svetlo zelena", - lightgrey: "svetlo siva", // same as lightgray - lightpink: "svetlo rožnata", - lightsalmon: "svetlo lososova", - lightseagreen: "svetlo morsko zelena", - lightskyblue: "svetlo nebeško modra", - lightslategray: "svetlo skrilasto siva", - lightslategrey: "svetlo skrilasto siva", // same as lightslategray - lightsteelblue: "svetlo kovinsko modra", - lightyellow: "svetlo rumena", - lime: "limetasta", - limegreen: "apneno zelena", - linen: "lanena", - magenta: "magenta", - maroon: "kostanjeva", - mediumaquamarine: "srednji akvamarin", - mediumblue: "srednje modra", - mediumorchid: "srednje orhidejasta", - mediumpurple: "srednje škrlatna", - mediumseagreen: "srednje morsko zelena", - mediumslateblue: "srednje skrilasto modra", - mediumspringgreen: "srednje pomladno zelena", - mediumturquoise: "srednje turkizna", - mediumvioletred: "srednje vijolično rdeča", - midnightblue: "polnočno modra", - mintcream: "metina krema", - mistyrose: "megleno rožnata", - moccasin: "mokasinasta", - navajowhite: "navajo bela", - navy: "mornarska", - oldlace: "stara čipka", - olive: "olivna", - olivedrab: "umazano olivna", - orange: "oranžna", - orangered: "oranžno-rdeča", - orchid: "orhidejasta", - palegoldenrod: "bleda zlata rozga", - palegreen: "bledo zelena", - paleturquoise: "bledo turkizna", - palevioletred: "bledo vijolično-rdeča", - papayawhip: "papaja", - peachpuff: "breskova", - peru: "perujska", - pink: "rožnata", - plum: "slivova", - powderblue: "kobaltovo modra", - purple: "škrlatna", - red: "rdeča", - rosybrown: "rožnato rjava", - royalblue: "kraljevsko modra", - saddlebrown: "sedlasto rjava", - salmon: "lososova", - sandybrown: "peščeno rjava", - seagreen: "morsko zelena", - seashell: "morska lupina", - sienna: "sienna", - silver: "srebrna", - skyblue: "nebeško modra", - slateblue: "skrilasto modra", - slategray: "skrilasto siva", - slategrey: "skrilasto siva", // same as slategray - snow: "snežena", - springgreen: "pomladno zelena", - steelblue: "kovinsko modra", - tan: "rumeno-rjava", - teal: "modrozelena", - thistle: "osatna", - tomato: "paradižnikova", - transparent: "prosojno", - turquoise: "turkizna", - violet: "vijolična", - wheat: "pšenična", - white: "bela", - whitesmoke: "megleno bela", - yellow: "rumena", - yellowgreen: "rumeno-zelena" -}) -); diff --git a/lib/dojo/nls/sv/colors.js.uncompressed.js b/lib/dojo/nls/sv/colors.js.uncompressed.js deleted file mode 100644 index 2aba2e334..000000000 --- a/lib/dojo/nls/sv/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/sv/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "aliceblå", - antiquewhite: "antikvitt", - aqua: "akvamarin", - aquamarine: "akvamarin", - azure: "azurblått", - beige: "beige", - bisque: "biskvi", - black: "svart", - blanchedalmond: "skållad mandel", - blue: "blått", - blueviolet: "blåviolett", - brown: "brunt", - burlywood: "träfärgat", - cadetblue: "kadettblått", - chartreuse: "chartreuse", - chocolate: "choklad", - coral: "korall", - cornflowerblue: "kornblått", - cornsilk: "gulvitt", - crimson: "karmosinrött", - cyan: "cyan", - darkblue: "mörkblått", - darkcyan: "mörkt cyan", - darkgoldenrod: "mörkt gullris", - darkgray: "mörkgrått", - darkgreen: "mörkgrönt", - darkgrey: "mörkgrått", // same as darkgray - darkkhaki: "mörkt kaki", - darkmagenta: "mörk magenta", - darkolivegreen: "mörkt olivgrönt", - darkorange: "mörkorange", - darkorchid: "mörkt orkidé", - darkred: "mörkrött", - darksalmon: "mörkt laxfärgat", - darkseagreen: "mörkt havsgrönt", - darkslateblue: "mörkt skifferblått", - darkslategray: "mörkt skiffergrått", - darkslategrey: "mörkt skiffergrått", // same as darkslategray - darkturquoise: "mörkturkost", - darkviolet: "mörkviolett", - deeppink: "djuprosa", - deepskyblue: "mörkt himmelsblått", - dimgray: "smutsgrått", - dimgrey: "smutsgrått", // same as dimgray - dodgerblue: "dodgerblått", - firebrick: "tegelstensrött", - floralwhite: "blomvitt", - forestgreen: "skogsgrönt", - fuchsia: "fuchsia", - gainsboro: "gainsboro", - ghostwhite: "spökvitt", - gold: "guld", - goldenrod: "gullris", - gray: "grått", - green: "grönt", - greenyellow: "gröngult", - grey: "grått", // same as gray - honeydew: "honungsdagg", - hotpink: "varmrosa", - indianred: "indianrött", - indigo: "indigo", - ivory: "elfenbensvitt", - khaki: "kaki", - lavender: "lavendel", - lavenderblush: "lavendelskimrande", - lawngreen: "gräsmattegrönt", - lemonchiffon: "citronchiffong", - lightblue: "ljusblått", - lightcoral: "ljuskorall", - lightcyan: "ljust cyan", - lightgoldenrodyellow: "ljust gullrisgult", - lightgray: "ljusgrått", - lightgreen: "ljusgrönt", - lightgrey: "ljusgrått", // same as lightgray - lightpink: "ljusrosa", - lightsalmon: "ljust laxfärgat", - lightseagreen: "ljust havsgrönt", - lightskyblue: "ljust himmelsblått", - lightslategray: "ljust skiffergrått", - lightslategrey: "ljust skiffergrått", // same as lightslategray - lightsteelblue: "ljust stålblått", - lightyellow: "ljusgult", - lime: "lime", - limegreen: "limegrönt", - linen: "linne", - magenta: "magenta", - maroon: "rödbrunt", - mediumaquamarine: "mellanakvamarin", - mediumblue: "mellanblått", - mediumorchid: "mellanorkidé", - mediumpurple: "mellanlila", - mediumseagreen: "mellanhavsgrönt", - mediumslateblue: "mellanskifferblått", - mediumspringgreen: "mellanvårgrönt", - mediumturquoise: "mellanturkost", - mediumvioletred: "mellanviolettrött", - midnightblue: "midnattsblått", - mintcream: "mintgrädde", - mistyrose: "dunkelrosa", - moccasin: "mockasin", - navajowhite: "navajovitt", - navy: "marinblått", - oldlace: "spetsvitt", - olive: "olivfärgat", - olivedrab: "olivsmutsgult", - orange: "orange", - orangered: "orangerött", - orchid: "orkidé", - palegoldenrod: "blekt gullris", - palegreen: "blekgrönt", - paleturquoise: "blekturkost", - palevioletred: "blekviolettrött", - papayawhip: "papayaröra", - peachpuff: "persika", - peru: "peru", - pink: "rosa", - plum: "plommon", - powderblue: "pulverblått", - purple: "lila", - red: "rött", - rosybrown: "rosenbrunt", - royalblue: "kungligt blått", - saddlebrown: "sadelbrunt", - salmon: "laxfärgat", - sandybrown: "sandbrunt", - seagreen: "havsgrönt", - seashell: "snäckskal", - sienna: "sienna", - silver: "silver", - skyblue: "himmelsblått", - slateblue: "skifferblått", - slategray: "skiffergrått", - slategrey: "skiffergrått", // same as slategray - snow: "snö", - springgreen: "vårgrönt", - steelblue: "stålblått", - tan: "mellanbrunt", - teal: "blågrönt", - thistle: "tistel", - tomato: "tomatrött", - transparent: "transparent", - turquoise: "turkost", - violet: "violett", - wheat: "vete", - white: "vitt", - whitesmoke: "vit rök", - yellow: "gult", - yellowgreen: "gulgrönt" -}) -); diff --git a/lib/dojo/nls/th/colors.js.uncompressed.js b/lib/dojo/nls/th/colors.js.uncompressed.js deleted file mode 100644 index 3159be889..000000000 --- a/lib/dojo/nls/th/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/th/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "alice blue", - antiquewhite: "antique white", - aqua: "ฟ้าน้ำทะเล", - aquamarine: "aquamarine", - azure: "น้ำเงินฟ้า", - beige: "น้ำตาลเบจ", - bisque: "bisque", - black: "ดำ", - blanchedalmond: "blanched almond", - blue: "น้ำเงิน", - blueviolet: "น้ำเงินม่วง", - brown: "น้ำตาล", - burlywood: "burlywood", - cadetblue: "cadet blue", - chartreuse: "chartreuse", - chocolate: "ช็อกโกแลต", - coral: "coral", - cornflowerblue: "cornflower blue", - cornsilk: "cornsilk", - crimson: "แดงเลือดหมู", - cyan: "เขียวแกมน้ำเงิน", - darkblue: "น้ำเงินเข้ม", - darkcyan: "เขียวแกมน้ำเงินเข้ม", - darkgoldenrod: "dark goldenrod", - darkgray: "เทาเข้ม", - darkgreen: "เขียวเข้ม", - darkgrey: "เทาเข้ม", // same as darkgray - darkkhaki: "dark khaki", - darkmagenta: "แดงแกมม่วงเข้ม", - darkolivegreen: "เขียวโอลีฟเข้ม", - darkorange: "ส้มเข้ม", - darkorchid: "dark orchid", - darkred: "แดงเข้ม", - darksalmon: "dark salmon", - darkseagreen: "dark sea green", - darkslateblue: "dark slate blue", - darkslategray: "dark slate gray", - darkslategrey: "dark slate gray", // same as darkslategray - darkturquoise: "dark turquoise", - darkviolet: "ม่วงเข้ม", - deeppink: "ชมพูเข้ม", - deepskyblue: "deep sky blue", - dimgray: "dim gray", - dimgrey: "dim gray", // same as dimgray - dodgerblue: "dodger blue", - firebrick: "สีอิฐ", - floralwhite: "floral white", - forestgreen: "forest green", - fuchsia: "fuchsia", - gainsboro: "gainsboro", - ghostwhite: "ghost white", - gold: "ทอง", - goldenrod: "goldenrod", - gray: "เทา", - green: "เขียว", - greenyellow: "เขียวแกมเหลือง", - grey: "เทา", // same as gray - honeydew: "honeydew", - hotpink: "hot pink", - indianred: "indian red", - indigo: "indigo", - ivory: "งาช้าง", - khaki: "khaki", - lavender: "ม่วงลาเวนเดอร์", - lavenderblush: "lavender blush", - lawngreen: "lawn green", - lemonchiffon: "lemon chiffon", - lightblue: "น้ำเงินอ่อน", - lightcoral: "light coral", - lightcyan: "เขียวแกมน้ำเงินอ่อน", - lightgoldenrodyellow: "light goldenrod yellow", - lightgray: "เทาอ่อน", - lightgreen: "เขียวอ่อน", - lightgrey: "เทาอ่อน", // same as lightgray - lightpink: "ชมพูอ่อน", - lightsalmon: "light salmon", - lightseagreen: "light sea green", - lightskyblue: "ฟ้าอ่อน", - lightslategray: "light slate gray", - lightslategrey: "light slate gray", // same as lightslategray - lightsteelblue: "light steel blue", - lightyellow: "เหลืองอ่อน", - lime: "เหลืองมะนาว", - limegreen: "เขียวมะนาว", - linen: "linen", - magenta: "แดงแกมม่วง", - maroon: "น้ำตาลแดง", - mediumaquamarine: "medium aquamarine", - mediumblue: "medium blue", - mediumorchid: "medium orchid", - mediumpurple: "medium purple", - mediumseagreen: "medium sea green", - mediumslateblue: "medium slate blue", - mediumspringgreen: "medium spring green", - mediumturquoise: "medium turquoise", - mediumvioletred: "medium violet-red", - midnightblue: "midnight blue", - mintcream: "mint cream", - mistyrose: "misty rose", - moccasin: "ม็อคค่า", - navajowhite: "navajo white", - navy: "น้ำเงินเข้ม", - oldlace: "old lace", - olive: "โอลีฟ", - olivedrab: "olive drab", - orange: "ส้ม", - orangered: "ส้มแกมแดง", - orchid: "orchid", - palegoldenrod: "pale goldenrod", - palegreen: "pale green", - paleturquoise: "pale turquoise", - palevioletred: "pale violet-red", - papayawhip: "papaya whip", - peachpuff: "peach puff", - peru: "peru", - pink: "ชมพู", - plum: "plum", - powderblue: "powder blue", - purple: "ม่วง", - red: "แดง", - rosybrown: "rosy brown", - royalblue: "royal blue", - saddlebrown: "saddle brown", - salmon: "salmon", - sandybrown: "sandy brown", - seagreen: "sea green", - seashell: "seashell", - sienna: "sienna", - silver: "เงิน", - skyblue: "sky blue", - slateblue: "slate blue", - slategray: "slate gray", - slategrey: "slate gray", // same as slategray - snow: "snow", - springgreen: "spring green", - steelblue: "steel blue", - tan: "tan", - teal: "teal", - thistle: "thistle", - tomato: "tomato", - transparent: "สีใส", - turquoise: "turquoise", - violet: "ม่วง", - wheat: "wheat", - white: "ขาว", - whitesmoke: "ขาวควัน", - yellow: "เหลือง", - yellowgreen: "เหลืองแกมเขียว" -}) -); diff --git a/lib/dojo/nls/tr/colors.js.uncompressed.js b/lib/dojo/nls/tr/colors.js.uncompressed.js deleted file mode 100644 index 8b9020f06..000000000 --- a/lib/dojo/nls/tr/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/tr/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "alice mavisi", - antiquewhite: "antik beyaz", - aqua: "deniz mavisi", - aquamarine: "akuamarin", - azure: "azur mavisi", - beige: "bej", - bisque: "bisküvi", - black: "siyah", - blanchedalmond: "soluk badem", - blue: "mavi", - blueviolet: "mavi-mor", - brown: "kahverengi", - burlywood: "sarımsı kahverengi", - cadetblue: "denizci mavisi", - chartreuse: "chartreuse", - chocolate: "çikolata", - coral: "mercan", - cornflowerblue: "peygamber çiçeği mavisi", - cornsilk: "mısır rengi", - crimson: "crimson", - cyan: "camgöbeği", - darkblue: "koyu mavi", - darkcyan: "koyu camgöbeği", - darkgoldenrod: "koyu sarı", - darkgray: "koyu gri", - darkgreen: "koyu yeşil", - darkgrey: "koyu gri", // same as darkgray - darkkhaki: "koyu haki", - darkmagenta: "koyu mor", - darkolivegreen: "koyu zeytin yeşili", - darkorange: "koyu turuncu", - darkorchid: "koyu orkide", - darkred: "koyu kırmızı", - darksalmon: "koyu somon", - darkseagreen: "koyu deniz yeşili", - darkslateblue: "koyu arduvaz mavisi", - darkslategray: "koyu arduvaz grisi", - darkslategrey: "koyu arduvaz grisi", // same as darkslategray - darkturquoise: "koyu turkuaz", - darkviolet: "koyu eflatun", - deeppink: "koyu pembe", - deepskyblue: "koyu gök mavisi", - dimgray: "soluk gri", - dimgrey: "soluk gri", // same as dimgray - dodgerblue: "toz mavisi", - firebrick: "canlı kiremit", - floralwhite: "çiçek beyazı", - forestgreen: "koyu deniz yeşili", - fuchsia: "fuşya", - gainsboro: "gainsboro", - ghostwhite: "silik beyaz", - gold: "altın", - goldenrod: "sarısabır", - gray: "gri", - green: "yeşil", - greenyellow: "yeşil-sarı", - grey: "gri", // same as gray - honeydew: "çam sakızı", - hotpink: "sıcak pembe", - indianred: "kızılderili kırmızısı", - indigo: "çivit mavisi", - ivory: "fildişi", - khaki: "haki", - lavender: "lavanta", - lavenderblush: "lavanta pembesi", - lawngreen: "çimen yeşili", - lemonchiffon: "limoni", - lightblue: "açık mavi", - lightcoral: "açık mercan", - lightcyan: "açık camgöbeği", - lightgoldenrodyellow: "açık sarısabır", - lightgray: "açık gri", - lightgreen: "açık yeşil", - lightgrey: "açık gri", // same as lightgray - lightpink: "açık pembe", - lightsalmon: "açık somon", - lightseagreen: "açık deniz yeşili", - lightskyblue: "açık gök mavisi", - lightslategray: "açık arduvaz grisi", - lightslategrey: "açık arduvaz grisi", // same as lightslategray - lightsteelblue: "açık metalik mavi", - lightyellow: "açık sarı", - lime: "limon yeşili", - limegreen: "küf yeşili", - linen: "keten", - magenta: "macenta", - maroon: "kestane", - mediumaquamarine: "orta akuamarin", - mediumblue: "orta mavi", - mediumorchid: "orta orkide", - mediumpurple: "orta mor", - mediumseagreen: "orta deniz yeşili", - mediumslateblue: "orta arduvaz mavisi", - mediumspringgreen: "orta bahar yeşili", - mediumturquoise: "orta turkuaz", - mediumvioletred: "orta menekşe kırmızısı", - midnightblue: "gece mavisi", - mintcream: "naneli krem", - mistyrose: "gülkurusu", - moccasin: "mokosen", - navajowhite: "navajo beyazı", - navy: "lacivert", - oldlace: "eski dantel", - olive: "zeytin", - olivedrab: "asker yeşili", - orange: "turuncu", - orangered: "turuncu kırmızı", - orchid: "orkide", - palegoldenrod: "soluk sarısabır", - palegreen: "soluk yeşil", - paleturquoise: "soluk turkuaz", - palevioletred: "soluk menekşe kırmızısı", - papayawhip: "papaya sapı", - peachpuff: "açık şeftali", - peru: "peru", - pink: "pembe", - plum: "erik", - powderblue: "pudra mavisi", - purple: "mor", - red: "kırmızı", - rosybrown: "pembemsi kahverengi", - royalblue: "parlak koyu mavi", - saddlebrown: "açık kahve", - salmon: "somon", - sandybrown: "kum rengi", - seagreen: "deniz yeşili", - seashell: "deniz kabuğu", - sienna: "koyu kahve", - silver: "gümüş", - skyblue: "gök mavisi", - slateblue: "arduvaz mavisi", - slategray: "arduvaz grisi", - slategrey: "arduvaz grisi", // same as slategray - snow: "kar", - springgreen: "bahar yeşili", - steelblue: "metalik mavi", - tan: "güneş yanığı", - teal: "Teal mavi", - thistle: "devedikeni", - tomato: "domates", - transparent: "saydam", - turquoise: "turkuaz", - violet: "eflatun", - wheat: "buğday", - white: "beyaz", - whitesmoke: "beyaz duman", - yellow: "sarı", - yellowgreen: "sarı yeşil" -}) -); diff --git a/lib/dojo/nls/tt-rss-layer_ROOT.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_ROOT.js.uncompressed.js deleted file mode 100644 index 2ba5f2ac4..000000000 --- a/lib/dojo/nls/tt-rss-layer_ROOT.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_ROOT',{ -'dijit/form/nls/validate':{"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."} -, -'dijit/nls/loading':{"loadingState":"Loading...","errorState":"Sorry, an error occurred"} -, -'dojo/nls/colors':{"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","transparent":"transparent","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Previous choices","nextMessage":"More choices"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_ar.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_ar.js.uncompressed.js deleted file mode 100644 index 10b2df03b..000000000 --- a/lib/dojo/nls/tt-rss-layer_ar.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_ar',{ -'dijit/form/nls/validate':{"rangeMessage":"هذه القيمة ليس بالمدى الصحيح.","invalidMessage":"القيمة التي تم ادخالها غير صحيحة.","missingMessage":"يجب ادخال هذه القيمة."} -, -'dijit/nls/loading':{"loadingState":"جاري التحميل...","errorState":"عفوا، حدث خطأ"} -, -'dojo/nls/colors':{"lightsteelblue":"أزرق معدني فاتح","orangered":"أحمر مائل للبرتقالي","midnightblue":"أزرق بحري","cadetblue":"أزرق ملون بالرمادي","seashell":"أبيض مائل للأصفر فاتح","slategrey":"رمادي اردوازي","coral":"مرجاني","darkturquoise":"تركواز داكن","antiquewhite":"أبيض عتيق","mediumspringgreen":"أخضر ربيعي متوسط","transparent":"شفاف","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/cldr/nls/number':{"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":"؛","percentSign":"٪","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"ليس رقم","nativeZeroDigit":"0","plusSign":"+","currencySpacing-afterCurrency-surroundingMatch":"[:digit:]","currencyFormat":"¤ #,##0.00;¤ #,##0.00-","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"؉","group":"٬","percentFormat":"#,##0%","decimalFormat":"#,##0.###;#,##0.###-","decimal":"٫","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"اس"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"الاختيارات السابقة","nextMessage":"مزيد من الاختيارات"} -, -'dijit/nls/common':{"buttonOk":"حسنا","buttonCancel":"الغاء","buttonSave":"حفظ","itemClose":"اغلاق"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_ca.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_ca.js.uncompressed.js deleted file mode 100644 index b12869c82..000000000 --- a/lib/dojo/nls/tt-rss-layer_ca.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_ca',{ -'dijit/form/nls/validate':{"rangeMessage":"Aquest valor és fora de l'interval","invalidMessage":"El valor introduït no és vàlid","missingMessage":"Aquest valor és necessari"} -, -'dijit/nls/loading':{"loadingState":"S'està carregant...","errorState":"Ens sap greu. S'ha produït un error."} -, -'dojo/nls/colors':{"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à","transparent":"transparent","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Opcions anteriors","nextMessage":"Més opcions"} -, -'dijit/nls/common':{"buttonOk":"D'acord","buttonCancel":"Cancel·la","buttonSave":"Desa","itemClose":"Tanca"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_cs.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_cs.js.uncompressed.js deleted file mode 100644 index 35ef92bae..000000000 --- a/lib/dojo/nls/tt-rss-layer_cs.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_cs',{ -'dijit/form/nls/validate':{"rangeMessage":"Tato hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota není platná.","missingMessage":"Tato hodnota je vyžadována."} -, -'dijit/nls/loading':{"loadingState":"Probíhá načítání...","errorState":"Omlouváme se, došlo k chybě"} -, -'dojo/nls/colors':{"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á","transparent":"průhledná","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Předchozí volby","nextMessage":"Další volby"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Storno","buttonSave":"Uložit","itemClose":"Zavřít"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_da.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_da.js.uncompressed.js deleted file mode 100644 index cfe00a014..000000000 --- a/lib/dojo/nls/tt-rss-layer_da.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_da',{ -'dijit/form/nls/validate':{"rangeMessage":"Værdien er uden for intervallet.","invalidMessage":"Den angivne værdi er ikke gyldig.","missingMessage":"Værdien er påkrævet."} -, -'dijit/nls/loading':{"loadingState":"Indlæser...","errorState":"Der er opstået en fejl"} -, -'dojo/nls/colors':{"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","transparent":"transparent","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Forrige valg","nextMessage":"Flere valg"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Annullér","buttonSave":"Gem","itemClose":"Luk"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_de-de.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_de-de.js.uncompressed.js deleted file mode 100644 index dda51bad5..000000000 --- a/lib/dojo/nls/tt-rss-layer_de-de.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_de-de',{ -'dijit/form/nls/validate':{"rangeMessage":"Dieser Wert liegt außerhalb des gültigen Bereichs. ","invalidMessage":"Der eingegebene Wert ist ungültig. ","missingMessage":"Dieser Wert ist erforderlich."} -, -'dijit/nls/loading':{"loadingState":"Wird geladen...","errorState":"Es ist ein Fehler aufgetreten."} -, -'dojo/nls/colors':{"lightsteelblue":"Helles Stahlblau","orangered":"Orangerot","midnightblue":"Mitternachtblau","cadetblue":"Kadettenblau","seashell":"Muschelweiß","slategrey":"Schiefergrau","coral":"Koralle","darkturquoise":"Dunkeltürkis","antiquewhite":"Antikweiß","mediumspringgreen":"Mittelfrühlingsgrün","transparent":"Transparent","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Vorherige Auswahl","nextMessage":"Weitere Auswahlmöglichkeiten"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Abbrechen","buttonSave":"Speichern","itemClose":"Schließen"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_el.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_el.js.uncompressed.js deleted file mode 100644 index 98ddc6572..000000000 --- a/lib/dojo/nls/tt-rss-layer_el.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_el',{ -'dijit/form/nls/validate':{"rangeMessage":"Η τιμή αυτή δεν ανήκει στο εύρος έγκυρων τιμών.","invalidMessage":"Η τιμή που καταχωρήσατε δεν είναι έγκυρη.","missingMessage":"Η τιμή αυτή πρέπει απαραίτητα να καθοριστεί."} -, -'dijit/nls/loading':{"loadingState":"Φόρτωση...","errorState":"Σας ζητούμε συγνώμη, παρουσιάστηκε σφάλμα"} -, -'dojo/nls/colors':{"lightsteelblue":"ανοιχτό μπλε ατσαλιού","orangered":"πορτοκαλοκόκκινο","midnightblue":"πολύ σκούρο μπλε","cadetblue":"μπλε του στρατού","seashell":"κοχύλι","slategrey":"μεταλλικό γκρι","coral":"κοραλί","darkturquoise":"σκούρο τυρκουάζ","antiquewhite":"ξεθωριασμένο λευκό","mediumspringgreen":"μεσαίο πράσινο της άνοιξης","transparent":"διαφανές","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Προηγούμενες επιλογές","nextMessage":"Περισσότερες επιλογές"} -, -'dijit/nls/common':{"buttonOk":"ΟΚ","buttonCancel":"Ακύρωση","buttonSave":"Αποθήκευση","itemClose":"Κλείσιμο"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_en-gb.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_en-gb.js.uncompressed.js deleted file mode 100644 index ac3132c3e..000000000 --- a/lib/dojo/nls/tt-rss-layer_en-gb.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_en-gb',{ -'dijit/form/nls/validate':{"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."} -, -'dijit/nls/loading':{"loadingState":"Loading...","errorState":"Sorry, an error occurred"} -, -'dojo/nls/colors':{"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","transparent":"transparent","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Previous choices","nextMessage":"More choices"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_en-us.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_en-us.js.uncompressed.js deleted file mode 100644 index c951cbd36..000000000 --- a/lib/dojo/nls/tt-rss-layer_en-us.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_en-us',{ -'dijit/form/nls/validate':{"rangeMessage":"This value is out of range.","invalidMessage":"The value entered is not valid.","missingMessage":"This value is required."} -, -'dijit/nls/loading':{"loadingState":"Loading...","errorState":"Sorry, an error occurred"} -, -'dojo/nls/colors':{"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","transparent":"transparent","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/cldr/nls/number':{"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;(¤#,##0.00)","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Previous choices","nextMessage":"More choices"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Cancel","buttonSave":"Save","itemClose":"Close"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_es-es.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_es-es.js.uncompressed.js deleted file mode 100644 index e81ac1c37..000000000 --- a/lib/dojo/nls/tt-rss-layer_es-es.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_es-es',{ -'dijit/form/nls/validate':{"rangeMessage":"Este valor está fuera del intervalo.","invalidMessage":"El valor especificado no es válido.","missingMessage":"Este valor es necesario."} -, -'dijit/nls/loading':{"loadingState":"Cargando...","errorState":"Lo siento, se ha producido un error"} -, -'dojo/nls/colors':{"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","transparent":"transparente","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Opciones anteriores","nextMessage":"Más opciones"} -, -'dijit/nls/common':{"buttonOk":"Aceptar","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Cerrar"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_fi-fi.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_fi-fi.js.uncompressed.js deleted file mode 100644 index 0426c20e7..000000000 --- a/lib/dojo/nls/tt-rss-layer_fi-fi.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_fi-fi',{ -'dijit/form/nls/validate':{"rangeMessage":"Tämä arvo on sallitun alueen ulkopuolella.","invalidMessage":"Annettu arvo ei kelpaa.","missingMessage":"Tämä arvo on pakollinen."} -, -'dijit/nls/loading':{"loadingState":"Lataus on meneillään...","errorState":"On ilmennyt virhe."} -, -'dojo/nls/colors':{"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ä","transparent":"läpinäkyvä","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/cldr/nls/number':{"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"-","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","nan":"epäluku","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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Edelliset valinnat","nextMessage":"Lisää valintoja"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Peruuta","buttonSave":"Tallenna","itemClose":"Sulje"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_fr-fr.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_fr-fr.js.uncompressed.js deleted file mode 100644 index 67072dd7c..000000000 --- a/lib/dojo/nls/tt-rss-layer_fr-fr.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_fr-fr',{ -'dijit/form/nls/validate':{"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."} -, -'dijit/nls/loading':{"loadingState":"Chargement...","errorState":"Une erreur est survenue"} -, -'dojo/nls/colors':{"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","transparent":"transparent","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'œuf","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Choix précédents","nextMessage":"Plus de choix"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Annuler","buttonSave":"Sauvegarder","itemClose":"Fermer"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_he-il.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_he-il.js.uncompressed.js deleted file mode 100644 index aaba5dede..000000000 --- a/lib/dojo/nls/tt-rss-layer_he-il.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_he-il',{ -'dijit/form/nls/validate':{"rangeMessage":"הערך מחוץ לטווח.","invalidMessage":"הערך שצוין אינו חוקי.","missingMessage":"זהו ערך דרוש."} -, -'dijit/nls/loading':{"loadingState":"טעינה...","errorState":"אירעה שגיאה"} -, -'dojo/nls/colors':{"lightsteelblue":"כחול פלדה בהיר","orangered":"כתום אדום","midnightblue":"כחול כהה","cadetblue":"כחול ים","seashell":"צדף","slategrey":"אפור צפחה","coral":"אלמוג","darkturquoise":"טורקיז כהה","antiquewhite":"לבן עתיק","mediumspringgreen":"ירוק אביב בינוני","transparent":"transparent","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"האפשרויות הקודמות","nextMessage":"אפשרויות נוספות"} -, -'dijit/nls/common':{"buttonOk":"אישור","buttonCancel":"ביטול","buttonSave":"שמירה","itemClose":"סגירה"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_hu.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_hu.js.uncompressed.js deleted file mode 100644 index a41af2788..000000000 --- a/lib/dojo/nls/tt-rss-layer_hu.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_hu',{ -'dijit/form/nls/validate':{"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."} -, -'dijit/nls/loading':{"loadingState":"Betöltés...","errorState":"Sajnálom, hiba történt"} -, -'dojo/nls/colors':{"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","transparent":"átlátszó","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Előző menüpontok","nextMessage":"További menüpontok"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Mégse","buttonSave":"Mentés","itemClose":"Bezárás"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_it-it.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_it-it.js.uncompressed.js deleted file mode 100644 index 7017f1736..000000000 --- a/lib/dojo/nls/tt-rss-layer_it-it.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_it-it',{ -'dijit/form/nls/validate':{"rangeMessage":"Questo valore non è compreso nell'intervallo.","invalidMessage":"Il valore immesso non è valido.","missingMessage":"Questo valore è obbligatorio."} -, -'dijit/nls/loading':{"loadingState":"Caricamento in corso...","errorState":"Si è verificato un errore"} -, -'dojo/nls/colors':{"lightsteelblue":"blu acciaio chiaro","orangered":"vermiglio","midnightblue":"blu notte","cadetblue":"verde petrolio","seashell":"sabbia rosa","slategrey":"grigio ardesia","coral":"corallo","darkturquoise":"turchese scuro","antiquewhite":"rosa antico","mediumspringgreen":"verde brillante medio","transparent":"trasparente","salmon":"salmone","darkgrey":"grigio scuro","ivory":"avorio","greenyellow":"verde-giallo","mistyrose":"rosa pallido","lightsalmon":"salmone chiaro","silver":"argento","dimgrey":"grigio tenue","orange":"arancione","white":"bianco","navajowhite":"sabbia","royalblue":"royal blue","deeppink":"ciclamino","lime":"lime","oldlace":"mandorla","chartreuse":"verde brillante","darkcyan":"celeste scuro","yellow":"giallo","linen":"lino","olive":"verde oliva","gold":"oro","lawngreen":"verde brillante chiaro","lightyellow":"giallo chiaro","tan":"tan","darkviolet":"viola scuro","lightslategrey":"grigio ardesia chiaro","grey":"grigio","darkkhaki":"cachi scuro","green":"verde","deepskyblue":"azzurro intenso","aqua":"verde acqua","sienna":"terra di siena","mintcream":"bianco nuvola","rosybrown":"caffè latte","mediumslateblue":"blu ardesia medio","magenta":"magenta","lightseagreen":"verde acqua chiaro","cyan":"ciano","olivedrab":"verde bottiglia","darkgoldenrod":"ocra scuro","slateblue":"blu ardesia","mediumaquamarine":"acquamarina medio","lavender":"lavanda","mediumseagreen":"verde acqua medio","maroon":"Bordeaux","darkslategray":"grigio ardesia scuro","mediumturquoise":"turchese medio","ghostwhite":"bianco gesso","darkblue":"blu scuro","mediumvioletred":"violetto rosso medio","brown":"marrone","lightgray":"grigio chiaro","sandybrown":"argilla","pink":"rosa","firebrick":"mattone","indigo":"indaco","snow":"neve","darkorchid":"orchidea scuro","turquoise":"turchese","chocolate":"cioccolato","springgreen":"verde brillante","moccasin":"mocassino","navy":"blu scuro","lemonchiffon":"lemon chiffon","teal":"verde acqua","floralwhite":"bianco grigio","cornflowerblue":"blu fiordaliso","paleturquoise":"turchese pallido","purple":"viola","gainsboro":"gainsboro","plum":"prugna","red":"rosso","blue":"blu","forestgreen":"verde pino scuro","darkgreen":"verde scuro","honeydew":"miele","darkseagreen":"verde acqua scuro","lightcoral":"corallo chiaro","palevioletred":"violetto rosso pallido","mediumpurple":"viola medio","saddlebrown":"cacao","darkmagenta":"magenta scuro","thistle":"rosa cenere","whitesmoke":"bianco fumo","wheat":"tabacco","violet":"violetto","lightskyblue":"azzurro chiaro","goldenrod":"dorato","mediumblue":"blu medio","skyblue":"azzurro","crimson":"rosso scarlatto","darksalmon":"salmone scuro","darkred":"rosso scuro","darkslategrey":"grigio ardesia scuro","peru":"perù","lightgrey":"grigio chiaro","lightgoldenrodyellow":"giallo dorato chiaro","blanchedalmond":"beige 2","aliceblue":"bianco ghiaccio","bisque":"terracotta","slategray":"grigio ardesia","palegoldenrod":"dorato pallido","darkorange":"arancione scuro","aquamarine":"acquamarina","lightgreen":"verde chiaro","burlywood":"legno massiccio","dodgerblue":"dodger blue","darkgray":"grigio scuro","lightcyan":"ciano chiaro","powderblue":"azzurro polvere","blueviolet":"violetto bluastro","orchid":"orchidea","dimgray":"grigio tenue","beige":"beige","fuchsia":"fucsia","lavenderblush":"lavanda rosa","hotpink":"rosa acceso","steelblue":"blu brillante","tomato":"pomodoro","lightpink":"rosa chiaro","limegreen":"verde lime","indianred":"terra indiana","papayawhip":"papaya","lightslategray":"grigio ardesia chiaro","gray":"grigio","mediumorchid":"orchidea medio","cornsilk":"crema","black":"nero","seagreen":"verde acqua","darkslateblue":"blu ardesia scuro","khaki":"cachi","lightblue":"blu chiaro","palegreen":"verde pallido","azure":"azure","peachpuff":"pesche","darkolivegreen":"verde oliva scuro","yellowgreen":"giallo verde"} -, -'dojo/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Scelte precedenti","nextMessage":"Altre scelte"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Annulla","buttonSave":"Salva","itemClose":"Chiudi"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_ja-jp.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_ja-jp.js.uncompressed.js deleted file mode 100644 index 8b0a245e6..000000000 --- a/lib/dojo/nls/tt-rss-layer_ja-jp.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_ja-jp',{ -'dijit/form/nls/validate':{"rangeMessage":"この値は範囲外です。","invalidMessage":"入力した値は無効です。","missingMessage":"この値は必須です。"} -, -'dijit/nls/loading':{"loadingState":"ロード中...","errorState":"エラーが発生しました。"} -, -'dojo/nls/colors':{"lightsteelblue":"ライトスチールブルー","orangered":"オレンジレッド","midnightblue":"ミッドナイトブルー","cadetblue":"くすんだ青","seashell":"シーシェル","slategrey":"スレートグレイ","coral":"珊瑚","darkturquoise":"ダークターコイズ","antiquewhite":"アンティークホワイト","mediumspringgreen":"ミディアムスプリンググリーン","transparent":"透明","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"以前の選択項目","nextMessage":"追加の選択項目"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"キャンセル","buttonSave":"保存","itemClose":"閉じる"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_ko-kr.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_ko-kr.js.uncompressed.js deleted file mode 100644 index 5a48e4db7..000000000 --- a/lib/dojo/nls/tt-rss-layer_ko-kr.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_ko-kr',{ -'dijit/form/nls/validate':{"rangeMessage":"이 값은 범위를 벗어납니다.","invalidMessage":"입력된 값이 올바르지 않습니다.","missingMessage":"이 값은 필수입니다."} -, -'dijit/nls/loading':{"loadingState":"로드 중...","errorState":"죄송합니다. 오류가 발생했습니다."} -, -'dojo/nls/colors':{"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)","transparent":"투명(transparent)","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"이전 선택사항","nextMessage":"기타 선택사항"} -, -'dijit/nls/common':{"buttonOk":"확인","buttonCancel":"취소","buttonSave":"저장","itemClose":"닫기"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_nb.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_nb.js.uncompressed.js deleted file mode 100644 index cddd699e1..000000000 --- a/lib/dojo/nls/tt-rss-layer_nb.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_nb',{ -'dijit/form/nls/validate':{"rangeMessage":"Denne verdien er utenfor gyldig område.","invalidMessage":"Den angitte verdien er ikke gyldig.","missingMessage":"Denne verdien er obligatorisk."} -, -'dijit/nls/loading':{"loadingState":"Laster inn...","errorState":"Det oppsto en feil"} -, -'dojo/nls/colors':{"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","transparent":"gjennomsiktig","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Tidligere valg","nextMessage":"Flere valg"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Lagre","itemClose":"Lukk"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_nl-nl.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_nl-nl.js.uncompressed.js deleted file mode 100644 index 7d02b7681..000000000 --- a/lib/dojo/nls/tt-rss-layer_nl-nl.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_nl-nl',{ -'dijit/form/nls/validate':{"rangeMessage":"Deze waarde is niet toegestaan.","invalidMessage":"De opgegeven waarde is ongeldig.","missingMessage":"Deze waarde is verplicht."} -, -'dijit/nls/loading':{"loadingState":"Bezig met laden...","errorState":"Er is een fout opgetreden"} -, -'dojo/nls/colors':{"lightsteelblue":"lichtstaalblauw","orangered":"oranjerood","midnightblue":"nachtblauw","cadetblue":"donkerstaalblauw","seashell":"schelp","slategrey":"leigrijs","coral":"koraalrood","darkturquoise":"donkerturquoise","antiquewhite":"antiekwit","mediumspringgreen":"midlentegroen","transparent":"transparant","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/cldr/nls/number':{"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;¤ #,##0.00-","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":".","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":",","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Eerdere opties","nextMessage":"Meer opties"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Annuleren","buttonSave":"Opslaan","itemClose":"Sluiten"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_pl.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_pl.js.uncompressed.js deleted file mode 100644 index 5be92aa5b..000000000 --- a/lib/dojo/nls/tt-rss-layer_pl.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_pl',{ -'dijit/form/nls/validate':{"rangeMessage":"Ta wartość jest spoza zakresu.","invalidMessage":"Wprowadzona wartość jest niepoprawna.","missingMessage":"Ta wartość jest wymagana."} -, -'dijit/nls/loading':{"loadingState":"Ładowanie...","errorState":"Niestety, wystąpił błąd"} -, -'dojo/nls/colors':{"lightsteelblue":"jasnostalowoniebieski","orangered":"czerwona pomarańcza","midnightblue":"atramentowoniebieski","cadetblue":"szaroniebieski","seashell":"matowoliliowy","slategrey":"mysi","coral":"koralowy","darkturquoise":"ciemnoturkusowy","antiquewhite":"biel antyczna","mediumspringgreen":"średnia wiosenna zieleń","transparent":"przezroczysty","salmon":"łososiowy","darkgrey":"ciemnoszary","ivory":"kość słoniowa","greenyellow":"zielonożółty","mistyrose":"mglistoróżany","lightsalmon":"jasnołososiowy","silver":"srebrny","dimgrey":"przyciemniony szary","orange":"pomarańczowy","white":"biały","navajowhite":"biel Nawaho","royalblue":"królewska purpura","deeppink":"głęboki róż","lime":"limonkowy","oldlace":"ecru","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":"sjena","mintcream":"miętowokremowy","rosybrown":"różanobrązowy","mediumslateblue":"średni gołębi","magenta":"amarantowy","lightseagreen":"jasna zieleń morska","cyan":"niebieskozielony","olivedrab":"oliwkowozielony","darkgoldenrod":"ciemne stare złoto","slateblue":"gołębi","mediumaquamarine":"średnia akwamaryna","lavender":"lawendowy","mediumseagreen":"średnia zieleń morska","maroon":"rdzawoczerwony","darkslategray":"ciemny mysi","mediumturquoise":"średni turkusowy","ghostwhite":"sina biel","darkblue":"ciemnoniebieski","mediumvioletred":"średni fiołkowowoczerwony","brown":"brązowy","lightgray":"jasnoszary","sandybrown":"piaskowobrązowy","pink":"różowy","firebrick":"podpalana cegła","indigo":"indygo","snow":"śnieżny","darkorchid":"ciemna orchidea","turquoise":"turkusowy","chocolate":"czekoladowy","springgreen":"wiosenna zieleń","moccasin":"mokasynowy","navy":"granatowy","lemonchiffon":"babka cytrynowa","teal":"zielonomodry","floralwhite":"złamana biel","cornflowerblue":"niebieskochabrowy","paleturquoise":"bladoturkusowy","purple":"fioletowy","gainsboro":"jasnoniebieskawoszary","plum":"śliwkowy","red":"czerwony","blue":"niebieski","forestgreen":"leśna zieleń","darkgreen":"ciemnozielony","honeydew":"miodowy","darkseagreen":"ciemna zieleń morska","lightcoral":"jasnokoralowy","palevioletred":"bladofiołkowoczerwony","mediumpurple":"średni fioletowy","saddlebrown":"brąz skórzany","darkmagenta":"ciemnoamarantowy","thistle":"kwiat ostu","whitesmoke":"siwy","wheat":"pszeniczny","violet":"fiołkowy","lightskyblue":"jasny błękit nieba","goldenrod":"stare złoto","mediumblue":"średni niebieski","skyblue":"błękit nieba","crimson":"karmazynowy","darksalmon":"ciemnołososiowy","darkred":"ciemnoczerwony","darkslategrey":"ciemny mysi","peru":"palona glina","lightgrey":"jasnoszary","lightgoldenrodyellow":"jasne stare złoto","blanchedalmond":"obrany migdał","aliceblue":"bladoniebieski","bisque":"cielistobeżowy","slategray":"mysi","palegoldenrod":"blade stare złoto","darkorange":"ciemnopomarańczowy","aquamarine":"akwamaryna","lightgreen":"jasnozielony","burlywood":"piaskowobeżowy","dodgerblue":"niebieski Dodgersów","darkgray":"ciemnoszary","lightcyan":"jasnoniebieskozielony","powderblue":"jasnobladobłękitny","blueviolet":"błękitnofiołkowy","orchid":"orchidea","dimgray":"przyciemniony szary","beige":"beżowy","fuchsia":"fuksjowy","lavenderblush":"lawendoworóżowy","hotpink":"odblaskoworóżowy","steelblue":"stalowoniebieski","tomato":"pomidorowy","lightpink":"jasnoróżowy","limegreen":"limonkowozielony","indianred":"kasztanowy","papayawhip":"kremowa papaja","lightslategray":"jasny mysi","gray":"szary","mediumorchid":"średnia orchidea","cornsilk":"białożółty","black":"czarny","seagreen":"zieleń morska","darkslateblue":"ciemny gołębi","khaki":"khaki","lightblue":"jasnoniebieski","palegreen":"bladozielony","azure":"lazurowy","peachpuff":"cielisty brzoskwiniowy","darkolivegreen":"ciemnooliwkowozielony","yellowgreen":"żółtozielony"} -, -'dojo/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Poprzednie wybory","nextMessage":"Więcej wyborów"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Anuluj","buttonSave":"Zapisz","itemClose":"Zamknij"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_pt-br.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_pt-br.js.uncompressed.js deleted file mode 100644 index 0f5f2dfaa..000000000 --- a/lib/dojo/nls/tt-rss-layer_pt-br.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_pt-br',{ -'dijit/form/nls/validate':{"rangeMessage":"Este valor está fora do intervalo. ","invalidMessage":"O valor inserido não é válido.","missingMessage":"Este valor é necessário."} -, -'dijit/nls/loading':{"loadingState":"Carregando...","errorState":"Desculpe, ocorreu um erro"} -, -'dojo/nls/colors':{"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","transparent":"transparente","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/cldr/nls/number':{"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;(¤#,##0.00)","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":".","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":",","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Opções anteriores","nextMessage":"Mais opções"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Salvar","itemClose":"Fechar"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_pt-pt.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_pt-pt.js.uncompressed.js deleted file mode 100644 index cdf2af2e0..000000000 --- a/lib/dojo/nls/tt-rss-layer_pt-pt.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_pt-pt',{ -'dijit/form/nls/validate':{"rangeMessage":"Este valor encontra-se fora do intervalo.","invalidMessage":"O valor introduzido não é válido.","missingMessage":"Este valor é requerido."} -, -'dijit/nls/loading':{"loadingState":"A carregar...","errorState":"Lamentamos, mas ocorreu um erro"} -, -'dojo/nls/colors':{"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","transparent":"transparente","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Opções anteriores","nextMessage":"Mais opções"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Cancelar","buttonSave":"Guardar","itemClose":"Fechar"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_ru.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_ru.js.uncompressed.js deleted file mode 100644 index 84fbc91d5..000000000 --- a/lib/dojo/nls/tt-rss-layer_ru.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_ru',{ -'dijit/form/nls/validate':{"rangeMessage":"Это значение вне диапазона.","invalidMessage":"Указано недопустимое значение.","missingMessage":"Это обязательное значение."} -, -'dijit/nls/loading':{"loadingState":"Загрузка...","errorState":"Извините, возникла ошибка"} -, -'dojo/nls/colors':{"lightsteelblue":"светлый стальной","orangered":"оранжево-красный","midnightblue":"полуночно-синий","cadetblue":"серо-синий","seashell":"морская раковина","slategrey":"грифельно-серый","coral":"коралловый","darkturquoise":"темный бирюзовый","antiquewhite":"белый антик","mediumspringgreen":"нейтральный весенне-зеленый","transparent":"прозрачный","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Предыдущие варианты","nextMessage":"Следующие варианты"} -, -'dijit/nls/common':{"buttonOk":"ОК","buttonCancel":"Отмена","buttonSave":"Сохранить","itemClose":"Закрыть"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_sk.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_sk.js.uncompressed.js deleted file mode 100644 index 98c6c5ffa..000000000 --- a/lib/dojo/nls/tt-rss-layer_sk.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_sk',{ -'dijit/form/nls/validate':{"rangeMessage":"Táto hodnota je mimo rozsah.","invalidMessage":"Zadaná hodnota nie je platná.","missingMessage":"Táto hodnota je vyžadovaná."} -, -'dijit/nls/loading':{"loadingState":"Zavádzanie...","errorState":"Nastala chyba"} -, -'dojo/nls/colors':{"lightsteelblue":"svetlá oceľovomodrá","orangered":"oranžovo červená","midnightblue":"polnočná modrá","cadetblue":"červeno modrá","seashell":"lastúrová","slategrey":"bridlicová sivá","coral":"koralová","darkturquoise":"tmavá tyrkysová","antiquewhite":"antická biela","mediumspringgreen":"stredná jarná zelená","transparent":"priesvitná","salmon":"lososová","darkgrey":"tmavosivá","ivory":"slonovina","greenyellow":"zelenožltá","mistyrose":"zahmlená ruža","lightsalmon":"svetlá lososová","silver":"strieborná","dimgrey":"matná sivá","orange":"oranžová","white":"biela","navajowhite":"navajská biela","royalblue":"kráľovská modrá","deeppink":"hlboká ružová","lime":"limetková","oldlace":"stará čipka","chartreuse":"kartúzska","darkcyan":"tmavá zelenomodrá","yellow":"žltá","linen":"ľan","olive":"olivová","gold":"zlatá","lawngreen":"trávová zelená","lightyellow":"svetložltá","tan":"žltohnedá","darkviolet":"tmavofialová","lightslategrey":"svetlá bridlicová sivá","grey":"sivá","darkkhaki":"tmavá žltohnedá","green":"zelená","deepskyblue":"hlboká modrá obloha","aqua":"vodová","sienna":"sienská","mintcream":"mätová krémová","rosybrown":"ružovo hnedá","mediumslateblue":"stredná bridlicová modrá","magenta":"purpurová","lightseagreen":"svetlá morská zelená","cyan":"zelenomodrá","olivedrab":"fádna olivová","darkgoldenrod":"tmavá zlatobyľ","slateblue":"bridlicová modrá","mediumaquamarine":"stredná akvamarínová","lavender":"levanduľa","mediumseagreen":"stredná morská zelená","maroon":"gaštanová hnedá","darkslategray":"tmavá bridlicová sivá","mediumturquoise":"stredná tyrkysová","ghostwhite":"biela (ghost white)","darkblue":"tmavomodrá","mediumvioletred":"stredná fialovočervená","brown":"hnedá","lightgray":"svetlosivá","sandybrown":"piesková hnedá","pink":"ružová","firebrick":"pálená tehla","indigo":"indigo","snow":"snehová","darkorchid":"tmavá orchidea","turquoise":"tyrkysová","chocolate":"čokoládová","springgreen":"jarná zelená","moccasin":"mokasínová","navy":"námornícka","lemonchiffon":"citrónový šifón","teal":"zelenomodrá","floralwhite":"biely kvet","cornflowerblue":"nevädzová modrá","paleturquoise":"bledá tyrkysová","purple":"purpurová","gainsboro":"sivá - gainsboro","plum":"slivková","red":"červená","blue":"modrá","forestgreen":"lesná zelená","darkgreen":"tmavozelená","honeydew":"ambrózia","darkseagreen":"tmavá morská zelená","lightcoral":"svetlá koralová","palevioletred":"bledá fialovo červená","mediumpurple":"stredná purpurová","saddlebrown":"sedlová hnedá","darkmagenta":"tmavá purpurová","thistle":"bodliaková","whitesmoke":"biely dym","wheat":"pšeničná","violet":"fialová","lightskyblue":"svetlá modrá obloha","goldenrod":"zlatobyľ","mediumblue":"stredná modrá","skyblue":"modré nebo","crimson":"karmínová","darksalmon":"tmavá lososová","darkred":"tmavočervená","darkslategrey":"tmavá bridlicová sivá","peru":"peru","lightgrey":"svetlosivá","lightgoldenrodyellow":"svetlá zlatobyľová žltá","blanchedalmond":"bledá mandľová","aliceblue":"modrá (alice)","bisque":"porcelánová","slategray":"bridlicová sivá","palegoldenrod":"bledá zlatobyľová","darkorange":"tmavá oranžová","aquamarine":"akvamarínová","lightgreen":"svetlozelená","burlywood":"drevená hnedá","dodgerblue":"modrá (dodger)","darkgray":"tmavosivá","lightcyan":"svetlá zelenomodrá","powderblue":"prášková modrá","blueviolet":"modro-fialová","orchid":"orchideová","dimgray":"matná sivá","beige":"béžová","fuchsia":"fuchsia","lavenderblush":"rumencová levanduľa","hotpink":"horúca ružová","steelblue":"oceľovomodrá","tomato":"paradajková","lightpink":"svetloružová","limegreen":"limetková zelená","indianred":"indiánska červená","papayawhip":"papájový krém","lightslategray":"svetlá bridlicová sivá","gray":"sivá","mediumorchid":"stredná orchideová","cornsilk":"ôstie kukurice","black":"čierna","seagreen":"morská zelená","darkslateblue":"tmavá bridlicová modrá","khaki":"kaki","lightblue":"svetlomodrá","palegreen":"bledá zelená","azure":"azúrová","peachpuff":"broskyňový nádych","darkolivegreen":"tmavá olivovo zelená","yellowgreen":"žltozelená"} -, -'dojo/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Predchádzajúce voľby","nextMessage":"Ďalšie voľby"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Zrušiť","buttonSave":"Uložiť","itemClose":"Zatvoriť"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_sl.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_sl.js.uncompressed.js deleted file mode 100644 index fcc11280b..000000000 --- a/lib/dojo/nls/tt-rss-layer_sl.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_sl',{ -'dijit/form/nls/validate':{"rangeMessage":"Ta vrednost je izven območja.","invalidMessage":"Vnesena vrednost ni veljavna.","missingMessage":"Ta vrednost je zahtevana."} -, -'dijit/nls/loading':{"loadingState":"Nalaganje ...","errorState":"Oprostite, prišlo je do napake."} -, -'dojo/nls/colors':{"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","transparent":"prosojno","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Prejšnje izbire","nextMessage":"Dodatne izbire"} -, -'dijit/nls/common':{"buttonOk":"V redu","buttonCancel":"Prekliči","buttonSave":"Shrani","itemClose":"Zapri"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_sv.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_sv.js.uncompressed.js deleted file mode 100644 index 5d179927f..000000000 --- a/lib/dojo/nls/tt-rss-layer_sv.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_sv',{ -'dijit/form/nls/validate':{"rangeMessage":"Värdet är utanför intervallet.","invalidMessage":"Det angivna värdet är ogiltigt.","missingMessage":"Värdet är obligatoriskt."} -, -'dijit/nls/loading':{"loadingState":"Läser in...","errorState":"Det uppstod ett fel."} -, -'dojo/nls/colors':{"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","transparent":"transparent","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/cldr/nls/number':{"scientificFormat":"#E0","currencySpacing-afterCurrency-currencyMatch":"[:letter:]","infinity":"∞","list":";","percentSign":"%","minusSign":"−","currencySpacing-beforeCurrency-surroundingMatch":"[:digit:]","decimalFormat-short":"000T","currencySpacing-afterCurrency-insertBetween":" ","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":"×10^"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Föregående alternativ","nextMessage":"Fler alternativ"} -, -'dijit/nls/common':{"buttonOk":"OK","buttonCancel":"Avbryt","buttonSave":"Spara","itemClose":"Stäng"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_th.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_th.js.uncompressed.js deleted file mode 100644 index 003f3d3cc..000000000 --- a/lib/dojo/nls/tt-rss-layer_th.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_th',{ -'dijit/form/nls/validate':{"rangeMessage":"ค่านี้เกินช่วง","invalidMessage":"ค่าที่ป้อนไม่ถูกต้อง","missingMessage":"จำเป็นต้องมีค่านี้"} -, -'dijit/nls/loading':{"loadingState":"กำลังโหลด...","errorState":"ขออภัย เกิดข้อผิดพลาด"} -, -'dojo/nls/colors':{"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","transparent":"สีใส","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/cldr/nls/number':{"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;¤-#,##0.00","currencySpacing-beforeCurrency-currencyMatch":"[:letter:]","perMille":"‰","group":",","percentFormat":"#,##0%","decimalFormat":"#,##0.###","decimal":".","patternDigit":"#","currencySpacing-beforeCurrency-insertBetween":" ","exponential":"E"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"การเลือกก่อนหน้า","nextMessage":"การเลือกเพิ่มเติม"} -, -'dijit/nls/common':{"buttonOk":"ตกลง","buttonCancel":"ยกเลิก","buttonSave":"บันทึก","itemClose":"ปิด"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_tr.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_tr.js.uncompressed.js deleted file mode 100644 index 444d7afe6..000000000 --- a/lib/dojo/nls/tt-rss-layer_tr.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_tr',{ -'dijit/form/nls/validate':{"rangeMessage":"Bu değer aralık dışında.","invalidMessage":"Girilen değer geçersiz.","missingMessage":"Bu değer gerekli."} -, -'dijit/nls/loading':{"loadingState":"Yükleniyor...","errorState":"Üzgünüz, bir hata oluştu"} -, -'dojo/nls/colors':{"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","transparent":"saydam","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"Önceki seçenekler","nextMessage":"Diğer seçenekler"} -, -'dijit/nls/common':{"buttonOk":"Tamam","buttonCancel":"İptal","buttonSave":"Kaydet","itemClose":"Kapat"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_zh-cn.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_zh-cn.js.uncompressed.js deleted file mode 100644 index 957a54efa..000000000 --- a/lib/dojo/nls/tt-rss-layer_zh-cn.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_zh-cn',{ -'dijit/form/nls/validate':{"rangeMessage":"此值超出范围。","invalidMessage":"输入的值无效。","missingMessage":"此值是必需值。"} -, -'dijit/nls/loading':{"loadingState":"正在加载...","errorState":"对不起,发生了错误"} -, -'dojo/nls/colors':{"lightsteelblue":"浅钢蓝色","orangered":"橙红色","midnightblue":"深蓝色","cadetblue":"灰蓝色","seashell":"海贝色","slategrey":"灰石色","coral":"珊瑚色","darkturquoise":"深粉蓝","antiquewhite":"古董白","mediumspringgreen":"间春绿色","transparent":"透明的","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"先前选项","nextMessage":"更多选项"} -, -'dijit/nls/common':{"buttonOk":"确定","buttonCancel":"取消","buttonSave":"保存","itemClose":"关闭"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/tt-rss-layer_zh-tw.js.uncompressed.js b/lib/dojo/nls/tt-rss-layer_zh-tw.js.uncompressed.js deleted file mode 100644 index 14378f4ec..000000000 --- a/lib/dojo/nls/tt-rss-layer_zh-tw.js.uncompressed.js +++ /dev/null @@ -1,13 +0,0 @@ -define('dojo/nls/tt-rss-layer_zh-tw',{ -'dijit/form/nls/validate':{"rangeMessage":"此值超出範圍。","invalidMessage":"輸入的值無效。","missingMessage":"必須提供此值。"} -, -'dijit/nls/loading':{"loadingState":"載入中...","errorState":"抱歉,發生錯誤"} -, -'dojo/nls/colors':{"lightsteelblue":"淡鐵藍色","orangered":"橙紅色","midnightblue":"午夜藍","cadetblue":"軍服藍","seashell":"海貝色","slategrey":"岩灰色","coral":"珊瑚紅","darkturquoise":"暗松石綠","antiquewhite":"米白色","mediumspringgreen":"中春綠色","transparent":"透明","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/cldr/nls/number':{"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"} -, -'dijit/form/nls/ComboBox':{"previousMessage":"前一個選擇項","nextMessage":"其他選擇項"} -, -'dijit/nls/common':{"buttonOk":"確定","buttonCancel":"取消","buttonSave":"儲存","itemClose":"關閉"} -}); \ No newline at end of file diff --git a/lib/dojo/nls/zh-tw/colors.js.uncompressed.js b/lib/dojo/nls/zh-tw/colors.js.uncompressed.js deleted file mode 100644 index 5d8ce27b2..000000000 --- a/lib/dojo/nls/zh-tw/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/zh-tw/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "愛麗絲藍", - antiquewhite: "米白色", - aqua: "水色", - aquamarine: "碧綠色", - azure: "天藍色", - beige: "灰棕色", - bisque: "橘黃色", - black: "黑色", - blanchedalmond: "杏仁白", - blue: "藍色", - blueviolet: "藍紫色", - brown: "褐色", - burlywood: "實木色", - cadetblue: "軍服藍", - chartreuse: "淡黃綠色", - chocolate: "巧克力色", - coral: "珊瑚紅", - cornflowerblue: "矢車菊藍", - cornsilk: "玉米黃", - crimson: "暗深紅色", - cyan: "青色", - darkblue: "暗藍色", - darkcyan: "暗青色", - darkgoldenrod: "暗金菊色", - darkgray: "暗灰色", - darkgreen: "暗綠色", - darkgrey: "暗灰色", // same as darkgray - darkkhaki: "暗卡其色", - darkmagenta: "暗紫紅色", - darkolivegreen: "暗橄欖綠", - darkorange: "暗橙色", - darkorchid: "暗蘭花色", - darkred: "暗紅色", - darksalmon: "暗鮭紅", - darkseagreen: "暗海綠色", - darkslateblue: "暗岩藍色", - darkslategray: "暗岩灰色", - darkslategrey: "暗岩灰色", // same as darkslategray - darkturquoise: "暗松石綠", - darkviolet: "暗紫羅蘭色", - deeppink: "深粉紅色", - deepskyblue: "深天藍色", - dimgray: "昏灰色", - dimgrey: "昏灰色", // same as dimgray - dodgerblue: "道奇藍", - firebrick: "紅磚色", - floralwhite: "花卉白", - forestgreen: "森綠色", - fuchsia: "海棠紅", - gainsboro: "石板灰", - ghostwhite: "幽靈色", - gold: "金色", - goldenrod: "金菊色", - gray: "灰色", - green: "綠色", - greenyellow: "綠黃色", - grey: "灰色", // same as gray - honeydew: "密瓜色", - hotpink: "暖粉紅色", - indianred: "印度紅", - indigo: "靛藍色", - ivory: "象牙色", - khaki: "卡其色", - lavender: "薰衣草紫", - lavenderblush: "薰衣草紫紅", - lawngreen: "草綠色", - lemonchiffon: "奶油黃", - lightblue: "淡藍色", - lightcoral: "淡珊瑚紅", - lightcyan: "淡青色", - lightgoldenrodyellow: "淡金菊黃", - lightgray: "淡灰色", - lightgreen: "淡綠色", - lightgrey: "淡灰色", // same as lightgray - lightpink: "淡粉紅色", - lightsalmon: "淡鮭紅", - lightseagreen: "淡海綠色", - lightskyblue: "淡天藍色", - lightslategray: "淡岩灰色", - lightslategrey: "淡岩灰色", // same as lightslategray - lightsteelblue: "淡鐵藍色", - lightyellow: "淡黃色", - lime: "檸檬色", - limegreen: "檸檬綠", - linen: "亞麻色", - magenta: "紫紅色", - maroon: "栗色", - mediumaquamarine: "中碧綠色", - mediumblue: "中藍色", - mediumorchid: "中蘭紫色", - mediumpurple: "中紫色", - mediumseagreen: "中海綠色", - mediumslateblue: "中岩藍色", - mediumspringgreen: "中春綠色", - mediumturquoise: "中松石綠", - mediumvioletred: "中紫羅蘭紅", - midnightblue: "午夜藍", - mintcream: "薄荷乳白色", - mistyrose: "霧玫瑰色", - moccasin: "鹿皮黃色", - navajowhite: "印地安黃色", - navy: "海軍藍", - oldlace: "舊蕾絲色", - olive: "橄欖色", - olivedrab: "橄欖綠", - orange: "橙色", - orangered: "橙紅色", - orchid: "蘭花色", - palegoldenrod: "灰金菊色", - palegreen: "灰綠色", - paleturquoise: "灰松石綠", - palevioletred: "灰紫羅蘭紅", - papayawhip: "番木瓜色", - peachpuff: "粉撲桃色", - peru: "祕魯色", - pink: "粉紅色", - plum: "李紫色", - powderblue: "粉藍色", - purple: "紫色", - red: "紅色", - rosybrown: "玫瑰褐", - royalblue: "品藍色", - saddlebrown: "鞍褐色", - salmon: "鮭紅色", - sandybrown: "沙褐色", - seagreen: "海綠色", - seashell: "海貝色", - sienna: "黃土赭色", - silver: "銀色", - skyblue: "天藍色", - slateblue: "岩藍色", - slategray: "岩灰色", - slategrey: "岩灰色", // same as slategray - snow: "雪白色", - springgreen: "春綠色", - steelblue: "鐵藍色", - tan: "皮革色", - teal: "深藍綠色", - thistle: "薊色", - tomato: "蕃茄紅", - transparent: "透明", - turquoise: "松石綠", - violet: "紫羅蘭色", - wheat: "小麥色", - white: "白色", - whitesmoke: "白煙色", - yellow: "黃色", - yellowgreen: "黃綠色" -}) -); diff --git a/lib/dojo/nls/zh/colors.js.uncompressed.js b/lib/dojo/nls/zh/colors.js.uncompressed.js deleted file mode 100644 index 4449d4134..000000000 --- a/lib/dojo/nls/zh/colors.js.uncompressed.js +++ /dev/null @@ -1,156 +0,0 @@ -define( -"dojo/nls/zh/colors", ({ -// local representation of all CSS3 named colors, companion to dojo.colors. To be used where descriptive information -// is required for each color, such as a palette widget, and not for specifying color programatically. - //Note: due to the SVG 1.0 spec additions, some of these are alternate spellings for the same color (e.g. gray / grey). - //TODO: should we be using unique rgb values as keys instead and avoid these duplicates, or rely on the caller to do the reverse mapping? - aliceblue: "爱丽丝蓝", - antiquewhite: "古董白", - aqua: "浅绿色", - aquamarine: "碧绿色", - azure: "天蓝色", - beige: "米色", - bisque: "桔黄色", - black: "黑色", - blanchedalmond: "白杏色", - blue: "蓝色", - blueviolet: "蓝紫色", - brown: "棕色", - burlywood: "实木色", - cadetblue: "灰蓝色", - chartreuse: "黄绿色", - chocolate: "巧克力色", - coral: "珊瑚色", - cornflowerblue: "浅蓝色", - cornsilk: "米绸色", - crimson: "绯红色", - cyan: "青蓝色", - darkblue: "深蓝", - darkcyan: "深青绿", - darkgoldenrod: "深金黄", - darkgray: "深灰色", - darkgreen: "深绿色", - darkgrey: "深灰色", // same as darkgray - darkkhaki: "深卡其色", - darkmagenta: "深洋红色", - darkolivegreen: "深橄榄绿", - darkorange: "深橙色", - darkorchid: "深紫色", - darkred: "深红色", - darksalmon: "深橙红", - darkseagreen: "深海藻绿", - darkslateblue: "深青蓝", - darkslategray: "深青灰", - darkslategrey: "深青灰", // same as darkslategray - darkturquoise: "深粉蓝", - darkviolet: "深紫色", - deeppink: "深粉红色", - deepskyblue: "深天蓝色", - dimgray: "暗灰色", - dimgrey: "暗灰色", // same as dimgray - dodgerblue: "闪蓝色", - firebrick: "砖红", - floralwhite: "花白色", - forestgreen: "森林绿", - fuchsia: "紫红色", - gainsboro: "淡灰色", - ghostwhite: "苍白", - gold: "金黄色", - goldenrod: "金麒麟色", - gray: "灰色", - green: "绿色", - greenyellow: "绿黄色", - grey: "灰色", // same as gray - honeydew: "蜜汁色", - hotpink: "深粉红", - indianred: "印度红", - indigo: "靛青", - ivory: "象牙色", - khaki: "卡其色", - lavender: "淡紫色", - lavenderblush: "淡紫红", - lawngreen: "草绿色", - lemonchiffon: "柠檬绸色", - lightblue: "淡蓝色", - lightcoral: "浅珊瑚色", - lightcyan: "浅青色", - lightgoldenrodyellow: "浅金黄色", - lightgray: "浅灰色", - lightgreen: "浅绿色", - lightgrey: "浅灰色", // same as lightgray - lightpink: "浅粉红色", - lightsalmon: "淡橙色", - lightseagreen: "浅海藻绿", - lightskyblue: "浅天蓝色", - lightslategray: "浅青灰", - lightslategrey: "浅青灰", // same as lightslategray - lightsteelblue: "浅钢蓝色", - lightyellow: "浅黄色", - lime: "淡黄绿色", - limegreen: "橙绿色", - linen: "亚麻色", - magenta: "洋红色", - maroon: "栗色", - mediumaquamarine: "间绿色", - mediumblue: "间蓝色", - mediumorchid: "间紫色", - mediumpurple: "间紫色", - mediumseagreen: "间海蓝色", - mediumslateblue: "间暗蓝色", - mediumspringgreen: "间春绿色", - mediumturquoise: "间绿宝石色", - mediumvioletred: "间紫罗兰色", - midnightblue: "深蓝色", - mintcream: "薄荷色", - mistyrose: "浅玫瑰色", - moccasin: "鹿皮色", - navajowhite: "纳瓦白", - navy: "藏青色", - oldlace: "老白色", - olive: "橄榄绿", - olivedrab: "草绿色", - orange: "橙色", - orangered: "橙红色", - orchid: "紫色", - palegoldenrod: "淡金黄色", - palegreen: "淡绿色", - paleturquoise: "苍绿色", - palevioletred: "苍紫罗兰色", - papayawhip: "木瓜色", - peachpuff: "桃色", - peru: "秘鲁色", - pink: "粉红色", - plum: "杨李色", - powderblue: "铁蓝", - purple: "紫色", - red: "红色", - rosybrown: "褐玫瑰红", - royalblue: "品蓝", - saddlebrown: "重褐色", - salmon: "橙红", - sandybrown: "沙褐色", - seagreen: "海绿色", - seashell: "海贝色", - sienna: "赭色", - silver: "银白色", - skyblue: "天蓝色", - slateblue: "石蓝色", - slategray: "灰石色", - slategrey: "灰石色", // same as slategray - snow: "雪白色", - springgreen: "春绿色", - steelblue: "钢蓝色", - tan: "棕褐色", - teal: "水鸭色", - thistle: "蓟色", - tomato: "西红柿色", - transparent: "透明的", - turquoise: "绿宝石色", - violet: "紫色", - wheat: "浅黄色", - white: "白色", - whitesmoke: "烟白色", - yellow: "黄色", - yellowgreen: "黄绿色" -}) -); diff --git a/lib/dojo/number.js.uncompressed.js b/lib/dojo/number.js.uncompressed.js deleted file mode 100644 index c3635df38..000000000 --- a/lib/dojo/number.js.uncompressed.js +++ /dev/null @@ -1,576 +0,0 @@ -define("dojo/number", ["./_base/kernel", "./_base/lang", "./i18n", "./i18n!./cldr/nls/number", "./string", "./regexp"], - function(dojo, lang, i18n, nlsNumber, dstring, dregexp) { - - // module: - // dojo/number - // summary: - // TODOC - -lang.getObject("number", true, dojo); - -/*===== -dojo.number = { - // summary: localized formatting and parsing routines for Number -} - -dojo.number.__FormatOptions = function(){ - // pattern: String? - // override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // with this string. Default value is based on locale. Overriding this property will defeat - // localization. Literal characters in patterns are not supported. - // type: String? - // choose a format type based on the locale from the following: - // decimal, scientific (not yet supported), percent, currency. decimal by default. - // places: Number? - // fixed number of decimal places to show. This overrides any - // information in the provided pattern. - // round: Number? - // 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1 - // means do not round. - // locale: String? - // override the locale used to determine formatting rules - // fractional: Boolean? - // If false, show no decimal places, overriding places and pattern settings. - this.pattern = pattern; - this.type = type; - this.places = places; - this.round = round; - this.locale = locale; - this.fractional = fractional; -} -=====*/ - -dojo.number.format = function(/*Number*/value, /*dojo.number.__FormatOptions?*/options){ - // summary: - // Format a Number as a String, using locale-specific settings - // description: - // Create a string from a Number using a known localized pattern. - // Formatting patterns appropriate to the locale are chosen from the - // [Common Locale Data Repository](http://unicode.org/cldr) as well as the appropriate symbols and - // delimiters. - // If value is Infinity, -Infinity, or is not a valid JavaScript number, return null. - // value: - // the number to be formatted - - options = lang.mixin({}, options || {}); - var locale = i18n.normalizeLocale(options.locale), - bundle = i18n.getLocalization("dojo.cldr", "number", locale); - options.customs = bundle; - var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"]; - if(isNaN(value) || Math.abs(value) == Infinity){ return null; } // null - return dojo.number._applyPattern(value, pattern, options); // String -}; - -//dojo.number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\.0*#*)?/; // not precise, but good enough -dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/; // not precise, but good enough - -dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatOptions?*/options){ - // summary: - // Apply pattern to format value as a string using options. Gives no - // consideration to local customs. - // value: - // the number to be formatted. - // pattern: - // a pattern string as described by - // [unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // options: dojo.number.__FormatOptions? - // _applyPattern is usually called via `dojo.number.format()` which - // populates an extra property in the options parameter, "customs". - // The customs object specifies group and decimal parameters if set. - - //TODO: support escapes - options = options || {}; - var group = options.customs.group, - decimal = options.customs.decimal, - patternList = pattern.split(';'), - positivePattern = patternList[0]; - pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern); - - //TODO: only test against unescaped - if(pattern.indexOf('%') != -1){ - value *= 100; - }else if(pattern.indexOf('\u2030') != -1){ - value *= 1000; // per mille - }else if(pattern.indexOf('\u00a4') != -1){ - group = options.customs.currencyGroup || group;//mixins instead? - decimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead? - pattern = pattern.replace(/\u00a4{1,3}/, function(match){ - var prop = ["symbol", "currency", "displayName"][match.length-1]; - return options[prop] || options.currency || ""; - }); - }else if(pattern.indexOf('E') != -1){ - throw new Error("exponential notation not supported"); - } - - //TODO: support @ sig figs? - var numberPatternRE = dojo.number._numberPatternRE; - var numberPattern = positivePattern.match(numberPatternRE); - if(!numberPattern){ - throw new Error("unable to find a number expression in pattern: "+pattern); - } - 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: - // Rounds to the nearest value with the given number of decimal places, away from zero - // description: - // Rounds to the nearest value with the given number of decimal places, away from zero if equal. - // Similar to Number.toFixed(), but compensates for browser quirks. Rounding can be done by - // fractional increments also, such as the nearest quarter. - // NOTE: Subject to floating point errors. See dojox.math.round for experimental workaround. - // value: - // The number to round - // places: - // The number of decimal places where rounding takes place. Defaults to 0 for whole rounding. - // Must be non-negative. - // increment: - // Rounds next place to nearest value of increment/10. 10 by default. - // example: - // >>> dojo.number.round(-0.5) - // -1 - // >>> dojo.number.round(162.295, 2) - // 162.29 // note floating point error. Should be 162.3 - // >>> dojo.number.round(10.71, 0, 2.5) - // 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 - // is just after the rounding place and is >=5 - var round = 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 round(v, p, m) + (v > 0 ? d : -d); - }; -} - -/*===== -dojo.number.__FormatAbsoluteOptions = function(){ - // decimal: String? - // the decimal separator - // group: String? - // the group separator - // places: Number?|String? - // number of decimal places. the range "n,m" will format to m places. - // round: Number? - // 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1 - // means don't round. - this.decimal = decimal; - this.group = group; - this.places = places; - this.round = round; -} -=====*/ - -dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){ - // summary: - // Apply numeric pattern to absolute value using options. Gives no - // consideration to local customs. - // value: - // the number to be formatted, ignores sign - // pattern: - // the number portion of a pattern (e.g. `#,##0.00`) - options = options || {}; - if(options.places === true){options.places=0;} - if(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit - - var patternParts = pattern.split("."), - comma = typeof options.places == "string" && options.places.indexOf(","), - maxPlaces = options.places; - if(comma){ - maxPlaces = options.places.substring(comma + 1); - }else if(!(maxPlaces >= 0)){ - maxPlaces = (patternParts[1] || []).length; - } - if(!(options.round < 0)){ - value = dojo.number.round(value, maxPlaces, options.round); - } - - var valueParts = String(Math.abs(value)).split("."), - fractional = valueParts[1] || ""; - if(patternParts[1] || options.places){ - if(comma){ - options.places = options.places.substring(0, comma); - } - // Pad fractional with trailing zeros - var pad = options.places !== undefined ? options.places : (patternParts[1] && patternParts[1].lastIndexOf("0") + 1); - if(pad > fractional.length){ - valueParts[1] = dstring.pad(fractional, pad, '0', true); - } - - // Truncate fractional - if(maxPlaces < fractional.length){ - valueParts[1] = fractional.substr(0, maxPlaces); - } - }else{ - if(valueParts[1]){ valueParts.pop(); } - } - - // Pad whole with leading zeros - var patternDigits = patternParts[0].replace(',', ''); - pad = patternDigits.indexOf("0"); - if(pad != -1){ - pad = patternDigits.length - pad; - if(pad > valueParts[0].length){ - valueParts[0] = dstring.pad(valueParts[0], pad); - } - - // Truncate whole - if(patternDigits.indexOf("#") == -1){ - valueParts[0] = valueParts[0].substr(valueParts[0].length - pad); - } - } - - // Add group separators - var index = patternParts[0].lastIndexOf(','), - groupSize, groupSize2; - if(index != -1){ - groupSize = patternParts[0].length - index - 1; - var remainder = patternParts[0].substr(0, index); - index = remainder.lastIndexOf(','); - if(index != -1){ - groupSize2 = remainder.length - index - 1; - } - } - var pieces = []; - for(var whole = valueParts[0]; whole;){ - var off = whole.length - groupSize; - pieces.push((off > 0) ? whole.substr(off) : whole); - whole = (off > 0) ? whole.slice(0, off) : ""; - if(groupSize2){ - groupSize = groupSize2; - delete groupSize2; - } - } - valueParts[0] = pieces.reverse().join(options.group || ","); - - return valueParts.join(options.decimal || "."); -}; - -/*===== -dojo.number.__RegexpOptions = function(){ - // pattern: String? - // override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // with this string. Default value is based on locale. Overriding this property will defeat - // localization. - // type: String? - // choose a format type based on the locale from the following: - // decimal, scientific (not yet supported), percent, currency. decimal by default. - // locale: String? - // override the locale used to determine formatting rules - // strict: Boolean? - // strict parsing, false by default. Strict parsing requires input as produced by the format() method. - // Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators - // places: Number|String? - // number of decimal places to accept: Infinity, a positive number, or - // a range "n,m". Defined by pattern or Infinity if pattern not provided. - this.pattern = pattern; - this.type = type; - this.locale = locale; - this.strict = strict; - this.places = places; -} -=====*/ -dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){ - // summary: - // Builds the regular needed to parse a number - // description: - // Returns regular expression with positive and negative match, group - // and decimal separators - return dojo.number._parseInfo(options).regexp; // String -}; - -dojo.number._parseInfo = function(/*Object?*/options){ - options = options || {}; - var locale = i18n.normalizeLocale(options.locale), - bundle = i18n.getLocalization("dojo.cldr", "number", locale), - pattern = options.pattern || bundle[(options.type || "decimal") + "Format"], -//TODO: memoize? - group = bundle.group, - decimal = bundle.decimal, - factor = 1; - - if(pattern.indexOf('%') != -1){ - factor /= 100; - }else if(pattern.indexOf('\u2030') != -1){ - factor /= 1000; // per mille - }else{ - var isCurrency = pattern.indexOf('\u00a4') != -1; - if(isCurrency){ - group = bundle.currencyGroup || group; - decimal = bundle.currencyDecimal || decimal; - } - } - - //TODO: handle quoted escapes - var patternList = pattern.split(';'); - if(patternList.length == 1){ - patternList.push("-" + patternList[0]); - } - - var re = dregexp.buildGroupRE(patternList, function(pattern){ - pattern = "(?:"+dregexp.escapeString(pattern, '.')+")"; - return pattern.replace(dojo.number._numberPatternRE, function(format){ - var flags = { - signed: false, - separator: options.strict ? group : [group,""], - fractional: options.fractional, - decimal: decimal, - exponent: false - }, - - parts = format.split('.'), - places = options.places; - - // special condition for percent (factor != 1) - // allow decimal places even if not specified in pattern - if(parts.length == 1 && factor != 1){ - parts[1] = "###"; - } - if(parts.length == 1 || places === 0){ - flags.fractional = false; - }else{ - if(places === undefined){ places = options.pattern ? parts[1].lastIndexOf('0') + 1 : Infinity; } - if(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified - if(!options.places && (places < parts[1].length)){ places += "," + parts[1].length; } - flags.places = places; - } - var groups = parts[0].split(','); - if(groups.length > 1){ - flags.groupSize = groups.pop().length; - if(groups.length > 1){ - flags.groupSize2 = groups.pop().length; - } - } - return "("+dojo.number._realNumberRegexp(flags)+")"; - }); - }, true); - - if(isCurrency){ - // substitute the currency symbol for the placeholder in the pattern - re = re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g, function(match, before, target, after){ - var prop = ["symbol", "currency", "displayName"][target.length-1], - symbol = dregexp.escapeString(options[prop] || options.currency || ""); - before = before ? "[\\s\\xa0]" : ""; - after = after ? "[\\s\\xa0]" : ""; - if(!options.strict){ - if(before){before += "*";} - if(after){after += "*";} - return "(?:"+before+symbol+after+")?"; - } - return before+symbol+after; - }); - } - -//TODO: substitute localized sign/percent/permille/etc.? - - // normalize whitespace and return - return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object -}; - -/*===== -dojo.number.__ParseOptions = function(){ - // pattern: String? - // override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // with this string. Default value is based on locale. Overriding this property will defeat - // localization. Literal characters in patterns are not supported. - // type: String? - // choose a format type based on the locale from the following: - // decimal, scientific (not yet supported), percent, currency. decimal by default. - // locale: String? - // override the locale used to determine formatting rules - // strict: Boolean? - // strict parsing, false by default. Strict parsing requires input as produced by the format() method. - // Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators - // fractional: Boolean?|Array? - // Whether to include the fractional portion, where the number of decimal places are implied by pattern - // or explicit 'places' parameter. The value [true,false] makes the fractional portion optional. - this.pattern = pattern; - this.type = type; - this.locale = locale; - this.strict = strict; - this.fractional = fractional; -} -=====*/ -dojo.number.parse = function(/*String*/expression, /*dojo.number.__ParseOptions?*/options){ - // summary: - // Convert a properly formatted string to a primitive Number, using - // locale-specific settings. - // description: - // Create a Number from a string using a known localized pattern. - // Formatting patterns are chosen appropriate to the locale - // and follow the syntax described by - // [unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // Note that literal characters in patterns are not supported. - // expression: - // A string representation of a Number - var info = dojo.number._parseInfo(options), - results = (new RegExp("^"+info.regexp+"$")).exec(expression); - if(!results){ - return NaN; //NaN - } - var absoluteMatch = results[1]; // match for the positive expression - if(!results[1]){ - if(!results[2]){ - return NaN; //NaN - } - // matched the negative pattern - absoluteMatch =results[2]; - info.factor *= -1; - } - - // Transform it to something Javascript can parse as a number. Normalize - // decimal point and strip out group separators or alternate forms of whitespace - absoluteMatch = absoluteMatch. - replace(new RegExp("["+info.group + "\\s\\xa0"+"]", "g"), ""). - replace(info.decimal, "."); - // Adjust for negative sign, percent, etc. as necessary - return absoluteMatch * info.factor; //Number -}; - -/*===== -dojo.number.__RealNumberRegexpFlags = function(){ - // places: Number? - // The integer number of decimal places or a range given as "n,m". If - // not given, the decimal part is optional and the number of places is - // unlimited. - // decimal: String? - // A string for the character used as the decimal point. Default - // is ".". - // fractional: Boolean?|Array? - // Whether decimal places are used. Can be true, false, or [true, - // false]. Default is [true, false] which means optional. - // exponent: Boolean?|Array? - // Express in exponential notation. Can be true, false, or [true, - // false]. Default is [true, false], (i.e. will match if the - // exponential part is present are not). - // eSigned: Boolean?|Array? - // The leading plus-or-minus sign on the exponent. Can be true, - // false, or [true, false]. Default is [true, false], (i.e. will - // match if it is signed or unsigned). flags in regexp.integer can be - // applied. - this.places = places; - this.decimal = decimal; - this.fractional = fractional; - this.exponent = exponent; - this.eSigned = eSigned; -} -=====*/ - -dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*/flags){ - // summary: - // Builds a regular expression to match a real number in exponential - // notation - - // assign default values to missing parameters - flags = flags || {}; - //TODO: use mixin instead? - if(!("places" in flags)){ flags.places = Infinity; } - if(typeof flags.decimal != "string"){ flags.decimal = "."; } - if(!("fractional" in flags) || /^0/.test(flags.places)){ flags.fractional = [true, false]; } - if(!("exponent" in flags)){ flags.exponent = [true, false]; } - if(!("eSigned" in flags)){ flags.eSigned = [true, false]; } - - var integerRE = dojo.number._integerRegexp(flags), - decimalRE = dregexp.buildGroupRE(flags.fractional, - function(q){ - var re = ""; - if(q && (flags.places!==0)){ - re = "\\" + flags.decimal; - if(flags.places == Infinity){ - re = "(?:" + re + "\\d+)?"; - }else{ - re += "\\d{" + flags.places + "}"; - } - } - return re; - }, - true - ); - - var exponentRE = dregexp.buildGroupRE(flags.exponent, - function(q){ - if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; } - return ""; - } - ); - - 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 = dregexp.buildGroupRE(flags.signed, - function(q){ return q ? "[-+]" : ""; }, - true - ); - - var numberRE = dregexp.buildGroupRE(flags.separator, - function(sep){ - if(!sep){ - return "(?:\\d+)"; - } - - sep = dregexp.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 -}; - -return dojo.number; -}); diff --git a/lib/dojo/on.js.uncompressed.js b/lib/dojo/on.js.uncompressed.js deleted file mode 100644 index 2d4af3ca4..000000000 --- a/lib/dojo/on.js.uncompressed.js +++ /dev/null @@ -1,474 +0,0 @@ -define("dojo/on", ["./has!dom-addeventlistener?:./aspect", "./_base/kernel", "./has"], function(aspect, dojo, has){ - // summary: - // The export of this module is a function that provides core event listening functionality. With this function - // you can provide a target, event type, and listener to be notified of - // future matching events that are fired. - // target: Element|Object - // This is the target object or DOM element that to receive events from - // type: String|Function - // This is the name of the event to listen for or an extension event type. - // listener: Function - // This is the function that should be called when the event fires. - // returns: Object - // An object with a remove() method that can be used to stop listening for this - // event. - // description: - // To listen for "click" events on a button node, we can do: - // | define(["dojo/on"], function(listen){ - // | on(button, "click", clickHandler); - // | ... - // Evented JavaScript objects can also have their own events. - // | var obj = new Evented; - // | on(obj, "foo", fooHandler); - // And then we could publish a "foo" event: - // | on.emit(obj, "foo", {key: "value"}); - // We can use extension events as well. For example, you could listen for a tap gesture: - // | define(["dojo/on", "dojo/gesture/tap", function(listen, tap){ - // | on(button, tap, tapHandler); - // | ... - // which would trigger fooHandler. Note that for a simple object this is equivalent to calling: - // | obj.onfoo({key:"value"}); - // If you use on.emit on a DOM node, it will use native event dispatching when possible. - - "use strict"; - if(1){ // check to make sure we are in a browser, this module should work anywhere - var major = window.ScriptEngineMajorVersion; - has.add("jscript", major && (major() + ScriptEngineMinorVersion() / 10)); - has.add("event-orientationchange", has("touch") && !has("android")); // TODO: how do we detect this? - } - var on = function(target, type, listener, dontFix){ - if(target.on){ - // delegate to the target's on() method, so it can handle it's own listening if it wants - return target.on(type, listener); - } - // delegate to main listener code - return on.parse(target, type, listener, addListener, dontFix, this); - }; - on.pausable = function(target, type, listener, dontFix){ - // summary: - // This function acts the same as on(), but with pausable functionality. The - // returned signal object has pause() and resume() functions. Calling the - // pause() method will cause the listener to not be called for future events. Calling the - // resume() method will cause the listener to again be called for future events. - var paused; - var signal = on(target, type, function(){ - if(!paused){ - return listener.apply(this, arguments); - } - }, dontFix); - signal.pause = function(){ - paused = true; - }; - signal.resume = function(){ - paused = false; - }; - return signal; - }; - on.once = function(target, type, listener, dontFix){ - // summary: - // This function acts the same as on(), but will only call the listener once. The - // listener will be called for the first - // event that takes place and then listener will automatically be removed. - var signal = on(target, type, function(){ - // remove this listener - signal.remove(); - // proceed to call the listener - return listener.apply(this, arguments); - }); - return signal; - }; - on.parse = function(target, type, listener, addListener, dontFix, matchesTarget){ - if(type.call){ - // event handler function - // on(node, dojo.touch.press, touchListener); - return type.call(matchesTarget, target, listener); - } - - if(type.indexOf(",") > -1){ - // we allow comma delimited event names, so you can register for multiple events at once - var events = type.split(/\s*,\s*/); - var handles = []; - var i = 0; - var eventName; - while(eventName = events[i++]){ - handles.push(addListener(target, eventName, listener, dontFix, matchesTarget)); - } - handles.remove = function(){ - for(var i = 0; i < handles.length; i++){ - handles[i].remove(); - } - }; - return handles; - } - return addListener(target, type, listener, dontFix, matchesTarget) - }; - var touchEvents = /^touch/; - function addListener(target, type, listener, dontFix, matchesTarget){ - // event delegation: - var selector = type.match(/(.*):(.*)/); - // if we have a selector:event, the last one is interpreted as an event, and we use event delegation - if(selector){ - type = selector[2]; - selector = selector[1]; - // create the extension event for selectors and directly call it - return on.selector(selector, type).call(matchesTarget, target, listener); - } - // test to see if it a touch event right now, so we don't have to do it every time it fires - if(has("touch")){ - if(touchEvents.test(type)){ - // touch event, fix it - listener = fixTouchListener(listener); - } - if(!has("event-orientationchange") && (type == "orientationchange")){ - //"orientationchange" not supported <= Android 2.1, - //but works through "resize" on window - type = "resize"; - target = window; - listener = fixTouchListener(listener); - } - } - // normal path, the target is |this| - if(target.addEventListener){ - // the target has addEventListener, which should be used if available (might or might not be a node, non-nodes can implement this method as well) - // check for capture conversions - var capture = type in captures; - target.addEventListener(capture ? captures[type] : type, listener, capture); - // create and return the signal - return { - remove: function(){ - target.removeEventListener(type, listener, capture); - } - }; - } - type = "on" + type; - if(fixAttach && target.attachEvent){ - return fixAttach(target, type, listener); - } - throw new Error("Target must be an event emitter"); - } - - on.selector = function(selector, eventType, children){ - // summary: - // Creates a new extension event with event delegation. This is based on - // the provided event type (can be extension event) that - // only calls the listener when the CSS selector matches the target of the event. - // selector: - // The CSS selector to use for filter events and determine the |this| of the event listener. - // eventType: - // The event to listen for - // children: - // Indicates if children elements of the selector should be allowed. This defaults to - // true (except in the case of normally non-bubbling events like mouse.enter, in which case it defaults to false). - // example: - // define(["dojo/on", "dojo/mouse"], function(listen, mouse){ - // on(node, on.selector(".my-class", mouse.enter), handlerForMyHover); - return function(target, listener){ - var matchesTarget = this; - var bubble = eventType.bubble; - if(bubble){ - // the event type doesn't naturally bubble, but has a bubbling form, use that - eventType = bubble; - }else if(children !== false){ - // for normal bubbling events we default to allowing children of the selector - children = true; - } - return on(target, eventType, function(event){ - var eventTarget = event.target; - // see if we have a valid matchesTarget or default to dojo.query - matchesTarget = matchesTarget && matchesTarget.matches ? matchesTarget : dojo.query; - // there is a selector, so make sure it matches - while(!matchesTarget.matches(eventTarget, selector, target)){ - if(eventTarget == target || !children || !(eventTarget = eventTarget.parentNode)){ // intentional assignment - return; - } - } - return listener.call(eventTarget, event); - }); - }; - }; - - function syntheticPreventDefault(){ - this.cancelable = false; - } - function syntheticStopPropagation(){ - this.bubbles = false; - } - var slice = [].slice, - syntheticDispatch = on.emit = function(target, type, event){ - // summary: - // Fires an event on the target object. - // target: - // The target object to fire the event on. This can be a DOM element or a plain - // JS object. If the target is a DOM element, native event emiting mechanisms - // are used when possible. - // type: - // The event type name. You can emulate standard native events like "click" and - // "mouseover" or create custom events like "open" or "finish". - // event: - // An object that provides the properties for the event. See https://developer.mozilla.org/en/DOM/event.initEvent - // for some of the properties. These properties are copied to the event object. - // Of particular importance are the cancelable and bubbles properties. The - // cancelable property indicates whether or not the event has a default action - // that can be cancelled. The event is cancelled by calling preventDefault() on - // the event object. The bubbles property indicates whether or not the - // event will bubble up the DOM tree. If bubbles is true, the event will be called - // on the target and then each parent successively until the top of the tree - // is reached or stopPropagation() is called. Both bubbles and cancelable - // default to false. - // returns: - // If the event is cancelable and the event is not cancelled, - // emit will return true. If the event is cancelable and the event is cancelled, - // emit will return false. - // details: - // Note that this is designed to emit events for listeners registered through - // dojo/on. It should actually work with any event listener except those - // added through IE's attachEvent (IE8 and below's non-W3C event emiting - // doesn't support custom event types). It should work with all events registered - // through dojo/on. Also note that the emit method does do any default - // action, it only returns a value to indicate if the default action should take - // place. For example, emiting a keypress event would not cause a character - // to appear in a textbox. - // example: - // To fire our own click event - // | on.emit(dojo.byId("button"), "click", { - // | cancelable: true, - // | bubbles: true, - // | screenX: 33, - // | screenY: 44 - // | }); - // We can also fire our own custom events: - // | on.emit(dojo.byId("slider"), "slide", { - // | cancelable: true, - // | bubbles: true, - // | direction: "left-to-right" - // | }); - var args = slice.call(arguments, 2); - var method = "on" + type; - if("parentNode" in target){ - // node (or node-like), create event controller methods - var newEvent = args[0] = {}; - for(var i in event){ - newEvent[i] = event[i]; - } - newEvent.preventDefault = syntheticPreventDefault; - newEvent.stopPropagation = syntheticStopPropagation; - newEvent.target = target; - newEvent.type = type; - event = newEvent; - } - do{ - // call any node which has a handler (note that ideally we would try/catch to simulate normal event propagation but that causes too much pain for debugging) - target[method] && target[method].apply(target, args); - // and then continue up the parent node chain if it is still bubbling (if started as bubbles and stopPropagation hasn't been called) - }while(event && event.bubbles && (target = target.parentNode)); - return event && event.cancelable && event; // if it is still true (was cancelable and was cancelled), return the event to indicate default action should happen - }; - var captures = {}; - if(has("dom-addeventlistener")){ - // normalize focusin and focusout - captures = { - focusin: "focus", - focusout: "blur" - }; - if(has("opera")){ - captures.keydown = "keypress"; // this one needs to be transformed because Opera doesn't support repeating keys on keydown (and keypress works because it incorrectly fires on all keydown events) - } - - // emiter that works with native event handling - on.emit = function(target, type, event){ - if(target.dispatchEvent && document.createEvent){ - // use the native event emiting mechanism if it is available on the target object - // create a generic event - // we could create branch into the different types of event constructors, but - // that would be a lot of extra code, with little benefit that I can see, seems - // best to use the generic constructor and copy properties over, making it - // easy to have events look like the ones created with specific initializers - var nativeEvent = document.createEvent("HTMLEvents"); - nativeEvent.initEvent(type, !!event.bubbles, !!event.cancelable); - // and copy all our properties over - for(var i in event){ - var value = event[i]; - if(!(i in nativeEvent)){ - nativeEvent[i] = event[i]; - } - } - return target.dispatchEvent(nativeEvent) && nativeEvent; - } - return syntheticDispatch.apply(on, arguments); // emit for a non-node - }; - }else{ - // no addEventListener, basically old IE event normalization - on._fixEvent = function(evt, sender){ - // summary: - // normalizes properties on the event object including event - // bubbling methods, keystroke normalization, and x/y positions - // evt: - // native event object - // sender: - // node to treat as "currentTarget" - if(!evt){ - var w = sender && (sender.ownerDocument || sender.document || sender).parentWindow || window; - evt = w.event; - } - if(!evt){return(evt);} - if(!evt.target){ // check to see if it has been fixed yet - evt.target = evt.srcElement; - evt.currentTarget = (sender || evt.srcElement); - if(evt.type == "mouseover"){ - evt.relatedTarget = evt.fromElement; - } - if(evt.type == "mouseout"){ - evt.relatedTarget = evt.toElement; - } - if(!evt.stopPropagation){ - evt.stopPropagation = stopPropagation; - evt.preventDefault = preventDefault; - } - switch(evt.type){ - case "keypress": - var c = ("charCode" in evt ? evt.charCode : evt.keyCode); - if (c==10){ - // CTRL-ENTER is CTRL-ASCII(10) on IE, but CTRL-ENTER on Mozilla - c=0; - evt.keyCode = 13; - }else if(c==13||c==27){ - c=0; // Mozilla considers ENTER and ESC non-printable - }else if(c==3){ - c=99; // Mozilla maps CTRL-BREAK to CTRL-c - } - // Mozilla sets keyCode to 0 when there is a charCode - // but that stops the event on IE. - evt.charCode = c; - _setKeyChar(evt); - break; - } - } - return evt; - }; - var IESignal = function(handle){ - this.handle = handle; - }; - IESignal.prototype.remove = function(){ - delete _dojoIEListeners_[this.handle]; - }; - var fixListener = function(listener){ - // this is a minimal function for closing on the previous listener with as few as variables as possible - return function(evt){ - evt = on._fixEvent(evt, this); - return listener.call(this, evt); - } - } - var fixAttach = function(target, type, listener){ - listener = fixListener(listener); - if(((target.ownerDocument ? target.ownerDocument.parentWindow : target.parentWindow || target.window || window) != top || - has("jscript") < 5.8) && - !has("config-_allow_leaks")){ - // IE will leak memory on certain handlers in frames (IE8 and earlier) and in unattached DOM nodes for JScript 5.7 and below. - // Here we use global redirection to solve the memory leaks - if(typeof _dojoIEListeners_ == "undefined"){ - _dojoIEListeners_ = []; - } - var emiter = target[type]; - if(!emiter || !emiter.listeners){ - var oldListener = emiter; - target[type] = emiter = Function('event', 'var callee = arguments.callee; for(var i = 0; i<callee.listeners.length; i++){var listener = _dojoIEListeners_[callee.listeners[i]]; if(listener){listener.call(this,event);}}'); - emiter.listeners = []; - emiter.global = this; - if(oldListener){ - emiter.listeners.push(_dojoIEListeners_.push(oldListener) - 1); - } - } - var handle; - emiter.listeners.push(handle = (emiter.global._dojoIEListeners_.push(listener) - 1)); - return new IESignal(handle); - } - return aspect.after(target, type, listener, true); - }; - - var _setKeyChar = function(evt){ - evt.keyChar = evt.charCode ? String.fromCharCode(evt.charCode) : ''; - evt.charOrCode = evt.keyChar || evt.keyCode; - }; - // Called in Event scope - var stopPropagation = function(){ - this.cancelBubble = true; - }; - var preventDefault = on._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 - // combinations. If you still need to access the key upstream, bubbledKeyCode is - // provided as a workaround. - this.bubbledKeyCode = this.keyCode; - if(this.ctrlKey){ - try{ - // squelch errors when keyCode is read-only - // (e.g. if keyCode is ctrl or shift) - this.keyCode = 0; - }catch(e){ - } - } - this.returnValue = false; - }; - } - if(has("touch")){ - var Event = function (){}; - var windowOrientation = window.orientation; - var fixTouchListener = function(listener){ - return function(originalEvent){ - //Event normalization(for ontouchxxx and resize): - //1.incorrect e.pageX|pageY in iOS - //2.there are no "e.rotation", "e.scale" and "onorientationchange" in Andriod - //3.More TBD e.g. force | screenX | screenX | clientX | clientY | radiusX | radiusY - - // see if it has already been corrected - var event = originalEvent.corrected; - if(!event){ - var type = originalEvent.type; - try{ - delete originalEvent.type; // on some JS engines (android), deleting properties make them mutable - }catch(e){} - if(originalEvent.type){ - // deleting properties doesn't work (older iOS), have to use delegation - Event.prototype = originalEvent; - var event = new Event; - // have to delegate methods to make them work - event.preventDefault = function(){ - originalEvent.preventDefault(); - }; - event.stopPropagation = function(){ - originalEvent.stopPropagation(); - }; - }else{ - // deletion worked, use property as is - event = originalEvent; - event.type = type; - } - originalEvent.corrected = event; - if(type == 'resize'){ - if(windowOrientation == window.orientation){ - return null;//double tap causes an unexpected 'resize' in Andriod - } - windowOrientation = window.orientation; - event.type = "orientationchange"; - return listener.call(this, event); - } - // We use the original event and augment, rather than doing an expensive mixin operation - if(!("rotation" in event)){ // test to see if it has rotation - event.rotation = 0; - event.scale = 1; - } - //use event.changedTouches[0].pageX|pageY|screenX|screenY|clientX|clientY|target - var firstChangeTouch = event.changedTouches[0]; - for(var i in firstChangeTouch){ // use for-in, we don't need to have dependency on dojo/_base/lang here - delete event[i]; // delete it first to make it mutable - event[i] = firstChangeTouch[i]; - } - } - return listener.call(this, event); - }; - }; - } - return on; -}); diff --git a/lib/dojo/parser.js.uncompressed.js b/lib/dojo/parser.js.uncompressed.js deleted file mode 100644 index 6d340fc24..000000000 --- a/lib/dojo/parser.js.uncompressed.js +++ /dev/null @@ -1,594 +0,0 @@ -define( - "dojo/parser", ["./_base/kernel", "./_base/lang", "./_base/array", "./_base/html", "./_base/window", "./_base/url", - "./_base/json", "./aspect", "./date/stamp", "./query", "./on", "./ready"], - function(dojo, dlang, darray, dhtml, dwindow, _Url, djson, aspect, dates, query, don){ - -// module: -// dojo/parser -// summary: -// The Dom/Widget parsing package - -new Date("X"); // workaround for #11279, new Date("") == NaN - -var features = { - // Feature detection for when node.attributes only lists the attributes specified in the markup - // rather than old IE/quirks behavior where it lists every default value too - "dom-attributes-explicit": document.createElement("div").attributes.length < 40 -}; -function has(feature){ - return features[feature]; -} - - -dojo.parser = new function(){ - // summary: - // The Dom/Widget parsing package - - var _nameMap = { - // Map from widget name (ex: "dijit.form.Button") to structure mapping - // lowercase version of attribute names to the version in the widget ex: - // { - // label: "label", - // onclick: "onClick" - // } - }; - function getNameMap(proto){ - // summary: - // Returns map from lowercase name to attribute name in class, ex: {onclick: "onClick"} - var map = {}; - for(var name in proto){ - if(name.charAt(0)=="_"){ continue; } // skip internal properties - map[name.toLowerCase()] = name; - } - return map; - } - // 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). - aspect.after(dlang, "extend", function(){ - _nameMap = {}; - }, true); - - // Map from widget name (ex: "dijit.form.Button") to constructor - var _ctorMap = {}; - - 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(attrData + "args") || script.getAttribute("args")); - if(argsStr){ - darray.forEach(argsStr.split(/\s*,\s*/), function(part, idx){ - preamble += "var "+part+" = arguments["+idx+"]; "; - }); - } - var withStr = script.getAttribute("with"); - if(withStr && withStr.length){ - darray.forEach(withStr.split(/\s*,\s*/), function(part){ - preamble += "with("+part+"){"; - suffix += "}"; - }); - } - return new Function(preamble+script.innerHTML+suffix); - }; - - this.instantiate = /*====== dojo.parser.instantiate= ======*/function(nodes, mixin, args){ - // summary: - // Takes array of nodes, and turns them into class instances and - // potentially calls a startup method to allow them to connect with - // any children. - // nodes: Array - // Array of nodes or objects like - // | { - // | type: "dijit.form.Button", - // | node: DOMNode, - // | scripts: [ ... ], // array of <script type="dojo/..."> children of node - // | inherited: { ... } // settings inherited from ancestors like dir, theme, etc. - // | } - // mixin: Object? - // An object that will be mixed in with each node in the array. - // Values in the mixin will override values in the node, if they - // exist. - // args: Object? - // An object used to hold kwArgs for instantiation. - // See parse.args argument for details. - - var thelist = [], - mixin = mixin||{}; - args = args||{}; - - // Precompute names of special attributes we are looking for - // TODO: for 2.0 default to data-dojo- regardless of scopeName (or maybe scopeName won't exist in 2.0) - var dojoType = (args.scope || dojo._scopeName) + "Type", // typically "dojoType" - attrData = "data-" + (args.scope || dojo._scopeName) + "-",// typically "data-dojo-" - dataDojoType = attrData + "type", // typically "data-dojo-type" - dataDojoProps = attrData + "props", // typically "data-dojo-props" - dataDojoAttachPoint = attrData + "attach-point", - dataDojoAttachEvent = attrData + "attach-event", - dataDojoId = attrData + "id"; - - // And make hash to quickly check if a given attribute is special, and to map the name to something friendly - var specialAttrs = {}; - darray.forEach([dataDojoProps, dataDojoType, dojoType, dataDojoId, "jsId", dataDojoAttachPoint, - dataDojoAttachEvent, "dojoAttachPoint", "dojoAttachEvent", "class", "style"], function(name){ - specialAttrs[name.toLowerCase()] = name.replace(args.scope, "dojo"); - }); - - darray.forEach(nodes, function(obj){ - if(!obj){ return; } - - var node = obj.node || obj, - type = dojoType in mixin ? mixin[dojoType] : obj.node ? obj.type : (node.getAttribute(dataDojoType) || node.getAttribute(dojoType)), - ctor = _ctorMap[type] || (_ctorMap[type] = dlang.getObject(type)), - proto = ctor && ctor.prototype; - if(!ctor){ - throw new Error("Could not load class '" + type); - } - - // 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 = {}; - - if(args.defaults){ - // settings for the document itself (or whatever subtree is being parsed) - dlang.mixin(params, args.defaults); - } - if(obj.inherited){ - // settings from dir=rtl or lang=... on a node above this node - dlang.mixin(params, obj.inherited); - } - - // Get list of attributes explicitly listed in the markup - var attributes; - if(has("dom-attributes-explicit")){ - // Standard path to get list of user specified attributes - attributes = node.attributes; - }else{ - // Special path for IE, avoid (sometimes >100) bogus entries in node.attributes - var clone = /^input$|^img$/i.test(node.nodeName) ? node : node.cloneNode(false), - attrs = clone.outerHTML.replace(/=[^\s"']+|="[^"]*"|='[^']*'/g, "").replace(/^\s*<[a-zA-Z0-9]*/, "").replace(/>.*$/, ""); - - attributes = darray.map(attrs.split(/\s+/), function(name){ - var lcName = name.toLowerCase(); - return { - name: name, - // getAttribute() doesn't work for button.value, returns innerHTML of button. - // but getAttributeNode().value doesn't work for the form.encType or li.value - value: (node.nodeName == "LI" && name == "value") || lcName == "enctype" ? - node.getAttribute(lcName) : node.getAttributeNode(lcName).value, - specified: true - }; - }); - } - - // Read in attributes and process them, including data-dojo-props, data-dojo-type, - // dojoAttachPoint, etc., as well as normal foo=bar attributes. - var i=0, item; - while(item = attributes[i++]){ - if(!item || !item.specified){ - continue; - } - - var name = item.name, - lcName = name.toLowerCase(), - value = item.value; - - if(lcName in specialAttrs){ - switch(specialAttrs[lcName]){ - - // Data-dojo-props. Save for later to make sure it overrides direct foo=bar settings - case "data-dojo-props": - var extra = value; - break; - - // data-dojo-id or jsId. TODO: drop jsId in 2.0 - case "data-dojo-id": - case "jsId": - var jsname = value; - break; - - // For the benefit of _Templated - case "data-dojo-attach-point": - case "dojoAttachPoint": - params.dojoAttachPoint = value; - break; - case "data-dojo-attach-event": - case "dojoAttachEvent": - params.dojoAttachEvent = value; - break; - - // Special parameter handling needed for IE - case "class": - params["class"] = node.className; - break; - case "style": - params["style"] = node.style && node.style.cssText; - break; - } - }else{ - // Normal attribute, ex: value="123" - - // Find attribute in widget corresponding to specified name. - // May involve case conversion, ex: onclick --> onClick - if(!(name in proto)){ - var map = (_nameMap[type] || (_nameMap[type] = getNameMap(proto))); - name = map[lcName] || name; - } - - // Set params[name] to value, doing type conversion - if(name in proto){ - switch(typeof proto[name]){ - case "string": - params[name] = value; - break; - case "number": - params[name] = value.length ? Number(value) : NaN; - break; - case "boolean": - // for checked/disabled value might be "" or "checked". interpret as true. - params[name] = value.toLowerCase() != "false"; - break; - case "function": - if(value === "" || value.search(/[^\w\.]+/i) != -1){ - // The user has specified some text for a function like "return x+5" - params[name] = new Function(value); - }else{ - // The user has specified the name of a function like "myOnClick" - // or a single word function "return" - params[name] = dlang.getObject(value, false) || new Function(value); - } - break; - default: - var pVal = proto[name]; - params[name] = - (pVal && "length" in pVal) ? (value ? value.split(/\s*,\s*/) : []) : // array - (pVal instanceof Date) ? - (value == "" ? new Date("") : // the NaN of dates - value == "now" ? new Date() : // current date - dates.fromISOString(value)) : - (pVal instanceof dojo._Url) ? (dojo.baseUrl + value) : - djson.fromJson(value); - } - }else{ - params[name] = value; - } - } - } - - // Mix things found in data-dojo-props into the params, overriding any direct settings - if(extra){ - try{ - extra = djson.fromJson.call(args.propsThis, "{" + extra + "}"); - dlang.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 + "'"); - } - } - - // Any parameters specified in "mixin" override everything else. - dlang.mixin(params, mixin); - - var scripts = obj.node ? obj.scripts : (ctor && (ctor._noScript || proto._noScript) ? [] : - query("> script[type^='dojo/']", node)); - - // Process <script type="dojo/*"> script tags - // <script type="dojo/method" event="foo"> tags are added to params, and passed to - // the widget on instantiation. - // <script type="dojo/method"> tags (with no event) are executed after instantiation - // <script type="dojo/connect" data-dojo-event="foo"> tags are dojo.connected after instantiation - // <script type="dojo/watch" data-dojo-prop="foo"> tags are dojo.watch after instantiation - // <script type="dojo/on" data-dojo-event="foo"> tags are dojo.on after instantiation - // note: dojo/* script tags cannot exist in self closing widgets, like <input /> - var connects = [], // functions to connect after instantiation - calls = [], // functions to call after instantiation - watch = [], //functions to watch after instantiation - on = []; //functions to on after instantiation - - if(scripts){ - for(i=0; i<scripts.length; i++){ - var script = scripts[i]; - node.removeChild(script); - // FIXME: drop event="" support in 2.0. use data-dojo-event="" instead - var event = (script.getAttribute(attrData + "event") || script.getAttribute("event")), - prop = script.getAttribute(attrData + "prop"), - type = script.getAttribute("type"), - nf = this._functionFromScript(script, attrData); - if(event){ - if(type == "dojo/connect"){ - connects.push({event: event, func: nf}); - }else if(type == "dojo/on"){ - on.push({event: event, func: nf}); - }else{ - params[event] = nf; - } - }else if(type == "dojo/watch"){ - watch.push({prop: prop, func: nf}); - }else{ - calls.push(nf); - } - } - } - - // create the instance - var markupFactory = ctor.markupFactory || proto.markupFactory; - var instance = markupFactory ? markupFactory(params, node, ctor) : new ctor(params, node); - thelist.push(instance); - - // map it to the JS namespace if that makes sense - if(jsname){ - dlang.setObject(jsname, instance); - } - - // process connections and startup functions - for(i=0; i<connects.length; i++){ - aspect.after(instance, connects[i].event, dojo.hitch(instance, connects[i].func), true); - } - for(i=0; i<calls.length; i++){ - calls[i].call(instance); - } - for(i=0; i<watch.length; i++){ - instance.watch(watch[i].prop, watch[i].func); - } - for(i=0; i<on.length; i++){ - don(instance, on[i].event, on[i].func); - } - }, this); - - // Call startup on each top level instance if it makes sense (as for - // widgets). Parent widgets will recursively call startup on their - // (non-top level) children - if(!mixin._started){ - darray.forEach(thelist, function(instance){ - if( !args.noStart && instance && - dlang.isFunction(instance.startup) && - !instance._started - ){ - instance.startup(); - } - }); - } - return thelist; - }; - - this.parse = /*====== dojo.parser.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 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 instantiate 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 - // `rootNode` member, that is used. - // - // args: Object - // a kwArgs object passed along to instantiate() - // - // * noStart: Boolean? - // when set will prevent the parser from calling .startup() - // when locating the nodes. - // * rootNode: DomNode? - // identical to the function's `rootNode` argument, though - // 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._WidgetsInTemplateMixin` - // - // example: - // Parse all widgets on a page: - // | dojo.parser.parse(); - // - // example: - // Parse all classes within the node with id="foo" - // | dojo.parser.parse(dojo.byId('foo')); - // - // example: - // Parse all classes in a page, but do not call .startup() on any - // child - // | dojo.parser.parse({ noStart: true }) - // - // example: - // 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 }); - - // determine the root node based on the passed arguments. - var root; - if(!args && rootNode && rootNode.rootNode){ - args = rootNode; - root = args.rootNode; - }else{ - root = rootNode; - } - root = root ? dhtml.byId(root) : dwindow.body(); - args = args || {}; - - var dojoType = (args.scope || dojo._scopeName) + "Type", // typically "dojoType" - attrData = "data-" + (args.scope || dojo._scopeName) + "-", // typically "data-dojo-" - dataDojoType = attrData + "type", // typically "data-dojo-type" - dataDojoTextDir = attrData + "textdir"; // typically "data-dojo-textdir" - - // List of all nodes on page w/dojoType specified - var list = []; - - // Info on DOMNode currently being processed - var node = root.firstChild; - - // Info on parent of DOMNode currently being processed - // - inherited: dir, lang, and textDir setting of parent, or inherited by parent - // - parent: pointer to identical structure for my parent (or null if no parent) - // - scripts: if specified, collects <script type="dojo/..."> type nodes from children - var inherited = args && args.inherited; - if(!inherited){ - function findAncestorAttr(node, attr){ - return (node.getAttribute && node.getAttribute(attr)) || - (node !== dwindow.doc && node !== dwindow.doc.documentElement && node.parentNode ? findAncestorAttr(node.parentNode, attr) : null); - } - inherited = { - dir: findAncestorAttr(root, "dir"), - lang: findAncestorAttr(root, "lang"), - textDir: findAncestorAttr(root, dataDojoTextDir) - }; - for(var key in inherited){ - if(!inherited[key]){ delete inherited[key]; } - } - } - var parent = { - inherited: inherited - }; - - // For collecting <script type="dojo/..."> type nodes (when null, we don't need to collect) - var scripts; - - // when true, only look for <script type="dojo/..."> tags, and don't recurse to children - var scriptsOnly; - - function getEffective(parent){ - // summary: - // Get effective dir, lang, textDir settings for specified obj - // (matching "parent" object structure above), and do caching. - // Take care not to return null entries. - if(!parent.inherited){ - parent.inherited = {}; - var node = parent.node, - grandparent = getEffective(parent.parent); - var inherited = { - dir: node.getAttribute("dir") || grandparent.dir, - lang: node.getAttribute("lang") || grandparent.lang, - textDir: node.getAttribute(dataDojoTextDir) || grandparent.textDir - }; - for(var key in inherited){ - if(inherited[key]){ - parent.inherited[key] = inherited[key]; - } - } - } - return parent.inherited; - } - - // DFS on DOM tree, collecting nodes with data-dojo-type specified. - while(true){ - if(!node){ - // Finished this level, continue to parent's next sibling - if(!parent || !parent.node){ - break; - } - node = parent.node.nextSibling; - scripts = parent.scripts; - scriptsOnly = false; - parent = parent.parent; - continue; - } - - if(node.nodeType != 1){ - // Text or comment node, skip to next sibling - node = node.nextSibling; - continue; - } - - if(scripts && node.nodeName.toLowerCase() == "script"){ - // Save <script type="dojo/..."> for parent, then continue to next sibling - type = node.getAttribute("type"); - if(type && /^dojo\/\w/i.test(type)){ - scripts.push(node); - } - node = node.nextSibling; - continue; - } - if(scriptsOnly){ - node = node.nextSibling; - continue; - } - - // Check for data-dojo-type attribute, fallback to backward compatible dojoType - var type = node.getAttribute(dataDojoType) || node.getAttribute(dojoType); - - // Short circuit for leaf nodes containing nothing [but text] - var firstChild = node.firstChild; - if(!type && (!firstChild || (firstChild.nodeType == 3 && !firstChild.nextSibling))){ - node = node.nextSibling; - continue; - } - - // Setup data structure to save info on current node for when we return from processing descendant nodes - var current = { - node: node, - scripts: scripts, - parent: parent - }; - - // If dojoType/data-dojo-type specified, add to output array of nodes to instantiate - var ctor = type && (_ctorMap[type] || (_ctorMap[type] = dlang.getObject(type))), // note: won't find classes declared via dojo.Declaration - childScripts = ctor && !ctor.prototype._noScript ? [] : null; // <script> nodes that are parent's children - if(type){ - list.push({ - "type": type, - node: node, - scripts: childScripts, - inherited: getEffective(current) // dir & lang settings for current node, explicit or inherited - }); - } - - // Recurse, collecting <script type="dojo/..."> children, and also looking for - // descendant nodes with dojoType specified (unless the widget has the stopParser flag). - // When finished with children, go to my next sibling. - node = firstChild; - scripts = childScripts; - scriptsOnly = ctor && ctor.prototype.stopParser && !(args && args.template); - parent = current; - - } - - // go build the object instances - var mixin = args && args.template ? {template: true} : null; - return this.instantiate(list, mixin, args); // Array - }; -}(); - - -//Register the parser callback. It should be the first callback -//after the a11y test. -if(dojo.config.parseOnLoad){ - dojo.ready(100, dojo.parser, "parse"); -} - -return dojo.parser; -}); diff --git a/lib/dojo/query.js.uncompressed.js b/lib/dojo/query.js.uncompressed.js deleted file mode 100644 index 3fc66151d..000000000 --- a/lib/dojo/query.js.uncompressed.js +++ /dev/null @@ -1,713 +0,0 @@ -define("dojo/query", ["./_base/kernel", "./has", "./dom", "./on", "./_base/array", "./_base/lang", "./selector/_loader", "./selector/_loader!default"], - function(dojo, has, dom, on, array, lang, loader, defaultEngine){ -"use strict"; - - has.add("array-extensible", function(){ - // test to see if we can extend an array (not supported in old IE) - return lang.delegate([], {length: 1}).length == 1 && !has("bug-for-in-skips-shadowed"); - }); - - var ap = Array.prototype, aps = ap.slice, apc = ap.concat, forEach = array.forEach; - - var tnl = function(/*Array*/ a, /*dojo.NodeList?*/ parent, /*Function?*/ NodeListCtor){ - // summary: - // decorate an array to make it look like a `dojo.NodeList`. - // a: - // Array of nodes to decorate. - // parent: - // An optional parent NodeList that generated the current - // list of nodes. Used to call _stash() so the parent NodeList - // can be accessed via end() later. - // NodeListCtor: - // An optional constructor function to use for any - // new NodeList calls. This allows a certain chain of - // NodeList calls to use a different object than dojo.NodeList. - var nodeList = new (NodeListCtor || this._NodeListCtor || nl)(a); - return parent ? nodeList._stash(parent) : nodeList; - }; - - var loopBody = function(f, a, o){ - a = [0].concat(aps.call(a, 0)); - o = o || dojo.global; - return function(node){ - a[0] = node; - return f.apply(o, a); - }; - }; - - // adapters - - var adaptAsForEach = function(f, o){ - // summary: - // adapts a single node function to be used in the forEach-type - // actions. The initial object is returned from the specialized - // function. - // f: Function - // a function to adapt - // o: Object? - // an optional context for f - return function(){ - this.forEach(loopBody(f, arguments, o)); - return this; // Object - }; - }; - - var adaptAsMap = function(f, o){ - // summary: - // adapts a single node function to be used in the map-type - // actions. The return is a new array of values, as via `dojo.map` - // f: Function - // a function to adapt - // o: Object? - // an optional context for f - return function(){ - return this.map(loopBody(f, arguments, o)); - }; - }; - - var adaptAsFilter = function(f, o){ - // summary: - // adapts a single node function to be used in the filter-type actions - // f: Function - // a function to adapt - // o: Object? - // an optional context for f - return function(){ - return this.filter(loopBody(f, arguments, o)); - }; - }; - - var adaptWithCondition = function(f, g, o){ - // summary: - // adapts a single node function to be used in the map-type - // actions, behaves like forEach() or map() depending on arguments - // f: Function - // a function to adapt - // g: Function - // a condition function, if true runs as map(), otherwise runs as forEach() - // o: Object? - // an optional context for f and g - return function(){ - var a = arguments, body = loopBody(f, a, o); - if(g.call(o || dojo.global, a)){ - return this.map(body); // self - } - this.forEach(body); - return this; // self - }; - }; - - var NodeList = function(array){ - // summary: - // dojo.NodeList is an of Array-like object which adds syntactic - // sugar for chaining, common iteration operations, animation, and - // node manipulation. NodeLists are most often returned as the - // result of dojo.query() calls. - // description: - // dojo.NodeList instances provide many utilities that reflect - // core Dojo APIs for Array iteration and manipulation, DOM - // manipulation, and event handling. Instead of needing to dig up - // functions in the dojo.* namespace, NodeLists generally make the - // full power of Dojo available for DOM manipulation tasks in a - // simple, chainable way. - // example: - // create a node list from a node - // | new dojo.NodeList(dojo.byId("foo")); - // example: - // get a NodeList from a CSS query and iterate on it - // | var l = dojo.query(".thinger"); - // | l.forEach(function(node, index, nodeList){ - // | console.log(index, node.innerHTML); - // | }); - // example: - // use native and Dojo-provided array methods to manipulate a - // NodeList without needing to use dojo.* functions explicitly: - // | var l = dojo.query(".thinger"); - // | // since NodeLists are real arrays, they have a length - // | // property that is both readable and writable and - // | // push/pop/shift/unshift methods - // | console.log(l.length); - // | l.push(dojo.create("span")); - // | - // | // dojo's normalized array methods work too: - // | console.log( l.indexOf(dojo.byId("foo")) ); - // | // ...including the special "function as string" shorthand - // | console.log( l.every("item.nodeType == 1") ); - // | - // | // NodeLists can be [..] indexed, or you can use the at() - // | // function to get specific items wrapped in a new NodeList: - // | var node = l[3]; // the 4th element - // | var newList = l.at(1, 3); // the 2nd and 4th elements - // example: - // the style functions you expect are all there too: - // | // style() as a getter... - // | var borders = dojo.query(".thinger").style("border"); - // | // ...and as a setter: - // | dojo.query(".thinger").style("border", "1px solid black"); - // | // class manipulation - // | dojo.query("li:nth-child(even)").addClass("even"); - // | // even getting the coordinates of all the items - // | var coords = dojo.query(".thinger").coords(); - // example: - // DOM manipulation functions from the dojo.* namespace area also - // available: - // | // remove all of the elements in the list from their - // | // parents (akin to "deleting" them from the document) - // | dojo.query(".thinger").orphan(); - // | // place all elements in the list at the front of #foo - // | dojo.query(".thinger").place("foo", "first"); - // example: - // Event handling couldn't be easier. `dojo.connect` is mapped in, - // and shortcut handlers are provided for most DOM events: - // | // like dojo.connect(), but with implicit scope - // | dojo.query("li").connect("onclick", console, "log"); - // | - // | // many common event handlers are already available directly: - // | dojo.query("li").onclick(console, "log"); - // | var toggleHovered = dojo.hitch(dojo, "toggleClass", "hovered"); - // | dojo.query("p") - // | .onmouseenter(toggleHovered) - // | .onmouseleave(toggleHovered); - // example: - // chainability is a key advantage of NodeLists: - // | dojo.query(".thinger") - // | .onclick(function(e){ /* ... */ }) - // | .at(1, 3, 8) // get a subset - // | .style("padding", "5px") - // | .forEach(console.log); - var isNew = this instanceof nl && has("array-extensible"); - if(typeof array == "number"){ - array = Array(array); - } - var nodeArray = (array && "length" in array) ? array : arguments; - if(isNew || !nodeArray.sort){ - // make sure it's a real array before we pass it on to be wrapped - var target = isNew ? this : [], - l = target.length = nodeArray.length; - for(var i = 0; i < l; i++){ - target[i] = nodeArray[i]; - } - if(isNew){ - // called with new operator, this means we are going to use this instance and push - // the nodes on to it. This is usually much faster since the NodeList properties - // don't need to be copied (unless the list of nodes is extremely large). - return target; - } - nodeArray = target; - } - // called without new operator, use a real array and copy prototype properties, - // this is slower and exists for back-compat. Should be removed in 2.0. - lang._mixin(nodeArray, nlp); - nodeArray._NodeListCtor = function(array){ - // call without new operator to preserve back-compat behavior - return nl(array); - }; - return nodeArray; - }; - - var nl = NodeList, nlp = nl.prototype = - has("array-extensible") ? [] : {};// extend an array if it is extensible - - // expose adapters and the wrapper as private functions - - nl._wrap = nlp._wrap = tnl; - nl._adaptAsMap = adaptAsMap; - nl._adaptAsForEach = adaptAsForEach; - nl._adaptAsFilter = adaptAsFilter; - nl._adaptWithCondition = adaptWithCondition; - - // mass assignment - - // add array redirectors - forEach(["slice", "splice"], function(name){ - var f = ap[name]; - //Use a copy of the this array via this.slice() to allow .end() to work right in the splice case. - // CANNOT apply ._stash()/end() to splice since it currently modifies - // the existing this array -- it would break backward compatibility if we copy the array before - // the splice so that we can use .end(). So only doing the stash option to this._wrap for slice. - nlp[name] = function(){ return this._wrap(f.apply(this, arguments), name == "slice" ? this : null); }; - }); - // concat should be here but some browsers with native NodeList have problems with it - - // add array.js redirectors - forEach(["indexOf", "lastIndexOf", "every", "some"], function(name){ - var f = array[name]; - nlp[name] = function(){ return f.apply(dojo, [this].concat(aps.call(arguments, 0))); }; - }); - - /*===== var NodeList = dojo.NodeList; =====*/ - lang.extend(NodeList, { - // copy the constructors - constructor: nl, - _NodeListCtor: nl, - toString: function(){ - // Array.prototype.toString can't be applied to objects, so we use join - return this.join(","); - }, - _stash: function(parent){ - // summary: - // private function to hold to a parent NodeList. end() to return the parent NodeList. - // - // example: - // How to make a `dojo.NodeList` method that only returns the third node in - // the dojo.NodeList but allows access to the original NodeList by using this._stash: - // | dojo.extend(dojo.NodeList, { - // | third: function(){ - // | var newNodeList = dojo.NodeList(this[2]); - // | return newNodeList._stash(this); - // | } - // | }); - // | // then see how _stash applies a sub-list, to be .end()'ed out of - // | dojo.query(".foo") - // | .third() - // | .addClass("thirdFoo") - // | .end() - // | // access to the orig .foo list - // | .removeClass("foo") - // | - // - this._parent = parent; - return this; //dojo.NodeList - }, - - on: function(eventName, listener){ - // summary: - // Listen for events on the nodes in the NodeList. Basic usage is: - // | query(".my-class").on("click", listener); - // This supports event delegation by using selectors as the first argument with the event names as - // pseudo selectors. For example: - // | dojo.query("#my-list").on("li:click", listener); - // This will listen for click events within <li> elements that are inside the #my-list element. - // Because on supports CSS selector syntax, we can use comma-delimited events as well: - // | dojo.query("#my-list").on("li button:mouseover, li:click", listener); - var handles = this.map(function(node){ - return on(node, eventName, listener); // TODO: apply to the NodeList so the same selector engine is used for matches - }); - handles.remove = function(){ - for(var i = 0; i < handles.length; i++){ - handles[i].remove(); - } - }; - return handles; - }, - - end: function(){ - // summary: - // Ends use of the current `dojo.NodeList` by returning the previous dojo.NodeList - // that generated the current dojo.NodeList. - // description: - // Returns the `dojo.NodeList` that generated the current `dojo.NodeList`. If there - // is no parent dojo.NodeList, an empty dojo.NodeList is returned. - // example: - // | dojo.query("a") - // | .filter(".disabled") - // | // operate on the anchors that only have a disabled class - // | .style("color", "grey") - // | .end() - // | // jump back to the list of anchors - // | .style(...) - // - if(this._parent){ - return this._parent; - }else{ - //Just return empty list. - return new this._NodeListCtor(0); - } - }, - - // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods - - // FIXME: handle return values for #3244 - // http://trac.dojotoolkit.org/ticket/3244 - - // FIXME: - // need to wrap or implement: - // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) - // reduce - // reduceRight - - /*===== - slice: function(begin, end){ - // summary: - // Returns a new NodeList, maintaining this one in place - // description: - // This method behaves exactly like the Array.slice method - // with the caveat that it returns a dojo.NodeList and not a - // raw Array. For more details, see Mozilla's (slice - // documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:slice] - // begin: Integer - // Can be a positive or negative integer, with positive - // integers noting the offset to begin at, and negative - // integers denoting an offset from the end (i.e., to the left - // of the end) - // end: Integer? - // Optional parameter to describe what position relative to - // the NodeList's zero index to end the slice at. Like begin, - // can be positive or negative. - return this._wrap(a.slice.apply(this, arguments)); - }, - - splice: function(index, howmany, item){ - // summary: - // Returns a new NodeList, manipulating this NodeList based on - // the arguments passed, potentially splicing in new elements - // at an offset, optionally deleting elements - // description: - // This method behaves exactly like the Array.splice method - // with the caveat that it returns a dojo.NodeList and not a - // raw Array. For more details, see Mozilla's (splice - // documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:splice] - // For backwards compatibility, calling .end() on the spliced NodeList - // does not return the original NodeList -- splice alters the NodeList in place. - // index: Integer - // begin can be a positive or negative integer, with positive - // integers noting the offset to begin at, and negative - // integers denoting an offset from the end (i.e., to the left - // of the end) - // howmany: Integer? - // Optional parameter to describe what position relative to - // the NodeList's zero index to end the slice at. Like begin, - // can be positive or negative. - // item: Object...? - // Any number of optional parameters may be passed in to be - // spliced into the NodeList - // returns: - // dojo.NodeList - return this._wrap(a.splice.apply(this, arguments)); - }, - - indexOf: function(value, fromIndex){ - // summary: - // 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 location to start searching from. Optional. Defaults to 0. - // description: - // For more details on the behavior of indexOf, see Mozilla's - // (indexOf - // docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf] - // returns: - // Positive Integer or 0 for a match, -1 of not found. - return d.indexOf(this, value, fromIndex); // Integer - }, - - lastIndexOf: function(value, fromIndex){ - // summary: - // see dojo.lastIndexOf(). The primary difference is that the - // acted-on array is implicitly this NodeList - // description: - // For more details on the behavior of lastIndexOf, see - // Mozilla's (lastIndexOf - // docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf] - // value: Object - // The value to search for. - // fromIndex: Integer? - // 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 - }, - - every: function(callback, thisObject){ - // summary: - // see `dojo.every()` and the (Array.every - // docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every]. - // Takes the same structure of arguments and returns as - // dojo.every() with the caveat that the passed array is - // implicitly this NodeList - // callback: Function: the callback - // thisObject: Object?: the context - return d.every(this, callback, thisObject); // Boolean - }, - - some: function(callback, thisObject){ - // summary: - // Takes the same structure of arguments and returns as - // `dojo.some()` with the caveat that the passed array is - // implicitly this NodeList. See `dojo.some()` and Mozilla's - // (Array.some - // documentation)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some]. - // callback: Function: the callback - // thisObject: Object?: the context - return d.some(this, callback, thisObject); // Boolean - }, - =====*/ - - concat: function(item){ - // summary: - // Returns a new NodeList comprised of items in this NodeList - // as well as items passed in as parameters - // description: - // This method behaves exactly like the Array.concat method - // with the caveat that it returns a `dojo.NodeList` and not a - // raw Array. For more details, see the (Array.concat - // docs)[http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:concat] - // item: Object? - // Any number of optional parameters may be passed in to be - // spliced into the NodeList - // returns: - // dojo.NodeList - - //return this._wrap(apc.apply(this, arguments)); - // the line above won't work for the native NodeList :-( - - // implementation notes: - // 1) Native NodeList is not an array, and cannot be used directly - // in concat() --- the latter doesn't recognize it as an array, and - // does not inline it, but append as a single entity. - // 2) On some browsers (e.g., Safari) the "constructor" property is - // read-only and cannot be changed. So we have to test for both - // native NodeList and dojo.NodeList in this property to recognize - // the node list. - - var t = lang.isArray(this) ? this : aps.call(this, 0), - m = array.map(arguments, function(a){ - return a && !lang.isArray(a) && - (typeof NodeList != "undefined" && a.constructor === NodeList || a.constructor === this._NodeListCtor) ? - aps.call(a, 0) : a; - }); - return this._wrap(apc.apply(t, m), this); // dojo.NodeList - }, - - map: function(/*Function*/ func, /*Function?*/ obj){ - // summary: - // see dojo.map(). The primary difference is that the acted-on - // array is implicitly this NodeList and the return is a - // dojo.NodeList (a subclass of Array) - ///return d.map(this, func, obj, d.NodeList); // dojo.NodeList - return this._wrap(array.map(this, func, obj), this); // dojo.NodeList - }, - - forEach: function(callback, thisObj){ - // summary: - // 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. - forEach(this, callback, thisObj); - // non-standard return to allow easier chaining - return this; // dojo.NodeList - }, - filter: function(/*String|Function*/ filter){ - // summary: - // "masks" the built-in javascript filter() method (supported - // in Dojo via `dojo.filter`) to support passing a simple - // string filter in addition to supporting filtering function - // objects. - // filter: - // If a string, a CSS rule like ".thinger" or "div > span". - // example: - // "regular" JS filter syntax as exposed in dojo.filter: - // | dojo.query("*").filter(function(item){ - // | // highlight every paragraph - // | return (item.nodeName == "p"); - // | }).style("backgroundColor", "yellow"); - // example: - // the same filtering using a CSS selector - // | dojo.query("*").filter("p").styles("backgroundColor", "yellow"); - - var a = arguments, items = this, start = 0; - if(typeof filter == "string"){ // inline'd type check - items = query._filterResult(this, a[0]); - if(a.length == 1){ - // if we only got a string query, pass back the filtered results - return items._stash(this); // dojo.NodeList - } - // if we got a callback, run it over the filtered items - start = 1; - } - return this._wrap(array.filter(items, a[start], a[start + 1]), this); // dojo.NodeList - }, - instantiate: function(/*String|Object*/ declaredClass, /*Object?*/ properties){ - // summary: - // Create a new instance of a specified class, using the - // specified properties and each node in the nodeList as a - // srcNodeRef. - // example: - // Grabs all buttons in the page and converts them to diji.form.Buttons. - // | var buttons = dojo.query("button").instantiate("dijit.form.Button", {showLabel: true}); - var c = lang.isFunction(declaredClass) ? declaredClass : lang.getObject(declaredClass); - properties = properties || {}; - return this.forEach(function(node){ - new c(properties, node); - }); // dojo.NodeList - }, - at: function(/*===== index =====*/){ - // summary: - // Returns a new NodeList comprised of items in this NodeList - // at the given index or indices. - // - // 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. - // - // example: - // Shorten the list to the first, second, and third elements - // | dojo.query("a").at(0, 1, 2).forEach(fn); - // - // example: - // Retrieve the first and last elements of a unordered list: - // | dojo.query("ul > li").at(0, -1).forEach(cb); - // - // example: - // 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. - // | }) - // - // returns: - // dojo.NodeList - var t = new this._NodeListCtor(0); - forEach(arguments, function(i){ - if(i < 0){ i = this.length + i; } - if(this[i]){ t.push(this[i]); } - }, this); - return t._stash(this); // dojo.NodeList - } - }); - - -/*===== -dojo.query = function(selector, context){ - // summary: - // This modules provides DOM querying functionality. The module export is a function - // that can be used to query for DOM nodes by CSS selector and returns a dojo.NodeList - // representing the matching nodes. - // - // selector: String - // A CSS selector to search for. - // context: String|DomNode? - // An optional context to limit the searching scope. Only nodes under `context` will be - // scanned. - // - // example: - // add an onclick handler to every submit button in the document - // which causes the form to be sent via Ajax instead: - // | define(["dojo/query"], function(query){ - // | query("input[type='submit']").on("click", function(e){ - // | dojo.stopEvent(e); // prevent sending the form - // | var btn = e.target; - // | dojo.xhrPost({ - // | form: btn.form, - // | load: function(data){ - // | // replace the form with the response - // | var div = dojo.doc.createElement("div"); - // | dojo.place(div, btn.form, "after"); - // | div.innerHTML = data; - // | dojo.style(btn.form, "display", "none"); - // | } - // | }); - // | }); - // - // description: - // dojo/query is responsible for loading the appropriate query engine and wrapping - // its results with a `dojo.NodeList`. You can use dojo/query with a specific selector engine - // by using it as a plugin. For example, if you installed the sizzle package, you could - // use it as the selector engine with: - // | define("dojo/query!sizzle", function(query){ - // | query("div")... - // - // The id after the ! can be a module id of the selector engine or one of the following values: - // | + acme: This is the default engine used by Dojo base, and will ensure that the full - // | Acme engine is always loaded. - // | - // | + css2: If the browser has a native selector engine, this will be used, otherwise a - // | very minimal lightweight selector engine will be loaded that can do simple CSS2 selectors - // | (by #id, .class, tag, and [name=value] attributes, with standard child or descendant (>) - // | operators) and nothing more. - // | - // | + css2.1: If the browser has a native selector engine, this will be used, otherwise the - // | full Acme engine will be loaded. - // | - // | + css3: If the browser has a native selector engine with support for CSS3 pseudo - // | selectors (most modern browsers except IE8), this will be used, otherwise the - // | full Acme engine will be loaded. - // | - // | + Or the module id of a selector engine can be used to explicitly choose the selector engine - // - // For example, if you are using CSS3 pseudo selectors in module, you can specify that - // you will need support them with: - // | define("dojo/query!css3", function(query){ - // | query('#t > h3:nth-child(odd)')... - // - // You can also choose the selector engine/load configuration by setting the <FIXME:what is the configuration setting?>. - // For example: - // | <script data-dojo-config="query-selector:'css3'" src="dojo.js"></script> - // - return new dojo.NodeList(); // dojo.NodeList -}; -=====*/ - -function queryForEngine(engine, NodeList){ - var query = function(/*String*/ query, /*String|DOMNode?*/ root){ - // summary: - // Returns nodes which match the given CSS selector, searching the - // entire document by default but optionally taking a node to scope - // the search by. Returns an instance of dojo.NodeList. - if(typeof root == "string"){ - root = dom.byId(root); - if(!root){ - return new NodeList([]); - } - } - var results = typeof query == "string" ? engine(query, root) : query.orphan ? query : [query]; - if(results.orphan){ - // already wrapped - return results; - } - return new NodeList(results); - }; - query.matches = engine.match || function(node, selector, root){ - // summary: - // Test to see if a node matches a selector - return query.filter([node], selector, root).length > 0; - }; - // the engine provides a filtering function, use it to for matching - query.filter = engine.filter || function(nodes, selector, root){ - // summary: - // Filters an array of nodes. Note that this does not guarantee to return a dojo.NodeList, just an array. - return query(selector, root).filter(function(node){ - return array.indexOf(nodes, node) > -1; - }); - }; - if(typeof engine != "function"){ - var search = engine.search; - engine = function(selector, root){ - // Slick does it backwards (or everyone else does it backwards, probably the latter) - return search(root || document, selector); - }; - } - return query; -} -var query = queryForEngine(defaultEngine, NodeList); -// the query that is returned from this module is slightly different than dojo.query, -// because dojo.query has to maintain backwards compatibility with returning a -// true array which has performance problems. The query returned from the module -// does not use true arrays, but rather inherits from Array, making it much faster to -// instantiate. -dojo.query = queryForEngine(defaultEngine, function(array){ - // call it without the new operator to invoke the back-compat behavior that returns a true array - return NodeList(array); -}); - -query.load = /*===== dojo.query.load= ======*/ function(id, parentRequire, loaded, config){ - // summary: can be used as AMD plugin to conditionally load new query engine - // example: - // | define(["dojo/query!custom"], function(qsa){ - // | // loaded selector/custom.js as engine - // | qsa("#foobar").forEach(...); - // | }); - loader.load(id, parentRequire, function(engine){ - loaded(queryForEngine(engine, NodeList)); - }); -}; - -dojo._filterQueryResult = query._filterResult = function(nodes, selector, root){ - return new NodeList(query.filter(nodes, selector, root)); -}; -dojo.NodeList = query.NodeList = NodeList; -return query; -}); diff --git a/lib/dojo/ready.js.uncompressed.js b/lib/dojo/ready.js.uncompressed.js deleted file mode 100644 index 65e3d3df9..000000000 --- a/lib/dojo/ready.js.uncompressed.js +++ /dev/null @@ -1,138 +0,0 @@ -define("dojo/ready", ["./_base/kernel", "./has", "require", "./domReady", "./_base/lang"], function(dojo, has, require, domReady, lang) { - // module: - // dojo/ready - // summary: - // This module defines the dojo.ready API. - // - // note: - // This module should be unnecessary in dojo 2.0 - var - // truthy if DOMContentLoaded or better (e.g., window.onload fired) has been achieved - isDomReady = 0, - - // a function to call to cause onLoad to be called when all requested modules have been loaded - requestCompleteSignal, - - // The queue of functions waiting to execute as soon as dojo.ready conditions satisfied - loadQ = [], - - // prevent recursion in onLoad - onLoadRecursiveGuard = 0, - - handleDomReady = function(){ - isDomReady = 1; - dojo._postLoad = dojo.config.afterOnLoad = true; - if(loadQ.length){ - requestCompleteSignal(onLoad); - } - }, - - // run the next function queued with dojo.ready - onLoad = function(){ - if(isDomReady && !onLoadRecursiveGuard && loadQ.length){ - //guard against recursions into this function - onLoadRecursiveGuard = 1; - var f = loadQ.shift(); - try{ - f(); - } - // FIXME: signal the error via require.on - finally{ - onLoadRecursiveGuard = 0; - } - onLoadRecursiveGuard = 0; - if(loadQ.length){ - requestCompleteSignal(onLoad); - } - } - }; - - // define requireCompleteSignal; impl depends on loader - if(1){ - require.on("idle", onLoad); - requestCompleteSignal = function(){ - if(require.idle()){ - onLoad(); - } // else do nothing, onLoad will be called with the next idle signal - }; - }else{ - // RequireJS or similar - requestCompleteSignal = function(){ - // the next function call will fail if you don't have a loader with require.ready - // in that case, either fix your loader, use dojo's loader, or don't call dojo.ready; - require.ready(onLoad); - }; - } - - var ready = dojo.ready = dojo.addOnLoad = function(priority, context, callback){ - // summary: Add a function to execute on DOM content loaded and all requested modules have arrived and been evaluated. - // priority: Integer? - // The order in which to exec this callback relative to other callbacks, defaults to 1000 - // context: Object?|Function - // The context in which to run execute callback, or a callback if not using context - // callback: Function? - // The function to execute. - // - // example: - // Simple DOM and Modules ready syntax - // | dojo.ready(function(){ alert("Dom ready!"); }); - // - // example: - // Using a priority - // | dojo.ready(2, function(){ alert("low priority ready!"); }) - // - // example: - // Using context - // | dojo.ready(foo, function(){ - // | // in here, this == foo - // | }) - // - // example: - // Using dojo.hitch style args: - // | var foo = { dojoReady: function(){ console.warn(this, "dojo dom and modules ready."); } }; - // | dojo.ready(foo, "dojoReady"); - - var hitchArgs = lang._toArray(arguments); - if(typeof priority != "number"){ - callback = context; - context = priority; - priority = 1000; - }else{ - hitchArgs.shift(); - } - callback = callback ? - lang.hitch.apply(dojo, hitchArgs) : - function(){ - context(); - }; - callback.priority = priority; - for(var i = 0; i < loadQ.length && priority >= loadQ[i].priority; i++){} - loadQ.splice(i, 0, callback); - requestCompleteSignal(); - }; - - true || has.add("dojo-config-addOnLoad", 1); - if(1){ - var dca = dojo.config.addOnLoad; - if(dca){ - ready[(lang.isArray(dca) ? "apply" : "call")](dojo, dca); - } - } - - if(1 && dojo.config.parseOnLoad && !dojo.isAsync){ - ready(99, function(){ - if(!dojo.parser){ - dojo.deprecated("Add explicit require(['dojo/parser']);", "", "2.0"); - require(["dojo/parser"]); - } - }); - } - - if(1){ - domReady(handleDomReady); - }else{ - handleDomReady(); - } - - return ready; -}); diff --git a/lib/dojo/regexp.js.uncompressed.js b/lib/dojo/regexp.js.uncompressed.js deleted file mode 100644 index 4817a7796..000000000 --- a/lib/dojo/regexp.js.uncompressed.js +++ /dev/null @@ -1,73 +0,0 @@ -define("dojo/regexp", ["./_base/kernel", "./_base/lang"], function(dojo, lang) { - // module: - // dojo/regexp - // summary: - // TODOC - -lang.getObject("regexp", true, dojo); - -/*===== -dojo.regexp = { - // summary: Regular expressions and Builder resources -}; -=====*/ - -dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){ - // summary: - // Adds escape sequences for special characters in regular expressions - // except: - // a String with special characters to be left unescaped - - return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, function(ch){ - if(except && except.indexOf(ch) != -1){ - return ch; - } - return "\\" + ch; - }); // String -}; - -dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){ - // summary: - // Builds a regular expression that groups subexpressions - // description: - // A utility function used by some of the RE generators. The - // subexpressions are constructed by the function, re, in the second - // parameter. re builds one subexpression for each elem in the array - // a, in the first parameter. Returns a string for a regular - // expression that groups all the subexpressions. - // arr: - // A single value or an array of values. - // re: - // A function. Takes one parameter and converts it to a regular - // expression. - // nonCapture: - // If true, uses non-capturing match, otherwise matches are retained - // by regular expression. Defaults to false - - // case 1: a is a single value. - if(!(arr instanceof Array)){ - return re(arr); // String - } - - // case 2: a is an array - var b = []; - for(var i = 0; i < arr.length; i++){ - // convert each elem to a RE - b.push(re(arr[i])); - } - - // join the REs as alternatives in a RE group. - return dojo.regexp.group(b.join("|"), nonCapture); // String -}; - -dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){ - // summary: - // adds group match to expression - // nonCapture: - // If true, uses non-capturing match, otherwise matches are retained - // by regular expression. - return "(" + (nonCapture ? "?:":"") + expression + ")"; // String -}; - -return dojo.regexp; -}); diff --git a/lib/dojo/require.js.uncompressed.js b/lib/dojo/require.js.uncompressed.js deleted file mode 100644 index e3d12dde4..000000000 --- a/lib/dojo/require.js.uncompressed.js +++ /dev/null @@ -1,7 +0,0 @@ -define("dojo/require", ["./_base/loader"], function(loader){ - return { - dynamic:0, - normalize:function(id){return id;}, - load:loader.require - }; -}); diff --git a/lib/dojo/rpc/JsonService.js.uncompressed.js b/lib/dojo/rpc/JsonService.js.uncompressed.js deleted file mode 100644 index ae7703d99..000000000 --- a/lib/dojo/rpc/JsonService.js.uncompressed.js +++ /dev/null @@ -1,85 +0,0 @@ -define("dojo/rpc/JsonService", ["../main", "./RpcService"], function(dojo) { - // module: - // dojo/rpc/JsonService - // summary: - // TODOC - - -dojo.declare("dojo.rpc.JsonService", dojo.rpc.RpcService, { - bustCache: false, - contentType: "application/json-rpc", - lastSubmissionId: 0, - - callRemote: function(method, params){ - // summary: - // call an arbitrary remote method without requiring it to be - // predefined with SMD - // method: string - // the name of the remote method you want to call. - // params: array - // array of parameters to pass to method - - var deferred = new dojo.Deferred(); - this.bind(method, params, deferred); - return deferred; - }, - - bind: function(method, parameters, deferredRequestHandler, url){ - //summary: - // JSON-RPC bind method. Takes remote method, parameters, - // deferred, and a url, calls createRequest to make a JSON-RPC - // envelope and passes that off with bind. - // method: string - // The name of the method we are calling - // parameters: array - // The parameters we are passing off to the method - // deferredRequestHandler: deferred - // The Deferred object for this particular request - - var def = dojo.rawXhrPost({ - url: url||this.serviceUrl, - postData: this.createRequest(method, parameters), - contentType: this.contentType, - timeout: this.timeout, - handleAs: "json-comment-optional" - }); - def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler)); - }, - - createRequest: function(method, params){ - // summary: - // create a JSON-RPC envelope for the request - // method: string - // The name of the method we are creating the requst for - // params: array - // The array of parameters for this request; - - var req = { "params": params, "method": method, "id": ++this.lastSubmissionId }; - return dojo.toJson(req); - }, - - parseResults: function(/*anything*/obj){ - //summary: - // parse the result envelope and pass the results back to - // the callback function - // obj: Object - // Object containing envelope of data we recieve from the server - - if(dojo.isObject(obj)){ - if("result" in obj){ - return obj.result; - } - if("Result" in obj){ - return obj.Result; - } - if("ResultSet" in obj){ - return obj.ResultSet; - } - } - return obj; - } - } -); - -return dojo.rpc.JsonService; -}); diff --git a/lib/dojo/rpc/JsonpService.js.uncompressed.js b/lib/dojo/rpc/JsonpService.js.uncompressed.js deleted file mode 100644 index bc1d7108d..000000000 --- a/lib/dojo/rpc/JsonpService.js.uncompressed.js +++ /dev/null @@ -1,67 +0,0 @@ -define("dojo/rpc/JsonpService", ["../main", "./RpcService", "../io/script"], function(dojo) { - // module: - // dojo/rpc/JsonpService - // summary: - // TODOC - - -dojo.declare("dojo.rpc.JsonpService", dojo.rpc.RpcService, { - // summary: - // Generic JSONP service. Minimally extends RpcService to allow - // easy definition of nearly any JSONP style service. Example - // SMD files exist in dojox.data - - constructor: function(args, requiredArgs){ - if(this.required) { - if(requiredArgs){ - dojo.mixin(this.required, requiredArgs); - } - - dojo.forEach(this.required, function(req){ - if(req=="" || req==undefined){ - throw new Error("Required Service Argument not found: "+req); - } - }); - } - }, - - strictArgChecks: false, - - bind: function(method, parameters, deferredRequestHandler, url){ - //summary: - // JSONP bind method. Takes remote method, parameters, - // deferred, and a url, calls createRequest to make a JSON-RPC - // envelope and passes that off with bind. - // method: string - // The name of the method we are calling - // parameters: array - // The parameters we are passing off to the method - // deferredRequestHandler: deferred - // The Deferred object for this particular request - - var def = dojo.io.script.get({ - url: url||this.serviceUrl, - callbackParamName: this.callbackParamName||"callback", - content: this.createRequest(parameters), - timeout: this.timeout, - handleAs: "json", - preventCache: true - }); - def.addCallbacks(this.resultCallback(deferredRequestHandler), this.errorCallback(deferredRequestHandler)); - }, - - createRequest: function(parameters){ - // summary: - // create a JSONP req - // params: array - // The array of parameters for this request; - - var params = (dojo.isArrayLike(parameters) && parameters.length==1) ? - parameters[0] : {}; - dojo.mixin(params,this.required); - return params; - } -}); - -return dojo.rpc.JsonpService; -}); diff --git a/lib/dojo/rpc/RpcService.js.uncompressed.js b/lib/dojo/rpc/RpcService.js.uncompressed.js deleted file mode 100644 index 3675dadf6..000000000 --- a/lib/dojo/rpc/RpcService.js.uncompressed.js +++ /dev/null @@ -1,175 +0,0 @@ -define("dojo/rpc/RpcService", ["../main", "../_base/url"], function(dojo) { - // module: - // dojo/rpc/RpcService - // summary: - // TODOC - - -dojo.declare("dojo.rpc.RpcService", null, { - constructor: function(args){ - //summary: - //Take a string as a url to retrieve an smd or an object that is an smd or partial smd to use - //as a definition for the service - // - // args: object - // Takes a number of properties as kwArgs for defining the service. It also - // accepts a string. When passed a string, it is treated as a url from - // which it should synchronously retrieve an smd file. Otherwise it is a kwArgs - // object. It accepts serviceUrl, to manually define a url for the rpc service - // allowing the rpc system to be used without an smd definition. strictArgChecks - // forces the system to verify that the # of arguments provided in a call - // 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)){ - if (args instanceof dojo._Url){ - var url = args + ""; - }else{ - url = args; - } - var def = dojo.xhrGet({ - url: url, - handleAs: "json-comment-optional", - sync: true - }); - - def.addCallback(this, "processSmd"); - def.addErrback(function() { - throw new Error("Unable to load SMD from " + args); - }); - - }else if(args.smdStr){ - this.processSmd(dojo.eval("("+args.smdStr+")")); - }else{ - // otherwise we assume it's an arguments object with the following - // (optional) properties: - // - serviceUrl - // - strictArgChecks - // - smdStr - // - smdObj - - if(args.serviceUrl){ - this.serviceUrl = args.serviceUrl; - } - - this.timeout = args.timeout || 3000; - - if("strictArgChecks" in args){ - this.strictArgChecks = args.strictArgChecks; - } - - this.processSmd(args); - } - } - }, - - strictArgChecks: true, - serviceUrl: "", - - parseResults: function(obj){ - // summary: - // parse the results coming back from an rpc request. this - // base implementation, just returns the full object - // subclasses should parse and only return the actual results - // obj: Object - // Object that is the return results from an rpc request - return obj; - }, - - errorCallback: function(/* dojo.Deferred */ deferredRequestHandler){ - // summary: - // create callback that calls the Deferres errback method - // deferredRequestHandler: Deferred - // The deferred object handling a request. - return function(data){ - deferredRequestHandler.errback(data.message); - }; - }, - - resultCallback: function(/* dojo.Deferred */ deferredRequestHandler){ - // summary: - // create callback that calls the Deferred's callback method - // deferredRequestHandler: Deferred - // The deferred object handling a request. - - return dojo.hitch(this, - function(obj){ - if(obj.error!=null){ - var err; - if(typeof obj.error == 'object'){ - err = new Error(obj.error.message); - err.code = obj.error.code; - err.error = obj.error.error; - }else{ - err = new Error(obj.error); - } - err.id = obj.id; - err.errorObject = obj; - deferredRequestHandler.errback(err); - }else{ - deferredRequestHandler.callback(this.parseResults(obj)); - } - } - ); - }, - - generateMethod: function(/*string*/ method, /*array*/ parameters, /*string*/ url){ - // summary: - // generate the local bind methods for the remote object - // method: string - // The name of the method we are generating - // parameters: array - // the array of parameters for this call. - // url: string - // the service url for this call - - return dojo.hitch(this, function(){ - var deferredRequestHandler = new dojo.Deferred(); - - // if params weren't specified, then we can assume it's varargs - if( (this.strictArgChecks) && - (parameters != null) && - (arguments.length != parameters.length) - ){ - // put error stuff here, no enough params - throw new Error("Invalid number of parameters for remote method."); - }else{ - this.bind(method, dojo._toArray(arguments), deferredRequestHandler, url); - } - - return deferredRequestHandler; - }); - }, - - processSmd: function(object){ - // summary: - // callback method for reciept of a smd object. Parse the smd - // and generate functions based on the description - // object: - // smd object defining this service. - - if(object.methods){ - dojo.forEach(object.methods, function(m){ - if(m && m.name){ - this[m.name] = this.generateMethod( m.name, - m.parameters, - m.url||m.serviceUrl||m.serviceURL); - if(!dojo.isFunction(this[m.name])){ - throw new Error("RpcService: Failed to create" + m.name + "()"); - /*console.log("RpcService: Failed to create", m.name, "()");*/ - } - } - }, this); - } - - this.serviceUrl = object.serviceUrl||object.serviceURL; - this.required = object.required; - this.smd = object; - } -}); - -return dojo.rpc.RpcService; -}); diff --git a/lib/dojo/selector/_loader.js.uncompressed.js b/lib/dojo/selector/_loader.js.uncompressed.js deleted file mode 100644 index 9543069e1..000000000 --- a/lib/dojo/selector/_loader.js.uncompressed.js +++ /dev/null @@ -1,45 +0,0 @@ -define("dojo/selector/_loader", ["../has", "require"], - function(has, require){ -// summary: -// This module handles loading the appropriate selector engine for the given browser -"use strict"; -var testDiv = document.createElement("div"); -has.add("dom-qsa2.1", !!testDiv.querySelectorAll); -has.add("dom-qsa3", function(){ - // test to see if we have a reasonable native selector engine available - try{ - testDiv.innerHTML = "<p class='TEST'></p>"; // test kind of from sizzle - // Safari can't handle uppercase or unicode characters when - // in quirks mode, IE8 can't handle pseudos like :empty - return testDiv.querySelectorAll(".TEST:empty").length == 1; - }catch(e){} - }); -var fullEngine; -var acme = "./acme", lite = "./lite"; -return { - load: function(id, parentRequire, loaded, config){ - var req = require; - // here we implement the default logic for choosing a selector engine - id = id == "default" ? has("config-selectorEngine") || "css3" : id; - id = id == "css2" || id == "lite" ? lite : - id == "css2.1" ? has("dom-qsa2.1") ? lite : acme : - id == "css3" ? has("dom-qsa3") ? lite : acme : - id == "acme" ? acme : (req = parentRequire) && id; - if(id.charAt(id.length-1) == '?'){ - id = id.substring(0,id.length - 1); - var optionalLoad = true; - } - // the query engine is optional, only load it if a native one is not available or existing one has not been loaded - if(optionalLoad && (has("dom-compliant-qsa") || fullEngine)){ - return loaded(fullEngine); - } - // load the referenced selector engine - req([id], function(engine){ - if(id != "./lite"){ - fullEngine = engine; - } - loaded(engine); - }); - } -}; -}); diff --git a/lib/dojo/selector/acme.js.uncompressed.js b/lib/dojo/selector/acme.js.uncompressed.js deleted file mode 100644 index 641478ec3..000000000 --- a/lib/dojo/selector/acme.js.uncompressed.js +++ /dev/null @@ -1,1480 +0,0 @@ -define("dojo/selector/acme", ["../_base/kernel", "../has", "../dom", "../_base/sniff", "../_base/array", "../_base/lang", "../_base/window"], function(dojo, has, dom){ - // module: - // dojo/selector/acme - // summary: - // This module defines the Acme selector engine - -/* - acme architectural overview: - - acme is a relatively full-featured CSS3 query library. It is - designed to take any valid CSS3 selector and return the nodes matching - the selector. To do this quickly, it processes queries in several - steps, applying caching where profitable. - - The steps (roughly in reverse order of the way they appear in the code): - 1.) check to see if we already have a "query dispatcher" - - if so, use that with the given parameterization. Skip to step 4. - 2.) attempt to determine which branch to dispatch the query to: - - JS (optimized DOM iteration) - - native (FF3.1+, Safari 3.1+, IE 8+) - 3.) tokenize and convert to executable "query dispatcher" - - this is where the lion's share of the complexity in the - system lies. In the DOM version, the query dispatcher is - assembled as a chain of "yes/no" test functions pertaining to - a section of a simple query statement (".blah:nth-child(odd)" - but not "div div", which is 2 simple statements). Individual - statement dispatchers are cached (to prevent re-definition) - as are entire dispatch chains (to make re-execution of the - same query fast) - 4.) the resulting query dispatcher is called in the passed scope - (by default the top-level document) - - for DOM queries, this results in a recursive, top-down - evaluation of nodes based on each simple query section - - for native implementations, this may mean working around spec - bugs. So be it. - 5.) matched nodes are pruned to ensure they are unique (if necessary) -*/ - - - //////////////////////////////////////////////////////////////////////// - // Toolkit aliases - //////////////////////////////////////////////////////////////////////// - - // if you are extracting acme 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 - var trim = dojo.trim; - var each = dojo.forEach; - // d.isIE; // float - // d.isSafari; // float - // d.isOpera; // float - // d.isWebKit; // float - // d.doc ; // document element - - var getDoc = function(){ return dojo.doc; }; - // NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo - var cssCaseBug = ((dojo.isWebKit||dojo.isMozilla) && ((getDoc().compatMode) == "BackCompat")); - - //////////////////////////////////////////////////////////////////////// - // Global utilities - //////////////////////////////////////////////////////////////////////// - - - var specials = ">~+"; - - // global thunk to determine whether we should treat the current query as - // case sensitive or not. This switch is flipped by the query evaluator - // based on the document passed as the context to search. - var caseSensitive = false; - - // how high? - var yesman = function(){ return true; }; - - //////////////////////////////////////////////////////////////////////// - // Tokenizer - //////////////////////////////////////////////////////////////////////// - - var getQueryParts = function(query){ - // summary: - // state machine for query tokenization - // description: - // instead of using a brittle and slow regex-based CSS parser, - // acme implements an AST-style query representation. This - // representation is only generated once per query. For example, - // 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) 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: - // this code is designed to run fast and compress well. Sacrifices - // 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 - // open and run them frequently. Knowing is half the battle ;-) - if(specials.indexOf(query.slice(-1)) >= 0){ - // if we end with a ">", "+", or "~", that means we're implicitly - // searching all children, so make it explicit - query += " * " - }else{ - // if you have not provided a terminator, one will be provided for - // you... - query += " "; - } - - var ts = function(/*Integer*/ s, /*Integer*/ e){ - // 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 - return trim(query.slice(s, e)); - }; - - // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; - - - // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, - lc = "", cc = "", pStart; - - // iteration vars - var x = 0, // index in the query - ql = query.length, - currentPart = null, // data structure representing the entire clause - _cp = null; // the current pseudo or attr matcher - - // 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 - // bracket expression - // type: - // if there's an operator in a bracket expression, this is - // used to keep track of it - // value: - // the internals of parenthetical expression for a pseudo. for - // :nth-child(2n+1), value might be "2n+1" - - var endTag = function(){ - // called when the tokenizer hits the end of a particular tag name. - // Re-sets state variables for tag matching and sets up the matcher - // to handle the next type of token (tag or operator). - if(inTag >= 0){ - var tv = (inTag == x) ? null : ts(inTag, x); // .toLowerCase(); - currentPart[ (specials.indexOf(tv) < 0) ? "tag" : "oper" ] = tv; - inTag = -1; - } - }; - - var endId = function(){ - // called when the tokenizer might be at the end of an ID portion of a match - if(inId >= 0){ - currentPart.id = ts(inId, x).replace(/\\/g, ""); - inId = -1; - } - }; - - var endClass = function(){ - // called when the tokenizer might be at the end of a class name - // match. CSS allows for multiple classes, so we augment the - // current item with another class in its list - if(inClass >= 0){ - currentPart.classes.push(ts(inClass + 1, x).replace(/\\/g, "")); - inClass = -1; - } - }; - - var endAll = function(){ - // at the end of a simple fragment, so wall off the matches - endId(); - endTag(); - endClass(); - }; - - var endPart = function(){ - endAll(); - if(inPseudo >= 0){ - currentPart.pseudos.push({ name: ts(inPseudo + 1, x) }); - } - // hint to the selector engine to tell it whether or not it - // 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.classes.length ); - - currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string - - - // otag/tag are hints to suggest to the system whether or not - // it's an operator or a tag. We save a copy of otag since the - // tag name is cast to upper-case in regular HTML matches. The - // system has a global switch to figure out if the current - // expression needs to be case sensitive or not and it will use - // otag or tag accordingly - currentPart.otag = currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*"); - - if(currentPart.tag){ - // if we're in a case-insensitive HTML doc, we likely want - // the toUpperCase when matching on element.tagName. If we - // do it here, we can skip the string op per node - // comparison - currentPart.tag = currentPart.tag.toUpperCase(); - } - - // add the part to the list - if(queryParts.length && (queryParts[queryParts.length-1].oper)){ - // operators are always infix, so we remove them from the - // list and attach them to the next match. The evaluator is - // responsible for sorting out how to handle them. - currentPart.infixOper = queryParts.pop(); - currentPart.query = currentPart.infixOper.query + " " + currentPart.query; - /* - console.debug( "swapping out the infix", - currentPart.infixOper, - "and attaching it to", - currentPart); - */ - } - queryParts.push(currentPart); - - currentPart = null; - }; - - // 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 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(!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; - // rules describe full CSS sub-expressions, like: - // #someId - // .className:first-child - // but not: - // thinger > div.howdy[type=thinger] - // the indidual components of the previous query would be - // split into 3 parts that would be represented a structure - // like: - // [ - // { - // query: "thinger", - // tag: "thinger", - // }, - // { - // query: "div.howdy[type=thinger]", - // classes: ["howdy"], - // infixOper: { - // query: ">", - // oper: ">", - // } - // }, - // ] - currentPart = { - query: null, // the full text of the part's rule - pseudos: [], // CSS supports multiple pseud-class matches in a single rule - attrs: [], // CSS supports multi-attribute match, so we need an array - classes: [], // class matches may be additive, e.g.: .thinger.blah.howdy - tag: null, // only one tag... - oper: null, // ...or operator per component. Note that these wind up being exclusive. - id: null, // the id component of a rule - getTag: function(){ - return (caseSensitive) ? this.otag : this.tag; - } - }; - - // if we don't have a part, we assume we're going to start at - // 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; - } - - if(inBrackets >= 0){ - // look for a the close first - 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 existence match in the - // form of [someAttributeName] - _cp.attr = ts(inBrackets+1, x); - }else{ - // we had an attribute already, so we know that we're - // matching some sort of value, as in [attrName=howdy] - _cp.matchFor = ts((inMatchFor||inBrackets+1), x); - } - var cmf = _cp.matchFor; - if(cmf){ - // try to strip quotes from the matchFor value. We want - // [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. - 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. - var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; - _cp.type = addToCc+cc; - _cp.attr = ts(inBrackets+1, x-addToCc.length); - inMatchFor = x+1; - } - // 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 pseudo-selector rule like - // :nth-child(1) - if(cc == ")"){ - if(inPseudo >= 0){ - _cp.value = ts(inParens+1, x); - } - inPseudo = inParens = -1; - } - }else if(cc == "#"){ - // start of an ID match - endAll(); - inId = x+1; - }else if(cc == "."){ - // start of a class match - endAll(); - inClass = x; - }else if(cc == ":"){ - // start of a pseudo-selector match - endAll(); - inPseudo = x; - }else if(cc == "["){ - // start of an attribute match. - endAll(); - inBrackets = x; - // provide a new structure for the attribute match to fill-in - _cp = { - /*===== - attr: null, type: null, matchFor: null - =====*/ - }; - }else if(cc == "("){ - // we really only care if we've entered a parenthetical - // 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), - value: null - }; - currentPart.pseudos.push(_cp); - } - inParens = x; - }else if( - (cc == " ") && - // if it's a space char and the last char is too, consume the - // current one without doing more work - (lc != cc) - ){ - endPart(); - } - } - return queryParts; - }; - - - //////////////////////////////////////////////////////////////////////// - // DOM query infrastructure - //////////////////////////////////////////////////////////////////////// - - var agree = function(first, second){ - // 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 passed, the other is used exclusively. - if(!first){ return second; } - if(!second){ return first; } - - return function(){ - return first.apply(window, arguments) && second.apply(window, arguments); - } - }; - - var getArr = function(i, arr){ - // helps us avoid array alloc when we don't need it - var r = arr||[]; // FIXME: should this be 'new d._NodeListCtor()' ? - if(i){ r.push(i); } - return r; - }; - - var _isElement = function(n){ return (1 == n.nodeType); }; - - // FIXME: need to coalesce _getAttr with defaultGetter - var blank = ""; - var _getAttr = function(elem, attr){ - if(!elem){ return blank; } - if(attr == "class"){ - return elem.className || blank; - } - if(attr == "for"){ - return elem.htmlFor || blank; - } - if(attr == "style"){ - return elem.style.cssText || blank; - } - return (caseSensitive ? elem.getAttribute(attr) : elem.getAttribute(attr, 2)) || blank; - }; - - var attrs = { - "*=": function(attr, value){ - return function(elem){ - // E[foo*="bar"] - // an E element whose "foo" attribute value contains - // the substring "bar" - return (_getAttr(elem, attr).indexOf(value)>=0); - } - }, - "^=": function(attr, value){ - // E[foo^="bar"] - // an E element whose "foo" attribute value begins exactly - // with the string "bar" - return function(elem){ - return (_getAttr(elem, attr).indexOf(value)==0); - } - }, - "$=": function(attr, value){ - // E[foo$="bar"] - // an E element whose "foo" attribute value ends exactly - // with the string "bar" - return function(elem){ - var ea = " "+_getAttr(elem, attr); - return (ea.lastIndexOf(value)==(ea.length-value.length)); - } - }, - "~=": function(attr, value){ - // 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" - - // return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]"; - var tval = " "+value+" "; - return function(elem){ - var ea = " "+_getAttr(elem, attr)+" "; - return (ea.indexOf(tval)>=0); - } - }, - "|=": function(attr, value){ - // E[hreflang|="en"] - // an E element whose "hreflang" attribute has a - // hyphen-separated list of values beginning (from the - // left) with "en" - var valueDash = value+"-"; - return function(elem){ - var ea = _getAttr(elem, attr); - return ( - (ea == value) || - (ea.indexOf(valueDash)==0) - ); - } - }, - "=": function(attr, value){ - return function(elem){ - return (_getAttr(elem, attr) == value); - } - } - }; - - // avoid testing for node type if we can. Defining this in the negative - // here to avoid negation in the fast path. - var _noNES = (typeof getDoc().firstChild.nextElementSibling == "undefined"); - var _ns = !_noNES ? "nextElementSibling" : "nextSibling"; - var _ps = !_noNES ? "previousElementSibling" : "previousSibling"; - var _simpleNodeTest = (_noNES ? _isElement : yesman); - - var _lookLeft = function(node){ - // look left - while(node = node[_ps]){ - if(_simpleNodeTest(node)){ return false; } - } - return true; - }; - - var _lookRight = function(node){ - // look right - while(node = node[_ns]){ - if(_simpleNodeTest(node)){ return false; } - } - return true; - }; - - var getNodeIndex = function(node){ - var root = node.parentNode; - var i = 0, - tret = root.children || root.childNodes, - ci = (node["_i"]||-1), - cl = (root["_l"]||-1); - - if(!tret){ return -1; } - var l = tret.length; - - // 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 ){ - // if it's legit, tag and release - return ci; - } - - // else re-key things - root["_l"] = l; - ci = -1; - for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ - te["_i"] = ++i; - if(node === te){ - // NOTE: - // 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 - // parent. We may revisit this at a later time, but for - // now we just want to get the right answer more often - // than not. - ci = i; - } - } - } - return ci; - }; - - var isEven = function(elem){ - return !((getNodeIndex(elem)) % 2); - }; - - var isOdd = function(elem){ - return ((getNodeIndex(elem)) % 2); - }; - - var pseudos = { - "checked": function(name, condition){ - return function(elem){ - return !!("checked" in elem ? elem.checked : elem.selected); - } - }, - "first-child": function(){ return _lookLeft; }, - "last-child": function(){ return _lookRight; }, - "only-child": function(name, condition){ - return function(node){ - return _lookLeft(node) && _lookRight(node); - }; - }, - "empty": function(name, condition){ - return function(elem){ - // DomQuery and jQuery get this wrong, oddly enough. - // The CSS 3 selectors spec is pretty explicit about it, too. - var cn = elem.childNodes; - var cnl = elem.childNodes.length; - // if(!cnl){ return true; } - for(var x=cnl-1; x >= 0; x--){ - var nt = cn[x].nodeType; - if((nt === 1)||(nt == 3)){ return false; } - } - return true; - } - }, - "contains": function(name, condition){ - var cz = condition.charAt(0); - if( cz == '"' || cz == "'" ){ //remove quote - condition = condition.slice(1, -1); - } - return function(elem){ - return (elem.innerHTML.indexOf(condition) >= 0); - } - }, - "not": function(name, condition){ - var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; - if(p.tag != "*"){ - ignores.tag = 1; - } - if(!p.classes.length){ - ignores.classes = 1; - } - var ntf = getSimpleFilterFunc(p, ignores); - return function(elem){ - return (!ntf(elem)); - } - }, - "nth-child": function(name, condition){ - var pi = parseInt; - // avoid re-defining function objects if we can - if(condition == "odd"){ - return isOdd; - }else if(condition == "even"){ - return isEven; - } - // FIXME: can we shorten this? - if(condition.indexOf("n") != -1){ - var tparts = condition.split("n", 2); - var pred = tparts[0] ? ((tparts[0] == '-') ? -1 : pi(tparts[0])) : 1; - var idx = tparts[1] ? pi(tparts[1]) : 0; - var lb = 0, ub = -1; - if(pred > 0){ - if(idx < 0){ - idx = (idx % pred) && (pred + (idx % pred)); - }else if(idx>0){ - if(idx >= pred){ - lb = idx - idx % pred; - } - idx = idx % pred; - } - }else if(pred<0){ - pred *= -1; - // idx has to be greater than 0 when pred is negative; - // shall we throw an error here? - if(idx > 0){ - ub = idx; - idx = idx % pred; - } - } - if(pred > 0){ - return function(elem){ - var i = getNodeIndex(elem); - return (i>=lb) && (ub<0 || i<=ub) && ((i % pred) == idx); - } - }else{ - condition = idx; - } - } - var ncount = pi(condition); - return function(elem){ - return (getNodeIndex(elem) == ncount); - } - } - }; - - var defaultGetter = (dojo.isIE && (dojo.isIE < 9 || dojo.isQuirks)) ? function(cond){ - var clc = cond.toLowerCase(); - if(clc == "class"){ cond = "className"; } - return function(elem){ - return (caseSensitive ? elem.getAttribute(cond) : elem[cond]||elem[clc]); - } - } : function(cond){ - return function(elem){ - return (elem && elem.getAttribute && elem.hasAttribute(cond)); - } - }; - - var getSimpleFilterFunc = function(query, ignores){ - // generates a node tester function based on the passed query part. The - // 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 - // factors such as how the nodes to test were fetched in the first - // place - if(!query){ return yesman; } - ignores = ignores||{}; - - var ff = null; - - if(!("el" in ignores)){ - ff = agree(ff, _isElement); - } - - if(!("tag" in ignores)){ - if(query.tag != "*"){ - ff = agree(ff, function(elem){ - return (elem && (elem.tagName == query.getTag())); - }); - } - } - - if(!("classes" in ignores)){ - each(query.classes, function(cname, idx, arr){ - // get the class name - /* - var isWildcard = cname.charAt(cname.length-1) == "*"; - if(isWildcard){ - cname = cname.substr(0, cname.length-1); - } - // 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|$)"); - ff = agree(ff, function(elem){ - return re.test(elem.className); - }); - ff.count = idx; - }); - } - - if(!("pseudos" in ignores)){ - each(query.pseudos, function(pseudo){ - var pn = pseudo.name; - if(pseudos[pn]){ - ff = agree(ff, pseudos[pn](pn, pseudo.value)); - } - }); - } - - if(!("attrs" in ignores)){ - each(query.attrs, function(attr){ - var matcher; - var a = attr.attr; - // type, attr, matchFor - if(attr.type && attrs[attr.type]){ - matcher = attrs[attr.type](a, attr.matchFor); - }else if(a.length){ - matcher = defaultGetter(a); - } - if(matcher){ - ff = agree(ff, matcher); - } - }); - } - - if(!("id" in ignores)){ - if(query.id){ - ff = agree(ff, function(elem){ - return (!!elem && (elem.id == query.id)); - }); - } - } - - if(!ff){ - if(!("default" in ignores)){ - ff = yesman; - } - } - return ff; - }; - - var _nextSibling = function(filterFunc){ - return function(node, ret, bag){ - while(node = node[_ns]){ - if(_noNES && (!_isElement(node))){ continue; } - if( - (!bag || _isUnique(node, bag)) && - filterFunc(node) - ){ - ret.push(node); - } - break; - } - return ret; - } - }; - - var _nextSiblings = function(filterFunc){ - return function(root, ret, bag){ - var te = root[_ns]; - while(te){ - if(_simpleNodeTest(te)){ - if(bag && !_isUnique(te, bag)){ - break; - } - if(filterFunc(te)){ - ret.push(te); - } - } - te = te[_ns]; - } - return ret; - } - }; - - // get an array of child *elements*, skipping text and comment nodes - var _childElements = function(filterFunc){ - filterFunc = filterFunc||yesman; - return function(root, ret, bag){ - // get an array of child elements, skipping text and comment nodes - var te, x = 0, tret = root.children || root.childNodes; - while(te = tret[x++]){ - if( - _simpleNodeTest(te) && - (!bag || _isUnique(te, bag)) && - (filterFunc(te, x)) - ){ - ret.push(te); - } - } - return ret; - }; - }; - - /* - // thanks, Dean! - var itemIsAfterRoot = d.isIE ? function(item, root){ - return (item.sourceIndex > root.sourceIndex); - } : function(item, root){ - return (item.compareDocumentPosition(root) == 2); - }; - */ - - // test to see if node is below root - var _isDescendant = function(node, root){ - var pn = node.parentNode; - while(pn){ - if(pn == root){ - break; - } - pn = pn.parentNode; - } - return !!pn; - }; - - var _getElementsFuncCache = {}; - - var getElementsFunc = function(query){ - var retFunc = _getElementsFuncCache[query.query]; - // if we've got a cached dispatcher, just use that - if(retFunc){ return retFunc; } - // else, generate a new on - - // NOTE: - // this function returns a function that searches for nodes and - // 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 - // 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 - // dispatchers will be called every time. The logic of generating - // efficient dispatchers looks like this in pseudo code: - // - // # if it's a purely descendant query (no ">", "+", or "~" modifiers) - // if infixOperator == " ": - // if only(id): - // return def(root): - // return d.byId(id, root); - // - // elif id: - // return def(root): - // return filter(d.byId(id, root)); - // - // elif cssClass && getElementsByClassName: - // return def(root): - // return filter(root.getElementsByClassName(cssClass)); - // - // elif only(tag): - // return def(root): - // return root.getElementsByTagName(tagName); - // - // else: - // # search by tag name, then filter - // return def(root): - // return filter(root.getElementsByTagName(tagName||"*")); - // - // elif infixOperator == ">": - // # search direct children - // return def(root): - // return filter(root.children); - // - // elif infixOperator == "+": - // # search next sibling - // return def(root): - // return filter(root.nextElementSibling); - // - // elif infixOperator == "~": - // # search rightward siblings - // return def(root): - // return filter(nextSiblings(root)); - - var io = query.infixOper; - var oper = (io ? io.oper : ""); - // the default filter func which tests for all conditions in the query - // part. This is potentially inefficient, so some optimized paths may - // re-define it to test fewer things. - var filterFunc = getSimpleFilterFunc(query, { el: 1 }); - var qt = query.tag; - var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; - - if(!oper){ - // if there's no infix operator, then it's a descendant query. ID - // and "elements by class name" variants can be accelerated so we - // call them out explicitly: - if(query.id){ - // 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 : - getSimpleFilterFunc(query, { el: 1, id: 1 }); - - retFunc = function(root, arr){ - var te = dom.byId(query.id, (root.ownerDocument||root)); - if(!te || !filterFunc(te)){ return; } - if(9 == root.nodeType){ // if root's a doc, we just return directly - return getArr(te, arr); - }else{ // otherwise check ancestry - if(_isDescendant(te, root)){ - return getArr(te, arr); - } - } - } - }else if( - ecs && - // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && - query.classes.length && - !cssCaseBug - ){ - // it's a class-based query and we've got a fast way to run it. - - // ignore class and ID filters since we will have handled both - filterFunc = getSimpleFilterFunc(query, { el: 1, classes: 1, id: 1 }); - var classesString = query.classes.join(" "); - retFunc = function(root, arr, bag){ - var ret = getArr(0, arr), te, x=0; - var tret = root.getElementsByClassName(classesString); - while((te = tret[x++])){ - if(filterFunc(te, root) && _isUnique(te, bag)){ - ret.push(te); - } - } - return ret; - }; - - }else if(!wildcardTag && !query.loops){ - // it's tag only. Fast-path it. - retFunc = function(root, arr, bag){ - var ret = getArr(0, arr), te, x=0; - var tret = root.getElementsByTagName(query.getTag()); - while((te = tret[x++])){ - if(_isUnique(te, bag)){ - ret.push(te); - } - } - return ret; - }; - }else{ - // the common case: - // a descendant selector without a fast path. By now it's got - // to have a tag selector, even if it's just "*" so we query - // by that and filter - filterFunc = getSimpleFilterFunc(query, { el: 1, tag: 1, id: 1 }); - retFunc = function(root, arr, bag){ - var ret = getArr(0, arr), te, x=0; - // we use getTag() to avoid case sensitivity issues - var tret = root.getElementsByTagName(query.getTag()); - while((te = tret[x++])){ - if(filterFunc(te, root) && _isUnique(te, bag)){ - ret.push(te); - } - } - return ret; - }; - } - }else{ - // the query is scoped in some way. Instead of querying by tag we - // use some other collection to find candidate nodes - var skipFilters = { el: 1 }; - if(wildcardTag){ - skipFilters.tag = 1; - } - filterFunc = getSimpleFilterFunc(query, skipFilters); - if("+" == oper){ - retFunc = _nextSibling(filterFunc); - }else if("~" == oper){ - retFunc = _nextSiblings(filterFunc); - }else if(">" == oper){ - retFunc = _childElements(filterFunc); - } - } - // cache it and return - return _getElementsFuncCache[query.query] = retFunc; - }; - - var filterDown = function(root, queryParts){ - // NOTE: - // this is the guts of the DOM query system. It takes a list of - // parsed query parts and a root and finds children which match - // the selector represented by the parts - var candidates = getArr(root), qp, x, te, qpl = queryParts.length, bag, ret; - - for(var i = 0; i < qpl; i++){ - ret = []; - qp = queryParts[i]; - x = candidates.length - 1; - if(x > 0){ - // if we have more than one root at this level, provide a new - // hash to use for checking group membership but tell the - // system not to post-filter us since we will already have been - // gauranteed to be unique - bag = {}; - ret.nozip = true; - } - var gef = getElementsFunc(qp); - for(var j = 0; (te = candidates[j]); j++){ - // for every root, get the elements that match the descendant - // selector, adding them to the "ret" array and filtering them - // via membership in this level's bag. If there are more query - // parts, then this level's return will be used as the next - // level's candidates - gef(te, ret, bag); - } - if(!ret.length){ break; } - candidates = ret; - } - return ret; - }; - - //////////////////////////////////////////////////////////////////////// - // the query runner - //////////////////////////////////////////////////////////////////////// - - // these are the primary caches for full-query results. The query - // dispatcher functions are generated then stored here for hash lookup in - // the future - var _queryFuncCacheDOM = {}, - _queryFuncCacheQSA = {}; - - // this is the second level of spliting, from full-length queries (e.g., - // "div.foo .bar") into simple query expressions (e.g., ["div.foo", - // ".bar"]) - var getStepQueryFunc = function(query){ - var qparts = getQueryParts(trim(query)); - - // if it's trivial, avoid iteration and zipping costs - if(qparts.length == 1){ - // we optimize this case here to prevent dispatch further down the - // chain, potentially slowing things down. We could more elegantly - // handle this in filterDown(), but it's slower for simple things - // that need to be fast (e.g., "#someId"). - var tef = getElementsFunc(qparts[0]); - return function(root){ - var r = tef(root, []); - if(r){ r.nozip = true; } - return r; - } - } - - // otherwise, break it up and return a runner that iterates over the parts recursively - return function(root){ - return filterDown(root, qparts); - } - }; - - // NOTES: - // * we can't trust QSA for anything but document-rooted queries, so - // caching is split into DOM query evaluators and QSA query evaluators - // * caching query results is dirty and leak-prone (or, at a minimum, - // prone to unbounded growth). Other toolkits may go this route, but - // they totally destroy their own ability to manage their memory - // footprint. If we implement it, it should only ever be with a fixed - // total element reference # limit and an LRU-style algorithm since JS - // has no weakref support. Caching compiled query evaluators is also - // potentially problematic, but even on large documents the size of the - // query evaluators is often < 100 function objects per evaluator (and - // LRU can be applied if it's ever shown to be an issue). - // * since IE's QSA support is currently only for HTML documents and even - // then only in IE 8's "standards mode", we have to detect our dispatch - // route at query time and keep 2 separate caches. Ugg. - - // we need to determine if we think we can run a given query via - // querySelectorAll or if we'll need to fall back on DOM queries to get - // there. We need a lot of information about the environment and the query - // to make the determiniation (e.g. does it support QSA, does the query in - // question work in the native QSA impl, etc.). - var nua = navigator.userAgent; - // some versions of Safari provided QSA, but it was buggy and crash-prone. - // We need te detect the right "internal" webkit version to make this work. - var wk = "WebKit/"; - var is525 = ( - dojo.isWebKit && - (nua.indexOf(wk) > 0) && - (parseFloat(nua.split(wk)[1]) > 528) - ); - - // IE QSA queries may incorrectly include comment nodes, so we throw the - // zipping function into "remove" comments mode instead of the normal "skip - // it" which every other QSA-clued browser enjoys - var noZip = dojo.isIE ? "commentStrip" : "nozip"; - - var qsa = "querySelectorAll"; - var qsaAvail = ( - !!getDoc()[qsa] && - // see #5832 - (!dojo.isSafari || (dojo.isSafari > 3.1) || is525 ) - ); - - //Don't bother with n+3 type of matches, IE complains if we modify those. - var infixSpaceRe = /n\+\d|([^ ])?([>~+])([^ =])?/g; - var infixSpaceFunc = function(match, pre, ch, post){ - return ch ? (pre ? pre + " " : "") + ch + (post ? " " + post : "") : /*n+3*/ match; - }; - - var getQueryFunc = function(query, forceDOM){ - //Normalize query. The CSS3 selectors spec allows for omitting spaces around - //infix operators, >, ~ and + - //Do the work here since detection for spaces is used as a simple "not use QSA" - //test below. - query = query.replace(infixSpaceRe, infixSpaceFunc); - - if(qsaAvail){ - // if we've got a cached variant and we think we can do it, run it! - var qsaCached = _queryFuncCacheQSA[query]; - if(qsaCached && !forceDOM){ return qsaCached; } - } - - // else if we've got a DOM cached variant, assume that we already know - // all we need to and use it - var domCached = _queryFuncCacheDOM[query]; - if(domCached){ return domCached; } - - // 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. - - var qcz = query.charAt(0); - var nospace = (-1 == query.indexOf(" ")); - - // byId searches are wicked fast compared to QSA, even when filtering - // is required - if( (query.indexOf("#") >= 0) && (nospace) ){ - forceDOM = true; - } - - 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) && - // IE's QSA impl sucks on pseudos - (!dojo.isIE || (query.indexOf(":") == -1)) && - - (!(cssCaseBug && (query.indexOf(".") >= 0))) && - - // FIXME: - // need to tighten up browser rules on ":contains" and "|=" to - // figure out which aren't good - // Latest webkit (around 531.21.8) does not seem to do well with :checked on option - // 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("|=") == -1) // some browsers don't grok it - ); - - // 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 - // trivially rewrite the query to the form "#synid > .thinger" to - // use the QSA branch - - - if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? - (query + " *") : query; - return _queryFuncCacheQSA[query] = function(root){ - try{ - // the QSA system contains an egregious spec bug which - // limits us, effectively, to only running QSA queries over - // entire documents. See: - // http://ejohn.org/blog/thoughts-on-queryselectorall/ - // despite this, we can also handle QSA runs on simple - // selectors, but we don't want detection to be expensive - // so we're just checking for the presence of a space char - // right now. Not elegant, but it's cheaper than running - // the query parser when we might not need to - if(!((9 == root.nodeType) || nospace)){ throw ""; } - var r = root[qsa](tq); - // skip expensive duplication checks and just wrap in a NodeList - r[noZip] = true; - return r; - }catch(e){ - // else run the DOM branch on this query, ensuring that we - // default that way in the future - return getQueryFunc(query, true)(root); - } - } - }else{ - // DOM branch - var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? - // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - 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 - function(root){ - var pindex = 0, // avoid array alloc for every invocation - ret = [], - tp; - while((tp = parts[pindex++])){ - ret = ret.concat(getStepQueryFunc(tp)(root)); - } - return ret; - } - ); - } - }; - - var _zipIdx = 0; - - // NOTE: - // this function is Moo inspired, but our own impl to deal correctly - // with XML in IE - var _nodeUID = dojo.isIE ? function(node){ - if(caseSensitive){ - // XML docs don't have uniqueID on their nodes - return (node.getAttribute("_uid") || node.setAttribute("_uid", ++_zipIdx) || _zipIdx); - - }else{ - return node.uniqueID; - } - } : - function(node){ - return (node._uid || (node._uid = ++_zipIdx)); - }; - - // determine if a node in is unique in a "bag". In this case we don't want - // 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. - var _isUnique = function(node, bag){ - if(!bag){ return 1; } - var id = _nodeUID(node); - if(!bag[id]){ return bag[id] = 1; } - return 0; - }; - - // attempt to efficiently determine if an item in a list is a dupe, - // returning a list of "uniques", hopefully in doucment order - var _zipIdxName = "_zipIdx"; - var _zip = function(arr){ - if(arr && arr.nozip){ - return arr; - } - var ret = []; - if(!arr || !arr.length){ return ret; } - if(arr[0]){ - ret.push(arr[0]); - } - if(arr.length < 2){ return ret; } - - _zipIdx++; - - // we have to fork here for IE and XML docs because we can't set - // expandos on their nodes (apparently). *sigh* - if(dojo.isIE && caseSensitive){ - var szidx = _zipIdx+""; - arr[0].setAttribute(_zipIdxName, szidx); - for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ - ret.push(te); - } - te.setAttribute(_zipIdxName, szidx); - } - }else if(dojo.isIE && arr.commentStrip){ - try{ - for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ - ret.push(te); - } - } - }catch(e){ /* squelch */ } - }else{ - if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } - for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ - ret.push(te); - } - te[_zipIdxName] = _zipIdx; - } - } - return ret; - }; - - // the main executor - var query = function(/*String*/ query, /*String|DOMNode?*/ root){ - // summary: - // Returns nodes which match the given CSS3 selector, searching the - // entire document by default but optionally taking a node to scope - // the search by. Returns an array. - // description: - // dojo.query() is the swiss army knife of DOM node manipulation in - // Dojo. Much like Prototype's "$$" (bling-bling) function or JQuery's - // "$" function, dojo.query provides robust, high-performance - // CSS-based node selector support with the option of scoping searches - // to a particular sub-tree of a document. - // - // Supported Selectors: - // -------------------- - // - // acme supports a rich set of CSS3 selectors, including: - // - // * class selectors (e.g., `.foo`) - // * node type selectors like `span` - // * ` ` descendant selectors - // * `>` child element selectors - // * `#foo` style ID selectors - // * `*` universal selector - // * `~`, the preceded-by sibling selector - // * `+`, the immediately preceded-by sibling selector - // * attribute queries: - // | * `[foo]` attribute presence selector - // | * `[foo='bar']` attribute value exact match - // | * `[foo~='bar']` attribute value list item match - // | * `[foo^='bar']` attribute start match - // | * `[foo$='bar']` attribute end match - // | * `[foo*='bar']` attribute substring match - // * `:first-child`, `:last-child`, and `:only-child` positional selectors - // * `:empty` content emtpy selector - // * `:checked` pseudo selector - // * `:nth-child(n)`, `:nth-child(2n+1)` style positional calculations - // * `:nth-child(even)`, `:nth-child(odd)` positional selectors - // * `:not(...)` negation pseudo selectors - // - // Any legal combination of these selectors will work with - // `dojo.query()`, including compound selectors ("," delimited). - // Very complex and useful searches can be constructed with this - // 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 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: - // | * `:root`, `:lang()`, `:target`, `:focus` - // * all visual and state selectors: - // | * `: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 - // Strict), dojo.query() will detect this and "do the right - // thing". Case sensitivity is dependent upon the document being - // searched and not the query used. It is therefore possible to - // use case-sensitive queries on strict sub-documents (iframes, - // etc.) or XML documents while still assuming case-insensitivity - // for a host/root document. - // - // Non-selector Queries: - // --------------------- - // - // If something other than a String is passed for the query, - // `dojo.query` will return a new `dojo.NodeList` instance - // constructed from that parameter alone and all further - // processing will stop. This means that if you have a reference - // to a node or NodeList, you can quickly construct a new NodeList - // from the original by calling `dojo.query(node)` or - // `dojo.query(list)`. - // - // query: - // The CSS3 expression to match against. For details on the syntax of - // CSS3 selectors, see <http://www.w3.org/TR/css3-selectors/#selectors> - // root: - // A DOMNode (or node id) to scope the search from. Optional. - // returns: Array - // example: - // search the entire document for elements with the class "foo": - // | dojo.query(".foo"); - // these elements will match: - // | <span class="foo"></span> - // | <span class="foo bar"></span> - // | <p class="thud foo"></p> - // example: - // search the entire document for elements with the classes "foo" *and* "bar": - // | dojo.query(".foo.bar"); - // these elements will match: - // | <span class="foo bar"></span> - // while these will not: - // | <span class="foo"></span> - // | <p class="thud foo"></p> - // example: - // find `<span>` elements which are descendants of paragraphs and - // which have a "highlighted" class: - // | dojo.query("p span.highlighted"); - // the innermost span in this fragment matches: - // | <p class="foo"> - // | <span>... - // | <span class="highlighted foo bar">...</span> - // | </span> - // | </p> - // example: - // set an "odd" class on all odd table rows inside of the table - // `#tabular_data`, using the `>` (direct child) selector to avoid - // affecting any nested tables: - // | dojo.query("#tabular_data > tbody > tr:nth-child(odd)").addClass("odd"); - // example: - // remove all elements with the class "error" from the document - // and store them in a list: - // | var errors = dojo.query(".error").orphan(); - // example: - // add an onclick handler to every submit button in the document - // which causes the form to be sent via Ajax instead: - // | dojo.query("input[type='submit']").onclick(function(e){ - // | dojo.stopEvent(e); // prevent sending the form - // | var btn = e.target; - // | dojo.xhrPost({ - // | form: btn.form, - // | load: function(data){ - // | // replace the form with the response - // | var div = dojo.doc.createElement("div"); - // | dojo.place(div, btn.form, "after"); - // | div.innerHTML = data; - // | dojo.style(btn.form, "display", "none"); - // | } - // | }); - // | }); - - root = root||getDoc(); - var od = root.ownerDocument||root.documentElement; - - // throw the big case sensitivity switch - - // 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") || - (dojo.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && - (dojo.isIE ? od.xml : (root.xmlVersion || od.xmlVersion)); - - // 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. - var r = getQueryFunc(query)(root); - - // FIXME: - // need to investigate this branch WRT #8074 and #8075 - if(r && r.nozip){ - return r; - } - return _zip(r); // dojo.NodeList - }; - query.filter = function(/*Node[]*/ nodeList, /*String*/ filter, /*String|DOMNode?*/ root){ - // summary: - // function for filtering a NodeList based on a selector, optimized for simple selectors - var tmpNodeList = [], - 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; - }; - return query; -});//end defineQuery diff --git a/lib/dojo/selector/lite.js.uncompressed.js b/lib/dojo/selector/lite.js.uncompressed.js deleted file mode 100644 index 374f7a2ad..000000000 --- a/lib/dojo/selector/lite.js.uncompressed.js +++ /dev/null @@ -1,264 +0,0 @@ -define("dojo/selector/lite", ["../has", "../_base/kernel"], function(has, dojo){ -"use strict"; -// summary: -// A small lightweight query selector engine that implements CSS2.1 selectors -// minus pseudo-classes and the sibling combinator, plus CSS3 attribute selectors -var testDiv = document.createElement("div"); -var matchesSelector = testDiv.matchesSelector || testDiv.webkitMatchesSelector || testDiv.mozMatchesSelector || testDiv.msMatchesSelector || testDiv.oMatchesSelector; // IE9, WebKit, Firefox have this, but not Opera yet -var querySelectorAll = testDiv.querySelectorAll; -has.add("dom-matches-selector", !!matchesSelector); -has.add("dom-qsa", !!querySelectorAll); - -// this is a simple query engine. It has handles basic selectors, and for simple -// common selectors is extremely fast -var liteEngine = function(selector, root){ - if(combine && selector.indexOf(',') > -1){ - return combine(selector, root); - } - var match = (querySelectorAll ? - /^([\w]*)#([\w\-]+$)|^(\.)([\w\-\*]+$)|^(\w+$)/ : // this one only matches on simple queries where we can beat qSA with specific methods - /^([\w]*)#([\w\-]+)(?:\s+(.*))?$|(?:^|(>|.+\s+))([\w\-\*]+)(\S*$)/) // this one matches parts of the query that we can use to speed up manual filtering - .exec(selector); - root = root || document; - if(match){ - // fast path regardless of whether or not querySelectorAll exists - if(match[2]){ - // an #id - // use dojo.byId if available as it fixes the id retrieval in IE - var found = dojo.byId ? dojo.byId(match[2]) : document.getElementById(match[2]); - if(!found || (match[1] && match[1] != found.tagName.toLowerCase())){ - // if there is a tag qualifer and it doesn't match, no matches - return []; - } - if(root != document){ - // there is a root element, make sure we are a child of it - var parent = found; - while(parent != root){ - parent = parent.parentNode; - if(!parent){ - return []; - } - } - } - return match[3] ? - liteEngine(match[3], found) - : [found]; - } - if(match[3] && root.getElementsByClassName){ - // a .class - return root.getElementsByClassName(match[4]); - } - var found; - if(match[5]){ - // a tag - found = root.getElementsByTagName(match[5]); - if(match[4] || match[6]){ - selector = (match[4] || "") + match[6]; - }else{ - // that was the entirety of the query, return results - return found; - } - } - } - if(querySelectorAll){ - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if (root.nodeType === 1 && root.nodeName.toLowerCase() !== "object"){ - return useRoot(root, selector, root.querySelectorAll); - }else{ - // we can use the native qSA - return root.querySelectorAll(selector); - } - }else if(!found){ - // search all children and then filter - found = root.getElementsByTagName("*"); - } - // now we filter the nodes that were found using the matchesSelector - var results = []; - for(var i = 0, l = found.length; i < l; i++){ - var node = found[i]; - if(node.nodeType == 1 && jsMatchesSelector(node, selector, root)){ - // keep the nodes that match the selector - results.push(node); - } - } - return results; -}; -var useRoot = function(context, query, method){ - // this function creates a temporary id so we can do rooted qSA queries, this is taken from sizzle - var oldContext = context, - old = context.getAttribute( "id" ), - nid = old || "__dojo__", - hasParent = context.parentNode, - relativeHierarchySelector = /^\s*[+~]/.test( query ); - - if(relativeHierarchySelector && !hasParent){ - return []; - } - if(!old){ - context.setAttribute("id", nid); - }else{ - nid = nid.replace(/'/g, "\\$&"); - } - if(relativeHierarchySelector && hasParent){ - context = context.parentNode; - } - - try { - return method.call(context, "[id='" + nid + "'] " + query ); - } finally { - if ( !old ) { - oldContext.removeAttribute( "id" ); - } - } -}; - -if(!has("dom-matches-selector")){ - var jsMatchesSelector = (function(){ - // a JS implementation of CSS selector matching, first we start with the various handlers - var caseFix = testDiv.tagName == "div" ? "toLowerCase" : "toUpperCase"; - function tag(tagName){ - tagName = tagName[caseFix](); - return function(node){ - return node.tagName == tagName; - } - } - function className(className){ - var classNameSpaced = ' ' + className + ' '; - return function(node){ - return node.className.indexOf(className) > -1 && (' ' + node.className + ' ').indexOf(classNameSpaced) > -1; - } - } - var attrComparators = { - "^=": function(attrValue, value){ - return attrValue.indexOf(value) == 0; - }, - "*=": function(attrValue, value){ - return attrValue.indexOf(value) > -1; - }, - "$=": function(attrValue, value){ - return attrValue.substring(attrValue.length - value.length, attrValue.length) == value; - }, - "~=": function(attrValue, value){ - return (' ' + attrValue + ' ').indexOf(' ' + value + ' ') > -1; - }, - "|=": function(attrValue, value){ - return (attrValue + '-').indexOf(value + '-') == 0; - }, - "=": function(attrValue, value){ - return attrValue == value; - }, - "": function(attrValue, value){ - return true; - } - }; - function attr(name, value, type){ - if(value.match(/['"]/)){ - // it is quoted, do an eval to parse the string (CSS and JS parsing are close enough) - value = eval(value); - } - var comparator = attrComparators[type || ""]; - return function(node){ - var attrValue = node.getAttribute(name); - return attrValue && comparator(attrValue, value); - } - } - function ancestor(matcher){ - return function(node, root){ - while((node = node.parentNode) != root){ - if(matcher(node, root)){ - return true; - } - } - }; - } - function parent(matcher){ - return function(node, root){ - node = node.parentNode; - return matcher ? - node != root && matcher(node, root) - : node == root; - }; - } - var cache = {}; - function and(matcher, next){ - return matcher ? - function(node, root){ - return next(node) && matcher(node, root); - } - : next; - } - return function(node, selector, root){ - // this returns true or false based on if the node matches the selector (optionally within the given root) - var matcher = cache[selector]; // check to see if we have created a matcher function for the given selector - if(!matcher){ - // create a matcher function for the given selector - // parse the selectors - if(selector.replace(/(?:\s*([> ])\s*)|(\.)?([\w-]+)|\[([\w-]+)\s*(.?=)?\s*([^\]]*)\]/g, function(t, combinator, type, value, attrName, attrType, attrValue){ - if(value){ - if(type == "."){ - matcher = and(matcher, className(value)); - } - else{ - matcher = and(matcher, tag(value)); - } - } - else if(combinator){ - matcher = (combinator == " " ? ancestor : parent)(matcher); - } - else if(attrName){ - matcher = and(matcher, attr(attrName, attrValue, attrType)); - } - return ""; - })){ - throw new Error("Syntax error in query"); - } - if(!matcher){ - return true; - } - cache[selector] = matcher; - } - // now run the matcher function on the node - return matcher(node, root); - }; - })(); -} -if(!has("dom-qsa")){ - var combine = function(selector, root){ - // combined queries - selector = selector.split(/\s*,\s*/); - var indexed = []; - // add all results and keep unique ones, this only runs in IE, so we take advantage - // of known IE features, particularly sourceIndex which is unique and allows us to - // order the results - for(var i = 0; i < selector.length; i++){ - var results = liteEngine(selector[i], root); - for(var j = 0, l = results.length; j < l; j++){ - var node = results[j]; - indexed[node.sourceIndex] = node; - } - } - // now convert from a sparse array to a dense array - var totalResults = []; - for(i in indexed){ - totalResults.push(indexed[i]); - } - return totalResults; - }; -} - -liteEngine.match = matchesSelector ? function(node, selector, root){ - if(root){ - // doesn't support three args, use rooted id trick - return useRoot(root, selector, function(query){ - return matchesSelector.call(node, query); - }); - } - // we have a native matchesSelector, use that - return matchesSelector.call(node, selector); -} : jsMatchesSelector; // otherwise use the JS matches impl - -return liteEngine; -}); diff --git a/lib/dojo/store/Cache.js.uncompressed.js b/lib/dojo/store/Cache.js.uncompressed.js deleted file mode 100644 index d6951deb3..000000000 --- a/lib/dojo/store/Cache.js.uncompressed.js +++ /dev/null @@ -1,148 +0,0 @@ -define("dojo/store/Cache", ["../_base/lang","../_base/Deferred" -],function(lang, Deferred) { - // module: - // dojo/store/Cache - // summary: - // TODOC - -var store = lang.getObject("dojo.store", true); - -/*===== -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; - } -}); -=====*/ -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 lang.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 Deferred.when(cachingStore.get(id), function(result){ - return result || Deferred.when(masterStore.get(id, directives), function(result){ - if(result){ - cachingStore.put(result, {id: id}); - } - return result; - }); - }); - }, - add: function(object, directives){ - return Deferred.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 Deferred.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 Deferred.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. - } -}); -=====*/ -return store.Cache; -}); diff --git a/lib/dojo/store/DataStore.js.uncompressed.js b/lib/dojo/store/DataStore.js.uncompressed.js deleted file mode 100644 index e2a96e316..000000000 --- a/lib/dojo/store/DataStore.js.uncompressed.js +++ /dev/null @@ -1,170 +0,0 @@ -define("dojo/store/DataStore", ["../_base/lang", "../_base/declare", "../_base/Deferred", "../_base/array", "./util/QueryResults" -], function(lang,declare,Deferred,array,QueryResults) { - // module: - // dojo/store/DataStore - // summary: - // TODOC - - -return 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". - lang.mixin(this, options); - if(!"idProperty" in options){ - var idAttribute; - try{ - idAttribute = this.store.getIdentityAttributes(); - }catch(e){ - // some store are not requiring an item instance to give us the ID attributes - // but some other do and throw errors in that case. - } - // if no idAttribute we have implicit id - this.idProperty = (!idAttribute || !idAttributes[0]) || this.idProperty; - } - var features = this.store.getFeatures(); - // check the feature set and null out any methods that shouldn't be available - if(!features["dojo.data.api.Read"]){ - this.get = null; - } - if(!features["dojo.data.api.Identity"]){ - this.getIdentity = null; - } - if(!features["dojo.data.api.Write"]){ - this.put = this.add = null; - } - }, - // idProperty: String - // The object property to use to store the identity of the store items. - idProperty: "id", - // store: - // The object store to convert to a data store - store: null, - _objectConverter: function(callback){ - var store = this.store; - var idProperty = this.idProperty; - 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]); - } - if(!(idProperty in object)){ - object[idProperty] = store.getIdentity(item); - } - 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 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; - var idProperty = this.idProperty; - if(typeof id == "undefined"){ - store.newItem(object); - }else{ - store.fetchItemByIdentity({ - identity: id, - onItem: function(item){ - if(item){ - for(var i in object){ - if(i != idProperty && // don't copy id properties since they are immutable and should be omitted for implicit ids - 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 fetchHandle; - var deferred = new Deferred(function(){ fetchHandle.abort && fetchHandle.abort(); }); - deferred.total = new Deferred(); - var converter = this._objectConverter(function(object){return object;}); - fetchHandle = this.store.fetch(lang.mixin({ - query: query, - onBegin: function(count){ - deferred.total.resolve(count); - }, - onComplete: function(results){ - deferred.resolve(array.map(results, converter)); - }, - onError: function(error){ - deferred.reject(error); - } - }, options)); - return 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]; - } -}); -}); diff --git a/lib/dojo/store/JsonRest.js.uncompressed.js b/lib/dojo/store/JsonRest.js.uncompressed.js deleted file mode 100644 index a395f907f..000000000 --- a/lib/dojo/store/JsonRest.js.uncompressed.js +++ /dev/null @@ -1,155 +0,0 @@ -define("dojo/store/JsonRest", ["../_base/xhr", "../json", "../_base/declare", "./util/QueryResults" -], function(xhr, JSON, declare, QueryResults) { - // module: - // dojo/store/JsonRest - // summary: - // The module defines a JSON/REST based object store - -return declare("dojo.store.JsonRest", null, { - // summary: - // This is a basic store for RESTful communicating with a server through JSON - // formatted data. It implements dojo.store.api.Store. - - 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 - declare.safeMixin(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", - // sortParam: String - // The query parameter to used for holding sort information. If this is omitted, than - // the sort information is included in a functional query token to avoid colliding - // with the set of name/value pairs. - - 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 = this.accepts; - return xhr("GET", { - url:this.target + id, - handleAs: "json", - headers: headers - }); - }, - // accepts: String - // Defines the Accept header to use on HTTP requests - accepts: "application/javascript, application/json", - 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 xhr(hasId && !options.incremental ? "PUT" : "POST", { - url: hasId ? this.target + id : this.target, - postData: JSON.stringify(object), - handleAs: "json", - headers:{ - "Content-Type": "application/json", - Accept: this.accepts, - "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 xhr("DELETE",{ - 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: this.accepts}; - 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(query && typeof query == "object"){ - query = xhr.objectToQuery(query); - query = query ? "?" + query: ""; - } - if(options && options.sort){ - var sortParam = this.sortParam; - query += (query ? "&" : "?") + (sortParam ? sortParam + '=' : "sort("); - for(var i = 0; i<options.sort.length; i++){ - var sort = options.sort[i]; - query += (i > 0 ? "," : "") + (sort.descending ? '-' : '+') + encodeURIComponent(sort.attribute); - } - if(!sortParam){ - query += ")"; - } - } - var results = xhr("GET", { - 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 QueryResults(results); - } -}); - -}); \ No newline at end of file diff --git a/lib/dojo/store/Memory.js.uncompressed.js b/lib/dojo/store/Memory.js.uncompressed.js deleted file mode 100644 index ecea859b9..000000000 --- a/lib/dojo/store/Memory.js.uncompressed.js +++ /dev/null @@ -1,161 +0,0 @@ -define("dojo/store/Memory", ["../_base/declare", "./util/QueryResults", "./util/SimpleQueryEngine"], function(declare, QueryResults, SimpleQueryEngine) { - // module: - // dojo/store/Memory - // summary: - // The module defines an in-memory object store. - - -return 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. - for(var i in options){ - this[i] = options[i]; - } - 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 indices into the data array by id - index:null, - - // queryEngine: Function - // Defines the query engine to use for querying the data store - queryEngine: 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.data[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 data = this.data, - index = this.index, - idProperty = this.idProperty; - var id = (options && "id" in options) ? options.id : idProperty in object ? object[idProperty] : Math.random(); - if(id in index){ - // object exists - if(options && options.overwrite === false){ - throw new Error("Object already exists"); - } - // replace the entry in data - data[index[id]] = object; - }else{ - // add the new object - index[id] = data.push(object) - 1; - } - 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 - (options = options || {}).overwrite = false; - // call put with overwrite being false - 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 - // returns: Boolean - // Returns true if an object was removed, falsy (undefined) if no object matched the id - var index = this.index; - var data = this.data; - if(id in index){ - data.splice(index[id], 1); - // now we have to reindex - this.setData(data); - return true; - } - }, - 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 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; - } - this.index = {}; - for(var i = 0, l = data.length; i < l; i++){ - this.index[data[i][this.idProperty]] = i; - } - } -}); - -}); diff --git a/lib/dojo/store/Observable.js.uncompressed.js b/lib/dojo/store/Observable.js.uncompressed.js deleted file mode 100644 index 62e4a8591..000000000 --- a/lib/dojo/store/Observable.js.uncompressed.js +++ /dev/null @@ -1,175 +0,0 @@ -define("dojo/store/Observable", ["../_base/kernel", "../_base/lang", "../_base/Deferred", "../_base/array" -], function(kernel, lang, Deferred, array) { - // module: - // dojo/store/Observable - // summary: - // TODOC - -var ds = lang.getObject("dojo.store", true); - -return ds.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 undef, 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 = lang.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){ - Deferred.when(results, function(resultsArray){ - var atEnd = resultsArray.length != options.count; - var i, l, listener; - 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 !== undef){ - // 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)){ - - var firstInsertedInto = removedFrom > -1 ? - removedFrom : // put back in the original slot so it doesn't move unless it needs to (relying on a stable sort below) - resultsArray.length; - resultsArray.splice(firstInsertedInto, 0, changed); // add the new item - insertedInto = array.indexOf(queryExecutor(resultsArray), changed); // sort it - // we now need to push the chagne back into the original results array - resultsArray.splice(firstInsertedInto, 1); // remove the inserted item from the previous index - - if((options.start && insertedInto == 0) || - (!atEnd && insertedInto == resultsArray.length)){ - // if it is at the end of the page, assume it goes into the prev or next page - insertedInto = -1; - }else{ - resultsArray.splice(insertedInto, 0, changed); // and insert into the results array with the correct index - } - } - }else if(changed && !options.start){ - // 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 - var index = array.indexOf(listeners, listener); - if(index > -1){ // check to make sure we haven't already called cancel - listeners.splice(index, 1); - if(!listeners.length){ - // no more listeners, remove the query updater too - queryUpdaters.splice(array.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{ - var results = original.apply(this, arguments); - Deferred.when(results, 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/api/Store.js.uncompressed.js b/lib/dojo/store/api/Store.js.uncompressed.js deleted file mode 100644 index 55078d771..000000000 --- a/lib/dojo/store/api/Store.js.uncompressed.js +++ /dev/null @@ -1,297 +0,0 @@ -define("dojo/store/api/Store", ["dojo/_base/declare"], function(declare) { - // module: - // dojo/store/api/Store - // summary: - // The module defines the Dojo object store interface. - -var Store = 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. - } -}); - -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; -}; - -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; -}; - -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; -}; - -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 -}); - -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. - } -}); -return Store; -}); diff --git a/lib/dojo/store/util/QueryResults.js.uncompressed.js b/lib/dojo/store/util/QueryResults.js.uncompressed.js deleted file mode 100644 index cd9e1969a..000000000 --- a/lib/dojo/store/util/QueryResults.js.uncompressed.js +++ /dev/null @@ -1,64 +0,0 @@ -define("dojo/store/util/QueryResults", ["../../_base/array", "../../_base/lang", "../../_base/Deferred" -], function(array, lang, Deferred) { - // module: - // dojo/store/util/QueryResults - // summary: - // The module defines a query results wrapper - -var util = lang.getObject("dojo.store.util", true); - -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 = lang.delegate(results); - } - function addIterativeMethod(method){ - if(!results[method]){ - results[method] = function(){ - var args = arguments; - return Deferred.when(results, function(results){ - Array.prototype.unshift.call(args, results); - return util.QueryResults(array[method].apply(array, args)); - }); - }; - } - } - addIterativeMethod("forEach"); - addIterativeMethod("filter"); - addIterativeMethod("map"); - if(!results.total){ - results.total = Deferred.when(results, function(results){ - return results.length; - }); - } - return results; -}; - -return util.QueryResults; -}); diff --git a/lib/dojo/store/util/SimpleQueryEngine.js.uncompressed.js b/lib/dojo/store/util/SimpleQueryEngine.js.uncompressed.js deleted file mode 100644 index 4f241e6f1..000000000 --- a/lib/dojo/store/util/SimpleQueryEngine.js.uncompressed.js +++ /dev/null @@ -1,108 +0,0 @@ -define("dojo/store/util/SimpleQueryEngine", ["../../_base/array"], function(arrayUtil) { - // module: - // dojo/store/util/SimpleQueryEngine - // summary: - // The module defines a simple filtering query engine for object stores. - -return 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 = arrayUtil.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.uncompressed.js b/lib/dojo/string.js.uncompressed.js deleted file mode 100644 index 14aef6c95..000000000 --- a/lib/dojo/string.js.uncompressed.js +++ /dev/null @@ -1,162 +0,0 @@ -define("dojo/string", ["./_base/kernel", "./_base/lang"], function(dojo, lang) { - // module: - // dojo/string - // summary: - // TODOC - -lang.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 ? - lang.hitch(thisObject, transform) : function(v){ return v; }; - - return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, - function(match, key, format){ - var value = lang.getObject(key, false, map); - if(format){ - value = lang.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 -} -=====*/ - -dojo.string.trim = String.prototype.trim ? - lang.trim : // aliasing to the native function - 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; - }; - -return dojo.string; -}); diff --git a/lib/dojo/text.js.uncompressed.js b/lib/dojo/text.js.uncompressed.js deleted file mode 100644 index 75d26766b..000000000 --- a/lib/dojo/text.js.uncompressed.js +++ /dev/null @@ -1,212 +0,0 @@ -define("dojo/text", ["./_base/kernel", "require", "./has", "./_base/xhr"], function(dojo, require, has, xhr){ - // module: - // dojo/text - // summary: - // This module implements the !dojo/text plugin and the dojo.cache API. - // description: - // We choose to include our own plugin to leverage functionality already contained in dojo - // and thereby reduce the size of the plugin compared to various foreign loader implementations. - // Also, this allows foreign AMD loaders to be used without their plugins. - // - // CAUTION: this module is designed to optionally function synchronously to support the dojo v1.x synchronous - // loader. This feature is outside the scope of the CommonJS plugins specification. - - var getText; - if(1){ - getText= function(url, sync, load){ - xhr("GET", {url:url, sync:!!sync, load:load}); - }; - }else{ - // TODOC: only works for dojo AMD loader - if(require.getText){ - getText= require.getText; - }else{ - console.error("dojo/text plugin failed to load because loader does not support getText"); - } - } - - var - theCache= {}, - - strip= function(text){ - //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; - }, - - notFound = {}, - - pending = {}, - - result= { - dynamic: - // the dojo/text caches it's own resources because of dojo.cache - true, - - normalize:function(id, toAbsMid){ - // id is something like (path may be relative): - // - // "path/to/text.html" - // "path/to/text.html!strip" - var parts= id.split("!"), - url= parts[0]; - return (/^\./.test(url) ? toAbsMid(url) : url) + (parts[1] ? "!" + parts[1] : ""); - }, - - load:function(id, require, load){ - // id is something like (path is always absolute): - // - // "path/to/text.html" - // "path/to/text.html!strip" - var - parts= id.split("!"), - stripFlag= parts.length>1, - absMid= parts[0], - url = require.toUrl(parts[0]), - text = notFound, - finish = function(text){ - load(stripFlag ? strip(text) : text); - }; - if(absMid in theCache){ - text = theCache[absMid]; - }else if(url in require.cache){ - text = require.cache[url]; - }else if(url in theCache){ - text = theCache[url]; - } - if(text===notFound){ - if(pending[url]){ - pending[url].push(finish); - }else{ - var pendingList = pending[url] = [finish]; - getText(url, !require.async, function(text){ - theCache[absMid]= theCache[url]= text; - for(var i = 0; i<pendingList.length;){ - pendingList[i++](text); - } - delete pending[url]; - }); - } - }else{ - finish(text); - } - } - }; - - dojo.cache= function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){ - // * (string string [value]) => (module, url, value) - // * (object [value]) => (module, value), url defaults to "" - // - // * if module is an object, then it must be convertable to a string - // * (module, url) module + (url ? ("/" + url) : "") must be a legal argument to require.toUrl - // * value may be a string or an object; if an object then may have the properties "value" and/or "sanitize" - var key; - if(typeof module=="string"){ - if(/\//.test(module)){ - // module is a version 1.7+ resolved path - key = module; - value = url; - }else{ - // module is a version 1.6- argument to dojo.moduleUrl - key = require.toUrl(module.replace(/\./g, "/") + (url ? ("/" + url) : "")); - } - }else{ - key = module + ""; - value = url; - } - var - val = (value != undefined && typeof value != "string") ? value.value : value, - sanitize = value && value.sanitize; - - if(typeof val == "string"){ - //We have a string, set cache value - theCache[key] = val; - return sanitize ? strip(val) : val; - }else if(val === null){ - //Remove cached value - delete theCache[key]; - return null; - }else{ - //Allow cache values to be empty strings. If key property does - //not exist, fetch it. - if(!(key in theCache)){ - getText(key, true, function(text){ - theCache[key]= text; - }); - } - return sanitize ? strip(theCache[key]) : theCache[key]; - } - }; - - return result; - -/*===== -dojo.cache = function(module, url, value){ - // summary: - // A getter and setter for storing the string content associated with the - // module and url arguments. - // description: - // If module is a string that contains slashes, then it is interpretted as a fully - // resolved path (typically a result returned by require.toUrl), and url should not be - // provided. This is the preferred signature. If module is a string that does not - // contain slashes, then url must also be provided and module and url are used to - // call `dojo.moduleUrl()` to generate a module URL. This signature is deprecated. - // If value is specified, the cache value for the moduleUrl will be set to - // that value. Otherwise, dojo.cache will fetch the moduleUrl and store it - // in its internal cache and return that cached value for the URL. To clear - // a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the - // the URL contents, only modules on the same domain of the page can use this capability. - // The build system can inline the cache values though, to allow for xdomain hosting. - // module: String||Object - // If a String with slashes, a fully resolved path; if a String without slashes, the - // module name to use for the base part of the URL, similar to module argument - // to `dojo.moduleUrl`. If an Object, something that has a .toString() method that - // generates a valid path for the cache item. For example, a dojo._Url object. - // url: String - // The rest of the path to append to the path derived from the module argument. If - // module is an object, then this second argument should be the "value" argument instead. - // value: String||Object? - // If a String, the value to use in the cache for the module/url combination. - // If an Object, it can have two properties: value and sanitize. The value property - // should be the value to use in the cache, and sanitize can be set to true or false, - // to indicate if XML declarations should be removed from the value and if the HTML - // inside a body tag in the value should be extracted as the real value. The value argument - // or the value property on the value argument are usually only used by the build system - // as it inlines cache content. - // example: - // To ask dojo.cache to fetch content and store it in the cache (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 "<h1>Hello</h1>" that will be - // | //the value for the text variable. - // | 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 - // 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 - // | //text variable will contain just "<h1>Hello</h1>". - // | var text = dojo["cache"]("my.module", "template.html", {sanitize: true}); - // example: - // Same example as previous, but demostrates how an object can be passed in as - // the first argument, then the value argument can then be the second argument. - // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the - // | //text variable will contain just "<h1>Hello</h1>". - // | var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true}); - return val; //String -}; -=====*/ -}); - diff --git a/lib/dojo/topic.js.uncompressed.js b/lib/dojo/topic.js.uncompressed.js deleted file mode 100644 index 7fc63c7d5..000000000 --- a/lib/dojo/topic.js.uncompressed.js +++ /dev/null @@ -1,33 +0,0 @@ -define("dojo/topic", ["./Evented"], function(Evented){ - // summary: - // The export of this module is a pubsub hub - // You can also use listen function itself as a pub/sub hub: - // | topic.subscribe("some/topic", function(event){ - // | ... do something with event - // | }); - // | topic.publish("some/topic", {name:"some event", ...}); - - var hub = new Evented; - return { - publish: function(topic, event){ - // summary: - // Publishes a message to a topic on the pub/sub hub. All arguments after - // the first will be passed to the subscribers, so any number of arguments - // can be provided (not just event). - // topic: String - // The name of the topic to publish to - // event: Object - // An event to distribute to the topic listeners - return hub.emit.apply(hub, arguments); - }, - subscribe: function(topic, listener){ - // summary: - // Subcribes to a topic on the pub/sub hub - // topic: String - // The topic to subscribe to - // listener: Function - // A function to call when a message is published to the given topic - return hub.on.apply(hub, arguments); - } - } -}); diff --git a/lib/dojo/touch.js.uncompressed.js b/lib/dojo/touch.js.uncompressed.js deleted file mode 100644 index 2b3cf5b10..000000000 --- a/lib/dojo/touch.js.uncompressed.js +++ /dev/null @@ -1,89 +0,0 @@ -define("dojo/touch", ["./_base/kernel", "./on", "./has", "./mouse"], function(dojo, on, has, mouse){ -// module: -// dojo/touch - -/*===== - dojo.touch = { - // summary: - // This module provides unified touch event handlers by exporting - // press, move, release and cancel which can also run well on desktop. - // Based on http://dvcs.w3.org/hg/webevents/raw-file/tip/touchevents.html - // - // example: - // 1. Used with dojo.connect() - // | dojo.connect(node, dojo.touch.press, function(e){}); - // | dojo.connect(node, dojo.touch.move, function(e){}); - // | dojo.connect(node, dojo.touch.release, function(e){}); - // | dojo.connect(node, dojo.touch.cancel, function(e){}); - // - // 2. Used with dojo.on - // | define(["dojo/on", "dojo/touch"], function(on, touch){ - // | on(node, touch.press, function(e){}); - // | on(node, touch.move, function(e){}); - // | on(node, touch.release, function(e){}); - // | on(node, touch.cancel, function(e){}); - // - // 3. Used with dojo.touch.* directly - // | dojo.touch.press(node, function(e){}); - // | dojo.touch.move(node, function(e){}); - // | dojo.touch.release(node, function(e){}); - // | dojo.touch.cancel(node, function(e){}); - - press: function(node, listener){ - // summary: - // Register a listener to 'touchstart'|'mousedown' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - }, - move: function(node, listener){ - // summary: - // Register a listener to 'touchmove'|'mousemove' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - }, - release: function(node, listener){ - // summary: - // Register a listener to 'touchend'|'mouseup' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - }, - cancel: function(node, listener){ - // summary: - // Register a listener to 'touchcancel'|'mouseleave' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - } - }; -=====*/ - - function _handle(/*String - press | move | release | cancel*/type){ - return function(node, listener){//called by on(), see dojo.on - return on(node, type, listener); - }; - } - var touch = has("touch"); - //device neutral events - dojo.touch.press|move|release|cancel - dojo.touch = { - press: _handle(touch ? "touchstart": "mousedown"), - move: _handle(touch ? "touchmove": "mousemove"), - release: _handle(touch ? "touchend": "mouseup"), - cancel: touch ? _handle("touchcancel") : mouse.leave - }; - return dojo.touch; -}); \ No newline at end of file diff --git a/lib/dojo/tt-rss-layer.js.uncompressed.js b/lib/dojo/tt-rss-layer.js.uncompressed.js deleted file mode 100644 index cc43d8726..000000000 --- a/lib/dojo/tt-rss-layer.js.uncompressed.js +++ /dev/null @@ -1,32247 +0,0 @@ -require({cache:{ -'dijit/form/TextBox':function(){ -require({cache:{ -'url: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\" data-dojo-attach-point='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"}}); -define("dijit/form/TextBox", [ - "dojo/_base/declare", // declare - "dojo/dom-construct", // domConstruct.create - "dojo/dom-style", // domStyle.getComputedStyle - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.hitch - "dojo/_base/sniff", // has("ie") has("mozilla") - "dojo/_base/window", // win.doc.selection.createRange - "./_FormValueWidget", - "./_TextBoxMixin", - "dojo/text!./templates/TextBox.html", - ".." // to export dijit._setSelectionRange, remove in 2.0 -], function(declare, domConstruct, domStyle, kernel, lang, has, win, - _FormValueWidget, _TextBoxMixin, template, dijit){ - -/*===== - var _FormValueWidget = dijit.form._FormValueWidget; - var _TextBoxMixin = dijit.form._TextBoxMixin; -=====*/ - - // module: - // dijit/form/TextBox - // summary: - // A base class for textbox form inputs - - var TextBox = declare(/*====="dijit.form.TextBox", =====*/ [_FormValueWidget, _TextBoxMixin], { - // summary: - // A base class for textbox form inputs - - templateString: template, - _singleNodeTemplate: '<input class="dijit dijitReset dijitLeft dijitInputField" data-dojo-attach-point="textbox,focusNode" autocomplete="off" type="${type}" ${!nameAttrSetting} />', - - _buttonInputDisabled: has("ie") ? "disabled" : "", // allows IE to disallow focus, but Firefox cannot be disabled for mousedown events - - baseClass: "dijitTextBox", - - postMixInProperties: function(){ - var type = this.type.toLowerCase(); - if(this.templateString && this.templateString.toLowerCase() == "input" || ((type == "hidden" || type == "file") && this.templateString == this.constructor.prototype.templateString)){ - this.templateString = this._singleNodeTemplate; - } - this.inherited(arguments); - }, - - _onInput: function(e){ - this.inherited(arguments); - if(this.intermediateChanges){ // _TextBoxMixin uses onInput - var _this = this; - // the setTimeout allows the key to post to the widget input box - setTimeout(function(){ _this._handleOnChange(_this.get('value'), false); }, 0); - } - }, - - _setPlaceHolderAttr: function(v){ - this._set("placeHolder", v); - if(!this._phspan){ - this._attachPoints.push('_phspan'); - // dijitInputField class gives placeHolder same padding as the input field - // parent node already has dijitInputField class but it doesn't affect this <span> - // since it's position: absolute. - this._phspan = domConstruct.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"; - } - }, - - _setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){ - this.inherited(arguments); - this._updatePlaceHolder(); - }, - - getDisplayedValue: function(){ - // summary: - // Deprecated. Use get('displayedValue') instead. - // tags: - // deprecated - kernel.deprecated(this.declaredClass+"::getDisplayedValue() is deprecated. Use set('displayedValue') instead.", "", "2.0"); - return this.get('displayedValue'); - }, - - setDisplayedValue: function(/*String*/ value){ - // summary: - // Deprecated. Use set('displayedValue', ...) instead. - // tags: - // deprecated - kernel.deprecated(this.declaredClass+"::setDisplayedValue() is deprecated. Use set('displayedValue', ...) instead.", "", "2.0"); - this.set('displayedValue', value); - }, - - _onBlur: function(e){ - if(this.disabled){ return; } - this.inherited(arguments); - this._updatePlaceHolder(); - }, - - _onFocus: function(/*String*/ by){ - if(this.disabled || this.readOnly){ return; } - this.inherited(arguments); - this._updatePlaceHolder(); - } - }); - - if(has("ie")){ - TextBox = declare(/*===== "dijit.form.TextBox.IEMixin", =====*/ TextBox, { - declaredClass: "dijit.form.TextBox", // for user code referencing declaredClass - - _isTextSelected: function(){ - var range = win.doc.selection.createRange(); - var parent = range.parentElement(); - return parent == this.textbox && range.text.length == 0; - }, - - postCreate: function(){ - this.inherited(arguments); - // 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(lang.hitch(this, function(){ - try{ - var s = domStyle.getComputedStyle(this.domNode); // can throw an exception if widget is immediately destroyed - if(s){ - var ff = s.fontFamily; - if(ff){ - var inputs = this.domNode.getElementsByTagName("INPUT"); - if(inputs){ - for(var i=0; i < inputs.length; i++){ - inputs[i].style.fontFamily = ff; - } - } - } - } - }catch(e){/*when used in a Dialog, and this is called before the dialog is - shown, s.fontFamily would trigger "Invalid Argument" error.*/} - }), 0); - } - }); - - // Overrides definition of _setSelectionRange from _TextBoxMixin (TODO: move to _TextBoxMixin.js?) - dijit._setSelectionRange = _TextBoxMixin._setSelectionRange = function(/*DomNode*/ element, /*Number?*/ start, /*Number?*/ stop){ - if(element.createTextRange){ - 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(has("mozilla")){ - TextBox = declare(/*===== "dijit.form.TextBox.MozMixin", =====*/TextBox, { - declaredClass: "dijit.form.TextBox", // for user code referencing declaredClass - - _onBlur: function(e){ - this.inherited(arguments); - if(this.selectOnClick){ - // clear selection so that the next mouse click doesn't reselect - this.textbox.selectionStart = this.textbox.selectionEnd = undefined; - } - } - }); - }else{ - TextBox.prototype.declaredClass = "dijit.form.TextBox"; - } - lang.setObject("dijit.form.TextBox", TextBox); // don't do direct assignment, it confuses API doc parser - - return TextBox; -}); - -}, -'dijit/_base/scroll':function(){ -define("dijit/_base/scroll", [ - "dojo/window", // windowUtils.scrollIntoView - ".." // export symbol to dijit -], function(windowUtils, dijit){ - // module: - // dijit/_base/scroll - // summary: - // Back compatibility module, new code should use windowUtils directly instead of using this module. - - dijit.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ - // summary: - // Scroll the passed node into view, if it is not already. - // Deprecated, use `windowUtils.scrollIntoView` instead. - - windowUtils.scrollIntoView(node, pos); - }; -}); - -}, -'dijit/_TemplatedMixin':function(){ -define("dijit/_TemplatedMixin", [ - "dojo/_base/lang", // lang.getObject - "dojo/touch", - "./_WidgetBase", - "dojo/string", // string.substitute string.trim - "dojo/cache", // dojo.cache - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-construct", // domConstruct.destroy, domConstruct.toDom - "dojo/_base/sniff", // has("ie") - "dojo/_base/unload", // unload.addOnWindowUnload - "dojo/_base/window" // win.doc -], function(lang, touch, _WidgetBase, string, cache, array, declare, domConstruct, has, unload, win) { - -/*===== - var _WidgetBase = dijit._WidgetBase; -=====*/ - - // module: - // dijit/_TemplatedMixin - // summary: - // Mixin for widgets that are instantiated from a template - - var _TemplatedMixin = declare("dijit._TemplatedMixin", null, { - // summary: - // Mixin for widgets that are instantiated from a template - - // templateString: [protected] String - // A string that represents the widget template. - // Use in conjunction with dojo.cache() to load from a file. - templateString: null, - - // templatePath: [protected deprecated] String - // Path to template (HTML file) for this widget relative to dojo.baseUrl. - // Deprecated: use templateString with require([... "dojo/text!..."], ...) instead - templatePath: null, - - // skipNodeCache: [protected] Boolean - // If using a cached widget template nodes poses issues for a - // particular widget class, it can set this property to ensure - // that its template is always re-built from a string - _skipNodeCache: false, - - // _earlyTemplatedStartup: Boolean - // A fallback to preserve the 1.0 - 1.3 behavior of children in - // templates having their startup called before the parent widget - // fires postCreate. Defaults to 'false', causing child widgets to - // have their .startup() called immediately before a parent widget - // .startup(), but always after the parent .postCreate(). Set to - // 'true' to re-enable to previous, arguably broken, behavior. - _earlyTemplatedStartup: false, - -/*===== - // _attachPoints: [private] String[] - // List of widget attribute names associated with data-dojo-attach-point=... in the - // template, ex: ["containerNode", "labelNode"] - _attachPoints: [], - =====*/ - -/*===== - // _attachEvents: [private] Handle[] - // List of connections associated with data-dojo-attach-event=... in the - // template - _attachEvents: [], - =====*/ - - constructor: function(){ - this._attachPoints = []; - this._attachEvents = []; - }, - - _stringRepl: function(tmpl){ - // summary: - // Does substitution of ${foo} type properties in template string - // tags: - // private - var className = this.declaredClass, _this = this; - // Cache contains a string because we need to do property replacement - // do the property replacement - return string.substitute(tmpl, this, function(value, key){ - if(key.charAt(0) == '!'){ value = lang.getObject(key.substr(1), false, _this); } - if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide - if(value == null){ return ""; } - - // Substitution keys beginning with ! will skip the transform step, - // in case a user wishes to insert unescaped markup, e.g. ${!foo} - return key.charAt(0) == "!" ? value : - // Safer substitution, see heading "Attribute values" in - // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2 - value.toString().replace(/"/g,"""); //TODO: add &? use encodeXML method? - }, this); - }, - - buildRendering: function(){ - // summary: - // Construct the UI for this widget from a template, setting this.domNode. - // tags: - // protected - - if(!this.templateString){ - this.templateString = cache(this.templatePath, {sanitize: true}); - } - - // Lookup cached version of template, and download to cache if it - // isn't there already. Returns either a DomNode or a string, depending on - // whether or not the template contains ${foo} replacement parameters. - var cached = _TemplatedMixin.getCachedTemplate(this.templateString, this._skipNodeCache); - - var node; - if(lang.isString(cached)){ - node = domConstruct.toDom(this._stringRepl(cached)); - if(node.nodeType != 1){ - // Flag common problems such as templates with multiple top level nodes (nodeType == 11) - throw new Error("Invalid template: " + cached); - } - }else{ - // if it's a node, all we have to do is clone it - node = cached.cloneNode(true); - } - - this.domNode = node; - - // Call down to _Widget.buildRendering() to get base classes assigned - // TODO: change the baseClass assignment to _setBaseClassAttr - 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, function(n,p){ return n.getAttribute(p); }); - - this._beforeFillContent(); // hook for _WidgetsInTemplateMixin - - this._fillContent(this.srcNodeRef); - }, - - _beforeFillContent: function(){ - }, - - _fillContent: function(/*DomNode*/ source){ - // summary: - // Relocate source contents to templated container node. - // this.containerNode must be able to receive children, or exceptions will be thrown. - // tags: - // protected - var dest = this.containerNode; - if(source && dest){ - while(source.hasChildNodes()){ - dest.appendChild(source.firstChild); - } - } - }, - - _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 data-dojo-attach-point - // 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 - // nodes and looks for these properties: - // * dojoAttachPoint/data-dojo-attach-point - // * dojoAttachEvent/data-dojo-attach-event - // rootNode: DomNode|Widget[] - // the node to search for properties. All children will be searched. - // getAttrFunc: Function - // a function which will be used to obtain property for a given - // DomNode/Widget - // tags: - // private - - var nodes = lang.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*")); - var x = lang.isArray(rootNode) ? 0 : -1; - for(; x<nodes.length; x++){ - var baseNode = (x == -1) ? rootNode : nodes[x]; - if(this.widgetsInTemplate && (getAttrFunc(baseNode, "dojoType") || getAttrFunc(baseNode, "data-dojo-type"))){ - continue; - } - // Process data-dojo-attach-point - var attachPoint = getAttrFunc(baseNode, "dojoAttachPoint") || getAttrFunc(baseNode, "data-dojo-attach-point"); - if(attachPoint){ - var point, points = attachPoint.split(/\s*,\s*/); - while((point = points.shift())){ - if(lang.isArray(this[point])){ - this[point].push(baseNode); - }else{ - this[point]=baseNode; - } - this._attachPoints.push(point); - } - } - - // Process data-dojo-attach-event - 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; ..." - var event, events = attachEvent.split(/\s*,\s*/); - var trim = lang.trim; - while((event = events.shift())){ - if(event){ - var thisFunc = null; - if(event.indexOf(":") != -1){ - // oh, if only JS had tuple assignment - var funcNameArr = event.split(":"); - event = trim(funcNameArr[0]); - thisFunc = trim(funcNameArr[1]); - }else{ - event = trim(event); - } - if(!thisFunc){ - thisFunc = event; - } - // Map "press", "move" and "release" to keys.touch, keys.move, keys.release - this._attachEvents.push(this.connect(baseNode, touch[event] || event, thisFunc)); - } - } - } - } - }, - - destroyRendering: function(){ - // Delete all attach points to prevent IE6 memory leaks. - array.forEach(this._attachPoints, function(point){ - delete this[point]; - }, this); - this._attachPoints = []; - - // And same for event handlers - array.forEach(this._attachEvents, this.disconnect, this); - this._attachEvents = []; - - this.inherited(arguments); - } - }); - - // key is templateString; object is either string or DOM tree - _TemplatedMixin._templateCache = {}; - - _TemplatedMixin.getCachedTemplate = function(templateString, alwaysUseString){ - // summary: - // Static method to get a template based on the templatePath or - // templateString key - // templateString: String - // The template - // alwaysUseString: Boolean - // Don't cache the DOM tree for this template, even if it doesn't have any variables - // returns: Mixed - // Either string (if there are ${} variables that need to be replaced) or just - // a DOM tree (if the node can be cloned directly) - - // is it already cached? - var tmplts = _TemplatedMixin._templateCache; - var key = templateString; - var cached = tmplts[key]; - if(cached){ - try{ - // if the cached value is an innerHTML string (no ownerDocument) or a DOM tree created within the current document, then use the current cached value - if(!cached.ownerDocument || cached.ownerDocument == win.doc){ - // string or node of the same document - return cached; - } - }catch(e){ /* squelch */ } // IE can throw an exception if cached.ownerDocument was reloaded - domConstruct.destroy(cached); - } - - templateString = string.trim(templateString); - - if(alwaysUseString || templateString.match(/\$\{([^\}]+)\}/g)){ - // there are variables in the template so all we can do is cache the string - return (tmplts[key] = templateString); //String - }else{ - // there are no variables in the template so we can cache the DOM tree - var node = domConstruct.toDom(templateString); - if(node.nodeType != 1){ - throw new Error("Invalid template: " + templateString); - } - return (tmplts[key] = node); //Node - } - }; - - if(has("ie")){ - unload.addOnWindowUnload(function(){ - var cache = _TemplatedMixin._templateCache; - for(var key in cache){ - var value = cache[key]; - if(typeof value == "object"){ // value is either a string or a DOM node template - domConstruct.destroy(value); - } - delete cache[key]; - } - }); - } - - // These arguments can be specified for widgets which are used in templates. - // Since any widget can be specified as sub widgets in template, mix it - // into the base widget class. (This is a hack, but it's effective.) - lang.extend(_WidgetBase,{ - dojoAttachEvent: "", - dojoAttachPoint: "" - }); - - return _TemplatedMixin; -}); - -}, -'dijit/_CssStateMixin':function(){ -define("dijit/_CssStateMixin", [ - "dojo/touch", - "dojo/_base/array", // array.forEach array.map - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.toggle - "dojo/_base/lang", // lang.hitch - "dojo/_base/window" // win.body -], function(touch, array, declare, domClass, lang, win){ - -// module: -// dijit/_CssStateMixin -// summary: -// Mixin for widgets to set CSS classes on the widget DOM nodes depending on hover/mouse press/focus -// state changes, and also higher-level state changes such becoming disabled or selected. - -return declare("dijit._CssStateMixin", [], { - // summary: - // Mixin for widgets to set CSS classes on the widget DOM nodes depending on hover/mouse press/focus - // state changes, and also higher-level state changes such becoming disabled or selected. - // - // description: - // By mixing this class into your widget, and setting the this.baseClass attribute, it will automatically - // maintain CSS classes on the widget root node (this.domNode) depending on hover, - // active, focus, etc. state. Ex: with a baseClass of dijitButton, it will apply the classes - // dijitButtonHovered and dijitButtonActive, as the user moves the mouse over the widget and clicks it. - // - // It also sets CSS like dijitButtonDisabled based on widget semantic state. - // - // By setting the cssStateNodes attribute, a widget can also track events on subnodes (like buttons - // within the widget). - - // cssStateNodes: [protected] Object - // List of sub-nodes within the widget that need CSS classes applied on mouse hover/press and focus - //. - // Each entry in the hash is a an attachpoint names (like "upArrowButton") mapped to a CSS class names - // (like "dijitUpArrowButton"). Example: - // | { - // | "upArrowButton": "dijitUpArrowButton", - // | "downArrowButton": "dijitDownArrowButton" - // | } - // The above will set the CSS class dijitUpArrowButton to the this.upArrowButton DOMNode when it - // is hovered, etc. - cssStateNodes: {}, - - // 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 - array.forEach(["onmouseenter", "onmouseleave", touch.press], function(e){ - this.connect(this.domNode, e, "_cssMouseEvent"); - }, this); - - // Monitoring changes to disabled, readonly, etc. state, and update CSS class of root node - array.forEach(["disabled", "readOnly", "checked", "selected", "focused", "state", "hovering", "active"], function(attr){ - this.watch(attr, lang.hitch(this, "_setStateClass")); - }, this); - - // Events on sub nodes within the widget - for(var ap in this.cssStateNodes){ - this._trackMouseState(this[ap], this.cssStateNodes[ap]); - } - // Set state initially; there's probably no hover/active/focus state but widget might be - // 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, - // 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._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._set("hovering", false); - this._set("active", false); - break; - - case "mousedown": - case "touchpress": - 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(win.body(), touch.release, function(){ - this._mouseDown = false; - this._set("active", false); - this.disconnect(mouseUpConnector); - }); - break; - } - } - }, - - _setStateClass: function(){ - // summary: - // Update the visual state of the widget by setting the css classes on this.domNode - // (or this.stateNode if defined) by combining this.baseClass with - // various suffixes that represent the current widget state(s). - // - // description: - // In the case where a widget has multiple - // states, it sets the class based on all possible - // combinations. For example, an invalid form widget that is being hovered - // will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover". - // - // 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) 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 - // - Hover - if the mouse is over the widget - - // Compute new set of classes - var newStateClasses = this.baseClass.split(" "); - - function multiply(modifier){ - newStateClasses = newStateClasses.concat(array.map(newStateClasses, function(c){ return c+modifier; }), "dijit"+modifier); - } - - if(!this.isLeftToRight()){ - // For RTL mode we need to set an addition class like dijitTextBoxRtl. - multiply("Rtl"); - } - - var checkedState = this.checked == "mixed" ? "Mixed" : (this.checked ? "Checked" : ""); - if(this.checked){ - multiply(checkedState); - } - if(this.state){ - multiply(this.state); - } - if(this.selected){ - multiply("Selected"); - } - - if(this.disabled){ - multiply("Disabled"); - }else if(this.readOnly){ - multiply("ReadOnly"); - }else{ - if(this.active){ - multiply("Active"); - }else if(this.hovering){ - multiply("Hover"); - } - } - - if(this.focused){ - multiply("Focused"); - } - - // Remove old state classes and add new ones. - // For performance concerns we only write into domNode.className once. - var tn = this.stateNode || this.domNode, - classHash = {}; // set of all classes (state and otherwise) for node - - array.forEach(tn.className.split(" "), function(c){ classHash[c] = true; }); - - if("_stateClasses" in this){ - array.forEach(this._stateClasses, function(c){ delete classHash[c]; }); - } - - array.forEach(newStateClasses, function(c){ classHash[c] = true; }); - - var newClasses = []; - for(var c in classHash){ - newClasses.push(c); - } - tn.className = newClasses.join(" "); - - this._stateClasses = newStateClasses; - }, - - _trackMouseState: function(/*DomNode*/ node, /*String*/ clazz){ - // summary: - // Track mouse/focus events on specified node and set CSS class on that node to indicate - // current state. Usually not called directly, but via cssStateNodes attribute. - // description: - // Given class=foo, will set the following CSS class on the node - // - fooActive: if the user is currently pressing down the mouse button while over the node - // - fooHover: if the user is hovering the mouse over the node, but not pressing down a button - // - fooFocus: if the node is focused - // - // Note that it won't set any classes if the widget is disabled. - // node: DomNode - // Should be a sub-node of the widget, not the top node (this.domNode), since the top node - // is handled specially and automatically just by mixing in this class. - // clazz: String - // CSS class name (ex: dijitSliderUpArrow). - - // Current state of node (initially false) - // NB: setting specifically to false because domClass.toggle() needs true boolean as third arg - var hovering=false, active=false, focused=false; - - var self = this, - cn = lang.hitch(this, "connect", node); - - function setClass(){ - var disabled = ("disabled" in self && self.disabled) || ("readonly" in self && self.readonly); - domClass.toggle(node, clazz+"Hover", hovering && !active && !disabled); - domClass.toggle(node, clazz+"Active", active && !disabled); - domClass.toggle(node, clazz+"Focused", focused && !disabled); - } - - // Mouse - cn("onmouseenter", function(){ - hovering = true; - setClass(); - }); - cn("onmouseleave", function(){ - hovering = false; - active = false; - setClass(); - }); - cn(touch.press, function(){ - active = true; - setClass(); - }); - cn(touch.release, function(){ - active = false; - setClass(); - }); - - // Focus - cn("onfocus", function(){ - focused = true; - setClass(); - }); - cn("onblur", function(){ - focused = false; - setClass(); - }); - - // Just in case widget is enabled/disabled while it has focus/hover/active state. - // Maybe this is overkill. - this.watch("disabled", setClass); - this.watch("readOnly", setClass); - } -}); -}); - -}, -'dijit/DialogUnderlay':function(){ -define("dijit/DialogUnderlay", [ - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/_base/window", // win.body - "dojo/window", // winUtils.getBox - "./_Widget", - "./_TemplatedMixin", - "./BackgroundIframe" -], function(declare, domAttr, win, winUtils, _Widget, _TemplatedMixin, BackgroundIframe){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; -=====*/ - - // module: - // dijit/DialogUnderlay - // summary: - // The component that blocks the screen behind a `dijit.Dialog` - - return declare("dijit.DialogUnderlay", [_Widget, _TemplatedMixin], { - // summary: - // The component that blocks the screen behind a `dijit.Dialog` - // - // description: - // A component used to block input behind a `dijit.Dialog`. Only a single - // instance of this widget is created by `dijit.Dialog`, and saved as - // a reference to be shared between all Dialogs as `dijit._underlay` - // - // The underlay itself can be styled based on and id: - // | #myDialog_underlay { background-color:red; } - // - // 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' data-dojo-attach-point='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": "", - - _setDialogIdAttr: function(id){ - domAttr.set(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 - win.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 = winUtils.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 BackgroundIframe(this.domNode); - }, - - hide: function(){ - // summary: - // Hides the dialog underlay - this.bgIframe.destroy(); - delete this.bgIframe; - this.domNode.style.display = "none"; - } - }); -}); - -}, -'dijit/layout/ScrollingTabController':function(){ -require({cache:{ -'url:dijit/layout/templates/ScrollingTabController.html':"<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div data-dojo-type=\"dijit.layout._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\"\n\t\t\tdata-dojo-props=\"containerId: '${containerId}', iconClass: 'dijitTabStripMenuIcon',\n\t\t\t\t\tdropDownPosition: ['below-alt', 'above-alt']\"\n\t\t\tdata-dojo-attach-point=\"_menuBtn\" showLabel=\"false\" title=\"\">▼</div>\n\t<div data-dojo-type=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\"\n\t\t\tdata-dojo-props=\"iconClass:'dijitTabStripSlideLeftIcon', showLabel:false, title:''\"\n\t\t\tdata-dojo-attach-point=\"_leftBtn\" data-dojo-attach-event=\"onClick: doSlideLeft\">◀</div>\n\t<div data-dojo-type=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\"\n\t\t\tdata-dojo-props=\"iconClass:'dijitTabStripSlideRightIcon', showLabel:false, title:''\"\n\t\t\tdata-dojo-attach-point=\"_rightBtn\" data-dojo-attach-event=\"onClick: doSlideRight\">▶</div>\n\t<div class='dijitTabListWrapper' data-dojo-attach-point='tablistWrapper'>\n\t\t<div role='tablist' data-dojo-attach-event='onkeypress:onkeypress'\n\t\t\t\tdata-dojo-attach-point='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>", -'url:dijit/layout/templates/_ScrollingTabControllerButton.html':"<div data-dojo-attach-event=\"onclick:_onClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" data-dojo-attach-point=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" data-dojo-attach-point=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" data-dojo-attach-point=\"iconNode\"/>\n\t\t\t<span data-dojo-attach-point=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>"}}); -define("dijit/layout/ScrollingTabController", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add domClass.contains - "dojo/dom-geometry", // domGeometry.contentBox - "dojo/dom-style", // domStyle.style - "dojo/_base/fx", // Animation - "dojo/_base/lang", // lang.hitch - "dojo/query", // query - "dojo/_base/sniff", // has("ie"), has("webkit"), has("quirks") - "../registry", // registry.byId() - "dojo/text!./templates/ScrollingTabController.html", - "dojo/text!./templates/_ScrollingTabControllerButton.html", - "./TabController", - "./utils", // marginBox2contextBox, layoutChildren - "../_WidgetsInTemplateMixin", - "../Menu", - "../MenuItem", - "../form/Button", - "../_HasDropDown", - "dojo/NodeList-dom" // NodeList.style -], function(array, declare, domClass, domGeometry, domStyle, fx, lang, query, has, - registry, tabControllerTemplate, buttonTemplate, TabController, layoutUtils, _WidgetsInTemplateMixin, - Menu, MenuItem, Button, _HasDropDown){ - -/*===== -var _WidgetsInTemplateMixin = dijit._WidgetsInTemplateMixin; -var Menu = dijit.Menu; -var _HasDropDown = dijit._HasDropDown; -var TabController = dijit.layout.TabController; -=====*/ - - -// module: -// dijit/layout/ScrollingTabController -// summary: -// Set of tabs with left/right arrow keys and a menu to switch between tabs not -// all fitting on a single row. - - -var ScrollingTabController = declare("dijit.layout.ScrollingTabController", [TabController, _WidgetsInTemplateMixin], { - // summary: - // Set of tabs with left/right arrow keys and a menu to switch between tabs not - // all fitting on a single row. - // Works only for horizontal tabs (either above or below the content, not to the left - // or right). - // tags: - // private - - baseClass: "dijitTabController dijitScrollingTabController", - - templateString: tabControllerTemplate, - - // 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, - - // useSlider: [const] Boolean - // True if a slider should be used to select tabs when they are too - // wide to fit the TabContainer, false otherwise. - useSlider: true, - - // tabStripClass: [const] String - // The css class to apply to the tab strip, if it is visible. - tabStripClass: "", - - widgetsInTemplate: true, - - // _minScroll: Number - // The distance in pixels from the edge of the tab strip which, - // if a scroll animation is less than, forces the scroll to - // go all the way to the left/right. - _minScroll: 5, - - // Override default behavior mapping class to DOMNode - _setClassAttr: { node: "containerNode", type: "class" }, - - 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"; - domClass.add(n, "tabStrip-disabled") - } - - domClass.add(this.tablistWrapper, this.tabStripClass); - }, - - onStartup: function(){ - this.inherited(arguments); - - // TabController is hidden until it finishes drawing, to give - // a less visually jumpy instantiation. When it's finished, set visibility to "" - // to that the tabs are hidden/shown depending on the container's visibility setting. - domStyle.set(this.domNode, "visibility", ""); - this._postStartup = true; - }, - - onAddChild: function(page, insertIndex){ - this.inherited(arguments); - - // changes to the tab button label or iconClass will have changed the width of the - // buttons, so do a resize - array.forEach(["label", "iconClass"], function(attr){ - this.pane2watches[page.id].push( - this.pane2button[page.id].watch(attr, lang.hitch(this, function(){ - 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. - // The value 200 is chosen as it should be bigger than most - // Tab button widths. - domStyle.set(this.containerNode, "width", - (domStyle.get(this.containerNode, "width") + 200) + "px"); - }, - - onRemoveChild: function(page, insertIndex){ - // null out _selectedTab because we are about to delete that dom node - var button = this.pane2button[page.id]; - if(this._selectedTab === button.domNode){ - this._selectedTab = null; - } - - this.inherited(arguments); - }, - - _initButtons: function(){ - // summary: - // Creates the buttons used to scroll to view tabs that - // may not be visible if the TabContainer is too narrow. - - // Make a list of the buttons to display when the tab labels become - // wider than the TabContainer, and hide the other buttons. - // Also gets the total width of the displayed buttons. - this._btnWidth = 0; - this._buttons = 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 += domGeometry.getMarginSize(btn).w; - return true; - }else{ - domStyle.set(btn, "display", "none"); - return false; - } - }, this); - }, - - _getTabsWidth: function(){ - var children = this.getChildren(); - if(children.length){ - var leftTab = children[this.isLeftToRight() ? 0 : children.length - 1].domNode, - rightTab = children[this.isLeftToRight() ? children.length - 1 : 0].domNode; - return rightTab.offsetLeft + domStyle.get(rightTab, "width") - leftTab.offsetLeft; - }else{ - return 0; - } - }, - - _enableBtn: function(width){ - // summary: - // Determines if the tabs are wider than the width of the TabContainer, and - // thus that we need to display left/right/menu navigation buttons. - var tabsWidth = this._getTabsWidth(); - width = width || domStyle.get(this.scrollNode, "width"); - return tabsWidth > 0 && width < tabsWidth; - }, - - resize: function(dim){ - // summary: - // Hides or displays the buttons used to scroll the tab list and launch the menu - // that selects tabs. - - // Save the dimensions to be used when a child is renamed. - this._dim = dim; - - // Set my height to be my natural height (tall enough for one row of tab labels), - // and my content-box width based on margin-box width specified in dim parameter. - // But first reset scrollNode.height in case it was set by layoutChildren() call - // in a previous run of this method. - this.scrollNode.style.height = "auto"; - var cb = this._contentBox = layoutUtils.marginBox2contentBox(this.domNode, {h: 0, w: dim.w}); - cb.h = this.scrollNode.offsetHeight; - domGeometry.setContentSize(this.domNode, cb); - - // Show/hide the left/right/menu navigation buttons depending on whether or not they - // are needed. - var enable = this._enableBtn(this._contentBox.w); - this._buttons.style("display", enable ? "" : "none"); - - // Position and size the navigation buttons and the tablist - this._leftBtn.layoutAlign = "left"; - this._rightBtn.layoutAlign = "right"; - this._menuBtn.layoutAlign = this.isLeftToRight() ? "right" : "left"; - layoutUtils.layoutChildren(this.domNode, this._contentBox, - [this._menuBtn, this._leftBtn, this._rightBtn, {domNode: this.scrollNode, layoutAlign: "client"}]); - - // set proper scroll so that selected tab is visible - if(this._selectedTab){ - if(this._anim && this._anim.status() == "playing"){ - this._anim.stop(); - } - this.scrollNode.scrollLeft = this._convertToScrollLeft(this._getScrollForSelectedTab()); - } - - // Enable/disabled left right buttons depending on whether or not user can scroll to left or right - 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(){ - // summary: - // Returns the current scroll of the tabs where 0 means - // "scrolled all the way to the left" and some positive number, based on # - // of pixels of possible scroll (ex: 1000) means "scrolled all the way to the right" - return (this.isLeftToRight() || has("ie") < 8 || (has("ie") && has("quirks")) || has("webkit")) ? this.scrollNode.scrollLeft : - domStyle.get(this.containerNode, "width") - domStyle.get(this.scrollNode, "width") - + (has("ie") == 8 ? -1 : 1) * this.scrollNode.scrollLeft; - }, - - _convertToScrollLeft: function(val){ - // summary: - // Given a scroll value where 0 means "scrolled all the way to the left" - // and some positive number, based on # of pixels of possible scroll (ex: 1000) - // means "scrolled all the way to the right", return value to set this.scrollNode.scrollLeft - // to achieve that scroll. - // - // This method is to adjust for RTL funniness in various browsers and versions. - if(this.isLeftToRight() || has("ie") < 8 || (has("ie") && has("quirks")) || has("webkit")){ - return val; - }else{ - var maxScroll = domStyle.get(this.containerNode, "width") - domStyle.get(this.scrollNode, "width"); - return (has("ie") == 8 ? -1 : 1) * (val - maxScroll); - } - }, - - onSelectChild: function(/*dijit._Widget*/ page){ - // summary: - // Smoothly scrolls to a tab when it is selected. - - var tab = this.pane2button[page.id]; - if(!tab || !page){return;} - - var node = tab.domNode; - - // Save the selection - if(node != this._selectedTab){ - this._selectedTab = node; - - // Scroll to the selected tab, except on startup, when scrolling is handled in resize() - if(this._postResize){ - var sl = this._getScroll(); - - if(sl > node.offsetLeft || - sl + domStyle.get(this.scrollNode, "width") < - node.offsetLeft + domStyle.get(node, "width")){ - this.createSmoothScroll().play(); - } - } - } - - this.inherited(arguments); - }, - - _getScrollBounds: function(){ - // summary: - // Returns the minimum and maximum scroll setting to show the leftmost and rightmost - // tabs (respectively) - var children = this.getChildren(), - scrollNodeWidth = domStyle.get(this.scrollNode, "width"), // about 500px - containerWidth = domStyle.get(this.containerNode, "width"), // 50,000px - maxPossibleScroll = containerWidth - scrollNodeWidth, // scrolling until right edge of containerNode visible - tabsWidth = this._getTabsWidth(); - - if(children.length && tabsWidth > scrollNodeWidth){ - // Scrolling should happen - return { - min: this.isLeftToRight() ? 0 : children[children.length-1].domNode.offsetLeft, - max: this.isLeftToRight() ? - (children[children.length-1].domNode.offsetLeft + domStyle.get(children[children.length-1].domNode, "width")) - scrollNodeWidth : - maxPossibleScroll - }; - }else{ - // No scrolling needed, all tabs visible, we stay either scrolled to far left or far right (depending on dir) - var onlyScrollPosition = this.isLeftToRight() ? 0 : maxPossibleScroll; - return { - min: onlyScrollPosition, - max: onlyScrollPosition - }; - } - }, - - _getScrollForSelectedTab: function(){ - // summary: - // Returns the scroll value setting so that the selected tab - // will appear in the center - var w = this.scrollNode, - n = this._selectedTab, - scrollNodeWidth = domStyle.get(this.scrollNode, "width"), - scrollBounds = this._getScrollBounds(); - - // TODO: scroll minimal amount (to either right or left) so that - // selected tab is fully visible, and just return if it's already visible? - var pos = (n.offsetLeft + domStyle.get(n, "width")/2) - scrollNodeWidth/2; - pos = Math.min(Math.max(pos, scrollBounds.min), scrollBounds.max); - - // TODO: - // If scrolling close to the left side or right side, scroll - // all the way to the left or right. See this._minScroll. - // (But need to make sure that doesn't scroll the tab out of view...) - return pos; - }, - - 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. - // description: - // If an number argument is passed to the function, that horizontal - // pixel position is scrolled to. Otherwise the currently selected - // tab is scrolled to. - // x: Integer? - // An optional pixel value to scroll to, indicating distance from left. - - // Calculate position to scroll to - if(arguments.length > 0){ - // position specified by caller, just make sure it's within bounds - var scrollBounds = this._getScrollBounds(); - x = Math.min(Math.max(x, scrollBounds.min), scrollBounds.max); - }else{ - // scroll to center the current tab - x = this._getScrollForSelectedTab(); - } - - if(this._anim && this._anim.status() == "playing"){ - this._anim.stop(); - } - - var self = this, - w = this.scrollNode, - anim = new fx.Animation({ - beforeBegin: function(){ - if(this.curve){ delete this.curve; } - var oldS = w.scrollLeft, - newS = self._convertToScrollLeft(x); - anim.curve = new fx._Line(oldS, newS); - }, - onAnimate: function(val){ - w.scrollLeft = val; - } - }); - this._anim = anim; - - // Disable/enable left/right buttons according to new scroll position - this._setButtonClass(x); - - return anim; // dojo._Animation - }, - - _getBtnNode: function(/*Event*/ e){ - // summary: - // Gets a button DOM node from a mouse click event. - // e: - // The mouse click event. - var n = e.target; - while(n && !domClass.contains(n, "tabStripButton")){ - n = n.parentNode; - } - return n; - }, - - doSlideRight: function(/*Event*/ e){ - // summary: - // Scrolls the menu to the right. - // e: - // The mouse click event. - this.doSlide(1, this._getBtnNode(e)); - }, - - doSlideLeft: function(/*Event*/ e){ - // summary: - // Scrolls the menu to the left. - // e: - // The mouse click event. - this.doSlide(-1,this._getBtnNode(e)); - }, - - doSlide: function(/*Number*/ direction, /*DomNode*/ node){ - // summary: - // Scrolls the tab list to the left or right by 75% of the widget width. - // direction: - // If the direction is 1, the widget scrolls to the right, if it is - // -1, it scrolls to the left. - - if(node && domClass.contains(node, "dijitTabDisabled")){return;} - - var sWidth = domStyle.get(this.scrollNode, "width"); - var d = (sWidth * 0.75) * direction; - - var to = this._getScroll() + d; - - this._setButtonClass(to); - - this.createSmoothScroll(to).play(); - }, - - _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. - // scroll: Integer - // amount of horizontal scroll - - var scrollBounds = this._getScrollBounds(); - this._leftBtn.set("disabled", scroll <= scrollBounds.min); - this._rightBtn.set("disabled", scroll >= scrollBounds.max); - } -}); - - -var ScrollingTabControllerButtonMixin = declare("dijit.layout._ScrollingTabControllerButtonMixin", null, { - baseClass: "dijitTab tabStripButton", - - templateString: buttonTemplate, - - // Override inherited tabIndex: 0 from dijit.form.Button, because user shouldn't be - // able to tab to the left/right/menu buttons - 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; } -}); -/*===== -ScrollingTabControllerButtonMixin = dijit.layout._ScrollingTabControllerButtonMixin; -=====*/ - -// Class used in template -declare("dijit.layout._ScrollingTabControllerButton", - [Button, ScrollingTabControllerButtonMixin]); - -// Class used in template -declare( - "dijit.layout._ScrollingTabControllerMenuButton", - [Button, _HasDropDown, 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 Menu({ - id: this.containerId + "_menu", - dir: this.dir, - lang: this.lang, - textDir: this.textDir - }); - var container = registry.byId(this.containerId); - array.forEach(container.getChildren(), function(page){ - var menuItem = new MenuItem({ - id: page.id + "_stcMi", - label: page.title, - iconClass: page.iconClass, - dir: page.dir, - lang: page.lang, - textDir: page.textDir, - 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; - } - } -}); - -return ScrollingTabController; -}); - -}, -'dijit/place':function(){ -define("dijit/place", [ - "dojo/_base/array", // array.forEach array.map array.some - "dojo/dom-geometry", // domGeometry.getMarginBox domGeometry.position - "dojo/dom-style", // domStyle.getComputedStyle - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/window", // win.body - "dojo/window", // winUtils.getBox - "." // dijit (defining dijit.place to match API doc) -], function(array, domGeometry, domStyle, kernel, win, winUtils, dijit){ - - // module: - // dijit/place - // summary: - // Code to place a popup relative to another node - - - function _place(/*DomNode*/ node, choices, layoutNode, 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, 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 - var view = winUtils.getBox(); - - // This won't work if the node is inside a <div style="position: relative">, - // so reattach it to win.doc.body. (Otherwise, the positioning will be wrong - // and also it might get cutoff) - if(!node.parentNode || String(node.parentNode.tagName).toLowerCase() != "body"){ - win.body().appendChild(node); - } - - var best = null; - array.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: { - 'L': view.l + view.w - pos.x, - 'R': pos.x - view.l, - 'M': view.w - }[corner.charAt(1)], - h: { - 'T': view.t + view.h - pos.y, - 'B': pos.y - view.t, - 'M': view.h - }[corner.charAt(0)] - }; - - // 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 tooltip's size changes based on position, due to triangle) - if(layoutNode){ - var res = layoutNode(node, choice.aroundCorner, corner, spaceAvailable, aroundNodeCoords); - overflow = typeof res == "undefined" ? 0 : res; - } - - // get node's size - var style = node.style; - var oldDisplay = style.display; - var oldVis = style.visibility; - if(style.display == "none"){ - style.visibility = "hidden"; - style.display = ""; - } - var mb = domGeometry. getMarginBox(node); - style.display = oldDisplay; - style.visibility = oldVis; - - // coordinates and size of node with specified corner placed at pos, - // and clipped by viewport - var - startXpos = { - 'L': pos.x, - 'R': pos.x - mb.w, - 'M': Math.max(view.l, Math.min(view.l + view.w, pos.x + (mb.w >> 1)) - mb.w) // M orientation is more flexible - }[corner.charAt(1)], - startYpos = { - 'T': pos.y, - 'B': pos.y - mb.h, - 'M': Math.max(view.t, Math.min(view.t + view.h, pos.y + (mb.h >> 1)) - mb.h) - }[corner.charAt(0)], - startX = Math.max(view.l, startXpos), - startY = Math.max(view.t, startYpos), - endX = Math.min(view.l + view.w, startXpos + mb.w), - endY = Math.min(view.t + view.h, startYpos + mb.h), - width = endX - startX, - height = endY - startY; - - overflow += (mb.w - width) + (mb.h - height); - - if(best == null || overflow < best.overflow){ - best = { - corner: corner, - aroundCorner: choice.aroundCorner, - x: startX, - y: startY, - w: width, - h: height, - overflow: overflow, - spaceAvailable: spaceAvailable - }; - } - - return !overflow; - }); - - // 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, 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 = domGeometry.isBodyLtr(), - s = node.style; - s.top = best.y + "px"; - s[l ? "left" : "right"] = (l ? best.x : view.w - best.x - best.w) + "px"; - s[l ? "right" : "left"] = "auto"; // needed for FF or else tooltip goes to far left - - return best; - } - - /*===== - dijit.place.__Position = function(){ - // x: Integer - // horizontal coordinate in pixels, relative to document body - // y: Integer - // vertical coordinate in pixels, relative to document body - - this.x = x; - this.y = y; - }; - =====*/ - - /*===== - dijit.place.__Rectangle = function(){ - // x: Integer - // horizontal offset in pixels, relative to document body - // y: Integer - // vertical offset in pixels, relative to document body - // w: Integer - // width in pixels. Can also be specified as "width" for backwards-compatibility. - // h: Integer - // height in pixels. Can also be specified as "height" from backwards-compatibility. - - this.x = x; - this.y = y; - this.w = w; - this.h = h; - }; - =====*/ - - return (dijit.place = { - // summary: - // Code to place a DOMNode relative to another DOMNode. - // Load using require(["dijit/place"], function(place){ ... }). - - at: function(node, pos, corners, padding){ - // summary: - // Positions one of the node's corners at specified position - // such that node is fully visible in viewport. - // description: - // NOTE: node is assumed to be absolutely or relatively positioned. - // node: DOMNode - // The node to position - // pos: dijit.place.__Position - // Object like {x: 10, y: 20} - // corners: String[] - // Array of Strings representing order to try corners in, like ["TR", "BL"]. - // Possible values are: - // * "BL" - bottom left - // * "BR" - bottom right - // * "TL" - top left - // * "TR" - top right - // padding: dijit.place.__Position? - // optional param to set padding, to put some buffer around the element you want to position. - // example: - // Try to place node's top right corner at (10,20). - // If that makes node go (partially) off screen, then try placing - // bottom left corner at (10,20). - // | place(node, {x: 10, y: 20}, ["TR", "BL"]) - var choices = array.map(corners, function(corner){ - var c = { corner: corner, pos: {x:pos.x,y:pos.y} }; - if(padding){ - c.pos.x += corner.charAt(1) == 'L' ? padding.x : -padding.x; - c.pos.y += corner.charAt(0) == 'T' ? padding.y : -padding.y; - } - return c; - }); - - return _place(node, choices); - }, - - around: function( - /*DomNode*/ node, - /*DomNode || dijit.place.__Rectangle*/ anchor, - /*String[]*/ positions, - /*Boolean*/ leftToRight, - /*Function?*/ layoutNode){ - - // summary: - // Position node adjacent or kitty-corner to anchor - // such that it's fully visible in viewport. - // - // description: - // Place node such that corner of node touches a corner of - // aroundNode, and that node is fully visible. - // - // anchor: - // Either a DOMNode or a __Rectangle (object with x, y, width, height). - // - // positions: - // Ordered list of positions to try matching up. - // * before: places drop down to the left of the anchor node/widget, or to the right in the case - // of RTL scripts like Hebrew and Arabic; aligns either the top of the drop down - // with the top of the anchor, or the bottom of the drop down with bottom of the anchor. - // * after: places drop down to the right of the anchor node/widget, or to the left in the case - // of RTL scripts like Hebrew and Arabic; aligns either the top of the drop down - // with the top of the anchor, or the bottom of the drop down with bottom of the anchor. - // * before-centered: centers drop down to the left of the anchor node/widget, or to the right - // in the case of RTL scripts like Hebrew and Arabic - // * after-centered: centers drop down to the right of the anchor node/widget, or to the left - // in the case of RTL scripts like Hebrew and Arabic - // * above-centered: drop down is centered above anchor node - // * above: drop down goes above anchor node, left sides aligned - // * above-alt: drop down goes above anchor node, right sides aligned - // * below-centered: drop down is centered above anchor node - // * below: drop down goes below anchor node - // * below-alt: drop down goes below anchor node, right sides aligned - // - // layoutNode: Function(node, aroundNodeCorner, nodeCorner) - // 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. - // - // leftToRight: - // True if widget is LTR, false if widget is RTL. Affects the behavior of "above" and "below" - // positions slightly. - // - // example: - // | placeAroundNode(node, aroundNode, {'BL':'TL', 'TR':'BR'}); - // This will try to position node such that node's top-left corner is at the same position - // as the bottom left corner of the aroundNode (ie, put node below - // aroundNode, with left edges aligned). If that fails it will try to put - // the bottom-right corner of node where the top right corner of aroundNode is - // (ie, put node above aroundNode, with right edges aligned) - // - - // if around is a DOMNode (or DOMNode id), convert to coordinates - var aroundNodePos = (typeof anchor == "string" || "offsetWidth" in anchor) - ? domGeometry.position(anchor, true) - : anchor; - - // Adjust anchor positioning for the case that a parent node has overflw hidden, therefore cuasing the anchor not to be completely visible - if(anchor.parentNode){ - var parent = anchor.parentNode; - while(parent && parent.nodeType == 1 && parent.nodeName != "BODY"){ //ignoring the body will help performance - var parentPos = domGeometry.position(parent, true); - var parentStyleOverflow = domStyle.getComputedStyle(parent).overflow; - if(parentStyleOverflow == "hidden" || parentStyleOverflow == "auto" || parentStyleOverflow == "scroll"){ - var bottomYCoord = Math.min(aroundNodePos.y + aroundNodePos.h, parentPos.y + parentPos.h); - var rightXCoord = Math.min(aroundNodePos.x + aroundNodePos.w, parentPos.x + parentPos.w); - aroundNodePos.x = Math.max(aroundNodePos.x, parentPos.x); - aroundNodePos.y = Math.max(aroundNodePos.y, parentPos.y); - aroundNodePos.h = bottomYCoord - aroundNodePos.y; - aroundNodePos.w = rightXCoord - aroundNodePos.x; - } - parent = parent.parentNode; - } - } - - var x = aroundNodePos.x, - y = aroundNodePos.y, - width = "w" in aroundNodePos ? aroundNodePos.w : (aroundNodePos.w = aroundNodePos.width), - height = "h" in aroundNodePos ? aroundNodePos.h : (kernel.deprecated("place.around: dijit.place.__Rectangle: { x:"+x+", y:"+y+", height:"+aroundNodePos.height+", width:"+width+" } has been deprecated. Please use { x:"+x+", y:"+y+", h:"+aroundNodePos.height+", w:"+width+" }", "", "2.0"), aroundNodePos.h = aroundNodePos.height); - - // Convert positions arguments into choices argument for _place() - var choices = []; - function push(aroundCorner, corner){ - choices.push({ - aroundCorner: aroundCorner, - corner: corner, - pos: { - x: { - 'L': x, - 'R': x + width, - 'M': x + (width >> 1) - }[aroundCorner.charAt(1)], - y: { - 'T': y, - 'B': y + height, - 'M': y + (height >> 1) - }[aroundCorner.charAt(0)] - } - }) - } - array.forEach(positions, function(pos){ - var ltr = leftToRight; - switch(pos){ - case "above-centered": - push("TM", "BM"); - break; - case "below-centered": - push("BM", "TM"); - break; - case "after-centered": - ltr = !ltr; - // fall through - case "before-centered": - push(ltr ? "ML" : "MR", ltr ? "MR" : "ML"); - break; - case "after": - ltr = !ltr; - // fall through - case "before": - push(ltr ? "TL" : "TR", ltr ? "TR" : "TL"); - push(ltr ? "BL" : "BR", ltr ? "BR" : "BL"); - break; - case "below-alt": - ltr = !ltr; - // fall through - case "below": - // first try to align left borders, next try to align right borders (or reverse for RTL mode) - push(ltr ? "BL" : "BR", ltr ? "TL" : "TR"); - push(ltr ? "BR" : "BL", ltr ? "TR" : "TL"); - break; - case "above-alt": - ltr = !ltr; - // fall through - case "above": - // first try to align left borders, next try to align right borders (or reverse for RTL mode) - push(ltr ? "TL" : "TR", ltr ? "BL" : "BR"); - push(ltr ? "TR" : "TL", ltr ? "BR" : "BL"); - break; - default: - // To assist dijit/_base/place, accept arguments of type {aroundCorner: "BL", corner: "TL"}. - // Not meant to be used directly. - push(pos.aroundCorner, pos.corner); - } - }); - - var position = _place(node, choices, layoutNode, {w: width, h: height}); - position.aroundNodePos = aroundNodePos; - - return position; - } - }); -}); - -}, -'dijit/_HasDropDown':function(){ -define("dijit/_HasDropDown", [ - "dojo/_base/declare", // declare - "dojo/_base/Deferred", - "dojo/_base/event", // event.stop - "dojo/dom", // dom.isDescendant - "dojo/dom-attr", // domAttr.set - "dojo/dom-class", // domClass.add domClass.contains domClass.remove - "dojo/dom-geometry", // domGeometry.marginBox domGeometry.position - "dojo/dom-style", // domStyle.set - "dojo/has", - "dojo/keys", // keys.DOWN_ARROW keys.ENTER keys.ESCAPE - "dojo/_base/lang", // lang.hitch lang.isFunction - "dojo/touch", - "dojo/_base/window", // win.doc - "dojo/window", // winUtils.getBox - "./registry", // registry.byNode() - "./focus", - "./popup", - "./_FocusMixin" -], function(declare, Deferred, event,dom, domAttr, domClass, domGeometry, domStyle, has, keys, lang, touch, - win, winUtils, registry, focus, popup, _FocusMixin){ - -/*===== - var _FocusMixin = dijit._FocusMixin; -=====*/ - - // module: - // dijit/_HasDropDown - // summary: - // Mixin for widgets that need drop down ability. - - return declare("dijit._HasDropDown", _FocusMixin, { - // summary: - // Mixin for widgets that need drop down ability. - - // _buttonNode: [protected] DomNode - // The button/icon/node to click to display the drop down. - // Can be set via a data-dojo-attach-point assignment. - // If missing, then either focusNode or domNode (if focusNode is also missing) will be used. - _buttonNode: null, - - // _arrowWrapperNode: [protected] DomNode - // Will set CSS class dijitUpArrow, dijitDownArrow, dijitRightArrow etc. on this node depending - // on where the drop down is set to be positioned. - // Can be set via a data-dojo-attach-point assignment. - // If missing, then _buttonNode will be used. - _arrowWrapperNode: null, - - // _popupStateNode: [protected] DomNode - // The node to set the popupActive class on. - // Can be set via a data-dojo-attach-point assignment. - // If missing, then focusNode or _buttonNode (if focusNode is missing) will be used. - _popupStateNode: null, - - // _aroundNode: [protected] DomNode - // The node to display the popup around. - // Can be set via a data-dojo-attach-point assignment. - // If missing, then domNode will be used. - _aroundNode: null, - - // dropDown: [protected] Widget - // The widget to display as a popup. This widget *must* be - // defined before the startup function is called. - dropDown: null, - - // autoWidth: [protected] Boolean - // Set to true to make the drop down at least as wide as this - // widget. Set to false if the drop down should just be its - // default width - autoWidth: true, - - // forceWidth: [protected] Boolean - // Set to true to make the drop down exactly as wide as this - // widget. Overrides autoWidth. - forceWidth: false, - - // maxHeight: [protected] Integer - // 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[] - // This variable controls the position of the drop down. - // It's an array of strings with the following values: - // - // * before: places drop down to the left of the target node/widget, or to the right in - // the case of RTL scripts like Hebrew and Arabic - // * after: places drop down to the right of the target node/widget, or to the left in - // the case of RTL scripts like Hebrew and Arabic - // * above: drop down goes above target node - // * below: drop down goes below target node - // - // The list is positions is tried, in order, until a position is found where the drop down fits - // within the viewport. - // - dropDownPosition: ["below","above"], - - // _stopClickEvents: Boolean - // When set to false, the click events will not be stopped, in - // case you want to use them in your subwidget - _stopClickEvents: true, - - _onDropDownMouseDown: function(/*Event*/ e){ - // summary: - // Callback when the user mousedown's on the arrow icon - if(this.disabled || this.readOnly){ return; } - - // Prevent default to stop things like text selection, but don't stop propogation, so that: - // 1. TimeTextBox etc. can focusthe <input> on mousedown - // 2. dropDownButtonActive class applied by _CssStateMixin (on button depress) - // 3. user defined onMouseDown handler fires - e.preventDefault(); - - this._docHandler = this.connect(win.doc, touch.release, "_onDropDownMouseUp"); - - this.toggleDropDown(); - }, - - _onDropDownMouseUp: function(/*Event?*/ e){ - // summary: - // Callback when the user lifts their mouse after mouse down on the arrow icon. - // If the drop down is a simple menu and the mouse is over the menu, we execute it, otherwise, we focus our - // drop down widget. If the event is missing, then we are not - // a mouseup event. - // - // This is useful for the common mouse movement pattern - // with native browser <select> nodes: - // 1. mouse down on the select node (probably on the arrow) - // 2. move mouse to a menu item while holding down the mouse button - // 3. mouse up. this selects the menu item as though the user had clicked it. - if(e && this._docHandler){ - this.disconnect(this._docHandler); - } - var dropDown = this.dropDown, overMenu = false; - - if(e && this._opened){ - // This code deals with the corner-case when the drop down covers the original widget, - // because it's so large. In that case mouse-up shouldn't select a value from the menu. - // Find out if our target is somewhere in our dropdown widget, - // but not over our _buttonNode (the clickable node) - var c = domGeometry.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 && !overMenu){ - if(domClass.contains(t, "dijitPopup")){ - overMenu = true; - }else{ - t = t.parentNode; - } - } - if(overMenu){ - t = e.target; - if(dropDown.onItemClick){ - var menuItem; - while(t && !(menuItem = registry.byNode(t))){ - t = t.parentNode; - } - if(menuItem && menuItem.onClick && menuItem.getParent){ - menuItem.getParent().onItemClick(menuItem, e); - } - } - return; - } - } - } - if(this._opened){ - if(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(lang.hitch(dropDown, "focus"), 1); - } - }else{ - // The drop down arrow icon probably can't receive focus, but widget itself should get focus. - // setTimeout() needed to make it work on IE (test DateTextBox) - setTimeout(lang.hitch(this, "focus"), 0); - } - - if(has("ios")){ - this._justGotMouseUp = true; - setTimeout(lang.hitch(this, function(){ - this._justGotMouseUp = false; - }), 0); - } - }, - - _onDropDownClick: function(/*Event*/ e){ - if(has("ios") && !this._justGotMouseUp){ - // This branch fires on iPhone for ComboBox, because the button node is an <input> and doesn't - // generate touchstart/touchend events. Pretend we just got a mouse down / mouse up. - // The if(has("ios") is necessary since IE and desktop safari get spurious onclick events - // when there are nested tables (specifically, clicking on a table that holds a dijit.form.Select, - // but not on the Select itself, causes an onclick event on the Select) - this._onDropDownMouseDown(e); - this._onDropDownMouseUp(e); - } - - // The drop down was already opened on mousedown/keydown; just need to call stopEvent(). - if(this._stopClickEvents){ - event.stop(e); - } - }, - - buildRendering: function(){ - this.inherited(arguments); - - this._buttonNode = this._buttonNode || this.focusNode || this.domNode; - this._popupStateNode = this._popupStateNode || this.focusNode || this._buttonNode; - - // 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 - var defaultPos = { - "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"; - domClass.add(this._arrowWrapperNode || this._buttonNode, "dijit" + defaultPos + "ArrowButton"); - }, - - postCreate: function(){ - // summary: - // set up nodes and connect our mouse and keypress events - - this.inherited(arguments); - - this.connect(this._buttonNode, touch.press, "_onDropDownMouseDown"); - this.connect(this._buttonNode, "onclick", "_onDropDownClick"); - this.connect(this.focusNode, "onkeypress", "_onKey"); - this.connect(this.focusNode, "onkeyup", "_onKeyUp"); - }, - - 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. - if(!this.dropDown._destroyed){ - this.dropDown.destroyRecursive(); - } - delete this.dropDown; - } - this.inherited(arguments); - }, - - _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, target = e.target; - if(d && this._opened && d.handleKey){ - if(d.handleKey(e) === false){ - /* false return code means that the drop down handled the key */ - event.stop(e); - return; - } - } - if(d && this._opened && e.charOrCode == keys.ESCAPE){ - this.closeDropDown(); - event.stop(e); - }else if(!this._opened && - (e.charOrCode == keys.DOWN_ARROW || - ( (e.charOrCode == 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; - event.stop(e); - } - }, - - _onKeyUp: function(){ - if(this._toggleOnKeyUp){ - delete this._toggleOnKeyUp; - this.toggleDropDown(); - var d = this.dropDown; // drop down may not exist until toggleDropDown() call - if(d && d.focus){ - setTimeout(lang.hitch(d, "focus"), 1); - } - } - }, - - _onBlur: function(){ - // summary: - // Called magically when focus has shifted away from this widget and it's dropdown - - // 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 = focus.curNode && this.dropDown && dom.isDescendant(focus.curNode, this.dropDown.domNode); - - this.closeDropDown(focusMe); - - this.inherited(arguments); - }, - - isLoaded: function(){ - // summary: - // Returns true if the dropdown exists and it's data is loaded. This can - // be overridden in order to force a call to loadDropDown(). - // tags: - // protected - - return true; - }, - - loadDropDown: function(/*Function*/ loadCallback){ - // summary: - // Creates the drop down if it doesn't exist, loads the data - // if there's an href and it hasn't been loaded yet, and then calls - // the given callback. - // tags: - // protected - - // TODO: for 2.0, change API to return a Deferred, instead of calling loadCallback? - loadCallback(); - }, - - loadAndOpenDropDown: function(){ - // summary: - // Creates the drop down if it doesn't exist, loads the data - // if there's an href and it hasn't been loaded yet, and - // then opens the drop down. This is basically a callback when the - // user presses the down arrow button to open the drop down. - // returns: Deferred - // Deferred for the drop down widget that - // fires when drop down is created and loaded - // tags: - // protected - var d = new Deferred(), - afterLoad = lang.hitch(this, function(){ - this.openDropDown(); - d.resolve(this.dropDown); - }); - if(!this.isLoaded()){ - this.loadDropDown(afterLoad); - }else{ - afterLoad(); - } - return d; - }, - - 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; } - if(!this._opened){ - this.loadAndOpenDropDown(); - }else{ - this.closeDropDown(); - } - }, - - openDropDown: function(){ - // summary: - // 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, - ddNode = dropDown.domNode, - aroundNode = this._aroundNode || this.domNode, - self = this; - - // Prepare our popup's height and honor maxHeight if it exists. - - // TODO: isn't maxHeight dependent on the return value from dijit.popup.open(), - // ie, dependent on how much space is available (BK) - - if(!this._preparedNode){ - 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; - } - if(ddNode.style.height){ - this._explicitDDHeight = true; - } - } - - // Code for resizing dropdown (height limitation, or increasing width to match my width) - if(this.maxHeight || this.forceWidth || this.autoWidth){ - var myStyle = { - display: "", - visibility: "hidden" - }; - if(!this._explicitDDWidth){ - myStyle.width = ""; - } - if(!this._explicitDDHeight){ - myStyle.height = ""; - } - domStyle.set(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 = winUtils.getBox(), - position = domGeometry.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 - popup.moveOffScreen(dropDown); - - if(dropDown.startup && !dropDown._started){ - dropDown.startup(); // this has to be done after being added to the DOM - } - // Get size of drop down, and determine if vertical scroll bar needed - var mb = domGeometry.getMarginSize(ddNode); - var overHeight = (maxHeight && mb.h > maxHeight); - domStyle.set(ddNode, { - overflowX: "hidden", - overflowY: overHeight ? "auto" : "hidden" - }); - if(overHeight){ - mb.h = maxHeight; - if("w" in mb){ - mb.w += 16; // room for vertical scrollbar - } - }else{ - delete mb.h; - } - - // Adjust dropdown width to match or be larger than my width - if(this.forceWidth){ - mb.w = aroundNode.offsetWidth; - }else if(this.autoWidth){ - mb.w = Math.max(mb.w, aroundNode.offsetWidth); - }else{ - delete mb.w; - } - - // And finally, resize the dropdown to calculated height and width - if(lang.isFunction(dropDown.resize)){ - dropDown.resize(mb); - }else{ - domGeometry.setMarginBox(ddNode, mb); - } - } - - var retVal = popup.open({ - parent: this, - popup: dropDown, - around: aroundNode, - orient: this.dropDownPosition, - onExecute: function(){ - self.closeDropDown(true); - }, - onCancel: function(){ - self.closeDropDown(true); - }, - onClose: function(){ - domAttr.set(self._popupStateNode, "popupActive", false); - domClass.remove(self._popupStateNode, "dijitHasDropDownOpen"); - self._opened = false; - } - }); - domAttr.set(this._popupStateNode, "popupActive", "true"); - domClass.add(self._popupStateNode, "dijitHasDropDownOpen"); - this._opened=true; - - // TODO: set this.checked and call setStateClass(), to affect button look while drop down is shown - return retVal; - }, - - closeDropDown: function(/*Boolean*/ focus){ - // summary: - // Closes the drop down on this widget - // focus: - // If true, refocuses the button widget - // tags: - // protected - - if(this._opened){ - if(focus){ this.focus(); } - popup.close(this.dropDown); - this._opened = false; - } - } - - }); -}); - -}, -'dijit/tree/TreeStoreModel':function(){ -define("dijit/tree/TreeStoreModel", [ - "dojo/_base/array", // array.filter array.forEach array.indexOf array.some - "dojo/aspect", // aspect.after - "dojo/_base/declare", // declare - "dojo/_base/json", // json.stringify - "dojo/_base/lang" // lang.hitch -], function(array, aspect, declare, json, lang){ - - // module: - // dijit/tree/TreeStoreModel - // summary: - // Implements dijit.Tree.model connecting to a dojo.data store with a single - // root item. - - return declare("dijit.tree.TreeStoreModel", null, { - // summary: - // Implements dijit.Tree.model connecting to a dojo.data 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", - - // 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, - - // 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, - - // 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, - - constructor: function(/* Object */ args){ - // summary: - // Passed the arguments listed above (store, etc) - // tags: - // private - - lang.mixin(this, args); - - this.connects = []; - - var store = this.store; - if(!store.getFeatures()['dojo.data.api.Identity']){ - throw new Error("dijit.Tree: store must support dojo.data.Identity"); - } - - // if the store supports Notification, subscribe to the notification events - if(store.getFeatures()['dojo.data.api.Notification']){ - this.connects = this.connects.concat([ - aspect.after(store, "onNew", lang.hitch(this, "onNewItem"), true), - aspect.after(store, "onDelete", lang.hitch(this, "onDeleteItem"), true), - aspect.after(store, "onSet", lang.hitch(this, "onSetItem"), true) - ]); - } - }, - - destroy: function(){ - var h; - while(h = this.connects.pop()){ h.remove(); } - // TODO: should cancel any in-progress processing of getRoot(), getChildren() - }, - - // ======================================================================= - // Methods for traversing hierarchy - - 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.store.fetch({ - query: this.query, - onComplete: lang.hitch(this, function(items){ - if(items.length != 1){ - throw new Error(this.declaredClass + ": query " + json.stringify(this.query) + " returned " + items.length + - " items, but must return exactly one item"); - } - this.root = items[0]; - onItem(this.root); - }), - 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 array.some(this.childrenAttrs, function(attr){ - return this.store.hasAttribute(item, attr); - }, this); - }, - - 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. - - 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 = lang.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); - } - - // count how many items need to be loaded - var _waitCount = 0; - if(!this.deferItemLoadingUntilExpand){ - array.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 - array.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 - }); - } - }); - } - }, - - // ======================================================================= - // 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 - }, - - 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 - } - }, - - // ======================================================================= - // 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]}, 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){ - array.forEach(this.childrenAttrs, function(attr){ - if(store.containsValue(oldParentItem, attr, childItem)){ - if(!bCopy){ - var values = array.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)); - } - } - }, - - // ======================================================================= - // Callbacks - - 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 - }, - - onChildrenChange: function(/*===== parent, newChildrenList =====*/){ - // summary: - // Callback to do notifications about new, updated, or deleted items. - // parent: dojo.data.Item - // newChildrenList: dojo.data.Item[] - // tags: - // callback - }, - - onDelete: function(/*dojo.data.Item*/ /*===== item =====*/){ - // 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 - }, - - // ======================================================================= - // Events from data 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 - - // We only care about the new item if it has a parent that corresponds to a TreeNode - // we are currently displaying - if(!parentInfo){ - return; - } - - // 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, lang.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, attribute /*===== , oldValue, 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. - // item: Item - // attribute: attribute-name-string - // oldValue: object | array - // newValue: object | array - // tags: - // extension - - if(array.indexOf(this.childrenAttrs, attribute) != -1){ - // item's children list changed - this.getChildren(item, lang.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); - } - } - }); -}); - -}, -'dijit/_MenuBase':function(){ -define("dijit/_MenuBase", [ - "./popup", - "dojo/window", - "./_Widget", - "./_KeyNavContainer", - "./_TemplatedMixin", - "dojo/_base/declare", // declare - "dojo/dom", // dom.isDescendant domClass.replace - "dojo/dom-attr", - "dojo/dom-class", // domClass.replace - "dojo/_base/lang", // lang.hitch - "dojo/_base/array" // array.indexOf -], function(pm, winUtils, _Widget, _KeyNavContainer, _TemplatedMixin, - declare, dom, domAttr, domClass, lang, array){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _KeyNavContainer = dijit._KeyNavContainer; -=====*/ - -// module: -// dijit/_MenuBase -// summary: -// Base class for Menu and MenuBar - -return declare("dijit._MenuBase", - [_Widget, _TemplatedMixin, _KeyNavContainer], -{ - // summary: - // Base class for Menu and MenuBar - - // parentMenu: [readonly] Widget - // pointer to menu that displayed me - parentMenu: null, - - // popupDelay: Integer - // number of milliseconds before hovering (without clicking) causes the popup to automatically open. - popupDelay: 500, - - onExecute: function(){ - // summary: - // Attach point for notification about when a menu item has been executed. - // This is an internal mechanism used for Menus to signal to their parent to - // close them, because they are about to execute the onClick handler. In - // general developers should not attach to or override this method. - // tags: - // protected - }, - - onCancel: function(/*Boolean*/ /*===== closeAll =====*/){ - // summary: - // Attach point for notification about when the user cancels the current menu - // This is an internal mechanism used for Menus to signal to their parent to - // close them. In general developers should not attach to or override this method. - // tags: - // protected - }, - - _moveToPopup: function(/*Event*/ evt){ - // summary: - // This handles the right arrow key (left arrow key on RTL systems), - // which will either open a submenu, or move to the next item in the - // ancestor MenuBar - // tags: - // private - - if(this.focusedChild && this.focusedChild.popup && !this.focusedChild.disabled){ - this.focusedChild._onClick(evt); - }else{ - var topMenu = this._getTopMenu(); - if(topMenu && topMenu._isMenuBar){ - topMenu.focusNext(); - } - } - }, - - _onPopupHover: function(/*Event*/ /*===== evt =====*/){ - // summary: - // This handler is called when the mouse moves over the popup. - // tags: - // private - - // if the mouse hovers over a menu popup that is in pending-close state, - // then stop the close operation. - // This can't be done in onItemHover since some popup targets don't have MenuItems (e.g. ColorPicker) - if(this.currentPopup && this.currentPopup._pendingClose_timer){ - var parentMenu = this.currentPopup.parentMenu; - // highlight the parent menu item pointing to this popup - if(parentMenu.focusedChild){ - parentMenu.focusedChild._setSelected(false); - } - parentMenu.focusedChild = this.currentPopup.from_item; - parentMenu.focusedChild._setSelected(true); - // cancel the pending close - this._stopPendingCloseTimer(this.currentPopup); - } - }, - - onItemHover: function(/*MenuItem*/ item){ - // summary: - // Called when cursor is over a MenuItem. - // tags: - // protected - - // Don't do anything unless user has "activated" the menu by: - // 1) clicking it - // 2) opening it from a parent menu (which automatically focuses it) - if(this.isActive){ - this.focusChild(item); - if(this.focusedChild.popup && !this.focusedChild.disabled && !this.hover_timer){ - this.hover_timer = setTimeout(lang.hitch(this, "_openPopup"), this.popupDelay); - } - } - // if the user is mixing mouse and keyboard navigation, - // then the menu may not be active but a menu item has focus, - // but it's not the item that the mouse just hovered over. - // To avoid both keyboard and mouse selections, use the latest. - if(this.focusedChild){ - this.focusChild(item); - } - this._hoveredChild = item; - }, - - _onChildBlur: function(item){ - // summary: - // Called when a child MenuItem becomes inactive because focus - // has been removed from the MenuItem *and* it's descendant menus. - // tags: - // private - this._stopPopupTimer(); - item._setSelected(false); - // Close all popups that are open and descendants of this menu - var itemPopup = item.popup; - if(itemPopup){ - this._stopPendingCloseTimer(itemPopup); - itemPopup._pendingClose_timer = setTimeout(function(){ - itemPopup._pendingClose_timer = null; - if(itemPopup.parentMenu){ - itemPopup.parentMenu.currentPopup = null; - } - pm.close(itemPopup); // this calls onClose - }, this.popupDelay); - } - }, - - onItemUnhover: function(/*MenuItem*/ item){ - // summary: - // Callback fires when mouse exits a MenuItem - // tags: - // protected - - if(this.isActive){ - this._stopPopupTimer(); - } - if(this._hoveredChild == item){ this._hoveredChild = null; } - }, - - _stopPopupTimer: function(){ - // summary: - // Cancels the popup timer because the user has stop hovering - // on the MenuItem, etc. - // tags: - // private - if(this.hover_timer){ - clearTimeout(this.hover_timer); - this.hover_timer = null; - } - }, - - _stopPendingCloseTimer: function(/*dijit._Widget*/ popup){ - // summary: - // Cancels the pending-close timer because the close has been preempted - // tags: - // private - if(popup._pendingClose_timer){ - clearTimeout(popup._pendingClose_timer); - popup._pendingClose_timer = null; - } - }, - - _stopFocusTimer: function(){ - // summary: - // Cancels the pending-focus timer because the menu was closed before focus occured - // tags: - // private - if(this._focus_timer){ - clearTimeout(this._focus_timer); - this._focus_timer = null; - } - }, - - _getTopMenu: function(){ - // summary: - // Returns the top menu in this chain of Menus - // tags: - // private - for(var top=this; top.parentMenu; top=top.parentMenu); - return top; - }, - - onItemClick: function(/*dijit._Widget*/ item, /*Event*/ evt){ - // summary: - // Handle clicks on an item. - // tags: - // private - - // this can't be done in _onFocus since the _onFocus events occurs asynchronously - if(typeof this.isShowingNow == 'undefined'){ // non-popup menu - this._markActive(); - } - - this.focusChild(item); - - if(item.disabled){ return false; } - - if(item.popup){ - this._openPopup(); - }else{ - // before calling user defined handler, close hierarchy of menus - // and restore focus to place it was when menu was opened - this.onExecute(); - - // user defined handler for click - item.onClick(evt); - } - }, - - _openPopup: function(){ - // summary: - // Open the popup to the side of/underneath the current menu item - // tags: - // protected - - this._stopPopupTimer(); - var from_item = this.focusedChild; - if(!from_item){ return; } // the focused child lost focus since the timer was started - var popup = from_item.popup; - if(popup.isShowingNow){ return; } - if(this.currentPopup){ - this._stopPendingCloseTimer(this.currentPopup); - pm.close(this.currentPopup); - } - popup.parentMenu = this; - popup.from_item = from_item; // helps finding the parent item that should be focused for this popup - var self = this; - pm.open({ - parent: this, - popup: popup, - around: from_item.domNode, - orient: this._orient || ["after", "before"], - onCancel: function(){ // called when the child menu is canceled - // set isActive=false (_closeChild vs _cleanUp) so that subsequent hovering will NOT open child menus - // which seems aligned with the UX of most applications (e.g. notepad, wordpad, paint shop pro) - self.focusChild(from_item); // put focus back on my node - self._cleanUp(); // close the submenu (be sure this is done _after_ focus is moved) - from_item._setSelected(true); // oops, _cleanUp() deselected the item - self.focusedChild = from_item; // and unset focusedChild - }, - onExecute: lang.hitch(this, "_cleanUp") - }); - - this.currentPopup = popup; - // detect mouseovers to handle lazy mouse movements that temporarily focus other menu items - popup.connect(popup.domNode, "onmouseenter", lang.hitch(self, "_onPopupHover")); // cleaned up when the popped-up widget is destroyed on close - - if(popup.focus){ - // If user is opening the popup via keyboard (right arrow, or down arrow for MenuBar), - // if the cursor happens to collide with the popup, it will generate an onmouseover event - // even though the mouse wasn't moved. Use a setTimeout() to call popup.focus so that - // our focus() call overrides the onmouseover event, rather than vice-versa. (#8742) - popup._focus_timer = setTimeout(lang.hitch(popup, function(){ - this._focus_timer = null; - this.focus(); - }), 0); - } - }, - - _markActive: function(){ - // summary: - // Mark this menu's state as active. - // Called when this Menu gets focus from: - // 1) clicking it (mouse or via space/arrow key) - // 2) being opened by a parent menu. - // This is not called just from mouse hover. - // Focusing a menu via TAB does NOT automatically set isActive - // since TAB is a navigation operation and not a selection one. - // For Windows apps, pressing the ALT key focuses the menubar - // menus (similar to TAB navigation) but the menu is not active - // (ie no dropdown) until an item is clicked. - this.isActive = true; - domClass.replace(this.domNode, "dijitMenuActive", "dijitMenuPassive"); - }, - - onOpen: function(/*Event*/ /*===== e =====*/){ - // summary: - // Callback when this menu is opened. - // This is called by the popup manager as notification that the menu - // was opened. - // tags: - // private - - this.isShowingNow = true; - this._markActive(); - }, - - _markInactive: function(){ - // 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 - domClass.replace(this.domNode, "dijitMenuPassive", "dijitMenuActive"); - }, - - onClose: function(){ - // summary: - // Callback when this menu is closed. - // This is called by the popup manager as notification that the menu - // was closed. - // tags: - // private - - this._stopFocusTimer(); - this._markInactive(); - this.isShowingNow = false; - this.parentMenu = null; - }, - - _closeChild: function(){ - // summary: - // Called when submenu is clicked or focus is lost. Close hierarchy of menus. - // tags: - // private - this._stopPopupTimer(); - - if(this.currentPopup){ - // If focus is on a descendant MenuItem then move focus to me, - // because IE doesn't like it when you display:none a node with focus, - // and also so keyboard users don't lose control. - // Likely, immediately after a user defined onClick handler will move focus somewhere - // else, like a Dialog. - if(array.indexOf(this._focusManager.activeStack, this.id) >= 0){ - domAttr.set(this.focusedChild.focusNode, "tabIndex", this.tabIndex); - this.focusedChild.focusNode.focus(); - } - // Close all popups that are open and descendants of this menu - pm.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){ - // summary: - // Called when child of this Menu gets focus from: - // 1) clicking it - // 2) tabbing into it - // 3) being opened by a parent menu. - // This is not called just from mouse hover. - if(this._hoveredChild && this._hoveredChild != item){ - this._hoveredChild._onUnhover(); // any previous mouse movement is trumped by focus selection - } - }, - - _onBlur: function(){ - // summary: - // Called when focus is moved away from this Menu and it's submenus. - // tags: - // protected - this._cleanUp(); - this.inherited(arguments); - }, - - _cleanUp: function(){ - // summary: - // Called when the user is done with this menu. Closes hierarchy of menus. - // tags: - // private - - this._closeChild(); // don't call this.onClose since that's incorrect for MenuBar's that never close - if(typeof this.isShowingNow == 'undefined'){ // non-popup menu doesn't call onClose - this._markInactive(); - } - } -}); - -}); - -}, -'dijit/focus':function(){ -define("dijit/focus", [ - "dojo/aspect", - "dojo/_base/declare", // declare - "dojo/dom", // domAttr.get dom.isDescendant - "dojo/dom-attr", // domAttr.get dom.isDescendant - "dojo/dom-construct", // connect to domConstruct.empty, domConstruct.destroy - "dojo/Evented", - "dojo/_base/lang", // lang.hitch - "dojo/on", - "dojo/ready", - "dojo/_base/sniff", // has("ie") - "dojo/Stateful", - "dojo/_base/unload", // unload.addOnWindowUnload - "dojo/_base/window", // win.body - "dojo/window", // winUtils.get - "./a11y", // a11y.isTabNavigable - "./registry", // registry.byId - "." // to set dijit.focus -], function(aspect, declare, dom, domAttr, domConstruct, Evented, lang, on, ready, has, Stateful, unload, win, winUtils, - a11y, registry, dijit){ - - // module: - // dijit/focus - // summary: - // Returns a singleton that tracks the currently focused node, and which widgets are currently "active". - -/*===== - dijit.focus = { - // summary: - // Tracks the currently focused node, and which widgets are currently "active". - // Access via require(["dijit/focus"], function(focus){ ... }). - // - // A widget is considered active if it or a descendant widget has focus, - // or if a non-focusable node of this widget or a descendant was recently clicked. - // - // Call focus.watch("curNode", callback) to track the current focused DOMNode, - // or focus.watch("activeStack", callback) to track the currently focused stack of widgets. - // - // Call focus.on("widget-blur", func) or focus.on("widget-focus", ...) to monitor when - // when widgets become active/inactive - // - // Finally, focus(node) will focus a node, suppressing errors if the node doesn't exist. - - // curNode: DomNode - // Currently focused item on screen - curNode: null, - - // activeStack: dijit._Widget[] - // List of currently active widgets (focused widget and it's ancestors) - activeStack: [], - - registerIframe: function(iframe){ - // summary: - // Registers listeners on the specified iframe so that any click - // or focus event on that iframe (or anything in it) is reported - // as a focus/click event on the <iframe> itself. - // description: - // Currently only used by editor. - // returns: - // Handle with remove() method to deregister. - }, - - registerWin: function(targetWindow, effectiveNode){ - // summary: - // Registers listeners on the specified window (either the main - // window or an iframe's window) to detect when the user has clicked somewhere - // or focused somewhere. - // description: - // Users should call registerIframe() instead of this method. - // targetWindow: Window? - // If specified this is the window associated with the iframe, - // i.e. iframe.contentWindow. - // effectiveNode: DOMNode? - // If specified, report any focus events inside targetWindow as - // an event on effectiveNode, rather than on evt.target. - // returns: - // Handle with remove() method to deregister. - } - }; -=====*/ - - var FocusManager = declare([Stateful, Evented], { - // curNode: DomNode - // Currently focused item on screen - curNode: null, - - // activeStack: dijit._Widget[] - // List of currently active widgets (focused widget and it's ancestors) - activeStack: [], - - constructor: function(){ - // Don't leave curNode/prevNode pointing to bogus elements - var check = lang.hitch(this, function(node){ - if(dom.isDescendant(this.curNode, node)){ - this.set("curNode", null); - } - if(dom.isDescendant(this.prevNode, node)){ - this.set("prevNode", null); - } - }); - aspect.before(domConstruct, "empty", check); - aspect.before(domConstruct, "destroy", check); - }, - - registerIframe: function(/*DomNode*/ iframe){ - // summary: - // Registers listeners on the specified iframe so that any click - // or focus event on that iframe (or anything in it) is reported - // as a focus/click event on the <iframe> itself. - // description: - // Currently only used by editor. - // returns: - // Handle with remove() method to deregister. - return this.registerWin(iframe.contentWindow, iframe); - }, - - registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){ - // summary: - // Registers listeners on the specified window (either the main - // window or an iframe's window) to detect when the user has clicked somewhere - // or focused somewhere. - // description: - // Users should call registerIframe() instead of this method. - // targetWindow: - // If specified this is the window associated with the iframe, - // i.e. iframe.contentWindow. - // effectiveNode: - // If specified, report any focus events inside targetWindow as - // an event on effectiveNode, rather than on evt.target. - // returns: - // Handle with remove() method to deregister. - - // TODO: make this function private in 2.0; Editor/users should call registerIframe(), - - var _this = this; - var mousedownListener = function(evt){ - _this._justMouseDowned = true; - setTimeout(function(){ _this._justMouseDowned = false; }, 0); - - // workaround weird IE bug where the click is on an orphaned node - // (first time clicking a Select/DropDownButton inside a TooltipDialog) - if(has("ie") && evt && evt.srcElement && evt.srcElement.parentNode == null){ - return; - } - - _this._onTouchNode(effectiveNode || evt.target || evt.srcElement, "mouse"); - }; - - // Listen for blur and focus events on targetWindow's document. - // IIRC, I'm using attachEvent() rather than dojo.connect() because focus/blur events don't bubble - // through dojo.connect(), and also maybe to catch the focus events early, before onfocus handlers - // fire. - // Connect to <html> (rather than document) on IE to avoid memory leaks, but document on other browsers because - // (at least for FF) the focus event doesn't fire on <html> or <body>. - var doc = has("ie") ? targetWindow.document.documentElement : targetWindow.document; - if(doc){ - if(has("ie")){ - 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, - // ignore those events - var tag = evt.srcElement.tagName.toLowerCase(); - if(tag == "#document" || tag == "body"){ return; } - - // Previous code called _onTouchNode() for any activate event on a non-focusable node. Can - // probably just ignore such an event as it will be handled by onmousedown handler above, but - // leaving the code for now. - if(a11y.isTabNavigable(evt.srcElement)){ - _this._onFocusNode(effectiveNode || evt.srcElement); - }else{ - _this._onTouchNode(effectiveNode || evt.srcElement); - } - }; - doc.attachEvent('onactivate', activateListener); - var deactivateListener = function(evt){ - _this._onBlurNode(effectiveNode || evt.srcElement); - }; - doc.attachEvent('ondeactivate', deactivateListener); - - return { - remove: function(){ - 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.body.addEventListener('mousedown', mousedownListener, true); - doc.body.addEventListener('touchstart', mousedownListener, true); - var focusListener = function(evt){ - _this._onFocusNode(effectiveNode || evt.target); - }; - doc.addEventListener('focus', focusListener, true); - var blurListener = function(evt){ - _this._onBlurNode(effectiveNode || evt.target); - }; - doc.addEventListener('blur', blurListener, true); - - return { - remove: function(){ - doc.body.removeEventListener('mousedown', mousedownListener, true); - doc.body.removeEventListener('touchstart', mousedownListener, true); - doc.removeEventListener('focus', focusListener, true); - doc.removeEventListener('blur', blurListener, true); - doc = null; // prevent memory leak (apparent circular reference via closure) - } - }; - } - } - }, - - _onBlurNode: function(/*DomNode*/ /*===== node =====*/){ - // summary: - // Called when focus leaves a node. - // Usually ignored, _unless_ it *isn't* followed by touching another node, - // which indicates that we tabbed off the last field on the page, - // in which case every widget is marked inactive - this.set("prevNode", this.curNode); - this.set("curNode", null); - - if(this._justMouseDowned){ - // the mouse down caused a new widget to be marked as active; this blur event - // is coming late, so ignore it. - return; - } - - // if the blur event isn't followed by a focus event then mark all widgets as inactive. - if(this._clearActiveWidgetsTimer){ - clearTimeout(this._clearActiveWidgetsTimer); - } - this._clearActiveWidgetsTimer = setTimeout(lang.hitch(this, function(){ - delete this._clearActiveWidgetsTimer; - this._setStack([]); - this.prevNode = null; - }), 100); - }, - - _onTouchNode: function(/*DomNode*/ node, /*String*/ by){ - // summary: - // Callback when node is focused or mouse-downed - // node: - // The node that was touched. - // by: - // "mouse" if the focus/touch was caused by a mouse down event - - // ignore the recent blurNode event - if(this._clearActiveWidgetsTimer){ - clearTimeout(this._clearActiveWidgetsTimer); - delete this._clearActiveWidgetsTimer; - } - - // compute stack of active widgets (ex: ComboButton --> Menu --> MenuItem) - var newStack=[]; - try{ - while(node){ - var popupParent = domAttr.get(node, "dijitPopupParent"); - if(popupParent){ - node=registry.byId(popupParent).domNode; - }else if(node.tagName && node.tagName.toLowerCase() == "body"){ - // is this the root of the document or just the root of an iframe? - if(node === win.body()){ - // node is the root of the main document - break; - } - // otherwise, find the iframe this node refers to (can't access it via parentNode, - // need to do this trick instead). window.frameElement is supported in IE/FF/Webkit - node=winUtils.get(node.ownerDocument).frameElement; - }else{ - // if this node is the root node of a widget, then add widget id to stack, - // except ignore clicks on disabled widgets (actually focusing a disabled widget still works, - // to support MenuItem) - var id = node.getAttribute && node.getAttribute("widgetId"), - widget = id && registry.byId(id); - if(widget && !(by == "mouse" && widget.get("disabled"))){ - newStack.unshift(id); - } - node=node.parentNode; - } - } - }catch(e){ /* squelch */ } - - this._setStack(newStack, by); - }, - - _onFocusNode: function(/*DomNode*/ node){ - // summary: - // Callback when node is focused - - if(!node){ - return; - } - - if(node.nodeType == 9){ - // Ignore focus events on the document itself. This is here so that - // (for example) clicking the up/down arrows of a spinner - // (which don't get focus) won't cause that widget to blur. (FF issue) - return; - } - - this._onTouchNode(node); - - if(node == this.curNode){ return; } - this.set("curNode", node); - }, - - _setStack: function(/*String[]*/ newStack, /*String*/ by){ - // summary: - // The stack of active widgets has changed. Send out appropriate events and records new stack. - // newStack: - // array of widget id's, starting from the top (outermost) widget - // by: - // "mouse" if the focus/touch was caused by a mouse down event - - var oldStack = this.activeStack; - this.set("activeStack", newStack); - - // compare old stack to new stack to see how many elements they have in common - for(var nCommon=0; nCommon<Math.min(oldStack.length, newStack.length); nCommon++){ - if(oldStack[nCommon] != newStack[nCommon]){ - break; - } - } - - var widget; - // for all elements that have gone out of focus, set focused=false - for(var i=oldStack.length-1; i>=nCommon; i--){ - widget = registry.byId(oldStack[i]); - if(widget){ - widget._hasBeenBlurred = true; // TODO: used by form widgets, should be moved there - widget.set("focused", false); - if(widget._focusManager == this){ - widget._onBlur(by); - } - this.emit("widget-blur", widget, by); - } - } - - // for all element that have come into focus, set focused=true - for(i=nCommon; i<newStack.length; i++){ - widget = registry.byId(newStack[i]); - if(widget){ - widget.set("focused", true); - if(widget._focusManager == this){ - widget._onFocus(by); - } - this.emit("widget-focus", widget, by); - } - } - }, - - focus: function(node){ - // summary: - // Focus the specified node, suppressing errors if they occur - if(node){ - try{ node.focus(); }catch(e){/*quiet*/} - } - } - }); - - var singleton = new FocusManager(); - - // register top window and all the iframes it contains - ready(function(){ - var handle = singleton.registerWin(win.doc.parentWindow || win.doc.defaultView); - if(has("ie")){ - unload.addOnWindowUnload(function(){ - handle.remove(); - handle = null; - }) - } - }); - - // Setup dijit.focus as a pointer to the singleton but also (for backwards compatibility) - // as a function to set focus. - dijit.focus = function(node){ - singleton.focus(node); // indirection here allows dijit/_base/focus.js to override behavior - }; - for(var attr in singleton){ - if(!/^_/.test(attr)){ - dijit.focus[attr] = typeof singleton[attr] == "function" ? lang.hitch(singleton, attr) : singleton[attr]; - } - } - singleton.watch(function(attr, oldVal, newVal){ - dijit.focus[attr] = newVal; - }); - - return singleton; -}); - -}, -'dojo/i18n':function(){ -define("dojo/i18n", ["./_base/kernel", "require", "./has", "./_base/array", "./_base/config", "./_base/lang", "./_base/xhr", "./json"], - function(dojo, require, has, array, config, lang, xhr, json) { - // module: - // dojo/i18n - // summary: - // This module implements the !dojo/i18n plugin and the v1.6- i18n API - // description: - // We choose to include our own plugin to leverage functionality already contained in dojo - // and thereby reduce the size of the plugin compared to various loader implementations. Also, this - // allows foreign AMD loaders to be used without their plugins. - - - has.add("dojo-preload-i18n-Api", - // if true, define the preload localizations machinery - 1 - ); - - true || has.add("dojo-v1x-i18n-Api", - // if true, define the v1.x i18n functions - 1 - ); - - var - thisModule= dojo.i18n= - // the dojo.i18n module - {}, - - 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. - // - // If root===false indicates we're working with a pre-AMD i18n bundle that doesn't tell about the available locales; - // therefore, assume everything is available and get 404 errors that indicate a particular localization is not available - // - - for(var result= [bundlePath + bundleName], localeParts= locale.split("-"), current= "", i= 0; i<localeParts.length; i++){ - current+= (current ? "-" : "") + localeParts[i]; - if(!root || root[current]){ - result.push(bundlePath + current + "/" + bundleName); - } - } - return result; - }, - - cache= {}, - - getL10nName= dojo.getL10nName = function(moduleName, bundleName, locale){ - locale = locale ? locale.toLowerCase() : dojo.locale; - moduleName = "dojo/i18n!" + moduleName.replace(/\./g, "/"); - bundleName = bundleName.replace(/\./g, "/"); - return (/root/i.test(locale)) ? - (moduleName + "/nls/" + bundleName) : - (moduleName + "/nls/" + locale + "/" + bundleName); - }, - - doLoad = function(require, bundlePathAndName, bundlePath, bundleName, locale, load){ - // get the root bundle which instructs which other bundles are required to construct the localized bundle - require([bundlePathAndName], function(root){ - var current= lang.clone(root.root), - availableLocales= getAvailableLocales(!root._v1x && root, locale, bundlePath, bundleName); - require(availableLocales, function(){ - for (var i= 1; i<availableLocales.length; i++){ - current= lang.mixin(lang.clone(current), arguments[i]); - } - // target may not have been resolve (e.g., maybe only "fr" exists when "fr-ca" was requested) - var target= bundlePathAndName + "/" + locale; - cache[target]= current; - load(); - }); - }); - }, - - normalize = function(id, toAbsMid){ - // id may be relative - // preload has form *preload*<path>/nls/<module>*<flattened locales> and - // therefore never looks like a relative - return /^\./.test(id) ? toAbsMid(id) : id; - }, - - getLocalesToLoad = function(targetLocale){ - var list = config.extraLocale || []; - list = lang.isArray(list) ? list : [list]; - list.push(targetLocale); - return list; - }, - - load = function(id, require, load){ - // - // id is in one of the following formats - // - // 1. <path>/nls/<bundle> - // => load the bundle, localized to config.locale; load all bundles localized to - // config.extraLocale (if any); return the loaded bundle localized to config.locale. - // - // 2. <path>/nls/<locale>/<bundle> - // => load then return the bundle localized to <locale> - // - // 3. *preload*<path>/nls/<module>*<JSON array of available locales> - // => for config.locale and all config.extraLocale, load all bundles found - // in the best-matching bundle rollup. A value of 1 is returned, which - // is meaningless other than to say the plugin is executing the requested - // preloads - // - // In cases 1 and 2, <path> is always normalized to an absolute module id upon entry; see - // normalize. In case 3, it <path> is assumed to be absolue; this is arranged by the builder. - // - // To load a bundle means to insert the bundle into the plugin's cache and publish the bundle - // value to the loader. Given <path>, <bundle>, and a particular <locale>, the cache key - // - // <path>/nls/<bundle>/<locale> - // - // will hold the value. Similarly, then plugin will publish this value to the loader by - // - // define("<path>/nls/<bundle>/<locale>", <bundle-value>); - // - // Given this algorithm, other machinery can provide fast load paths be preplacing - // values in the plugin's cache, which is public. When a load is demanded the - // cache is inspected before starting any loading. Explicitly placing values in the plugin - // cache is an advanced/experimental feature that should not be needed; use at your own risk. - // - // For the normal AMD algorithm, the root bundle is loaded first, which instructs the - // plugin what additional localized bundles are required for a particular locale. These - // additional locales are loaded and a mix of the root and each progressively-specific - // locale is returned. For example: - // - // 1. The client demands "dojo/i18n!some/path/nls/someBundle - // - // 2. The loader demands load(some/path/nls/someBundle) - // - // 3. This plugin require's "some/path/nls/someBundle", which is the root bundle. - // - // 4. Assuming config.locale is "ab-cd-ef" and the root bundle indicates that localizations - // are available for "ab" and "ab-cd-ef" (note the missing "ab-cd", then the plugin - // requires "some/path/nls/ab/someBundle" and "some/path/nls/ab-cd-ef/someBundle" - // - // 5. Upon receiving all required bundles, the plugin constructs the value of the bundle - // ab-cd-ef as... - // - // mixin(mixin(mixin({}, require("some/path/nls/someBundle"), - // require("some/path/nls/ab/someBundle")), - // require("some/path/nls/ab-cd-ef/someBundle")); - // - // This value is inserted into the cache and published to the loader at the - // key/module-id some/path/nls/someBundle/ab-cd-ef. - // - // The special preload signature (case 3) instructs the plugin to stop servicing all normal requests - // (further preload requests will be serviced) until all ongoing preloading has completed. - // - // The preload signature instructs the plugin that a special rollup module is available that contains - // one or more flattened, localized bundles. The JSON array of available locales indicates which locales - // are available. Here is an example: - // - // *preload*some/path/nls/someModule*["root", "ab", "ab-cd-ef"] - // - // This indicates the following rollup modules are available: - // - // some/path/nls/someModule_ROOT - // some/path/nls/someModule_ab - // some/path/nls/someModule_ab-cd-ef - // - // Each of these modules is a normal AMD module that contains one or more flattened bundles in a hash. - // For example, assume someModule contained the bundles some/bundle/path/someBundle and - // some/bundle/path/someOtherBundle, then some/path/nls/someModule_ab would be expressed as folllows: - // - // define({ - // some/bundle/path/someBundle:<value of someBundle, flattened with respect to locale ab>, - // some/bundle/path/someOtherBundle:<value of someOtherBundle, flattened with respect to locale ab>, - // }); - // - // E.g., given this design, preloading for locale=="ab" can execute the following algorithm: - // - // require(["some/path/nls/someModule_ab"], function(rollup){ - // for(var p in rollup){ - // var id = p + "/ab", - // cache[id] = rollup[p]; - // define(id, rollup[p]); - // } - // }); - // - // Similarly, if "ab-cd" is requested, the algorithm can determine that "ab" is the best available and - // load accordingly. - // - // The builder will write such rollups for every layer if a non-empty localeList profile property is - // provided. Further, the builder will include the following cache entry in the cache associated with - // any layer. - // - // "*now":function(r){r(['dojo/i18n!*preload*<path>/nls/<module>*<JSON array of available locales>']);} - // - // The *now special cache module instructs the loader to apply the provided function to context-require - // with respect to the particular layer being defined. This causes the plugin to hold all normal service - // requests until all preloading is complete. - // - // Notice that this algorithm is rarely better than the standard AMD load algorithm. Consider the normal case - // where the target locale has a single segment and a layer depends on a single bundle: - // - // Without Preloads: - // - // 1. Layer loads root bundle. - // 2. bundle is demanded; plugin loads single localized bundle. - // - // With Preloads: - // - // 1. Layer causes preloading of target bundle. - // 2. bundle is demanded; service is delayed until preloading complete; bundle is returned. - // - // In each case a single transaction is required to load the target bundle. In cases where multiple bundles - // are required and/or the locale has multiple segments, preloads still requires a single transaction whereas - // the normal path requires an additional transaction for each additional bundle/locale-segment. However all - // of these additional transactions can be done concurrently. Owing to this analysis, the entire preloading - // algorithm can be discard during a build by setting the has feature dojo-preload-i18n-Api to false. - // - if(has("dojo-preload-i18n-Api")){ - var split = id.split("*"), - preloadDemand = split[1]=="preload"; - if(preloadDemand){ - if(!cache[id]){ - // use cache[id] to prevent multiple preloads of the same preload; this shouldn't happen, but - // who knows what over-aggressive human optimizers may attempt - cache[id] = 1; - preloadL10n(split[2], json.parse(split[3]), 1); - } - // don't stall the loader! - load(1); - } - if(preloadDemand || waitForPreloads(id, require, load)){ - return; - } - } - - var match= nlsRe.exec(id), - bundlePath= match[1] + "/", - bundleName= match[5] || match[4], - bundlePathAndName= bundlePath + bundleName, - localeSpecified = (match[5] && match[4]), - targetLocale= localeSpecified || dojo.locale, - loadTarget= bundlePathAndName + "/" + targetLocale, - loadList = localeSpecified ? [targetLocale] : getLocalesToLoad(targetLocale), - remaining = loadList.length, - finish = function(){ - if(!--remaining){ - load(lang.delegate(cache[loadTarget])); - } - }; - array.forEach(loadList, function(locale){ - var target = bundlePathAndName + "/" + locale; - if(has("dojo-preload-i18n-Api")){ - checkForLegacyModules(target); - } - if(!cache[target]){ - doLoad(require, bundlePathAndName, bundlePath, bundleName, locale, finish); - }else{ - finish(); - } - }); - }; - - if(has("dojo-unit-tests")){ - var unitTests = thisModule.unitTests = []; - } - - if(has("dojo-preload-i18n-Api") || 1){ - var normalizeLocale = thisModule.normalizeLocale= function(locale){ - var result = locale ? locale.toLowerCase() : dojo.locale; - return result == "root" ? "ROOT" : result; - }, - - isXd = function(mid){ - return (1 && 1) ? - require.isXdUrl(require.toUrl(mid + ".js")) : - true; - }, - - preloading = 0, - - preloadWaitQueue = [], - - preloadL10n = thisModule._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated, /*boolean*/ guaranteedAmdFormat){ - // summary: - // Load available flattened resource bundles associated with a particular module for dojo.locale and all dojo.config.extraLocale (if any) - // - // descirption: - // Only called by built layer files. The entire locale hierarchy is loaded. For example, - // if locale=="ab-cd", then ROOT, "ab", and "ab-cd" are loaded. This is different than v1.6- - // in that the v1.6- would lonly load ab-cd...which was *always* flattened. - // - // If guaranteedAmdFormat is true, then the module can be loaded with require thereby circumventing the detection algorithm - // and the extra possible extra transaction. - // - - function forEachLocale(locale, func){ - // given locale= "ab-cd-ef", calls func on "ab-cd-ef", "ab-cd", "ab", "ROOT"; stops calling the first time func returns truthy - var parts = locale.split("-"); - while(parts.length){ - if(func(parts.join("-"))){ - return true; - } - parts.pop(); - } - return func("ROOT"); - } - - function preload(locale){ - locale = normalizeLocale(locale); - forEachLocale(locale, function(loc){ - if(array.indexOf(localesGenerated, loc)>=0){ - var mid = bundlePrefix.replace(/\./g, "/")+"_"+loc; - preloading++; - (isXd(mid) || guaranteedAmdFormat ? require : syncRequire)([mid], function(rollup){ - for(var p in rollup){ - cache[p + "/" + locale] = rollup[p]; - } - --preloading; - while(!preloading && preloadWaitQueue.length){ - load.apply(null, preloadWaitQueue.shift()); - } - }); - return true; - } - return false; - }); - } - - preload(); - array.forEach(dojo.config.extraLocale, preload); - }, - - waitForPreloads = function(id, require, load){ - if(preloading){ - preloadWaitQueue.push([id, require, load]); - } - return preloading; - }; - } - - if(1){ - // this code path assumes the dojo loader and won't work with a standard AMD loader - var evalBundle= - // use the function ctor to keep the minifiers away (also come close to global scope, but this is secondary) - new Function( - "__bundle", // the bundle to evalutate - "__checkForLegacyModules", // a function that checks if __bundle defined __mid in the global space - "__mid", // the mid that __bundle is intended to define - - // returns one of: - // 1 => the bundle was an AMD bundle - // a legacy bundle object that is the value of __mid - // instance of Error => could not figure out how to evaluate bundle - - // used to detect when __bundle calls define - "var define = function(){define.called = 1;}," - + " require = function(){define.called = 1;};" - - + "try{" - + "define.called = 0;" - + "eval(__bundle);" - + "if(define.called==1)" - // bundle called define; therefore signal it's an AMD bundle - + "return 1;" - - + "if((__checkForLegacyModules = __checkForLegacyModules(__mid)))" - // bundle was probably a v1.6- built NLS flattened NLS bundle that defined __mid in the global space - + "return __checkForLegacyModules;" - - + "}catch(e){}" - // evaulating the bundle was *neither* an AMD *nor* a legacy flattened bundle - // either way, re-eval *after* surrounding with parentheses - - + "try{" - + "return eval('('+__bundle+')');" - + "}catch(e){" - + "return e;" - + "}" - ), - - syncRequire= function(deps, callback){ - var results= []; - array.forEach(deps, function(mid){ - var url= require.toUrl(mid + ".js"); - - function load(text){ - var result = evalBundle(text, checkForLegacyModules, mid); - if(result===1){ - // the bundle was an AMD module; re-inject it through the normal AMD path - // we gotta do this since it could be an anonymous module and simply evaluating - // the text here won't provide the loader with the context to know what - // module is being defined()'d. With browser caching, this should be free; further - // this entire code path can be circumvented by using the AMD format to begin with - require([mid], function(bundle){ - results.push(cache[url]= bundle); - }); - }else{ - if(result instanceof Error){ - console.error("failed to evaluate i18n bundle; url=" + url, result); - result = {}; - } - // nls/<locale>/<bundle-name> indicates not the root. - results.push(cache[url] = (/nls\/[^\/]+\/[^\/]+$/.test(url) ? result : {root:result, _v1x:1})); - } - } - - if(cache[url]){ - results.push(cache[url]); - }else{ - var bundle= require.syncLoadNls(mid); - // don't need to check for legacy since syncLoadNls returns a module if the module - // (1) was already loaded, or (2) was in the cache. In case 1, if syncRequire is called - // from getLocalization --> load, then load will have called checkForLegacyModules() before - // calling syncRequire; if syncRequire is called from preloadLocalizations, then we - // don't care about checkForLegacyModules() because that will be done when a particular - // bundle is actually demanded. In case 2, checkForLegacyModules() is never relevant - // because cached modules are always v1.7+ built modules. - if(bundle){ - results.push(bundle); - }else{ - if(!xhr){ - try{ - require.getText(url, true, load); - }catch(e){ - results.push(cache[url]= {}); - } - }else{ - xhr.get({ - url:url, - sync:true, - load:load, - error:function(){ - results.push(cache[url]= {}); - } - }); - } - } - } - }); - callback && callback.apply(null, results); - }, - - checkForLegacyModules = function(target){ - // legacy code may have already loaded [e.g] the raw bundle x/y/z at x.y.z; when true, push into the cache - for(var result, names = target.split("/"), object = dojo.global[names[0]], i = 1; object && i<names.length-1; object = object[names[i++]]){} - if(object){ - result = object[names[i]]; - if(!result){ - // fallback for incorrect bundle build of 1.6 - result = object[names[i].replace(/-/g,"_")]; - } - if(result){ - cache[target] = result; - } - } - return result; - }; - - thisModule.getLocalization= function(moduleName, bundleName, locale){ - var result, - l10nName= getL10nName(moduleName, bundleName, locale).substring(10); - load(l10nName, (!isXd(l10nName) ? syncRequire : require), function(result_){ result= result_; }); - return result; - }; - - if(has("dojo-unit-tests")){ - unitTests.push(function(doh){ - doh.register("tests.i18n.unit", function(t){ - var check; - - check = evalBundle("{prop:1}"); - t.is({prop:1}, check); t.is(undefined, check[1]); - - check = evalBundle("({prop:1})"); - t.is({prop:1}, check); t.is(undefined, check[1]); - - check = evalBundle("{'prop-x':1}"); - t.is({'prop-x':1}, check); t.is(undefined, check[1]); - - check = evalBundle("({'prop-x':1})"); - t.is({'prop-x':1}, check); t.is(undefined, check[1]); - - check = evalBundle("define({'prop-x':1})"); - t.is(1, check); - - check = evalBundle("this is total nonsense and should throw an error"); - t.is(check instanceof Error, true); - }); - }); - } - } - - return lang.mixin(thisModule, { - dynamic:true, - normalize:normalize, - load:load, - cache:cache - }); -}); - -}, -'dijit/hccss':function(){ -define("dijit/hccss", [ - "require", // require.toUrl - "dojo/_base/config", // config.blankGif - "dojo/dom-class", // domClass.add domConstruct.create domStyle.getComputedStyle - "dojo/dom-construct", // domClass.add domConstruct.create domStyle.getComputedStyle - "dojo/dom-style", // domClass.add domConstruct.create domStyle.getComputedStyle - "dojo/ready", // ready - "dojo/_base/sniff", // has("ie") has("mozilla") - "dojo/_base/window" // win.body -], function(require, config, domClass, domConstruct, domStyle, ready, has, win){ - - // module: - // dijit/hccss - // summary: - // Test if computer is in high contrast mode, and sets dijit_a11y flag on <body> if it is. - - if(has("ie") || has("mozilla")){ // NOTE: checking in Safari messes things up - // priority is 90 to run ahead of parser priority of 100 - ready(90, function(){ - // summary: - // Detects if we are in high-contrast mode or not - - // create div for testing if high contrast mode is on or images are turned off - var div = domConstruct.create("div",{ - id: "a11yTestNode", - style:{ - cssText:'border: 1px solid;' - + 'border-color:red green;' - + 'position: absolute;' - + 'height: 5px;' - + 'top: -999px;' - + 'background-image: url("' + (config.blankGif || require.toUrl("dojo/resources/blank.gif")) + '");' - } - }, win.body()); - - // test it - var cs = domStyle.getComputedStyle(div); - if(cs){ - var bkImg = cs.backgroundImage; - var needsA11y = (cs.borderTopColor == cs.borderRightColor) || (bkImg != null && (bkImg == "none" || bkImg == "url(invalid-url:)" )); - if(needsA11y){ - domClass.add(win.body(), "dijit_a11y"); - } - if(has("ie")){ - div.outerHTML = ""; // prevent mixed-content warning, see http://support.microsoft.com/kb/925014 - }else{ - win.body().removeChild(div); - } - } - }); - } -}); - -}, -'dijit/tree/ForestStoreModel':function(){ -define("dijit/tree/ForestStoreModel", [ - "dojo/_base/array", // array.indexOf array.some - "dojo/_base/declare", // declare - "dojo/_base/lang", // lang.hitch - "dojo/_base/window", // win.global - "./TreeStoreModel" -], function(array, declare, lang, win, TreeStoreModel){ - -/*===== -var TreeStoreModel = dijit.tree.TreeStoreModel; -=====*/ - -// module: -// dijit/tree/ForestStoreModel -// 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. - -return declare("dijit.tree.ForestStoreModel", 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 - - // Parameters to constructor - - // rootId: String - // ID of fabricated root item - rootId: "$root$", - - // rootLabel: String - // Label of fabricated root item - rootLabel: "ROOT", - - // query: String - // Specifies the set of children of the root item. - // example: - // | {type:'continent'} - query: null, - - // End of parameters to constructor - - constructor: function(params){ - // 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 - }; - }, - - // ======================================================================= - // 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); - }, - - 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: lang.hitch(this, function(items){ - this.root.children = items; - callback(items); - }), - onError: onError - }); - } - }else{ - this.inherited(arguments); - } - }, - - // ======================================================================= - // Inspecting items - - isItem: function(/* anything */ something){ - return (something === this.root) ? true : this.inherited(arguments); - }, - - fetchItemByIdentity: function(/* object */ keywordArgs){ - if(keywordArgs.identity == this.root.id){ - var scope = keywordArgs.scope?keywordArgs.scope:win.global; - if(keywordArgs.onItem){ - keywordArgs.onItem.call(scope, this.root); - } - }else{ - this.inherited(arguments); - } - }, - - 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); - }, - - // ======================================================================= - // 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. - if(parent === this.root){ - this.onNewRootItem(args); - return this.store.newItem(args); - }else{ - return this.inherited(arguments); - } - }, - - onNewRootItem: function(/* dojo.dnd.Item */ /*===== 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 - }, - - 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); - } - } - this.inherited(arguments, [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); - } - }, - - // ======================================================================= - // 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){ - // 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: lang.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 || - array.some(oldChildren, function(item, idx){ return newChildren[idx] != item;})){ - this.onChildrenChange(this.root, newChildren); - } - }) - }); - }, - - 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(); - - this.inherited(arguments); - }, - - onDeleteItem: function(/*Object*/ item){ - // 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(array.indexOf(this.root.children, item) != -1){ - 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 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 - - this._requeryTop(); - this.inherited(arguments); - } - -}); - -}); - -}, -'url:dijit/layout/templates/AccordionButton.html':"<div data-dojo-attach-event='onclick:_onTitleClick' class='dijitAccordionTitle' role=\"presentation\">\n\t<div data-dojo-attach-point='titleNode,focusNode' data-dojo-attach-event='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\" data-dojo-attach-point='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" data-dojo-attach-point='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n", -'dijit/form/_ComboBoxMenuMixin':function(){ -define("dijit/form/_ComboBoxMenuMixin", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/i18n", // i18n.getLocalization - "dojo/_base/window", // win.doc.createTextNode - "dojo/i18n!./nls/ComboBox" -], function(array, declare, domAttr, i18n, win){ - -// module: -// dijit/form/_ComboBoxMenuMixin -// summary: -// Focus-less menu for internal use in `dijit.form.ComboBox` - -return declare( "dijit.form._ComboBoxMenuMixin", null, { - // summary: - // Focus-less menu for internal use in `dijit.form.ComboBox` - // tags: - // private - - // _messages: Object - // Holds "next" and "previous" text for paging buttons on drop down - _messages: null, - - postMixInProperties: function(){ - this.inherited(arguments); - this._messages = 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){ - this.value = value; - this.onChange(value); - }, - - onClick: function(/*DomNode*/ node){ - if(node == this.previousButton){ - this._setSelectedAttr(null); - this.onPage(-1); - }else if(node == this.nextButton){ - this._setSelectedAttr(null); - this.onPage(1); - }else{ - this.onChange(node); - } - }, - - // stubs - onChange: function(/*Number*/ /*===== direction =====*/){ - // summary: - // Notifies ComboBox/FilteringSelect that user selected an option. - // tags: - // callback - }, - - onPage: function(/*Number*/ /*===== direction =====*/){ - // summary: - // Notifies ComboBox/FilteringSelect that user clicked to advance to next/previous page. - // tags: - // callback - }, - - onClose: function(){ - // summary: - // Callback from dijit.popup code to this widget, notifying it that it closed - // tags: - // private - this._setSelectedAttr(null); - }, - - _createOption: function(/*Object*/ item, labelFunc){ - // summary: - // Creates an option to appear on the popup menu subclassed by - // `dijit.form.FilteringSelect`. - - var menuitem = this._createMenuItem(); - var labelObject = labelFunc(item); - if(labelObject.html){ - menuitem.innerHTML = labelObject.label; - }else{ - menuitem.appendChild( - win.doc.createTextNode(labelObject.label) - ); - } - // #3250: in blank options, assign a normal height - if(menuitem.innerHTML == ""){ - menuitem.innerHTML = " "; //   - } - - // update menuitem.dir if BidiSupport was required - this.applyTextDir(menuitem, (menuitem.innerText || menuitem.textContent || "")); - - menuitem.item=item; - return menuitem; - }, - - createOptions: function(results, options, labelFunc){ - // summary: - // Fills in the items in the drop down list - // results: - // Array of items - // options: - // The options to the query function of the store - // - // labelFunc: - // Function to produce a label in the drop down list from a dojo.data item - - // display "Previous . . ." button - this.previousButton.style.display = (options.start == 0) ? "none" : ""; - domAttr.set(this.previousButton, "id", this.id + "_prev"); - // create options using _createOption function defined by parent - // ComboBox (or FilteringSelect) class - // #2309: - // iterate over cache nondestructively - array.forEach(results, function(item, i){ - var menuitem = this._createOption(item, labelFunc); - domAttr.set(menuitem, "id", this.id + i); - this.nextButton.parentNode.insertBefore(menuitem, this.nextButton); - }, this); - // display "Next . . ." button - var displayMore = false; - // Try to determine if we should show 'more'... - if(results.total && !results.total.then && results.total != -1){ - if((options.start + options.count) < results.total){ - displayMore = true; - }else if((options.start + options.count) > results.total && options.count == results.length){ - // Weird return from a data store, where a start + count > maxOptions - // implies maxOptions isn't really valid and we have to go into faking it. - // And more or less assume more if count == results.length - displayMore = true; - } - }else if(options.count == results.length){ - //Don't know the size, so we do the best we can based off count alone. - //So, if we have an exact match to count, assume more. - displayMore = true; - } - - this.nextButton.style.display = displayMore ? "" : "none"; - domAttr.set(this.nextButton,"id", this.id + "_next"); - return this.containerNode.childNodes; - }, - - clearResultList: function(){ - // summary: - // Clears the entries in the drop down list, but of course keeps the previous and next buttons. - var container = this.containerNode; - while(container.childNodes.length > 2){ - container.removeChild(container.childNodes[container.childNodes.length-2]); - } - this._setSelectedAttr(null); - }, - - highlightFirstOption: function(){ - // summary: - // Highlight the first real item in the list (not Previous Choices). - this.selectFirstNode(); - }, - - highlightLastOption: function(){ - // summary: - // Highlight the last real item in the list (not More Choices). - this.selectLastNode(); - }, - - selectFirstNode: function(){ - this.inherited(arguments); - if(this.getHighlightedOption() == this.previousButton){ - this.selectNextNode(); - } - }, - - selectLastNode: function(){ - this.inherited(arguments); - if(this.getHighlightedOption() == this.nextButton){ - this.selectPreviousNode(); - } - }, - - getHighlightedOption: function(){ - return this._getSelectedAttr(); - } -}); - -}); - -}, -'dojo/parser':function(){ -define( - "dojo/parser", ["./_base/kernel", "./_base/lang", "./_base/array", "./_base/html", "./_base/window", "./_base/url", - "./_base/json", "./aspect", "./date/stamp", "./query", "./on", "./ready"], - function(dojo, dlang, darray, dhtml, dwindow, _Url, djson, aspect, dates, query, don){ - -// module: -// dojo/parser -// summary: -// The Dom/Widget parsing package - -new Date("X"); // workaround for #11279, new Date("") == NaN - -var features = { - // Feature detection for when node.attributes only lists the attributes specified in the markup - // rather than old IE/quirks behavior where it lists every default value too - "dom-attributes-explicit": document.createElement("div").attributes.length < 40 -}; -function has(feature){ - return features[feature]; -} - - -dojo.parser = new function(){ - // summary: - // The Dom/Widget parsing package - - var _nameMap = { - // Map from widget name (ex: "dijit.form.Button") to structure mapping - // lowercase version of attribute names to the version in the widget ex: - // { - // label: "label", - // onclick: "onClick" - // } - }; - function getNameMap(proto){ - // summary: - // Returns map from lowercase name to attribute name in class, ex: {onclick: "onClick"} - var map = {}; - for(var name in proto){ - if(name.charAt(0)=="_"){ continue; } // skip internal properties - map[name.toLowerCase()] = name; - } - return map; - } - // 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). - aspect.after(dlang, "extend", function(){ - _nameMap = {}; - }, true); - - // Map from widget name (ex: "dijit.form.Button") to constructor - var _ctorMap = {}; - - 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(attrData + "args") || script.getAttribute("args")); - if(argsStr){ - darray.forEach(argsStr.split(/\s*,\s*/), function(part, idx){ - preamble += "var "+part+" = arguments["+idx+"]; "; - }); - } - var withStr = script.getAttribute("with"); - if(withStr && withStr.length){ - darray.forEach(withStr.split(/\s*,\s*/), function(part){ - preamble += "with("+part+"){"; - suffix += "}"; - }); - } - return new Function(preamble+script.innerHTML+suffix); - }; - - this.instantiate = /*====== dojo.parser.instantiate= ======*/function(nodes, mixin, args){ - // summary: - // Takes array of nodes, and turns them into class instances and - // potentially calls a startup method to allow them to connect with - // any children. - // nodes: Array - // Array of nodes or objects like - // | { - // | type: "dijit.form.Button", - // | node: DOMNode, - // | scripts: [ ... ], // array of <script type="dojo/..."> children of node - // | inherited: { ... } // settings inherited from ancestors like dir, theme, etc. - // | } - // mixin: Object? - // An object that will be mixed in with each node in the array. - // Values in the mixin will override values in the node, if they - // exist. - // args: Object? - // An object used to hold kwArgs for instantiation. - // See parse.args argument for details. - - var thelist = [], - mixin = mixin||{}; - args = args||{}; - - // Precompute names of special attributes we are looking for - // TODO: for 2.0 default to data-dojo- regardless of scopeName (or maybe scopeName won't exist in 2.0) - var dojoType = (args.scope || dojo._scopeName) + "Type", // typically "dojoType" - attrData = "data-" + (args.scope || dojo._scopeName) + "-",// typically "data-dojo-" - dataDojoType = attrData + "type", // typically "data-dojo-type" - dataDojoProps = attrData + "props", // typically "data-dojo-props" - dataDojoAttachPoint = attrData + "attach-point", - dataDojoAttachEvent = attrData + "attach-event", - dataDojoId = attrData + "id"; - - // And make hash to quickly check if a given attribute is special, and to map the name to something friendly - var specialAttrs = {}; - darray.forEach([dataDojoProps, dataDojoType, dojoType, dataDojoId, "jsId", dataDojoAttachPoint, - dataDojoAttachEvent, "dojoAttachPoint", "dojoAttachEvent", "class", "style"], function(name){ - specialAttrs[name.toLowerCase()] = name.replace(args.scope, "dojo"); - }); - - darray.forEach(nodes, function(obj){ - if(!obj){ return; } - - var node = obj.node || obj, - type = dojoType in mixin ? mixin[dojoType] : obj.node ? obj.type : (node.getAttribute(dataDojoType) || node.getAttribute(dojoType)), - ctor = _ctorMap[type] || (_ctorMap[type] = dlang.getObject(type)), - proto = ctor && ctor.prototype; - if(!ctor){ - throw new Error("Could not load class '" + type); - } - - // 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 = {}; - - if(args.defaults){ - // settings for the document itself (or whatever subtree is being parsed) - dlang.mixin(params, args.defaults); - } - if(obj.inherited){ - // settings from dir=rtl or lang=... on a node above this node - dlang.mixin(params, obj.inherited); - } - - // Get list of attributes explicitly listed in the markup - var attributes; - if(has("dom-attributes-explicit")){ - // Standard path to get list of user specified attributes - attributes = node.attributes; - }else{ - // Special path for IE, avoid (sometimes >100) bogus entries in node.attributes - var clone = /^input$|^img$/i.test(node.nodeName) ? node : node.cloneNode(false), - attrs = clone.outerHTML.replace(/=[^\s"']+|="[^"]*"|='[^']*'/g, "").replace(/^\s*<[a-zA-Z0-9]*/, "").replace(/>.*$/, ""); - - attributes = darray.map(attrs.split(/\s+/), function(name){ - var lcName = name.toLowerCase(); - return { - name: name, - // getAttribute() doesn't work for button.value, returns innerHTML of button. - // but getAttributeNode().value doesn't work for the form.encType or li.value - value: (node.nodeName == "LI" && name == "value") || lcName == "enctype" ? - node.getAttribute(lcName) : node.getAttributeNode(lcName).value, - specified: true - }; - }); - } - - // Read in attributes and process them, including data-dojo-props, data-dojo-type, - // dojoAttachPoint, etc., as well as normal foo=bar attributes. - var i=0, item; - while(item = attributes[i++]){ - if(!item || !item.specified){ - continue; - } - - var name = item.name, - lcName = name.toLowerCase(), - value = item.value; - - if(lcName in specialAttrs){ - switch(specialAttrs[lcName]){ - - // Data-dojo-props. Save for later to make sure it overrides direct foo=bar settings - case "data-dojo-props": - var extra = value; - break; - - // data-dojo-id or jsId. TODO: drop jsId in 2.0 - case "data-dojo-id": - case "jsId": - var jsname = value; - break; - - // For the benefit of _Templated - case "data-dojo-attach-point": - case "dojoAttachPoint": - params.dojoAttachPoint = value; - break; - case "data-dojo-attach-event": - case "dojoAttachEvent": - params.dojoAttachEvent = value; - break; - - // Special parameter handling needed for IE - case "class": - params["class"] = node.className; - break; - case "style": - params["style"] = node.style && node.style.cssText; - break; - } - }else{ - // Normal attribute, ex: value="123" - - // Find attribute in widget corresponding to specified name. - // May involve case conversion, ex: onclick --> onClick - if(!(name in proto)){ - var map = (_nameMap[type] || (_nameMap[type] = getNameMap(proto))); - name = map[lcName] || name; - } - - // Set params[name] to value, doing type conversion - if(name in proto){ - switch(typeof proto[name]){ - case "string": - params[name] = value; - break; - case "number": - params[name] = value.length ? Number(value) : NaN; - break; - case "boolean": - // for checked/disabled value might be "" or "checked". interpret as true. - params[name] = value.toLowerCase() != "false"; - break; - case "function": - if(value === "" || value.search(/[^\w\.]+/i) != -1){ - // The user has specified some text for a function like "return x+5" - params[name] = new Function(value); - }else{ - // The user has specified the name of a function like "myOnClick" - // or a single word function "return" - params[name] = dlang.getObject(value, false) || new Function(value); - } - break; - default: - var pVal = proto[name]; - params[name] = - (pVal && "length" in pVal) ? (value ? value.split(/\s*,\s*/) : []) : // array - (pVal instanceof Date) ? - (value == "" ? new Date("") : // the NaN of dates - value == "now" ? new Date() : // current date - dates.fromISOString(value)) : - (pVal instanceof dojo._Url) ? (dojo.baseUrl + value) : - djson.fromJson(value); - } - }else{ - params[name] = value; - } - } - } - - // Mix things found in data-dojo-props into the params, overriding any direct settings - if(extra){ - try{ - extra = djson.fromJson.call(args.propsThis, "{" + extra + "}"); - dlang.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 + "'"); - } - } - - // Any parameters specified in "mixin" override everything else. - dlang.mixin(params, mixin); - - var scripts = obj.node ? obj.scripts : (ctor && (ctor._noScript || proto._noScript) ? [] : - query("> script[type^='dojo/']", node)); - - // Process <script type="dojo/*"> script tags - // <script type="dojo/method" event="foo"> tags are added to params, and passed to - // the widget on instantiation. - // <script type="dojo/method"> tags (with no event) are executed after instantiation - // <script type="dojo/connect" data-dojo-event="foo"> tags are dojo.connected after instantiation - // <script type="dojo/watch" data-dojo-prop="foo"> tags are dojo.watch after instantiation - // <script type="dojo/on" data-dojo-event="foo"> tags are dojo.on after instantiation - // note: dojo/* script tags cannot exist in self closing widgets, like <input /> - var connects = [], // functions to connect after instantiation - calls = [], // functions to call after instantiation - watch = [], //functions to watch after instantiation - on = []; //functions to on after instantiation - - if(scripts){ - for(i=0; i<scripts.length; i++){ - var script = scripts[i]; - node.removeChild(script); - // FIXME: drop event="" support in 2.0. use data-dojo-event="" instead - var event = (script.getAttribute(attrData + "event") || script.getAttribute("event")), - prop = script.getAttribute(attrData + "prop"), - type = script.getAttribute("type"), - nf = this._functionFromScript(script, attrData); - if(event){ - if(type == "dojo/connect"){ - connects.push({event: event, func: nf}); - }else if(type == "dojo/on"){ - on.push({event: event, func: nf}); - }else{ - params[event] = nf; - } - }else if(type == "dojo/watch"){ - watch.push({prop: prop, func: nf}); - }else{ - calls.push(nf); - } - } - } - - // create the instance - var markupFactory = ctor.markupFactory || proto.markupFactory; - var instance = markupFactory ? markupFactory(params, node, ctor) : new ctor(params, node); - thelist.push(instance); - - // map it to the JS namespace if that makes sense - if(jsname){ - dlang.setObject(jsname, instance); - } - - // process connections and startup functions - for(i=0; i<connects.length; i++){ - aspect.after(instance, connects[i].event, dojo.hitch(instance, connects[i].func), true); - } - for(i=0; i<calls.length; i++){ - calls[i].call(instance); - } - for(i=0; i<watch.length; i++){ - instance.watch(watch[i].prop, watch[i].func); - } - for(i=0; i<on.length; i++){ - don(instance, on[i].event, on[i].func); - } - }, this); - - // Call startup on each top level instance if it makes sense (as for - // widgets). Parent widgets will recursively call startup on their - // (non-top level) children - if(!mixin._started){ - darray.forEach(thelist, function(instance){ - if( !args.noStart && instance && - dlang.isFunction(instance.startup) && - !instance._started - ){ - instance.startup(); - } - }); - } - return thelist; - }; - - this.parse = /*====== dojo.parser.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 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 instantiate 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 - // `rootNode` member, that is used. - // - // args: Object - // a kwArgs object passed along to instantiate() - // - // * noStart: Boolean? - // when set will prevent the parser from calling .startup() - // when locating the nodes. - // * rootNode: DomNode? - // identical to the function's `rootNode` argument, though - // 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._WidgetsInTemplateMixin` - // - // example: - // Parse all widgets on a page: - // | dojo.parser.parse(); - // - // example: - // Parse all classes within the node with id="foo" - // | dojo.parser.parse(dojo.byId('foo')); - // - // example: - // Parse all classes in a page, but do not call .startup() on any - // child - // | dojo.parser.parse({ noStart: true }) - // - // example: - // 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 }); - - // determine the root node based on the passed arguments. - var root; - if(!args && rootNode && rootNode.rootNode){ - args = rootNode; - root = args.rootNode; - }else{ - root = rootNode; - } - root = root ? dhtml.byId(root) : dwindow.body(); - args = args || {}; - - var dojoType = (args.scope || dojo._scopeName) + "Type", // typically "dojoType" - attrData = "data-" + (args.scope || dojo._scopeName) + "-", // typically "data-dojo-" - dataDojoType = attrData + "type", // typically "data-dojo-type" - dataDojoTextDir = attrData + "textdir"; // typically "data-dojo-textdir" - - // List of all nodes on page w/dojoType specified - var list = []; - - // Info on DOMNode currently being processed - var node = root.firstChild; - - // Info on parent of DOMNode currently being processed - // - inherited: dir, lang, and textDir setting of parent, or inherited by parent - // - parent: pointer to identical structure for my parent (or null if no parent) - // - scripts: if specified, collects <script type="dojo/..."> type nodes from children - var inherited = args && args.inherited; - if(!inherited){ - function findAncestorAttr(node, attr){ - return (node.getAttribute && node.getAttribute(attr)) || - (node !== dwindow.doc && node !== dwindow.doc.documentElement && node.parentNode ? findAncestorAttr(node.parentNode, attr) : null); - } - inherited = { - dir: findAncestorAttr(root, "dir"), - lang: findAncestorAttr(root, "lang"), - textDir: findAncestorAttr(root, dataDojoTextDir) - }; - for(var key in inherited){ - if(!inherited[key]){ delete inherited[key]; } - } - } - var parent = { - inherited: inherited - }; - - // For collecting <script type="dojo/..."> type nodes (when null, we don't need to collect) - var scripts; - - // when true, only look for <script type="dojo/..."> tags, and don't recurse to children - var scriptsOnly; - - function getEffective(parent){ - // summary: - // Get effective dir, lang, textDir settings for specified obj - // (matching "parent" object structure above), and do caching. - // Take care not to return null entries. - if(!parent.inherited){ - parent.inherited = {}; - var node = parent.node, - grandparent = getEffective(parent.parent); - var inherited = { - dir: node.getAttribute("dir") || grandparent.dir, - lang: node.getAttribute("lang") || grandparent.lang, - textDir: node.getAttribute(dataDojoTextDir) || grandparent.textDir - }; - for(var key in inherited){ - if(inherited[key]){ - parent.inherited[key] = inherited[key]; - } - } - } - return parent.inherited; - } - - // DFS on DOM tree, collecting nodes with data-dojo-type specified. - while(true){ - if(!node){ - // Finished this level, continue to parent's next sibling - if(!parent || !parent.node){ - break; - } - node = parent.node.nextSibling; - scripts = parent.scripts; - scriptsOnly = false; - parent = parent.parent; - continue; - } - - if(node.nodeType != 1){ - // Text or comment node, skip to next sibling - node = node.nextSibling; - continue; - } - - if(scripts && node.nodeName.toLowerCase() == "script"){ - // Save <script type="dojo/..."> for parent, then continue to next sibling - type = node.getAttribute("type"); - if(type && /^dojo\/\w/i.test(type)){ - scripts.push(node); - } - node = node.nextSibling; - continue; - } - if(scriptsOnly){ - node = node.nextSibling; - continue; - } - - // Check for data-dojo-type attribute, fallback to backward compatible dojoType - var type = node.getAttribute(dataDojoType) || node.getAttribute(dojoType); - - // Short circuit for leaf nodes containing nothing [but text] - var firstChild = node.firstChild; - if(!type && (!firstChild || (firstChild.nodeType == 3 && !firstChild.nextSibling))){ - node = node.nextSibling; - continue; - } - - // Setup data structure to save info on current node for when we return from processing descendant nodes - var current = { - node: node, - scripts: scripts, - parent: parent - }; - - // If dojoType/data-dojo-type specified, add to output array of nodes to instantiate - var ctor = type && (_ctorMap[type] || (_ctorMap[type] = dlang.getObject(type))), // note: won't find classes declared via dojo.Declaration - childScripts = ctor && !ctor.prototype._noScript ? [] : null; // <script> nodes that are parent's children - if(type){ - list.push({ - "type": type, - node: node, - scripts: childScripts, - inherited: getEffective(current) // dir & lang settings for current node, explicit or inherited - }); - } - - // Recurse, collecting <script type="dojo/..."> children, and also looking for - // descendant nodes with dojoType specified (unless the widget has the stopParser flag). - // When finished with children, go to my next sibling. - node = firstChild; - scripts = childScripts; - scriptsOnly = ctor && ctor.prototype.stopParser && !(args && args.template); - parent = current; - - } - - // go build the object instances - var mixin = args && args.template ? {template: true} : null; - return this.instantiate(list, mixin, args); // Array - }; -}(); - - -//Register the parser callback. It should be the first callback -//after the a11y test. -if(dojo.config.parseOnLoad){ - dojo.ready(100, dojo.parser, "parse"); -} - -return dojo.parser; -}); - -}, -'url:dijit/form/templates/DropDownButton.html':"<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdata-dojo-attach-event=\"ondijitclick:_onClick\" data-dojo-attach-point=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdata-dojo-attach-point=\"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\tdata-dojo-attach-point=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdata-dojo-attach-point=\"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\tdata-dojo-attach-point=\"valueNode\"\n/></span>\n", -'dojo/dnd/Manager':function(){ -define("dojo/dnd/Manager", ["../main", "../Evented", "./common", "./autoscroll", "./Avatar"], function(dojo, Evented) { - // module: - // dojo/dnd/Manager - // summary: - // TODOC - - -var Manager = dojo.declare("dojo.dnd.Manager", [Evented], { - // summary: - // the manager of DnD operations (usually a singleton) - constructor: function(){ - this.avatar = null; - this.source = null; - this.nodes = []; - this.copy = true; - this.target = null; - this.canDropFlag = false; - this.events = []; - }, - - // avatar's offset from the mouse - OFFSET_X: 16, - OFFSET_Y: 16, - - // methods - overSource: function(source){ - // summary: - // called when a source detected a mouse-over condition - // source: Object - // the reporter - if(this.avatar){ - this.target = (source && source.targetState != "Disabled") ? source : null; - this.canDropFlag = Boolean(this.target); - this.avatar.update(); - } - dojo.publish("/dnd/source/over", [source]); - }, - outSource: function(source){ - // summary: - // called when a source detected a mouse-out condition - // source: Object - // the reporter - if(this.avatar){ - if(this.target == source){ - this.target = null; - this.canDropFlag = false; - this.avatar.update(); - dojo.publish("/dnd/source/over", [null]); - } - }else{ - dojo.publish("/dnd/source/over", [null]); - } - }, - startDrag: function(source, nodes, copy){ - // summary: - // called to initiate the DnD operation - // source: Object - // the source which provides items - // nodes: Array - // the list of transferred items - // copy: Boolean - // copy items, if true, move items otherwise - this.source = source; - this.nodes = nodes; - this.copy = Boolean(copy); // normalizing to true boolean - this.avatar = this.makeAvatar(); - dojo.body().appendChild(this.avatar.node); - dojo.publish("/dnd/start", [source, nodes, 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"), - // cancel text selection and text dragging - 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){ - // summary: - // called to notify if the current target can accept items - var canDropFlag = Boolean(this.target && flag); - if(this.canDropFlag != canDropFlag){ - this.canDropFlag = canDropFlag; - this.avatar.update(); - } - }, - stopDrag: function(){ - // summary: - // stop the DnD in progress - 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(){ - // summary: - // makes the avatar; it is separate to be overwritten dynamically, if needed - return new dojo.dnd.Avatar(this); - }, - updateAvatar: function(){ - // summary: - // updates the avatar; it is separate to be overwritten dynamically, if needed - this.avatar.update(); - }, - - // mouse event processors - onMouseMove: function(e){ - // summary: - // event processor for onmousemove - // e: Event - // mouse event - var a = this.avatar; - if(a){ - dojo.dnd.autoScrollNodes(e); - //dojo.dnd.autoScroll(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){ - // summary: - // event processor for onmouseup - // e: Event - // mouse event - if(this.avatar){ - if(this.target && this.canDropFlag){ - var copy = Boolean(this.source.copyState(dojo.isCopyKey(e))), - params = [this.source, this.nodes, copy, this.target, e]; - dojo.publish("/dnd/drop/before", params); - dojo.publish("/dnd/drop", params); - }else{ - dojo.publish("/dnd/cancel"); - } - this.stopDrag(); - } - }, - - // keyboard event processors - onKeyDown: function(e){ - // summary: - // event processor for onkeydown: - // watching for CTRL for copy/move status, watching for ESCAPE to cancel the drag - // e: Event - // keyboard event - 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){ - // summary: - // event processor for onkeyup, watching for CTRL for copy/move status - // e: Event - // keyboard event - if(this.avatar && e.keyCode == dojo.keys.CTRL){ - var copy = Boolean(this.source.copyState(false)); - if(this.copy != copy){ - this._setCopyStatus(copy); - } - } - }, - - // utilities - _setCopyStatus: function(copy){ - // summary: - // changes the copy status - // copy: Boolean - // the copy status - 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: -// The manager singleton variable. Can be overwritten if needed. -dojo.dnd._manager = null; - -Manager.manager = dojo.dnd.manager = function(){ - // summary: - // Returns the current DnD manager. Creates one if it is not created yet. - if(!dojo.dnd._manager){ - dojo.dnd._manager = new dojo.dnd.Manager(); - } - return dojo.dnd._manager; // Object -}; - -return Manager; -}); - -}, -'dijit/form/ToggleButton':function(){ -define("dijit/form/ToggleButton", [ - "dojo/_base/declare", // declare - "dojo/_base/kernel", // kernel.deprecated - "./Button", - "./_ToggleButtonMixin" -], function(declare, kernel, Button, _ToggleButtonMixin){ - -/*===== - var Button = dijit.form.Button; - var _ToggleButtonMixin = dijit.form._ToggleButtonMixin; -=====*/ - - // module: - // dijit/form/ToggleButton - // summary: - // A templated button widget that can be in two states (checked or not). - - - return declare("dijit.form.ToggleButton", [Button, _ToggleButtonMixin], { - // summary: - // A templated button widget that can be in two states (checked or not). - // Can be base class for things like tabs or checkbox or radio buttons - - baseClass: "dijitToggleButton", - - setChecked: function(/*Boolean*/ checked){ - // summary: - // Deprecated. Use set('checked', true/false) instead. - kernel.deprecated("setChecked("+checked+") is deprecated. Use set('checked',"+checked+") instead.", "", "2.0"); - this.set('checked', checked); - } - }); -}); - -}, -'dojo/date/stamp':function(){ -define("dojo/date/stamp", ["../_base/kernel", "../_base/lang", "../_base/array"], function(dojo, lang, array) { - // module: - // dojo/date/stamp - // summary: - // TODOC - -lang.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){ - // summary: - // Returns a Date object given a string formatted according to a subset of the ISO-8601 standard. - // - // description: - // Accepts a string formatted according to a profile of ISO8601 as defined by - // [RFC3339](http://www.ietf.org/rfc/rfc3339.txt), except that partial input is allowed. - // Can also process dates as specified [by the W3C](http://www.w3.org/TR/NOTE-datetime) - // The following combinations are valid: - // - // * dates only - // | * yyyy - // | * yyyy-MM - // | * yyyy-MM-dd - // * times only, with an optional time zone appended - // | * THH:mm - // | * THH:mm:ss - // | * THH:mm:ss.SSS - // * and "datetimes" which could be any combination of the above - // - // timezones may be specified as Z (for UTC) or +/- followed by a time expression HH:mm - // Assumes the local time zone if not specified. Does not validate. Improperly formatted - // input may return null. Arguments which are out of bounds will be handled - // by the Date constructor (e.g. January 32nd typically gets resolved to February 1st) - // Only years between 100 and 9999 are supported. - // - // formattedString: - // A string such as 2005-06-30T08:05:00-07:00 or 2005-06-30 or T08:05:00 - // - // defaultTime: - // Used for defaults for fields omitted in the formattedString. - // Uses 1970-01-01T00:00:00.0Z by default. - - if(!dojo.date.stamp._isoRegExp){ - dojo.date.stamp._isoRegExp = -//TODO: could be more restrictive and check for 00-59, etc. - /^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/; - } - - var match = dojo.date.stamp._isoRegExp.exec(formattedString), - result = null; - - if(match){ - match.shift(); - if(match[1]){match[1]--;} // Javascript Date months are 0-based - if(match[6]){match[6] *= 1000;} // Javascript Date expects fractional seconds as milliseconds - - if(defaultTime){ - // mix in defaultTime. Relatively expensive, so use || operators for the fast path of defaultTime === 0 - defaultTime = new Date(defaultTime); - array.forEach(array.map(["FullYear", "Month", "Date", "Hours", "Minutes", "Seconds", "Milliseconds"], function(prop){ - return defaultTime["get" + prop](); - }), function(value, index){ - match[index] = match[index] || value; - }); - } - result = new Date(match[0]||1970, match[1]||0, match[2]||1, match[3]||0, match[4]||0, match[5]||0, match[6]||0); //TODO: UTC defaults - if(match[0] < 100){ - result.setFullYear(match[0] || 1970); - } - - var offset = 0, - zoneSign = match[7] && match[7].charAt(0); - if(zoneSign != 'Z'){ - offset = ((match[8] || 0) * 60) + (Number(match[9]) || 0); - if(zoneSign != '-'){ offset *= -1; } - } - if(zoneSign){ - offset -= result.getTimezoneOffset(); - } - if(offset){ - result.setTime(result.getTime() + offset * 60000); - } - } - - return result; // Date or null -}; - -/*===== - dojo.date.stamp.__Options = function(){ - // selector: String - // "date" or "time" for partial formatting of the Date object. - // Both date and time will be formatted by default. - // zulu: Boolean - // if true, UTC/GMT is used for a timezone - // milliseconds: Boolean - // if true, output milliseconds - this.selector = selector; - this.zulu = zulu; - this.milliseconds = milliseconds; - } -=====*/ - -dojo.date.stamp.toISOString = function(/*Date*/dateObject, /*dojo.date.stamp.__Options?*/options){ - // summary: - // Format a Date object as a string according a subset of the ISO-8601 standard - // - // description: - // When options.selector is omitted, output follows [RFC3339](http://www.ietf.org/rfc/rfc3339.txt) - // The local time zone is included as an offset from GMT, except when selector=='time' (time without a date) - // Does not check bounds. Only years between 100 and 9999 are supported. - // - // dateObject: - // A Date object - - var _ = function(n){ return (n < 10) ? "0" + n : n; }; - options = options || {}; - var formattedDate = [], - getter = options.zulu ? "getUTC" : "get", - date = ""; - if(options.selector != "time"){ - var year = dateObject[getter+"FullYear"](); - date = ["0000".substr((year+"").length)+year, _(dateObject[getter+"Month"]()+1), _(dateObject[getter+"Date"]())].join('-'); - } - formattedDate.push(date); - if(options.selector != "date"){ - var time = [_(dateObject[getter+"Hours"]()), _(dateObject[getter+"Minutes"]()), _(dateObject[getter+"Seconds"]())].join(':'); - var millis = dateObject[getter+"Milliseconds"](); - if(options.milliseconds){ - time += "."+ (millis < 100 ? "0" : "") + _(millis); - } - if(options.zulu){ - time += "Z"; - }else if(options.selector != "time"){ - var timezoneOffset = dateObject.getTimezoneOffset(); - var absOffset = Math.abs(timezoneOffset); - time += (timezoneOffset > 0 ? "-" : "+") + - _(Math.floor(absOffset/60)) + ":" + _(absOffset%60); - } - formattedDate.push(time); - } - return formattedDate.join('T'); // String -}; - -return dojo.date.stamp; -}); - -}, -'dojo/Stateful':function(){ -define("dojo/Stateful", ["./_base/kernel", "./_base/declare", "./_base/lang", "./_base/array"], function(dojo, declare, lang, array) { - // module: - // dojo/Stateful - // summary: - // TODOC - -return 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){ - lang.mixin(this, mixin); - } - }, - - get: function(/*String*/name){ - // summary: - // Get a property on a Stateful instance. - // name: - // The property to get. - // returns: - // The property value on this Stateful instance. - // description: - // Get a named property on a Stateful object. The property may - // potentially be retrieved via a getter method in subclasses. In the base class - // this just retrieves the object's property. - // For example: - // | stateful = new dojo.Stateful({foo: 3}); - // | stateful.get("foo") // returns 3 - // | stateful.foo // returns 3 - - return this[name]; //Any - }, - set: function(/*String*/name, /*Object*/value){ - // summary: - // Set a property on a Stateful instance - // name: - // The property to set. - // value: - // The value to set in the property. - // returns: - // The function returns this dojo.Stateful instance. - // description: - // Sets named properties on a stateful object and notifies any watchers of - // the property. A programmatic setter may be defined in subclasses. - // For example: - // | stateful = new dojo.Stateful(); - // | stateful.watch(function(name, oldValue, value){ - // | // this will be called on the set below - // | } - // | stateful.set(foo, 5); - // - // set() may also be called with a hash of name/value pairs, ex: - // | myObj.set({ - // | foo: "Howdy", - // | bar: 3 - // | }) - // This is equivalent to calling set(foo, "Howdy") and set(bar, 3) - if(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; //dojo.Stateful - }, - watch: function(/*String?*/name, /*Function*/callback){ - // summary: - // Watches a property for changes - // name: - // Indicates the property to watch. This is optional (the callback may be the - // only parameter), and if omitted, all the properties will be watched - // returns: - // An object handle for the watch. The unwatch method of this object - // can be used to discontinue watching this property: - // | var watchHandle = obj.watch("foo", callback); - // | watchHandle.unwatch(); // callback won't be called now - // callback: - // The function to execute when the property changes. This will be called after - // the property has been changed. The callback will be called with the |this| - // set to the instance, the first argument as the name of the property, the - // second argument as the old value and the third argument as the new value. - - var callbacks = this._watchCallbacks; - if(!callbacks){ - var self = this; - callbacks = this._watchCallbacks = function(name, oldValue, value, ignoreCatchall){ - var notify = function(propertyCallbacks){ - if(propertyCallbacks){ - propertyCallbacks = propertyCallbacks.slice(); - for(var i = 0, l = propertyCallbacks.length; i < l; i++){ - 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(array.indexOf(propertyCallbacks, callback), 1); - } - }; //Object - } - -}); - -}); - -}, -'dijit/layout/AccordionContainer':function(){ -require({cache:{ -'url:dijit/layout/templates/AccordionButton.html':"<div data-dojo-attach-event='onclick:_onTitleClick' class='dijitAccordionTitle' role=\"presentation\">\n\t<div data-dojo-attach-point='titleNode,focusNode' data-dojo-attach-event='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\" data-dojo-attach-point='iconNode' style=\"vertical-align: middle\" role=\"presentation\"/>\n\t\t<span role=\"presentation\" data-dojo-attach-point='titleTextNode' class='dijitAccordionText'></span>\n\t</div>\n</div>\n"}}); -define("dijit/layout/AccordionContainer", [ - "require", - "dojo/_base/array", // array.forEach array.map - "dojo/_base/declare", // declare - "dojo/_base/event", // event.stop - "dojo/_base/fx", // fx.Animation - "dojo/dom", // dom.setSelectable - "dojo/dom-attr", // domAttr.attr - "dojo/dom-class", // domClass.remove - "dojo/dom-construct", // domConstruct.place - "dojo/dom-geometry", - "dojo/_base/kernel", - "dojo/keys", // keys - "dojo/_base/lang", // lang.getObject lang.hitch - "dojo/_base/sniff", // has("ie") - "dojo/topic", // publish - "../focus", // focus.focus() - "../_base/manager", // manager.defaultDuration - "dojo/ready", - "../_Widget", - "../_Container", - "../_TemplatedMixin", - "../_CssStateMixin", - "./StackContainer", - "./ContentPane", - "dojo/text!./templates/AccordionButton.html" -], function(require, array, declare, event, fx, dom, domAttr, domClass, domConstruct, domGeometry, - kernel, keys, lang, has, topic, focus, manager, ready, - _Widget, _Container, _TemplatedMixin, _CssStateMixin, StackContainer, ContentPane, template){ - -/*===== - var _Widget = dijit._Widget; - var _Container = dijit._Container; - var _TemplatedMixin = dijit._TemplatedMixin; - var _CssStateMixin = dijit._CssStateMixin; - var StackContainer = dijit.layout.StackContainer; - var ContentPane = dijit.layout.ContentPane; -=====*/ - - // module: - // dijit/layout/AccordionContainer - // summary: - // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, - // and switching between panes is visualized by sliding the other panes up/down. - - - // 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. - - - var AccordionButton = declare("dijit.layout._AccordionButton", [_Widget, _TemplatedMixin, _CssStateMixin], { - // summary: - // The title bar to click to open up an accordion pane. - // Internal widget used by AccordionContainer. - // tags: - // private - - templateString: template, - - // label: String - // Title of the pane - label: "", - _setLabelAttr: {node: "titleTextNode", type: "innerHTML" }, - - // title: String - // Tooltip that appears on hover - title: "", - _setTitleAttr: {node: "titleTextNode", type: "attribute", attribute: "title"}, - - // iconClassAttr: String - // CSS class for icon to left of label - iconClassAttr: "", - _setIconClassAttr: { node: "iconNode", type: "class" }, - - baseClass: "dijitAccordionTitle", - - getParent: function(){ - // summary: - // Returns the AccordionContainer parent. - // tags: - // private - return this.parent; - }, - - buildRendering: function(){ - this.inherited(arguments); - var titleTextNodeId = this.id.replace(' ','_'); - domAttr.set(this.titleTextNode, "id", titleTextNodeId+"_title"); - this.focusNode.setAttribute("aria-labelledby", domAttr.get(this.titleTextNode, "id")); - dom.setSelectable(this.domNode, false); - }, - - getTitleHeight: function(){ - // summary: - // Returns the height of the title dom node. - return domGeometry.getMarginSize(this.domNode).h; // Integer - }, - - // TODO: maybe the parent should set these methods directly rather than forcing the code - // into the button widget? - _onTitleClick: function(){ - // summary: - // Callback when someone clicks my title. - var parent = this.getParent(); - parent.selectChild(this.contentWidget, true); - focus.focus(this.focusNode); - }, - - _onTitleKeyPress: function(/*Event*/ evt){ - return this.getParent()._onKeyPress(evt, this.contentWidget); - }, - - _setSelectedAttr: function(/*Boolean*/ isSelected){ - this._set("selected", isSelected); - this.focusNode.setAttribute("aria-expanded", isSelected); - this.focusNode.setAttribute("aria-selected", isSelected); - this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1"); - } - }); - - var AccordionInnerContainer = declare("dijit.layout._AccordionInnerContainer", [_Widget, _CssStateMixin], { - // summary: - // Internal widget placed as direct child of AccordionContainer.containerNode. - // When other widgets are added as children to an AccordionContainer they are wrapped in - // this widget. - -/*===== - // buttonWidget: Function || String - // 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, -=====*/ - - baseClass: "dijitAccordionInnerContainer", - - // tell nested layout widget that we will take care of sizing - isLayoutContainer: true, - - 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 = domConstruct.place("<div class='" + this.baseClass + - "' role='presentation'>", this.contentWidget.domNode, "after"); - - // wrapper div's first child is the button widget (ie, the title bar) - var child = this.contentWidget, - cls = lang.isString(this.buttonWidget) ? lang.getObject(this.buttonWidget) : this.buttonWidget; - this.button = child._buttonWidget = (new cls({ - contentWidget: child, - label: child.title, - title: child.tooltip, - dir: child.dir, - lang: child.lang, - textDir: child.textDir, - iconClass: child.iconClass, - id: child.id + "_button", - parent: this.parent - })).placeAt(this.domNode); - - // and then the actual content widget (changing it from prior-sibling to last-child), - // wrapped by a <div class=dijitAccordionChildWrapper> - this.containerNode = domConstruct.place("<div class='dijitAccordionChildWrapper' style='display:none'>", this.domNode); - domConstruct.place(this.contentWidget.domNode, this.containerNode); - }, - - postCreate: function(){ - this.inherited(arguments); - - // Map changes in content widget's title etc. to changes in the button - var button = this.button; - this._contentWidgetWatches = [ - this.contentWidget.watch('title', lang.hitch(this, function(name, oldValue, newValue){ - button.set("label", newValue); - })), - this.contentWidget.watch('tooltip', lang.hitch(this, function(name, oldValue, newValue){ - button.set("title", newValue); - })), - this.contentWidget.watch('iconClass', lang.hitch(this, function(name, oldValue, newValue){ - button.set("iconClass", newValue); - })) - ]; - }, - - _setSelectedAttr: function(/*Boolean*/ isSelected){ - this._set("selected", isSelected); - this.button.set("selected", isSelected); - if(isSelected){ - var cw = this.contentWidget; - if(cw.onSelected){ cw.onSelected(); } - } - }, - - startup: function(){ - // Called by _Container.addChild() - this.contentWidget.startup(); - }, - - destroy: function(){ - this.button.destroyRecursive(); - - array.forEach(this._contentWidgetWatches || [], function(w){ w.unwatch(); }); - - delete this.contentWidget._buttonWidget; - delete this.contentWidget._wrapperWidget; - - this.inherited(arguments); - }, - - destroyDescendants: function(/*Boolean*/ preserveDom){ - // since getChildren isn't working for me, have to code this manually - this.contentWidget.destroyRecursive(preserveDom); - } - }); - - var AccordionContainer = declare("dijit.layout.AccordionContainer", StackContainer, { - // summary: - // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, - // and switching between panes is visualized by sliding the other panes up/down. - // example: - // | <div data-dojo-type="dijit.layout.AccordionContainer"> - // | <div data-dojo-type="dijit.layout.ContentPane" title="pane 1"> - // | </div> - // | <div data-dojo-type="dijit.layout.ContentPane" title="pane 2"> - // | <p>This is some text</p> - // | </div> - // | </div> - - // duration: Integer - // Amount of time (in ms) it takes to slide panes - duration: manager.defaultDuration, - - // buttonWidget: [const] String - // The name of the widget used to display the title of each pane - buttonWidget: 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", - - buildRendering: function(){ - this.inherited(arguments); - this.domNode.style.overflow = "hidden"; // TODO: put this in dijit.css - this.domNode.setAttribute("role", "tablist"); // TODO: put this in template - }, - - startup: function(){ - if(this._started){ return; } - this.inherited(arguments); - if(this.selectedChildWidget){ - var style = this.selectedChildWidget.containerNode.style; - style.display = ""; - style.overflow = "auto"; - this.selectedChildWidget._wrapperWidget.set("selected", true); - } - }, - - layout: function(){ - // Implement _LayoutWidget.layout() virtual method. - // Set the height of the open pane based on what room remains. - - var openPane = this.selectedChildWidget; - - if(!openPane){ return;} - - // space taken up by title, plus wrapper div (with border/margin) for open pane - var wrapperDomNode = openPane._wrapperWidget.domNode, - wrapperDomNodeMargin = domGeometry.getMarginExtents(wrapperDomNode), - wrapperDomNodePadBorder = domGeometry.getPadBorderExtents(wrapperDomNode), - wrapperContainerNode = openPane._wrapperWidget.containerNode, - wrapperContainerNodeMargin = domGeometry.getMarginExtents(wrapperContainerNode), - wrapperContainerNodePadBorder = domGeometry.getPadBorderExtents(wrapperContainerNode), - mySize = this._contentBox; - - // get cumulative height of all the unselected title bars - var totalCollapsedHeight = 0; - array.forEach(this.getChildren(), function(child){ - if(child != openPane){ - // Using domGeometry.getMarginSize() rather than domGeometry.position() since claro has 1px bottom margin - // to separate accordion panes. Not sure that works perfectly, it's probably putting a 1px - // margin below the bottom pane (even though we don't want one). - totalCollapsedHeight += domGeometry.getMarginSize(child._wrapperWidget.domNode).h; - } - }); - 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 - wrapperDomNodeMargin.w - wrapperDomNodePadBorder.w - - wrapperContainerNodeMargin.w - wrapperContainerNodePadBorder.w - }; - - if(openPane){ - openPane.resize(this._containerContentBox); - } - }, - - _setupChild: function(child){ - // Overrides _LayoutWidget._setupChild(). - // Put wrapper widget around the child widget, showing title - - child._wrapperWidget = AccordionInnerContainer({ - contentWidget: child, - buttonWidget: this.buttonWidget, - id: child.id + "_wrapper", - dir: child.dir, - lang: child.lang, - textDir: child.textDir, - parent: this - }); - - this.inherited(arguments); - }, - - 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 - // the new child inside another child's wrapper. - - // First add in child as a direct child of this AccordionContainer - var refNode = this.containerNode; - if(insertIndex && typeof insertIndex == "number"){ - var children = _Widget.prototype.getChildren.call(this); // get wrapper panes - if(children && children.length >= insertIndex){ - refNode = children[insertIndex-1].domNode; - insertIndex = "after"; - } - } - domConstruct.place(child.domNode, refNode, insertIndex); - - if(!child._started){ - child.startup(); - } - - // Then stick the wrapper widget around the child widget - this._setupChild(child); - - // Code below copied from StackContainer - topic.publish(this.id+"-addChild", child, insertIndex); // publish - this.layout(); - if(!this.selectedChildWidget){ - this.selectChild(child); - } - }else{ - // We haven't been started yet so just add in the child widget directly, - // and the wrapper will be created on startup() - this.inherited(arguments); - } - }, - - removeChild: function(child){ - // Overrides _LayoutWidget.removeChild(). - - // 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){ - domConstruct.place(child.domNode, child._wrapperWidget.domNode, "after"); - child._wrapperWidget.destroy(); - delete child._wrapperWidget; - } - - domClass.remove(child.domNode, "dijitHidden"); - - this.inherited(arguments); - }, - - getChildren: function(){ - // Overrides _Container.getChildren() to return content panes rather than internal AccordionInnerContainer panes - return array.map(this.inherited(arguments), function(child){ - return child.declaredClass == "dijit.layout._AccordionInnerContainer" ? child.contentWidget : child; - }, this); - }, - - destroy: function(){ - if(this._animation){ - this._animation.stop(); - } - array.forEach(this.getChildren(), function(child){ - // 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); - }, - - _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. - - if(has("ie") < 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); - - 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. - // Note that page must be visible for resizing to work. - if(this.doLayout && newWidget.resize){ - newWidget.resize(this._containerContentBox); - } - } - - if(oldWidget){ - oldWidget._wrapperWidget.set("selected", false); - if(!animate){ - this._hideChild(oldWidget); - } - } - - if(animate){ - 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 = domGeometry.getMarginExtents(wrapperContainerNode), - wrapperContainerNodePadBorder = domGeometry.getPadBorderExtents(wrapperContainerNode), - animationHeightOverhead = wrapperContainerNodeMargin.h + wrapperContainerNodePadBorder.h; - - oldContents.style.height = (self._verticalSpace - animationHeightOverhead) + "px"; - - this._animation = new fx.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); - } - }); - 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 - _onKeyPress: function(/*Event*/ e, /*dijit._Widget*/ fromTitle){ - // summary: - // Handle keypress events - // description: - // 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.disabled || e.altKey || !(fromTitle || e.ctrlKey)){ - return; - } - var c = e.charOrCode; - if((fromTitle && (c == keys.LEFT_ARROW || c == keys.UP_ARROW)) || - (e.ctrlKey && c == keys.PAGE_UP)){ - this._adjacent(false)._buttonWidget._onTitleClick(); - event.stop(e); - }else if((fromTitle && (c == keys.RIGHT_ARROW || c == keys.DOWN_ARROW)) || - (e.ctrlKey && (c == keys.PAGE_DOWN || c == keys.TAB))){ - this._adjacent(true)._buttonWidget._onTitleClick(); - event.stop(e); - } - } - }); - - // Back compat w/1.6, remove for 2.0 - if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/layout/AccordionPane"]; - require(requires); // use indirection so modules not rolled into a build - }); - } - - // For monkey patching - AccordionContainer._InnerContainer = AccordionInnerContainer; - AccordionContainer._Button = AccordionButton; - - return AccordionContainer; -}); - -}, -'dijit/form/_AutoCompleterMixin':function(){ -define("dijit/form/_AutoCompleterMixin", [ - "dojo/_base/connect", // keys keys.SHIFT - "dojo/data/util/filter", // patternToRegExp - "dojo/_base/declare", // declare - "dojo/_base/Deferred", // Deferred.when - "dojo/dom-attr", // domAttr.get - "dojo/_base/event", // event.stop - "dojo/keys", - "dojo/_base/lang", // lang.clone lang.hitch - "dojo/query", // query - "dojo/regexp", // regexp.escapeString - "dojo/_base/sniff", // has("ie") - "dojo/string", // string.substitute - "dojo/_base/window", // win.doc.selection.createRange - "./DataList", - "../registry", // registry.byId - "./_TextBoxMixin" // defines _TextBoxMixin.selectInputText -], function(connect, filter, declare, Deferred, domAttr, event, keys, lang, query, regexp, has, string, win, - DataList, registry, _TextBoxMixin){ - - // module: - // dijit/form/_AutoCompleterMixin - // summary: - // A mixin that implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect` - - - return declare("dijit.form._AutoCompleterMixin", null, { - // summary: - // A mixin that implements the base functionality for `dijit.form.ComboBox`/`dijit.form.FilteringSelect` - // description: - // All widgets that mix in dijit.form._AutoCompleterMixin must extend `dijit.form._FormValueWidget`. - // tags: - // protected - - // item: Object - // This is the item returned by the dojo.data.store implementation that - // provides the data for this ComboBox, it's the currently selected item. - item: null, - - // pageSize: Integer - // Argument to data provider. - // Specifies number of search results per page (before hitting "next" button) - pageSize: Infinity, - - // store: [const] dojo.store.api.Store - // Reference to data provider object used by this ComboBox - store: null, - - // fetchProperties: Object - // Mixin to the store's fetch. - // For example, to set the sort order of the ComboBox menu, pass: - // | { sort: [{attribute:"name",descending: true}] } - // To override the default queryOptions so that deep=false, do: - // | { queryOptions: {ignoreCase: true, deep: false} } - fetchProperties:{}, - - // query: Object - // A query that can be passed to 'store' to initially filter the items, - // before doing further filtering based on `searchAttr` and the key. - // Any reference to the `searchAttr` is ignored. - query: {}, - - // autoComplete: Boolean - // If user types in a partial string, and then tab out of the `<input>` box, - // automatically copy the first entry displayed in the drop down list to - // the `<input>` field - autoComplete: true, - - // highlightMatch: String - // One of: "first", "all" or "none". - // - // If the ComboBox/FilteringSelect opens with the search results and the searched - // string can be found, it will be highlighted. If set to "all" - // then will probably want to change `queryExpr` parameter to '*${0}*' - // - // Highlighting is only performed when `labelType` is "text", so as to not - // interfere with any HTML markup an HTML label might contain. - highlightMatch: "first", - - // searchDelay: Integer - // Delay in milliseconds between when user types something and we start - // searching based on that value - searchDelay: 100, - - // searchAttr: String - // Search for items in the data store where this attribute (in the item) - // matches what the user typed - searchAttr: "name", - - // labelAttr: String? - // The entries in the drop down list come from this attribute in the - // dojo.data items. - // If not specified, the searchAttr attribute is used instead. - labelAttr: "", - - // labelType: String - // Specifies how to interpret the labelAttr in the data store items. - // Can be "html" or "text". - labelType: "text", - - // queryExpr: String - // 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. - // dojo.data query expression pattern. - // `${0}` will be substituted for the user text. - // `*` is used for wildcards. - // `${0}*` means "starts with", `*${0}*` means "contains", `${0}` means "is" - queryExpr: "${0}*", - - // ignoreCase: Boolean - // Set true if the ComboBox/FilteringSelect should ignore case when matching possible items - ignoreCase: true, - - // 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; - if(typeof(element.selectionStart) == "number"){ - // FIXME: this is totally borked on Moz < 1.3. Any recourse? - pos = element.selectionStart; - }else if(has("ie")){ - // in the case of a mouse click in a popup being handled, - // then the win.doc.selection is not the textarea, but the popup - // var r = win.doc.selection.createRange(); - // hack to get IE 6 to play nice. What a POS browser. - var tr = win.doc.selection.createRange().duplicate(); - var ntr = element.createTextRange(); - tr.move("character",0); - ntr.move("character",0); - try{ - // 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); - pos = String(ntr.text).replace(/\r/g,"").length; - }catch(e){ - // If focus has shifted, 0 is fine for caret pos. - } - } - return pos; - }, - - _setCaretPos: function(/*DomNode*/ element, /*Number*/ location){ - location = parseInt(location); - _TextBoxMixin.selectInputText(element, location, location); - }, - - _setDisabledAttr: function(/*Boolean*/ value){ - // Additional code to set disabled state of ComboBox node. - // Overrides _FormValueWidget._setDisabledAttr() or ValidationTextBox._setDisabledAttr(). - this.inherited(arguments); - this.domNode.setAttribute("aria-disabled", value); - }, - - _abortQuery: function(){ - // stop in-progress query - if(this.searchTimer){ - clearTimeout(this.searchTimer); - this.searchTimer = null; - } - if(this._fetchHandle){ - if(this._fetchHandle.cancel){ - this._cancelingQuery = true; - this._fetchHandle.cancel(); - this._cancelingQuery = false; - } - this._fetchHandle = null; - } - }, - - _onInput: function(/*Event*/ evt){ - // summary: - // Handles paste events - this.inherited(arguments); - if(evt.charOrCode == 229){ // IME or cut/paste event - this._onKey(evt); - } - }, - - _onKey: function(/*Event*/ evt){ - // summary: - // Handles keyboard events - - if(this.disabled || this.readOnly){ return; } - var key = evt.charOrCode; - - // except for cutting/pasting case - ctrl + x/v - if(evt.altKey || ((evt.ctrlKey || evt.metaKey) && (key != 'x' && key != 'v')) || key == keys.SHIFT){ - return; // throw out weird key combinations and spurious events - } - - var doSearch = false; - var pw = this.dropDown; - var highlighted = null; - this._prev_key_backspace = false; - this._abortQuery(); - - // _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){ - case keys.PAGE_DOWN: - case keys.DOWN_ARROW: - case keys.PAGE_UP: - case keys.UP_ARROW: - // Keystroke caused ComboBox_menu to move to a different item. - // Copy new item to <input> box. - if(this._opened){ - this._announceOption(highlighted); - } - event.stop(evt); - break; - - case keys.ENTER: - // prevent submitting form if user presses enter. Also - // prevent accepting the value if either Next or Previous - // are selected - if(highlighted){ - // only stop event on prev/next - if(highlighted == pw.nextButton){ - this._nextSearch(1); - event.stop(evt); - break; - }else if(highlighted == pw.previousButton){ - this._nextSearch(-1); - event.stop(evt); - break; - } - }else{ - // Update 'value' (ex: KY) according to currently displayed text - this._setBlurValue(); // set value if needed - 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 - if(this._opened || this._fetchHandle){ - event.stop(evt); - } - // fall through - - case keys.TAB: - var newvalue = this.get('displayedValue'); - // if the user had More Choices selected fall into the - // _onBlur handler - if(pw && ( - newvalue == pw._messages["previousMessage"] || - newvalue == pw._messages["nextMessage"]) - ){ - break; - } - if(highlighted){ - this._selectOption(highlighted); - } - // fall through - - case keys.ESCAPE: - if(this._opened){ - this._lastQuery = null; // in case results come back later - this.closeDropDown(); - } - break; - - case ' ': - if(highlighted){ - // user is effectively clicking a choice in the drop down menu - event.stop(evt); - this._selectOption(highlighted); - this.closeDropDown(); - }else{ - // user typed a space into the input box, treat as normal character - doSearch = true; - } - break; - - case keys.DELETE: - case keys.BACKSPACE: - this._prev_key_backspace = true; - doSearch = true; - break; - - default: - // Non char keys (F1-F12 etc..) shouldn't open list. - // Ascii characters and IME input (Chinese, Japanese etc.) should. - //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(lang.hitch(this, "_startSearchFromInput"),1); - } - }, - - _autoCompleteText: function(/*String*/ text){ - // summary: - // Fill in the textbox with the first item from the drop down - // list, and highlight the characters that were - // auto-completed. For example, if user typed "CA" and the - // drop down list appeared, the textbox would be changed to - // "California" and "ifornia" would be highlighted. - - var fn = this.focusNode; - - // IE7: clear selection so next highlight works all the time - _TextBoxMixin.selectInputText(fn, fn.value.length); - // does text autoComplete the value in the textbox? - var caseFilter = this.ignoreCase? 'toLowerCase' : 'substr'; - if(text[caseFilter](0).indexOf(this.focusNode.value[caseFilter](0)) == 0){ - var cpos = this.autoComplete ? this._getCaretPos(fn) : fn.value.length; - // only try to extend if we added the last character at the end of the input - if((cpos+1) > fn.value.length){ - // only add to input node as we would overwrite Capitalisation of chars - // actually, that is ok - fn.value = text;//.substr(cpos); - // visually highlight the autocompleted characters - _TextBoxMixin.selectInputText(fn, cpos); - } - }else{ - // text does not autoComplete; replace the whole value and highlight - fn.value = text; - _TextBoxMixin.selectInputText(fn); - } - }, - - _openResultList: function(/*Object*/ results, /*Object*/ query, /*Object*/ options){ - // 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 || - (query[this.searchAttr] !== this._lastQuery) // TODO: better way to avoid getting unwanted notify - ){ - return; - } - var wasSelected = this.dropDown.getHighlightedOption(); - this.dropDown.clearResultList(); - if(!results.length && options.start == 0){ // 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 - // textbox would be changed to "California" and "ifornia" would be - // highlighted. - - var nodes = this.dropDown.createOptions( - results, - options, - lang.hitch(this, "_getMenuLabelFromItem") - ); - - // show our list (only if we have content, else nothing) - this._showResultList(); - - // #4091: - // tell the screen reader that the paging callback finished by - // shouting the next choice - if(options.direction){ - if(1 == options.direction){ - this.dropDown.highlightFirstOption(); - }else if(-1 == options.direction){ - this.dropDown.highlightLastOption(); - } - if(wasSelected){ - this._announceOption(this.dropDown.getHighlightedOption()); - } - }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 - // if they are just previewing the options available. - && !/^[*]+$/.test(query[this.searchAttr].toString())){ - this._announceOption(nodes[1]); // 1st real item - } - }, - - _showResultList: function(){ - // 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); - this.openDropDown(); - this.domNode.setAttribute("aria-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. - - this._startSearchAll(); - }, - - isLoaded: function(){ - // signal to _HasDropDown that it needs to call loadDropDown() to load the - // drop down asynchronously before displaying it - return false; - }, - - 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._opened){ - this.inherited(arguments); - this.domNode.setAttribute("aria-expanded", "false"); - this.focusNode.removeAttribute("aria-activedescendant"); - } - }, - - _setBlurValue: function(){ - // if the user clicks away from the textbox OR tabs away, set the - // value to the textbox value - // #4617: - // if value is now more choices or previous choices, revert - // the value - var newvalue = this.get('displayedValue'); - var pw = this.dropDown; - if(pw && ( - newvalue == pw._messages["previousMessage"] || - newvalue == pw._messages["nextMessage"] - ) - ){ - this._setValueAttr(this._lastValueReported, true); - }else if(typeof this.item == "undefined"){ - // Update 'value' (ex: KY) according to currently displayed text - this.item = null; - this.set('displayedValue', newvalue); - }else{ - if(this.value != this._lastValueReported){ - this._handleOnChange(this.value, true); - } - this._refreshState(); - } - }, - - _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. - // description: - // Users shouldn't call this function; they should be calling - // set('item', value) - // tags: - // private - var value = ''; - if(item){ - if(!displayedValue){ - displayedValue = this.store._oldAPI ? // remove getValue() for 2.0 (old dojo.data API) - this.store.getValue(item, this.searchAttr) : item[this.searchAttr]; - } - value = this._getValueField() != this.searchAttr ? this.store.getIdentity(item) : displayedValue; - } - this.set('value', value, priorityChange, displayedValue, item); - }, - - _announceOption: function(/*Node*/ node){ - // summary: - // a11y code that puts the highlighted option in the textbox. - // This way screen readers will know what is happening in the - // menu. - - if(!node){ - return; - } - // pull the text value from the item attached to the DOM node - var newValue; - if(node == this.dropDown.nextButton || - node == this.dropDown.previousButton){ - newValue = node.innerHTML; - this.item = undefined; - this.value = ''; - }else{ - newValue = (this.store._oldAPI ? // remove getValue() for 2.0 (old dojo.data API) - this.store.getValue(node.item, this.searchAttr) : node.item[this.searchAttr]).toString(); - this.set('item', node.item, false, newValue); - } - // get the text that the user manually entered (cut off autocompleted text) - this.focusNode.value = this.focusNode.value.substring(0, this._lastInput.length); - // set up ARIA activedescendant - this.focusNode.setAttribute("aria-activedescendant", domAttr.get(node, "id")); - // autocomplete the rest of the option to announce change - this._autoCompleteText(newValue); - }, - - _selectOption: function(/*DomNode*/ target){ - // summary: - // Menu callback function, called when an item in the menu is selected. - this.closeDropDown(); - if(target){ - this._announceOption(target); - } - this._setCaretPos(this.focusNode, this.focusNode.value.length); - this._handleOnChange(this.value, true); - }, - - _startSearchAll: function(){ - this._startSearch(''); - }, - - _startSearchFromInput: function(){ - this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g, "\\$1")); - }, - - _getQueryString: function(/*String*/ text){ - return string.substitute(this.queryExpr, [text]); - }, - - _startSearch: function(/*String*/ key){ - // 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 = lang.isString(this.dropDownClass) ? - lang.getObject(this.dropDownClass, false) : this.dropDownClass; - this.dropDown = new dropDownConstructor({ - onChange: lang.hitch(this, this._selectOption), - id: popupId, - dir: this.dir, - textDir: this.textDir - }); - this.focusNode.removeAttribute("aria-activedescendant"); - this.textbox.setAttribute("aria-owns",popupId); // associate popup with textbox - } - this._lastInput = key; // Store exactly what was entered by the user. - - // Setup parameters to be passed to store.query(). - // Create a new query to prevent accidentally querying for a hidden - // value from FilteringSelect's keyField - var query = lang.clone(this.query); // #5970 - var options = { - start: 0, - count: this.pageSize, - queryOptions: { // remove for 2.0 - ignoreCase: this.ignoreCase, - deep: true - } - }; - lang.mixin(options, this.fetchProperties); - - // Generate query - var qs = this._getQueryString(key), q; - if(this.store._oldAPI){ - // remove this branch for 2.0 - q = qs; - }else{ - // Query on searchAttr is a regex for benefit of dojo.store.Memory, - // but with a toString() method to help dojo.store.JsonRest. - // Search string like "Co*" converted to regex like /^Co.*$/i. - q = filter.patternToRegExp(qs, this.ignoreCase); - q.toString = function(){ return qs; }; - } - this._lastQuery = query[this.searchAttr] = q; - - // Function to run the query, wait for the results, and then call _openResultList() - var _this = this, - startQuery = function(){ - var resPromise = _this._fetchHandle = _this.store.query(query, options); - Deferred.when(resPromise, function(res){ - _this._fetchHandle = null; - res.total = resPromise.total; - _this._openResultList(res, query, options); - }, function(err){ - _this._fetchHandle = null; - if(!_this._cancelingQuery){ // don't treat canceled query as an error - console.error(_this.declaredClass + ' ' + err.toString()); - _this.closeDropDown(); - } - }); - }; - - // #5970: set _lastQuery, *then* start the timeout - // otherwise, if the user types and the last query returns before the timeout, - // _lastQuery won't be set and their input gets rewritten - - this.searchTimer = setTimeout(lang.hitch(this, function(query, _this){ - this.searchTimer = null; - - startQuery(); - - // Setup method to handle clicking next/previous buttons to page through results - this._nextSearch = this.dropDown.onPage = function(direction){ - options.start += options.count * direction; - // tell callback the direction of the paging so the screen - // reader knows which menu option to shout - options.direction = direction; - startQuery(); - _this.focus(); - }; - }, query, this), this.searchDelay); - }, - - _getValueField: function(){ - // 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; - }, - - //////////// INITIALIZATION METHODS /////////////////////////////////////// - - constructor: function(){ - this.query={}; - this.fetchProperties={}; - }, - - postMixInProperties: function(){ - if(!this.store){ - var srcNodeRef = this.srcNodeRef; - var list = this.list; - if(list){ - this.store = registry.byId(list); - }else{ - // if user didn't specify store, then assume there are option tags - this.store = new DataList({}, srcNodeRef); - } - - // if there is no value set and there is an option list, set - // the value to the first value to be consistent with native Select - // Firefox and Safari set value - // IE6 and Opera set selectedIndex, which is automatically set - // 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.item = this.store.fetchSelectedItem()); - if(item){ - var valueField = this._getValueField(); - // remove getValue() for 2.0 (old dojo.data API) - this.value = this.store._oldAPI ? this.store.getValue(item, valueField) : item[valueField]; - } - } - } - - this.inherited(arguments); - }, - - postCreate: function(){ - // summary: - // Subclasses must call this method from their postCreate() methods - // tags: - // protected - - // find any associated label element and add to ComboBox node. - var label=query('label[for="'+this.id+'"]'); - if(label.length){ - label[0].id = (this.id+"_label"); - this.domNode.setAttribute("aria-labelledby", label[0].id); - - } - this.inherited(arguments); - }, - - _getMenuLabelFromItem: function(/*Item*/ item){ - 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)); - labelType = "html"; - } - return {html: labelType == "html", label: label}; - }, - - doHighlight: function(/*String*/ label, /*String*/ find){ - // summary: - // Highlights the string entered by the user in the menu. By default this - // highlights the first occurrence found. Override this method - // to implement your custom highlighting. - // tags: - // protected - - 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 = regexp.escapeString(find); // escape regexp special chars - 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){ - // TODO Should become dojo.html.entities(), when exists use instead - // summary: - // Adds escape sequences for special characters in XML: &<>"' - str = String(str).replace(/&/gm, "&").replace(/</gm, "<") - .replace(/>/gm, ">").replace(/"/gm, """); //balance" - return str; // string - }, - - reset: function(){ - // Overrides the _FormWidget.reset(). - // Additionally reset the .item (to clean up). - this.item = null; - this.inherited(arguments); - }, - - labelFunc: function(/*item*/ item, /*dojo.store.api.Store*/ store){ - // summary: - // Computes the label to display based on the dojo.data store item. - // returns: - // The label that the ComboBox should display - // tags: - // private - - // Use toString() because XMLStore returns an XMLItem whereas this - // method is expected to return a String (#9354). - // Remove getValue() for 2.0 (old dojo.data API) - return (store._oldAPI ? store.getValue(item, this.labelAttr || this.searchAttr) : - item[this.labelAttr || this.searchAttr]).toString(); // String - }, - - _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue, /*item?*/ item){ - // summary: - // Hook so set('value', value) works. - // description: - // Sets the value of the select. - this._set("item", item||null); // value not looked up in store - if(!value){ value = ''; } // null translates to blank - this.inherited(arguments); - }, - _setTextDirAttr: function(/*String*/ textDir){ - // summary: - // Setter for textDir, needed for the dropDown's textDir update. - // description: - // Users shouldn't call this function; they should be calling - // set('textDir', value) - // tags: - // private - this.inherited(arguments); - // update the drop down also (_ComboBoxMenuMixin) - if(this.dropDown){ - this.dropDown._set("textDir", textDir); - } - } - }); -}); - -}, -'url:dijit/templates/ColorPalette.html':"<div class=\"dijitInline dijitColorPalette\">\n\t<table dojoAttachPoint=\"paletteTableNode\" class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\" role=\"grid\">\n\t\t<tbody data-dojo-attach-point=\"gridNode\"></tbody>\n\t</table>\n</div>\n", -'url:dijit/layout/templates/_ScrollingTabControllerButton.html':"<div data-dojo-attach-event=\"onclick:_onClick\">\n\t<div role=\"presentation\" class=\"dijitTabInnerDiv\" data-dojo-attach-point=\"innerDiv,focusNode\">\n\t\t<div role=\"presentation\" class=\"dijitTabContent dijitButtonContents\" data-dojo-attach-point=\"tabContent\">\n\t\t\t<img role=\"presentation\" alt=\"\" src=\"${_blankGif}\" class=\"dijitTabStripIcon\" data-dojo-attach-point=\"iconNode\"/>\n\t\t\t<span data-dojo-attach-point=\"containerNode,titleNode\" class=\"dijitButtonText\"></span>\n\t\t</div>\n\t</div>\n</div>", -'dijit/form/MappedTextBox':function(){ -define("dijit/form/MappedTextBox", [ - "dojo/_base/declare", // declare - "dojo/dom-construct", // domConstruct.place - "./ValidationTextBox" -], function(declare, domConstruct, ValidationTextBox){ - -/*===== - var ValidationTextBox = dijit.form.ValidationTextBox; -=====*/ - - // module: - // dijit/form/MappedTextBox - // summary: - // A dijit.form.ValidationTextBox subclass which provides a base class for widgets that have - // a visible formatted display value, and a serializable - // value in a hidden input field which is actually sent to the server. - - return declare("dijit.form.MappedTextBox", ValidationTextBox, { - // summary: - // A dijit.form.ValidationTextBox subclass which provides a base class for widgets that have - // a visible formatted display value, and a serializable - // value in a hidden input field which is actually sent to the server. - // description: - // The visible display may - // be locale-dependent and interactive. The value sent to the server is stored in a hidden - // input field which uses the `name` attribute declared by the original widget. That value sent - // to the server is defined by the dijit.form.MappedTextBox.serialize method and is typically - // locale-neutral. - // tags: - // protected - - postMixInProperties: function(){ - this.inherited(arguments); - - // we want the name attribute to go to the hidden <input>, not the displayed <input>, - // so override _FormWidget.postMixInProperties() setting of nameAttrSetting - this.nameAttrSetting = ""; - }, - - // Override default behavior to assign name to focusNode - _setNameAttr: null, - - serialize: function(val /*=====, options =====*/){ - // summary: - // 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. - // val: anything - // options: Object? - // tags: - // protected extension - return val.toString ? val.toString() : ""; // String - }, - - toString: function(){ - // summary: - // Returns widget as a printable string using the widget's value - // tags: - // protected - var val = this.filter(this.get('value')); // call filter in case value is nonstring and filter has been customized - return val != null ? (typeof val == "string" ? val : this.serialize(val, this.constraints)) : ""; // String - }, - - validate: function(){ - // Overrides `dijit.form.TextBox.validate` - this.valueNode.value = this.toString(); - return this.inherited(arguments); - }, - - buildRendering: function(){ - // Overrides `dijit._TemplatedMixin.buildRendering` - - this.inherited(arguments); - - // Create a hidden <input> node with the serialized value used for submit - // (as opposed to the displayed value). - // Passing in name as markup rather than calling domConstruct.create() with an attrs argument - // to make query(input[name=...]) work on IE. (see #8660) - this.valueNode = domConstruct.place("<input type='hidden'" + (this.name ? " name='" + this.name.replace(/'/g, """) + "'" : "") + "/>", this.textbox, "after"); - }, - - reset: function(){ - // Overrides `dijit.form.ValidationTextBox.reset` to - // reset the hidden textbox value to '' - this.valueNode.value = ''; - this.inherited(arguments); - } - }); -}); - -}, -'dijit/form/ComboBoxMixin':function(){ -require({cache:{ -'url:dijit/form/templates/DropDownBox.html':"<div class=\"dijit dijitReset dijitInline dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdata-dojo-attach-point=\"_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\tdata-dojo-attach-point=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n"}}); -define("dijit/form/ComboBoxMixin", [ - "dojo/_base/declare", // declare - "dojo/_base/Deferred", - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.mixin - "dojo/store/util/QueryResults", // dojo.store.util.QueryResults - "./_AutoCompleterMixin", - "./_ComboBoxMenu", - "../_HasDropDown", - "dojo/text!./templates/DropDownBox.html" -], function(declare, Deferred, kernel, lang, QueryResults, _AutoCompleterMixin, _ComboBoxMenu, _HasDropDown, template){ - -/*===== - var _AutoCompleterMixin = dijit.form._AutoCompleterMixin; - var _ComboBoxMenu = dijit.form._ComboBoxMenu; - var _HasDropDown = dijit._HasDropDown; -=====*/ - - // module: - // dijit/form/ComboBoxMixin - // summary: - // Provides main functionality of ComboBox widget - - return declare("dijit.form.ComboBoxMixin", [_HasDropDown, _AutoCompleterMixin], { - // summary: - // Provides main functionality of ComboBox widget - - // dropDownClass: [protected extension] Function String - // Dropdown widget class used to select a date/time. - // Subclasses should specify this. - dropDownClass: _ComboBoxMenu, - - // hasDownArrow: Boolean - // Set this textbox to have a down arrow button, to display the drop down list. - // Defaults to true. - hasDownArrow: true, - - templateString: template, - - baseClass: "dijitTextBox dijitComboBox", - - /*===== - // store: [const] dojo.store.api.Store || dojo.data.api.Read - // Reference to data provider object used by this ComboBox. - // - // Should be dojo.store.api.Store, but dojo.data.api.Read supported - // for backwards compatibility. - store: null, - =====*/ - - // Set classes like dijitDownArrowButtonHover depending on - // mouse action over button node - cssStateNodes: { - "_buttonNode": "dijitDownArrowButton" - }, - - _setHasDownArrowAttr: function(/*Boolean*/ val){ - this._set("hasDownArrow", val); - this._buttonNode.style.display = val ? "" : "none"; - }, - - _showResultList: function(){ - // hide the tooltip - this.displayMessage(""); - this.inherited(arguments); - }, - - _setStoreAttr: function(store){ - // For backwards-compatibility, accept dojo.data store in addition to dojo.store.store. Remove in 2.0. - if(!store.get){ - lang.mixin(store, { - _oldAPI: true, - get: function(id){ - // summary: - // Retrieves an object by it's identity. This will trigger a fetchItemByIdentity. - // Like dojo.store.DataStore.get() except returns native item. - var deferred = new Deferred(); - this.fetchItemByIdentity({ - identity: id, - onItem: function(object){ - deferred.resolve(object); - }, - onError: function(error){ - deferred.reject(error); - } - }); - return deferred.promise; - }, - query: function(query, options){ - // summary: - // Queries the store for objects. Like dojo.store.DataStore.query() - // except returned Deferred contains array of native items. - var deferred = new Deferred(function(){ fetchHandle.abort && fetchHandle.abort(); }); - var fetchHandle = this.fetch(lang.mixin({ - query: query, - onBegin: function(count){ - deferred.total = count; - }, - onComplete: function(results){ - deferred.resolve(results); - }, - onError: function(error){ - deferred.reject(error); - } - }, options)); - return QueryResults(deferred); - } - }); - } - this._set("store", store); - }, - - postMixInProperties: function(){ - // Since _setValueAttr() depends on this.store, _setStoreAttr() needs to execute first. - // Unfortunately, without special code, it ends up executing second. - if(this.params.store){ - this._setStoreAttr(this.params.store); - } - - this.inherited(arguments); - - // User may try to access this.store.getValue() etc. in a custom labelFunc() function. - // It's not available with the new data store for handling inline <option> tags, so add it. - if(!this.params.store){ - var clazz = this.declaredClass; - lang.mixin(this.store, { - getValue: function(item, attr){ - kernel.deprecated(clazz + ".store.getValue(item, attr) is deprecated for builtin store. Use item.attr directly", "", "2.0"); - return item[attr]; - }, - getLabel: function(item){ - kernel.deprecated(clazz + ".store.getLabel(item) is deprecated for builtin store. Use item.label directly", "", "2.0"); - return item.name; - }, - fetch: function(args){ - kernel.deprecated(clazz + ".store.fetch() is deprecated for builtin store.", "Use store.query()", "2.0"); - var shim = ["dojo/data/ObjectStore"]; // indirection so it doesn't get rolled into a build - require(shim, lang.hitch(this, function(ObjectStore){ - new ObjectStore({objectStore: this}).fetch(args); - })); - } - }); - } - } - }); -}); - -}, -'dijit/form/_TextBoxMixin':function(){ -define("dijit/form/_TextBoxMixin", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom", // dom.byId - "dojo/_base/event", // event.stop - "dojo/keys", // keys.ALT keys.CAPS_LOCK keys.CTRL keys.META keys.SHIFT - "dojo/_base/lang", // lang.mixin - ".." // for exporting dijit._setSelectionRange, dijit.selectInputText -], function(array, declare, dom, event, keys, lang, dijit){ - -// module: -// dijit/form/_TextBoxMixin -// summary: -// A mixin for textbox form input widgets - -var _TextBoxMixin = declare("dijit.form._TextBoxMixin", null, { - // summary: - // A mixin for textbox form input widgets - - // trim: Boolean - // Removes leading and trailing whitespace if true. Default is false. - trim: false, - - // uppercase: Boolean - // Converts all characters to uppercase if true. Default is false. - uppercase: false, - - // lowercase: Boolean - // Converts all characters to lowercase if true. Default is false. - lowercase: false, - - // propercase: Boolean - // Converts the first character of each word to uppercase if true. - propercase: false, - - // maxLength: String - // HTML INPUT tag maxLength declaration. - maxLength: "", - - // selectOnClick: [const] Boolean - // If true, all text will be selected when focused with mouse - selectOnClick: false, - - // 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: "", - - _getValueAttr: function(){ - // summary: - // Hook so get('value') works as we like. - // description: - // For `dijit.form.TextBox` this basically returns the value of the <input>. - // - // For `dijit.form.MappedTextBox` subclasses, which have both - // a "displayed value" and a separate "submit value", - // This treats the "displayed value" as the master value, computing the - // submit value from it via this.parse(). - return this.parse(this.get('displayedValue'), this.constraints); - }, - - _setValueAttr: function(value, /*Boolean?*/ priorityChange, /*String?*/ formattedValue){ - // summary: - // Hook so set('value', ...) works. - // - // description: - // Sets the value of the widget to "value" which can be of - // any type as determined by the widget. - // - // value: - // The visual element value is also set to a corresponding, - // but not necessarily the same, value. - // - // formattedValue: - // If specified, used to set the visual element value, - // otherwise a computed visual value is used. - // - // priorityChange: - // If true, an onChange event is fired immediately instead of - // waiting for the next blur event. - - var filteredValue; - if(value !== undefined){ - // TODO: this is calling filter() on both the display value and the actual value. - // I added a comment to the filter() definition about this, but it should be changed. - filteredValue = this.filter(value); - if(typeof formattedValue != "string"){ - if(filteredValue !== null && ((typeof filteredValue != "number") || !isNaN(filteredValue))){ - formattedValue = this.filter(this.format(filteredValue, this.constraints)); - }else{ formattedValue = ''; } - } - } - if(formattedValue != null && formattedValue != undefined && ((typeof formattedValue) != "number" || !isNaN(formattedValue)) && this.textbox.value != formattedValue){ - this.textbox.value = formattedValue; - this._set("displayedValue", this.get("displayedValue")); - } - - if(this.textDir == "auto"){ - this.applyTextDir(this.focusNode, formattedValue); - } - - this.inherited(arguments, [filteredValue, priorityChange]); - }, - - // displayedValue: String - // For subclasses like ComboBox where the displayed value - // (ex: Kentucky) and the serialized value (ex: KY) are different, - // this represents the displayed value. - // - // Setting 'displayedValue' through set('displayedValue', ...) - // updates 'value', and vice-versa. Otherwise 'value' is updated - // from 'displayedValue' periodically, like onBlur etc. - // - // TODO: move declaration to MappedTextBox? - // Problem is that ComboBox references displayedValue, - // for benefit of FilteringSelect. - displayedValue: "", - - _getDisplayedValueAttr: function(){ - // summary: - // Hook so get('displayedValue') works. - // description: - // Returns the displayed value (what the user sees on the screen), - // after filtering (ie, trimming spaces etc.). - // - // For some subclasses of TextBox (like ComboBox), the displayed value - // 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); - }, - - _setDisplayedValueAttr: function(/*String*/ value){ - // summary: - // 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, - // but not necessarily the same, value. - - if(value === null || value === undefined){ value = '' } - else if(typeof value != "string"){ value = String(value) } - - this.textbox.value = 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')); - - // textDir support - if(this.textDir == "auto"){ - this.applyTextDir(this.focusNode, value); - } - }, - - format: function(value /*=====, constraints =====*/){ - // summary: - // Replaceable function to convert a value to a properly formatted string. - // value: String - // constraints: Object - // tags: - // protected extension - return ((value == null || value == undefined) ? "" : (value.toString ? value.toString() : value)); - }, - - parse: function(value /*=====, constraints =====*/){ - // summary: - // Replaceable function to convert a formatted string to a value - // value: String - // constraints: Object - // tags: - // protected extension - - return value; // String - }, - - _refreshState: function(){ - // summary: - // After the user types some characters, etc., this method is - // called to check the field for validity etc. The base method - // in `dijit.form.TextBox` does nothing, but subclasses override. - // tags: - // protected - }, - - /*===== - onInput: function(event){ - // summary: - // Connect to this function to receive notifications of various user data-input events. - // Return false to cancel the event and prevent it from being processed. - // event: - // keydown | keypress | cut | paste | input - // tags: - // callback - }, - =====*/ - onInput: function(){}, - - __skipInputEvent: false, - _onInput: function(){ - // summary: - // Called AFTER the input event has happened - // set text direction according to textDir that was defined in creation - if(this.textDir == "auto"){ - this.applyTextDir(this.focusNode, this.focusNode.value); - } - - 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 - this.textbox.setAttribute("value", this.textbox.value); // DOM and JS values should be the same - - this.inherited(arguments); - - // normalize input events to reduce spurious event processing - // onkeydown: do not forward modifier keys - // set charOrCode to numeric keycode - // onkeypress: do not forward numeric charOrCode keys (already sent through onkeydown) - // onpaste & oncut: set charOrCode to 229 (IME) - // oninput: if primary event not already processed, set charOrCode to 229 (IME), else do not forward - var handleEvent = function(e){ - var charCode = e.charOrCode || e.keyCode || 229; - if(e.type == "keydown"){ - switch(charCode){ // ignore "state" keys - case keys.SHIFT: - case keys.ALT: - case keys.CTRL: - case keys.META: - case keys.CAPS_LOCK: - return; - default: - if(charCode >= 65 && charCode <= 90){ return; } // keydown for A-Z can be processed with keypress - } - } - if(e.type == "keypress" && typeof charCode != "string"){ return; } - if(e.type == "input"){ - if(this.__skipInputEvent){ // duplicate event - this.__skipInputEvent = false; - return; - } - }else{ - this.__skipInputEvent = true; - } - // create fake event to set charOrCode and to know if preventDefault() was called - var faux = lang.mixin({}, e, { - charOrCode: charCode, - wasConsumed: false, - preventDefault: function(){ - faux.wasConsumed = true; - e.preventDefault(); - }, - stopPropagation: function(){ e.stopPropagation(); } - }); - // give web page author a chance to consume the event - if(this.onInput(faux) === false){ - event.stop(faux); // return false means stop - } - if(faux.wasConsumed){ return; } // if preventDefault was called - setTimeout(lang.hitch(this, "_onInput", faux), 0); // widget notification after key has posted - }; - array.forEach([ "onkeydown", "onkeypress", "onpaste", "oncut", "oninput", "oncompositionend" ], function(event){ - this.connect(this.textbox, event, handleEvent); - }, this); - }, - - _blankValue: '', // if the textbox is blank, what value should be reported - filter: function(val){ - // summary: - // Auto-corrections (such as trimming) that are applied to textbox - // value on blur or form submit. - // description: - // For MappedTextBox subclasses, this is called twice - // - once with the display value - // - 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() - // to execute standard trimming code in TextBox.filter(). - // - // TODO: break this into two methods in 2.0 - // - // tags: - // protected extension - if(val === null){ return this._blankValue; } - if(typeof val != "string"){ return val; } - if(this.trim){ - val = lang.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); - } - }, - - _isTextSelected: function(){ - return this.textbox.selectionStart == this.textbox.selectionEnd; - }, - - _onFocus: function(/*String*/ by){ - if(this.disabled || this.readOnly){ return; } - - // Select all text on focus via click if nothing already selected. - // Since mouse-up will clear the selection need to defer selection until after mouse-up. - // Don't do anything on focus by tabbing into the widget since there's no associated mouse-up event. - if(this.selectOnClick && by == "mouse"){ - this._selectOnClickHandle = this.connect(this.domNode, "onmouseup", function(){ - // Only select all text on first click; otherwise users would have no way to clear - // the selection. - this.disconnect(this._selectOnClickHandle); - - // Check if the user selected some text manually (mouse-down, mouse-move, mouse-up) - // and if not, then select all the text - if(this._isTextSelected()){ - _TextBoxMixin.selectInputText(this.textbox); - } - }); - } - // 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(){ - // Overrides dijit._FormWidget.reset(). - // Additionally resets the displayed textbox value to '' - this.textbox.value = ''; - this.inherited(arguments); - }, - _setTextDirAttr: function(/*String*/ textDir){ - // summary: - // Setter for textDir. - // description: - // Users shouldn't call this function; they should be calling - // set('textDir', value) - // tags: - // private - - // only if new textDir is different from the old one - // and on widgets creation. - if(!this._created - || this.textDir != textDir){ - this._set("textDir", textDir); - // so the change of the textDir will take place immediately. - this.applyTextDir(this.focusNode, this.focusNode.value); - } - } -}); - - -_TextBoxMixin._setSelectionRange = dijit._setSelectionRange = function(/*DomNode*/ element, /*Number?*/ start, /*Number?*/ stop){ - if(element.setSelectionRange){ - element.setSelectionRange(start, stop); - } -}; - -_TextBoxMixin.selectInputText = 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). - - // TODO: use functions in _editor/selection.js? - element = dom.byId(element); - if(isNaN(start)){ start = 0; } - if(isNaN(stop)){ stop = element.value ? element.value.length : 0; } - try{ - element.focus(); - _TextBoxMixin._setSelectionRange(element, start, stop); - }catch(e){ /* squelch random errors (esp. on IE) from unexpected focus changes or DOM nodes being hidden */ } -}; - -return _TextBoxMixin; -}); - -}, -'dijit/form/SimpleTextarea':function(){ -define("dijit/form/SimpleTextarea", [ - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add - "dojo/_base/sniff", // has("ie") has("opera") - "dojo/_base/window", // win.doc.selection win.doc.selection.createRange - "./TextBox" -], function(declare, domClass, has, win, TextBox){ - -/*===== - var TextBox = dijit.form.TextBox; -=====*/ - -// module: -// dijit/form/SimpleTextarea -// summary: -// A simple textarea that degrades, and responds to -// minimal LayoutContainer usage, and works with dijit.form.Form. -// Doesn't automatically size according to input, like Textarea. - -return declare("dijit.form.SimpleTextarea", TextBox, { - // summary: - // A simple textarea that degrades, and responds to - // minimal LayoutContainer usage, and works with dijit.form.Form. - // Doesn't automatically size according to input, like Textarea. - // - // example: - // | <textarea data-dojo-type="dijit.form.SimpleTextarea" name="foo" value="bar" rows=30 cols=40></textarea> - // - // example: - // | new dijit.form.SimpleTextarea({ rows:20, cols:30 }, "foo"); - - baseClass: "dijitTextBox dijitTextArea", - - // rows: Number - // The number of rows of text. - rows: "3", - - // rows: Number - // The number of characters per line. - cols: "20", - - templateString: "<textarea ${!nameAttrSetting} data-dojo-attach-point='focusNode,containerNode,textbox' autocomplete='off'></textarea>", - - 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(has("ie") && this.cols){ // attribute selectors is not supported in IE6 - domClass.add(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 - if(value){ - value = value.replace(/\r/g,""); - } - return this.inherited(arguments); - }, - - _onInput: function(/*Event?*/ e){ - // Override TextBox._onInput() to enforce maxLength restriction - if(this.maxLength){ - var maxLength = parseInt(this.maxLength); - var value = this.textbox.value.replace(/\r/g,''); - var overflow = value.length - maxLength; - if(overflow > 0){ - var textarea = this.textbox; - if(textarea.selectionStart){ - var pos = textarea.selectionStart; - var cr = 0; - if(has("opera")){ - cr = (this.textbox.value.substring(0,pos).match(/\r/g) || []).length; - } - this.textbox.value = value.substring(0,pos-overflow-cr)+value.substring(pos-cr); - textarea.setSelectionRange(pos-overflow, pos-overflow); - }else if(win.doc.selection){ //IE - textarea.focus(); - var range = win.doc.selection.createRange(); - // delete overflow characters - range.moveStart("character", -overflow); - range.text = ''; - // show cursor - range.select(); - } - } - } - this.inherited(arguments); - } -}); - -}); - -}, -'url:dijit/layout/templates/_TabButton.html':"<div role=\"presentation\" data-dojo-attach-point=\"titleNode\" data-dojo-attach-event='onclick:onClick'>\n <div role=\"presentation\" class='dijitTabInnerDiv' data-dojo-attach-point='innerDiv'>\n <div role=\"presentation\" class='dijitTabContent' data-dojo-attach-point='tabContent'>\n \t<div role=\"presentation\" data-dojo-attach-point='focusNode'>\n\t\t <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" data-dojo-attach-point='iconNode' />\n\t\t <span data-dojo-attach-point='containerNode' class='tabLabel'></span>\n\t\t <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" data-dojo-attach-point='closeNode'\n\t\t \t\tdata-dojo-attach-event='onclick: onClickCloseButton' role=\"presentation\">\n\t\t <span data-dojo-attach-point='closeText' class='dijitTabCloseText'>[x]</span\n\t\t ></span>\n\t\t\t</div>\n </div>\n </div>\n</div>\n", -'dijit/_base/window':function(){ -define("dijit/_base/window", [ - "dojo/window", // windowUtils.get - ".." // export symbol to dijit -], function(windowUtils, dijit){ - // module: - // dijit/_base/window - // summary: - // Back compatibility module, new code should use windowUtils directly instead of using this module. - - dijit.getDocumentWindow = function(doc){ - return windowUtils.get(doc); - }; -}); - -}, -'dijit/form/RadioButton':function(){ -define("dijit/form/RadioButton", [ - "dojo/_base/declare", // declare - "./CheckBox", - "./_RadioButtonMixin" -], function(declare, CheckBox, _RadioButtonMixin){ - -/*===== - var CheckBox = dijit.form.CheckBox; - var _RadioButtonMixin = dijit.form._RadioButtonMixin; -=====*/ - - // module: - // dijit/form/RadioButton - // summary: - // Radio button widget - - return declare("dijit.form.RadioButton", [CheckBox, _RadioButtonMixin], { - // summary: - // Same as an HTML radio, but with fancy styling. - - baseClass: "dijitRadio" - }); -}); - -}, -'dijit/main':function(){ -define("dijit/main", [ - "dojo/_base/kernel" -], function(dojo){ - // module: - // dijit - // summary: - // The dijit package main module - - return dojo.dijit; -}); - -}, -'dijit/_OnDijitClickMixin':function(){ -define("dijit/_OnDijitClickMixin", [ - "dojo/on", - "dojo/_base/array", // array.forEach - "dojo/keys", // keys.ENTER keys.SPACE - "dojo/_base/declare", // declare - "dojo/_base/sniff", // has("ie") - "dojo/_base/unload", // unload.addOnWindowUnload - "dojo/_base/window" // win.doc.addEventListener win.doc.attachEvent win.doc.detachEvent -], function(on, array, keys, declare, has, unload, win){ - - // module: - // dijit/_OnDijitClickMixin - // summary: - // Mixin so you can pass "ondijitclick" to this.connect() method, - // as a way to handle clicks by mouse, or by keyboard (SPACE/ENTER key) - - - // 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 - var lastKeyDownNode = null; - if(has("ie")){ - (function(){ - var keydownCallback = function(evt){ - lastKeyDownNode = evt.srcElement; - }; - win.doc.attachEvent('onkeydown', keydownCallback); - unload.addOnWindowUnload(function(){ - win.doc.detachEvent('onkeydown', keydownCallback); - }); - })(); - }else{ - win.doc.addEventListener('keydown', function(evt){ - lastKeyDownNode = evt.target; - }, true); - } - - // Custom a11yclick (a.k.a. ondijitclick) event - var a11yclick = function(node, listener){ - if(/input|button/i.test(node.nodeName)){ - // pass through, the browser already generates click event on SPACE/ENTER key - return on(node, "click", listener); - }else{ - // Don't fire the click event unless both the keydown and keyup occur on this node. - // Avoids problems where focus shifted to this node or away from the node on keydown, - // either causing this node to process a stray keyup event, or causing another node - // to get a stray keyup event. - - function clickKey(/*Event*/ e){ - return (e.keyCode == keys.ENTER || e.keyCode == keys.SPACE) && - !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey; - } - var handles = [ - on(node, "keypress", function(e){ - //console.log(this.id + ": onkeydown, e.target = ", e.target, ", lastKeyDownNode was ", lastKeyDownNode, ", equality is ", (e.target === lastKeyDownNode)); - if(clickKey(e)){ - // needed on IE for when focus changes between keydown and keyup - otherwise dropdown menus do not work - lastKeyDownNode = e.target; - - // Prevent viewport scrolling on space key in IE<9. - // (Reproducible on test_Button.html on any of the first dijit.form.Button examples) - // Do this onkeypress rather than onkeydown because onkeydown.preventDefault() will - // suppress the onkeypress event, breaking _HasDropDown - e.preventDefault(); - } - }), - - on(node, "keyup", function(e){ - //console.log(this.id + ": onkeyup, e.target = ", e.target, ", lastKeyDownNode was ", lastKeyDownNode, ", equality is ", (e.target === lastKeyDownNode)); - if(clickKey(e) && e.target == lastKeyDownNode){ // === breaks greasemonkey - //need reset here or have problems in FF when focus returns to trigger element after closing popup/alert - lastKeyDownNode = null; - listener.call(this, e); - } - }), - - on(node, "click", function(e){ - // and connect for mouse clicks too (or touch-clicks on mobile) - listener.call(this, e); - }) - ]; - - return { - remove: function(){ - array.forEach(handles, function(h){ h.remove(); }); - } - }; - } - }; - - return declare("dijit._OnDijitClickMixin", null, { - 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 connect.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 - - return this.inherited(arguments, [obj, event == "ondijitclick" ? a11yclick : event, method]); - } - }); -}); - -}, -'dijit/InlineEditBox':function(){ -require({cache:{ -'url: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"}}); -define("dijit/InlineEditBox", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set domAttr.get - "dojo/dom-class", // domClass.add domClass.remove domClass.toggle - "dojo/dom-construct", // domConstruct.create domConstruct.destroy - "dojo/dom-style", // domStyle.getComputedStyle domStyle.set domStyle.get - "dojo/_base/event", // event.stop - "dojo/i18n", // i18n.getLocalization - "dojo/_base/kernel", // kernel.deprecated - "dojo/keys", // keys.ENTER keys.ESCAPE - "dojo/_base/lang", // lang.getObject - "dojo/_base/sniff", // has("ie") - "./focus", - "./_Widget", - "./_TemplatedMixin", - "./_WidgetsInTemplateMixin", - "./_Container", - "./form/Button", - "./form/_TextBoxMixin", - "./form/TextBox", - "dojo/text!./templates/InlineEditBox.html", - "dojo/i18n!./nls/common" -], function(array, declare, domAttr, domClass, domConstruct, domStyle, event, i18n, kernel, keys, lang, has, - fm, _Widget, _TemplatedMixin, _WidgetsInTemplateMixin, _Container, Button, _TextBoxMixin, TextBox, template){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _WidgetsInTemplateMixin = dijit._WidgetsInTemplateMixin; - var _Container = dijit._Container; - var Button = dijit.form.Button; - var TextBox = dijit.form.TextBox; -=====*/ - -// module: -// dijit/InlineEditBox -// summary: -// An element with in-line edit capabilities - -var InlineEditor = declare("dijit._InlineEditor", [_Widget, _TemplatedMixin, _WidgetsInTemplateMixin], { - // summary: - // Internal widget used by InlineEditBox, displayed when in editing mode - // to display the editor and maybe save/cancel buttons. Calling code should - // connect to save/cancel methods to detect when editing is finished - // - // Has mainly the same parameters as InlineEditBox, plus these values: - // - // style: Object - // Set of CSS attributes of display node, to replicate in editor - // - // value: String - // Value as an HTML string or plain text string, depending on renderAsHTML flag - - templateString: template, - - postMixInProperties: function(){ - this.inherited(arguments); - this.messages = i18n.getLocalization("dijit", "common", this.lang); - array.forEach(["buttonSave", "buttonCancel"], function(prop){ - if(!this[prop]){ this[prop] = this.messages[prop]; } - }, this); - }, - - buildRendering: function(){ - this.inherited(arguments); - - // Create edit widget in place in the template - var cls = typeof this.editor == "string" ? lang.getObject(this.editor) : this.editor; - - // Copy the style from the source - // Don't copy ALL properties though, just the necessary/applicable ones. - // wrapperStyle/destStyle code is to workaround IE bug where getComputedStyle().fontSize - // is a relative value like 200%, rather than an absolute value like 24px, and - // the 200% can refer *either* to a setting on the node or it's ancestor (see #11175) - var srcStyle = this.sourceStyle, - editStyle = "line-height:" + srcStyle.lineHeight + ";", - destStyle = domStyle.getComputedStyle(this.domNode); - array.forEach(["Weight","Family","Size","Style"], function(prop){ - var textStyle = srcStyle["font"+prop], - wrapperStyle = destStyle["font"+prop]; - if(wrapperStyle != textStyle){ - editStyle += "font-"+prop+":"+srcStyle["font"+prop]+";"; - } - }, this); - array.forEach(["marginTop","marginBottom","marginLeft", "marginRight"], function(prop){ - this.domNode.style[prop] = srcStyle[prop]; - }, this); - var width = this.inlineEditBox.width; - if(width == "100%"){ - // block mode - editStyle += "width:100%;"; - this.domNode.style.display = "block"; - }else{ - // inline-block mode - editStyle += "width:" + (width + (Number(width) == width ? "px" : "")) + ";"; - } - var editorParams = lang.delegate(this.inlineEditBox.editorParams, { - style: editStyle, - dir: this.dir, - lang: this.lang, - textDir: this.textDir - }); - editorParams[ "displayedValue" in cls.prototype ? "displayedValue" : "value"] = this.value; - 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 - domConstruct.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"); - - // ESC and TAB should cancel and save. Note that edit widgets do a stopEvent() on ESC key (to - // prevent Dialog from closing when the user just wants to revert the value in the edit widget), - // so this is the only way we can see the key press event. - this.connect(ew, "onKeyPress", "_onKeyPress"); - }else{ - // If possible, enable/disable save button based on whether the user has changed the value - if("intermediateChanges" in ew){ - ew.set("intermediateChanges", true); - this.connect(ew, "onChange", "_onIntermediateChange"); - this.saveButton.set("disabled", true); - } - } - }, - - _onIntermediateChange: function(/*===== val =====*/){ - // summary: - // Called for editor widgets that support the intermediateChanges=true flag as a way - // to detect when to enable/disabled the save button - this.saveButton.set("disabled", (this.getValue() == this._resetValue) || !this.enableSave()); - }, - - destroy: function(){ - this.editWidget.destroy(true); // let the parent wrapper widget clean up the DOM - this.inherited(arguments); - }, - - getValue: function(){ - // summary: - // Return the [display] value of the edit widget - var ew = this.editWidget; - return String(ew.get("displayedValue" in ew ? "displayedValue" : "value")); - }, - - _onKeyPress: function(e){ - // summary: - // Handler for keypress in the edit box in autoSave mode. - // description: - // For autoSave widgets, if Esc/Enter, call cancel/save. - // tags: - // private - - if(this.inlineEditBox.autoSave && this.inlineEditBox.editing){ - if(e.altKey || e.ctrlKey){ return; } - // If Enter/Esc pressed, treat as save/cancel. - if(e.charOrCode == keys.ESCAPE){ - event.stop(e); - this.cancel(true); // sets editing=false which short-circuits _onBlur processing - }else if(e.charOrCode == keys.ENTER && e.target.tagName == "INPUT"){ - event.stop(e); - this._onChange(); // fire _onBlur and then save - } - - // _onBlur will handle TAB automatically by allowing - // the TAB to change focus before we mess with the DOM: #6227 - // Expounding by request: - // The current focus is on the edit widget input field. - // save() will hide and destroy this widget. - // We want the focus to jump from the currently hidden - // displayNode, but since it's hidden, it's impossible to - // unhide it, focus it, and then have the browser focus - // away from it to the next focusable element since each - // of these events is asynchronous and the focus-to-next-element - // is already queued. - // So we allow the browser time to unqueue the move-focus event - // before we do all the hide/show stuff. - } - }, - - _onBlur: function(){ - // summary: - // Called when focus moves outside the editor - // tags: - // private - - 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(){ - // summary: - // Called when the underlying widget fires an onChange event, - // such as when the user selects a value from the drop down list of a ComboBox, - // which means that the user has finished entering the value and we should save. - // tags: - // private - - if(this.inlineEditBox.autoSave && this.inlineEditBox.editing && this.enableSave()){ - fm.focus(this.inlineEditBox.displayNode); // fires _onBlur which will save the formatted value - } - }, - - enableSave: function(){ - // summary: - // User overridable function returning a Boolean to indicate - // if the Save button should be enabled or not - usually due to invalid conditions - // tags: - // extension - return ( - this.editWidget.isValid - ? this.editWidget.isValid() - : true - ); - }, - - focus: function(){ - // summary: - // Focus the edit widget. - // tags: - // protected - - this.editWidget.focus(); - setTimeout(lang.hitch(this, function(){ - if(this.editWidget.focusNode && this.editWidget.focusNode.tagName == "INPUT"){ - _TextBoxMixin.selectInputText(this.editWidget.focusNode); - } - }), 0); - } -}); - - -var InlineEditBox = declare("dijit.InlineEditBox", _Widget, { - // summary: - // An element with in-line edit capabilities - // - // description: - // Behavior for an existing node (`<p>`, `<div>`, `<span>`, etc.) so that - // when you click it, an editor shows up in place of the original - // text. Optionally, Save and Cancel button are displayed below the edit widget. - // When Save is clicked, the text is pulled from the edit - // widget and redisplayed and the edit widget is again hidden. - // By default a plain Textarea widget is used as the editor (or for - // inline values a TextBox), but you can specify an editor such as - // dijit.Editor (for editing HTML) or a Slider (for adjusting a number). - // An edit widget must support the following API to be used: - // - displayedValue or value as initialization parameter, - // and available through set('displayedValue') / set('value') - // - void focus() - // - DOM-node focusNode = node containing editable text - - // editing: [readonly] Boolean - // Is the node currently in edit mode? - editing: false, - - // autoSave: Boolean - // Changing the value automatically saves it; don't have to push save button - // (and save button isn't even displayed) - autoSave: true, - - // buttonSave: String - // Save button label - buttonSave: "", - - // buttonCancel: String - // Cancel button label - buttonCancel: "", - - // renderAsHtml: Boolean - // Set this to true if the specified Editor's value should be interpreted as HTML - // rather than plain text (ex: `dijit.Editor`) - renderAsHtml: false, - - // editor: String|Function - // Class name (or reference to the Class) for Editor widget - editor: TextBox, - - // editorWrapper: String|Function - // Class name (or reference to the Class) for widget that wraps the editor widget, displaying save/cancel - // buttons. - editorWrapper: InlineEditor, - - // editorParams: Object - // 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. - // tags: - // callback - }, - - onCancel: function(){ - // summary: - // Set this handler to be notified when editing is cancelled. - // tags: - // callback - }, - - // width: String - // Width of editor. By default it's width=100% (ie, block mode). - width: "100%", - - // value: String - // The display value of the widget in read-only mode - value: "", - - // noValueIndicator: [const] String - // The text that gets displayed when there is no value (so that the user has a place to click to edit) - noValueIndicator: has("ie") <= 6 ? // font-family needed on IE6 but it messes up IE8 - "<span style='font-family: wingdings; text-decoration: underline;'>    ✍    </span>" : - "<span style='text-decoration: underline;'>    ✍    </span>", // //   ==   - - constructor: function(){ - // summary: - // Sets up private arrays etc. - // tags: - // private - this.editorParams = {}; - }, - - postMixInProperties: function(){ - this.inherited(arguments); - - // save pointer to original source node, since Widget nulls-out srcNodeRef - this.displayNode = this.srcNodeRef; - - // connect handlers to the display node - var events = { - ondijitclick: "_onClick", - onmouseover: "_onMouseOver", - onmouseout: "_onMouseOut", - onfocus: "_onMouseOver", - onblur: "_onMouseOut" - }; - for(var name in events){ - this.connect(this.displayNode, name, events[name]); - } - this.displayNode.setAttribute("role", "button"); - if(!this.displayNode.getAttribute("tabIndex")){ - this.displayNode.setAttribute("tabIndex", 0); - } - - if(!this.value && !("value" in this.params)){ // "" is a good value if specified directly so check params){ - this.value = lang.trim(this.renderAsHtml ? this.displayNode.innerHTML : - (this.displayNode.innerText||this.displayNode.textContent||"")); - } - if(!this.value){ - this.displayNode.innerHTML = this.noValueIndicator; - } - - domClass.add(this.displayNode, 'dijitInlineEditBoxDisplayMode'); - }, - - setDisabled: function(/*Boolean*/ disabled){ - // summary: - // Deprecated. Use set('disabled', ...) instead. - // tags: - // deprecated - kernel.deprecated("dijit.InlineEditBox.setDisabled() is deprecated. Use set('disabled', bool) instead.", "", "2.0"); - this.set('disabled', disabled); - }, - - _setDisabledAttr: function(/*Boolean*/ disabled){ - // summary: - // Hook to make set("disabled", ...) work. - // Set disabled state of widget. - this.domNode.setAttribute("aria-disabled", disabled); - if(disabled){ - this.displayNode.removeAttribute("tabIndex"); - }else{ - this.displayNode.setAttribute("tabIndex", 0); - } - domClass.toggle(this.displayNode, "dijitInlineEditBoxDisplayModeDisabled", disabled); - this._set("disabled", disabled); - }, - - _onMouseOver: function(){ - // summary: - // Handler for onmouseover and onfocus event. - // tags: - // private - if(!this.disabled){ - domClass.add(this.displayNode, "dijitInlineEditBoxDisplayModeHover"); - } - }, - - _onMouseOut: function(){ - // summary: - // Handler for onmouseout and onblur event. - // tags: - // private - domClass.remove(this.displayNode, "dijitInlineEditBoxDisplayModeHover"); - }, - - _onClick: function(/*Event*/ e){ - // summary: - // Handler for onclick event. - // tags: - // private - if(this.disabled){ return; } - if(e){ event.stop(e); } - this._onMouseOut(); - - // Since FF gets upset if you move a node while in an event handler for that node... - setTimeout(lang.hitch(this, "edit"), 0); - }, - - edit: function(){ - // summary: - // Display the editor widget in place of the original (read only) markup. - // tags: - // private - - if(this.disabled || this.editing){ return; } - this._set('editing', true); - - // save some display node values that can be restored later - this._savedPosition = domStyle.get(this.displayNode, "position") || "static"; - this._savedOpacity = domStyle.get(this.displayNode, "opacity") || "1"; - this._savedTabIndex = domAttr.get(this.displayNode, "tabIndex") || "0"; - - if(this.wrapperWidget){ - var ew = this.wrapperWidget.editWidget; - ew.set("displayedValue" in ew ? "displayedValue" : "value", this.value); - }else{ - // Placeholder for edit widget - // Put place holder (and eventually editWidget) before the display node so that it's positioned correctly - // when Calendar dropdown appears, which happens automatically on focus. - var placeholder = domConstruct.create("span", null, this.domNode, "before"); - - // Create the editor wrapper (the thing that holds the editor widget and the save/cancel buttons) - var ewc = typeof this.editorWrapper == "string" ? lang.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: domStyle.getComputedStyle(this.displayNode), - save: lang.hitch(this, "save"), - cancel: lang.hitch(this, "cancel"), - textDir: this.textDir - }, placeholder); - if(!this._started){ - this.startup(); - } - } - var ww = this.wrapperWidget; - - // to avoid screen jitter, we first create the editor with position:absolute, visibility:hidden, - // and then when it's finished rendering, we switch from display mode to editor - // position:absolute releases screen space allocated to the display node - // opacity:0 is the same as visibility:hidden but is still focusable - // visiblity:hidden removes focus outline - - domStyle.set(this.displayNode, { position: "absolute", opacity: "0" }); // makes display node invisible, display style used for focus-ability - domStyle.set(ww.domNode, { position: this._savedPosition, visibility: "visible", opacity: "1" }); - domAttr.set(this.displayNode, "tabIndex", "-1"); // needed by WebKit for TAB from editor to skip displayNode - - // Replace the display widget with edit widget, leaving them both displayed for a brief time so that - // focus can be shifted without incident. (browser may needs some time to render the editor.) - setTimeout(lang.hitch(ww, function(){ - this.focus(); // both nodes are showing, so we can switch focus safely - this._resetValue = this.getValue(); - }), 0); - }, - - _onBlur: function(){ - // summary: - // Called when focus moves outside the InlineEditBox. - // Performs garbage collection. - // tags: - // private - - this.inherited(arguments); - if(!this.editing){ - /* causes IE focus problems, see TooltipDialog_a11y.html... - setTimeout(lang.hitch(this, function(){ - if(this.wrapperWidget){ - this.wrapperWidget.destroy(); - delete this.wrapperWidget; - } - }), 0); - */ - } - }, - - destroy: function(){ - if(this.wrapperWidget && !this.wrapperWidget._destroyed){ - this.wrapperWidget.destroy(); - delete this.wrapperWidget; - } - this.inherited(arguments); - }, - - _showText: function(/*Boolean*/ focus){ - // summary: - // Revert to display mode, and optionally focus on display node - // tags: - // private - - var ww = this.wrapperWidget; - domStyle.set(ww.domNode, { position: "absolute", visibility: "hidden", opacity: "0" }); // hide the editor from mouse/keyboard events - domStyle.set(this.displayNode, { position: this._savedPosition, opacity: this._savedOpacity }); // make the original text visible - domAttr.set(this.displayNode, "tabIndex", this._savedTabIndex); - if(focus){ - fm.focus(this.displayNode); - } - }, - - save: function(/*Boolean*/ focus){ - // summary: - // Save the contents of the editor and revert to display mode. - // focus: Boolean - // Focus on the display mode text - // tags: - // private - - if(this.disabled || !this.editing){ return; } - this._set('editing', false); - - var ww = this.wrapperWidget; - var value = ww.getValue(); - this.set('value', value); // display changed, formatted value - - this._showText(focus); // set focus as needed - }, - - setValue: function(/*String*/ val){ - // summary: - // Deprecated. Use set('value', ...) instead. - // tags: - // deprecated - kernel.deprecated("dijit.InlineEditBox.setValue() is deprecated. Use set('value', ...) instead.", "", "2.0"); - return this.set("value", val); - }, - - _setValueAttr: function(/*String*/ val){ - // summary: - // Hook to make set("value", ...) work. - // Inserts specified HTML value into this node, or an "input needed" character if node is blank. - - val = lang.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(lang.hitch(this, "onChange", val), 0); // setTimeout prevents browser freeze for long-running event handlers - } - // contextual (auto) text direction depends on the text value - if(this.textDir == "auto"){ - this.applyTextDir(this.displayNode, this.displayNode.innerText); - } - }, - - getValue: function(){ - // summary: - // Deprecated. Use get('value') instead. - // tags: - // deprecated - kernel.deprecated("dijit.InlineEditBox.getValue() is deprecated. Use get('value') instead.", "", "2.0"); - return this.get("value"); - }, - - cancel: function(/*Boolean*/ focus){ - // summary: - // Revert to display mode, discarding any changes made in the editor - // tags: - // private - - if(this.disabled || !this.editing){ return; } - this._set('editing', false); - - // tell the world that we have no changes - setTimeout(lang.hitch(this, "onCancel"), 0); // setTimeout prevents browser freeze for long-running event handlers - - this._showText(focus); - }, - _setTextDirAttr: function(/*String*/ textDir){ - // summary: - // Setter for textDir. - // description: - // Users shouldn't call this function; they should be calling - // set('textDir', value) - // tags: - // private - if(!this._created || this.textDir != textDir){ - this._set("textDir", textDir); - this.applyTextDir(this.displayNode, this.displayNode.innerText); - this.displayNode.align = this.dir == "rtl" ? "right" : "left"; //fix the text alignment - } - } -}); - -InlineEditBox._InlineEditor = InlineEditor; // for monkey patching - -return InlineEditBox; -}); -}, -'dojo/selector/acme':function(){ -define("dojo/selector/acme", ["../_base/kernel", "../has", "../dom", "../_base/sniff", "../_base/array", "../_base/lang", "../_base/window"], function(dojo, has, dom){ - // module: - // dojo/selector/acme - // summary: - // This module defines the Acme selector engine - -/* - acme architectural overview: - - acme is a relatively full-featured CSS3 query library. It is - designed to take any valid CSS3 selector and return the nodes matching - the selector. To do this quickly, it processes queries in several - steps, applying caching where profitable. - - The steps (roughly in reverse order of the way they appear in the code): - 1.) check to see if we already have a "query dispatcher" - - if so, use that with the given parameterization. Skip to step 4. - 2.) attempt to determine which branch to dispatch the query to: - - JS (optimized DOM iteration) - - native (FF3.1+, Safari 3.1+, IE 8+) - 3.) tokenize and convert to executable "query dispatcher" - - this is where the lion's share of the complexity in the - system lies. In the DOM version, the query dispatcher is - assembled as a chain of "yes/no" test functions pertaining to - a section of a simple query statement (".blah:nth-child(odd)" - but not "div div", which is 2 simple statements). Individual - statement dispatchers are cached (to prevent re-definition) - as are entire dispatch chains (to make re-execution of the - same query fast) - 4.) the resulting query dispatcher is called in the passed scope - (by default the top-level document) - - for DOM queries, this results in a recursive, top-down - evaluation of nodes based on each simple query section - - for native implementations, this may mean working around spec - bugs. So be it. - 5.) matched nodes are pruned to ensure they are unique (if necessary) -*/ - - - //////////////////////////////////////////////////////////////////////// - // Toolkit aliases - //////////////////////////////////////////////////////////////////////// - - // if you are extracting acme 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 - var trim = dojo.trim; - var each = dojo.forEach; - // d.isIE; // float - // d.isSafari; // float - // d.isOpera; // float - // d.isWebKit; // float - // d.doc ; // document element - - var getDoc = function(){ return dojo.doc; }; - // NOTE(alex): the spec is idiotic. CSS queries should ALWAYS be case-sensitive, but nooooooo - var cssCaseBug = ((dojo.isWebKit||dojo.isMozilla) && ((getDoc().compatMode) == "BackCompat")); - - //////////////////////////////////////////////////////////////////////// - // Global utilities - //////////////////////////////////////////////////////////////////////// - - - var specials = ">~+"; - - // global thunk to determine whether we should treat the current query as - // case sensitive or not. This switch is flipped by the query evaluator - // based on the document passed as the context to search. - var caseSensitive = false; - - // how high? - var yesman = function(){ return true; }; - - //////////////////////////////////////////////////////////////////////// - // Tokenizer - //////////////////////////////////////////////////////////////////////// - - var getQueryParts = function(query){ - // summary: - // state machine for query tokenization - // description: - // instead of using a brittle and slow regex-based CSS parser, - // acme implements an AST-style query representation. This - // representation is only generated once per query. For example, - // 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) 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: - // this code is designed to run fast and compress well. Sacrifices - // 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 - // open and run them frequently. Knowing is half the battle ;-) - if(specials.indexOf(query.slice(-1)) >= 0){ - // if we end with a ">", "+", or "~", that means we're implicitly - // searching all children, so make it explicit - query += " * " - }else{ - // if you have not provided a terminator, one will be provided for - // you... - query += " "; - } - - var ts = function(/*Integer*/ s, /*Integer*/ e){ - // 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 - return trim(query.slice(s, e)); - }; - - // the overall data graph of the full query, as represented by queryPart objects - var queryParts = []; - - - // state keeping vars - var inBrackets = -1, inParens = -1, inMatchFor = -1, - inPseudo = -1, inClass = -1, inId = -1, inTag = -1, - lc = "", cc = "", pStart; - - // iteration vars - var x = 0, // index in the query - ql = query.length, - currentPart = null, // data structure representing the entire clause - _cp = null; // the current pseudo or attr matcher - - // 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 - // bracket expression - // type: - // if there's an operator in a bracket expression, this is - // used to keep track of it - // value: - // the internals of parenthetical expression for a pseudo. for - // :nth-child(2n+1), value might be "2n+1" - - var endTag = function(){ - // called when the tokenizer hits the end of a particular tag name. - // Re-sets state variables for tag matching and sets up the matcher - // to handle the next type of token (tag or operator). - if(inTag >= 0){ - var tv = (inTag == x) ? null : ts(inTag, x); // .toLowerCase(); - currentPart[ (specials.indexOf(tv) < 0) ? "tag" : "oper" ] = tv; - inTag = -1; - } - }; - - var endId = function(){ - // called when the tokenizer might be at the end of an ID portion of a match - if(inId >= 0){ - currentPart.id = ts(inId, x).replace(/\\/g, ""); - inId = -1; - } - }; - - var endClass = function(){ - // called when the tokenizer might be at the end of a class name - // match. CSS allows for multiple classes, so we augment the - // current item with another class in its list - if(inClass >= 0){ - currentPart.classes.push(ts(inClass + 1, x).replace(/\\/g, "")); - inClass = -1; - } - }; - - var endAll = function(){ - // at the end of a simple fragment, so wall off the matches - endId(); - endTag(); - endClass(); - }; - - var endPart = function(){ - endAll(); - if(inPseudo >= 0){ - currentPart.pseudos.push({ name: ts(inPseudo + 1, x) }); - } - // hint to the selector engine to tell it whether or not it - // 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.classes.length ); - - currentPart.oquery = currentPart.query = ts(pStart, x); // save the full expression as a string - - - // otag/tag are hints to suggest to the system whether or not - // it's an operator or a tag. We save a copy of otag since the - // tag name is cast to upper-case in regular HTML matches. The - // system has a global switch to figure out if the current - // expression needs to be case sensitive or not and it will use - // otag or tag accordingly - currentPart.otag = currentPart.tag = (currentPart["oper"]) ? null : (currentPart.tag || "*"); - - if(currentPart.tag){ - // if we're in a case-insensitive HTML doc, we likely want - // the toUpperCase when matching on element.tagName. If we - // do it here, we can skip the string op per node - // comparison - currentPart.tag = currentPart.tag.toUpperCase(); - } - - // add the part to the list - if(queryParts.length && (queryParts[queryParts.length-1].oper)){ - // operators are always infix, so we remove them from the - // list and attach them to the next match. The evaluator is - // responsible for sorting out how to handle them. - currentPart.infixOper = queryParts.pop(); - currentPart.query = currentPart.infixOper.query + " " + currentPart.query; - /* - console.debug( "swapping out the infix", - currentPart.infixOper, - "and attaching it to", - currentPart); - */ - } - queryParts.push(currentPart); - - currentPart = null; - }; - - // 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 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(!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; - // rules describe full CSS sub-expressions, like: - // #someId - // .className:first-child - // but not: - // thinger > div.howdy[type=thinger] - // the indidual components of the previous query would be - // split into 3 parts that would be represented a structure - // like: - // [ - // { - // query: "thinger", - // tag: "thinger", - // }, - // { - // query: "div.howdy[type=thinger]", - // classes: ["howdy"], - // infixOper: { - // query: ">", - // oper: ">", - // } - // }, - // ] - currentPart = { - query: null, // the full text of the part's rule - pseudos: [], // CSS supports multiple pseud-class matches in a single rule - attrs: [], // CSS supports multi-attribute match, so we need an array - classes: [], // class matches may be additive, e.g.: .thinger.blah.howdy - tag: null, // only one tag... - oper: null, // ...or operator per component. Note that these wind up being exclusive. - id: null, // the id component of a rule - getTag: function(){ - return (caseSensitive) ? this.otag : this.tag; - } - }; - - // if we don't have a part, we assume we're going to start at - // 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; - } - - if(inBrackets >= 0){ - // look for a the close first - 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 existence match in the - // form of [someAttributeName] - _cp.attr = ts(inBrackets+1, x); - }else{ - // we had an attribute already, so we know that we're - // matching some sort of value, as in [attrName=howdy] - _cp.matchFor = ts((inMatchFor||inBrackets+1), x); - } - var cmf = _cp.matchFor; - if(cmf){ - // try to strip quotes from the matchFor value. We want - // [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. - 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. - var addToCc = ("|~^$*".indexOf(lc) >=0 ) ? lc : ""; - _cp.type = addToCc+cc; - _cp.attr = ts(inBrackets+1, x-addToCc.length); - inMatchFor = x+1; - } - // 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 pseudo-selector rule like - // :nth-child(1) - if(cc == ")"){ - if(inPseudo >= 0){ - _cp.value = ts(inParens+1, x); - } - inPseudo = inParens = -1; - } - }else if(cc == "#"){ - // start of an ID match - endAll(); - inId = x+1; - }else if(cc == "."){ - // start of a class match - endAll(); - inClass = x; - }else if(cc == ":"){ - // start of a pseudo-selector match - endAll(); - inPseudo = x; - }else if(cc == "["){ - // start of an attribute match. - endAll(); - inBrackets = x; - // provide a new structure for the attribute match to fill-in - _cp = { - /*===== - attr: null, type: null, matchFor: null - =====*/ - }; - }else if(cc == "("){ - // we really only care if we've entered a parenthetical - // 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), - value: null - }; - currentPart.pseudos.push(_cp); - } - inParens = x; - }else if( - (cc == " ") && - // if it's a space char and the last char is too, consume the - // current one without doing more work - (lc != cc) - ){ - endPart(); - } - } - return queryParts; - }; - - - //////////////////////////////////////////////////////////////////////// - // DOM query infrastructure - //////////////////////////////////////////////////////////////////////// - - var agree = function(first, second){ - // 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 passed, the other is used exclusively. - if(!first){ return second; } - if(!second){ return first; } - - return function(){ - return first.apply(window, arguments) && second.apply(window, arguments); - } - }; - - var getArr = function(i, arr){ - // helps us avoid array alloc when we don't need it - var r = arr||[]; // FIXME: should this be 'new d._NodeListCtor()' ? - if(i){ r.push(i); } - return r; - }; - - var _isElement = function(n){ return (1 == n.nodeType); }; - - // FIXME: need to coalesce _getAttr with defaultGetter - var blank = ""; - var _getAttr = function(elem, attr){ - if(!elem){ return blank; } - if(attr == "class"){ - return elem.className || blank; - } - if(attr == "for"){ - return elem.htmlFor || blank; - } - if(attr == "style"){ - return elem.style.cssText || blank; - } - return (caseSensitive ? elem.getAttribute(attr) : elem.getAttribute(attr, 2)) || blank; - }; - - var attrs = { - "*=": function(attr, value){ - return function(elem){ - // E[foo*="bar"] - // an E element whose "foo" attribute value contains - // the substring "bar" - return (_getAttr(elem, attr).indexOf(value)>=0); - } - }, - "^=": function(attr, value){ - // E[foo^="bar"] - // an E element whose "foo" attribute value begins exactly - // with the string "bar" - return function(elem){ - return (_getAttr(elem, attr).indexOf(value)==0); - } - }, - "$=": function(attr, value){ - // E[foo$="bar"] - // an E element whose "foo" attribute value ends exactly - // with the string "bar" - return function(elem){ - var ea = " "+_getAttr(elem, attr); - return (ea.lastIndexOf(value)==(ea.length-value.length)); - } - }, - "~=": function(attr, value){ - // 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" - - // return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]"; - var tval = " "+value+" "; - return function(elem){ - var ea = " "+_getAttr(elem, attr)+" "; - return (ea.indexOf(tval)>=0); - } - }, - "|=": function(attr, value){ - // E[hreflang|="en"] - // an E element whose "hreflang" attribute has a - // hyphen-separated list of values beginning (from the - // left) with "en" - var valueDash = value+"-"; - return function(elem){ - var ea = _getAttr(elem, attr); - return ( - (ea == value) || - (ea.indexOf(valueDash)==0) - ); - } - }, - "=": function(attr, value){ - return function(elem){ - return (_getAttr(elem, attr) == value); - } - } - }; - - // avoid testing for node type if we can. Defining this in the negative - // here to avoid negation in the fast path. - var _noNES = (typeof getDoc().firstChild.nextElementSibling == "undefined"); - var _ns = !_noNES ? "nextElementSibling" : "nextSibling"; - var _ps = !_noNES ? "previousElementSibling" : "previousSibling"; - var _simpleNodeTest = (_noNES ? _isElement : yesman); - - var _lookLeft = function(node){ - // look left - while(node = node[_ps]){ - if(_simpleNodeTest(node)){ return false; } - } - return true; - }; - - var _lookRight = function(node){ - // look right - while(node = node[_ns]){ - if(_simpleNodeTest(node)){ return false; } - } - return true; - }; - - var getNodeIndex = function(node){ - var root = node.parentNode; - var i = 0, - tret = root.children || root.childNodes, - ci = (node["_i"]||-1), - cl = (root["_l"]||-1); - - if(!tret){ return -1; } - var l = tret.length; - - // 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 ){ - // if it's legit, tag and release - return ci; - } - - // else re-key things - root["_l"] = l; - ci = -1; - for(var te = root["firstElementChild"]||root["firstChild"]; te; te = te[_ns]){ - if(_simpleNodeTest(te)){ - te["_i"] = ++i; - if(node === te){ - // NOTE: - // 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 - // parent. We may revisit this at a later time, but for - // now we just want to get the right answer more often - // than not. - ci = i; - } - } - } - return ci; - }; - - var isEven = function(elem){ - return !((getNodeIndex(elem)) % 2); - }; - - var isOdd = function(elem){ - return ((getNodeIndex(elem)) % 2); - }; - - var pseudos = { - "checked": function(name, condition){ - return function(elem){ - return !!("checked" in elem ? elem.checked : elem.selected); - } - }, - "first-child": function(){ return _lookLeft; }, - "last-child": function(){ return _lookRight; }, - "only-child": function(name, condition){ - return function(node){ - return _lookLeft(node) && _lookRight(node); - }; - }, - "empty": function(name, condition){ - return function(elem){ - // DomQuery and jQuery get this wrong, oddly enough. - // The CSS 3 selectors spec is pretty explicit about it, too. - var cn = elem.childNodes; - var cnl = elem.childNodes.length; - // if(!cnl){ return true; } - for(var x=cnl-1; x >= 0; x--){ - var nt = cn[x].nodeType; - if((nt === 1)||(nt == 3)){ return false; } - } - return true; - } - }, - "contains": function(name, condition){ - var cz = condition.charAt(0); - if( cz == '"' || cz == "'" ){ //remove quote - condition = condition.slice(1, -1); - } - return function(elem){ - return (elem.innerHTML.indexOf(condition) >= 0); - } - }, - "not": function(name, condition){ - var p = getQueryParts(condition)[0]; - var ignores = { el: 1 }; - if(p.tag != "*"){ - ignores.tag = 1; - } - if(!p.classes.length){ - ignores.classes = 1; - } - var ntf = getSimpleFilterFunc(p, ignores); - return function(elem){ - return (!ntf(elem)); - } - }, - "nth-child": function(name, condition){ - var pi = parseInt; - // avoid re-defining function objects if we can - if(condition == "odd"){ - return isOdd; - }else if(condition == "even"){ - return isEven; - } - // FIXME: can we shorten this? - if(condition.indexOf("n") != -1){ - var tparts = condition.split("n", 2); - var pred = tparts[0] ? ((tparts[0] == '-') ? -1 : pi(tparts[0])) : 1; - var idx = tparts[1] ? pi(tparts[1]) : 0; - var lb = 0, ub = -1; - if(pred > 0){ - if(idx < 0){ - idx = (idx % pred) && (pred + (idx % pred)); - }else if(idx>0){ - if(idx >= pred){ - lb = idx - idx % pred; - } - idx = idx % pred; - } - }else if(pred<0){ - pred *= -1; - // idx has to be greater than 0 when pred is negative; - // shall we throw an error here? - if(idx > 0){ - ub = idx; - idx = idx % pred; - } - } - if(pred > 0){ - return function(elem){ - var i = getNodeIndex(elem); - return (i>=lb) && (ub<0 || i<=ub) && ((i % pred) == idx); - } - }else{ - condition = idx; - } - } - var ncount = pi(condition); - return function(elem){ - return (getNodeIndex(elem) == ncount); - } - } - }; - - var defaultGetter = (dojo.isIE && (dojo.isIE < 9 || dojo.isQuirks)) ? function(cond){ - var clc = cond.toLowerCase(); - if(clc == "class"){ cond = "className"; } - return function(elem){ - return (caseSensitive ? elem.getAttribute(cond) : elem[cond]||elem[clc]); - } - } : function(cond){ - return function(elem){ - return (elem && elem.getAttribute && elem.hasAttribute(cond)); - } - }; - - var getSimpleFilterFunc = function(query, ignores){ - // generates a node tester function based on the passed query part. The - // 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 - // factors such as how the nodes to test were fetched in the first - // place - if(!query){ return yesman; } - ignores = ignores||{}; - - var ff = null; - - if(!("el" in ignores)){ - ff = agree(ff, _isElement); - } - - if(!("tag" in ignores)){ - if(query.tag != "*"){ - ff = agree(ff, function(elem){ - return (elem && (elem.tagName == query.getTag())); - }); - } - } - - if(!("classes" in ignores)){ - each(query.classes, function(cname, idx, arr){ - // get the class name - /* - var isWildcard = cname.charAt(cname.length-1) == "*"; - if(isWildcard){ - cname = cname.substr(0, cname.length-1); - } - // 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|$)"); - ff = agree(ff, function(elem){ - return re.test(elem.className); - }); - ff.count = idx; - }); - } - - if(!("pseudos" in ignores)){ - each(query.pseudos, function(pseudo){ - var pn = pseudo.name; - if(pseudos[pn]){ - ff = agree(ff, pseudos[pn](pn, pseudo.value)); - } - }); - } - - if(!("attrs" in ignores)){ - each(query.attrs, function(attr){ - var matcher; - var a = attr.attr; - // type, attr, matchFor - if(attr.type && attrs[attr.type]){ - matcher = attrs[attr.type](a, attr.matchFor); - }else if(a.length){ - matcher = defaultGetter(a); - } - if(matcher){ - ff = agree(ff, matcher); - } - }); - } - - if(!("id" in ignores)){ - if(query.id){ - ff = agree(ff, function(elem){ - return (!!elem && (elem.id == query.id)); - }); - } - } - - if(!ff){ - if(!("default" in ignores)){ - ff = yesman; - } - } - return ff; - }; - - var _nextSibling = function(filterFunc){ - return function(node, ret, bag){ - while(node = node[_ns]){ - if(_noNES && (!_isElement(node))){ continue; } - if( - (!bag || _isUnique(node, bag)) && - filterFunc(node) - ){ - ret.push(node); - } - break; - } - return ret; - } - }; - - var _nextSiblings = function(filterFunc){ - return function(root, ret, bag){ - var te = root[_ns]; - while(te){ - if(_simpleNodeTest(te)){ - if(bag && !_isUnique(te, bag)){ - break; - } - if(filterFunc(te)){ - ret.push(te); - } - } - te = te[_ns]; - } - return ret; - } - }; - - // get an array of child *elements*, skipping text and comment nodes - var _childElements = function(filterFunc){ - filterFunc = filterFunc||yesman; - return function(root, ret, bag){ - // get an array of child elements, skipping text and comment nodes - var te, x = 0, tret = root.children || root.childNodes; - while(te = tret[x++]){ - if( - _simpleNodeTest(te) && - (!bag || _isUnique(te, bag)) && - (filterFunc(te, x)) - ){ - ret.push(te); - } - } - return ret; - }; - }; - - /* - // thanks, Dean! - var itemIsAfterRoot = d.isIE ? function(item, root){ - return (item.sourceIndex > root.sourceIndex); - } : function(item, root){ - return (item.compareDocumentPosition(root) == 2); - }; - */ - - // test to see if node is below root - var _isDescendant = function(node, root){ - var pn = node.parentNode; - while(pn){ - if(pn == root){ - break; - } - pn = pn.parentNode; - } - return !!pn; - }; - - var _getElementsFuncCache = {}; - - var getElementsFunc = function(query){ - var retFunc = _getElementsFuncCache[query.query]; - // if we've got a cached dispatcher, just use that - if(retFunc){ return retFunc; } - // else, generate a new on - - // NOTE: - // this function returns a function that searches for nodes and - // 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 - // 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 - // dispatchers will be called every time. The logic of generating - // efficient dispatchers looks like this in pseudo code: - // - // # if it's a purely descendant query (no ">", "+", or "~" modifiers) - // if infixOperator == " ": - // if only(id): - // return def(root): - // return d.byId(id, root); - // - // elif id: - // return def(root): - // return filter(d.byId(id, root)); - // - // elif cssClass && getElementsByClassName: - // return def(root): - // return filter(root.getElementsByClassName(cssClass)); - // - // elif only(tag): - // return def(root): - // return root.getElementsByTagName(tagName); - // - // else: - // # search by tag name, then filter - // return def(root): - // return filter(root.getElementsByTagName(tagName||"*")); - // - // elif infixOperator == ">": - // # search direct children - // return def(root): - // return filter(root.children); - // - // elif infixOperator == "+": - // # search next sibling - // return def(root): - // return filter(root.nextElementSibling); - // - // elif infixOperator == "~": - // # search rightward siblings - // return def(root): - // return filter(nextSiblings(root)); - - var io = query.infixOper; - var oper = (io ? io.oper : ""); - // the default filter func which tests for all conditions in the query - // part. This is potentially inefficient, so some optimized paths may - // re-define it to test fewer things. - var filterFunc = getSimpleFilterFunc(query, { el: 1 }); - var qt = query.tag; - var wildcardTag = ("*" == qt); - var ecs = getDoc()["getElementsByClassName"]; - - if(!oper){ - // if there's no infix operator, then it's a descendant query. ID - // and "elements by class name" variants can be accelerated so we - // call them out explicitly: - if(query.id){ - // 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 : - getSimpleFilterFunc(query, { el: 1, id: 1 }); - - retFunc = function(root, arr){ - var te = dom.byId(query.id, (root.ownerDocument||root)); - if(!te || !filterFunc(te)){ return; } - if(9 == root.nodeType){ // if root's a doc, we just return directly - return getArr(te, arr); - }else{ // otherwise check ancestry - if(_isDescendant(te, root)){ - return getArr(te, arr); - } - } - } - }else if( - ecs && - // isAlien check. Workaround for Prototype.js being totally evil/dumb. - /\{\s*\[native code\]\s*\}/.test(String(ecs)) && - query.classes.length && - !cssCaseBug - ){ - // it's a class-based query and we've got a fast way to run it. - - // ignore class and ID filters since we will have handled both - filterFunc = getSimpleFilterFunc(query, { el: 1, classes: 1, id: 1 }); - var classesString = query.classes.join(" "); - retFunc = function(root, arr, bag){ - var ret = getArr(0, arr), te, x=0; - var tret = root.getElementsByClassName(classesString); - while((te = tret[x++])){ - if(filterFunc(te, root) && _isUnique(te, bag)){ - ret.push(te); - } - } - return ret; - }; - - }else if(!wildcardTag && !query.loops){ - // it's tag only. Fast-path it. - retFunc = function(root, arr, bag){ - var ret = getArr(0, arr), te, x=0; - var tret = root.getElementsByTagName(query.getTag()); - while((te = tret[x++])){ - if(_isUnique(te, bag)){ - ret.push(te); - } - } - return ret; - }; - }else{ - // the common case: - // a descendant selector without a fast path. By now it's got - // to have a tag selector, even if it's just "*" so we query - // by that and filter - filterFunc = getSimpleFilterFunc(query, { el: 1, tag: 1, id: 1 }); - retFunc = function(root, arr, bag){ - var ret = getArr(0, arr), te, x=0; - // we use getTag() to avoid case sensitivity issues - var tret = root.getElementsByTagName(query.getTag()); - while((te = tret[x++])){ - if(filterFunc(te, root) && _isUnique(te, bag)){ - ret.push(te); - } - } - return ret; - }; - } - }else{ - // the query is scoped in some way. Instead of querying by tag we - // use some other collection to find candidate nodes - var skipFilters = { el: 1 }; - if(wildcardTag){ - skipFilters.tag = 1; - } - filterFunc = getSimpleFilterFunc(query, skipFilters); - if("+" == oper){ - retFunc = _nextSibling(filterFunc); - }else if("~" == oper){ - retFunc = _nextSiblings(filterFunc); - }else if(">" == oper){ - retFunc = _childElements(filterFunc); - } - } - // cache it and return - return _getElementsFuncCache[query.query] = retFunc; - }; - - var filterDown = function(root, queryParts){ - // NOTE: - // this is the guts of the DOM query system. It takes a list of - // parsed query parts and a root and finds children which match - // the selector represented by the parts - var candidates = getArr(root), qp, x, te, qpl = queryParts.length, bag, ret; - - for(var i = 0; i < qpl; i++){ - ret = []; - qp = queryParts[i]; - x = candidates.length - 1; - if(x > 0){ - // if we have more than one root at this level, provide a new - // hash to use for checking group membership but tell the - // system not to post-filter us since we will already have been - // gauranteed to be unique - bag = {}; - ret.nozip = true; - } - var gef = getElementsFunc(qp); - for(var j = 0; (te = candidates[j]); j++){ - // for every root, get the elements that match the descendant - // selector, adding them to the "ret" array and filtering them - // via membership in this level's bag. If there are more query - // parts, then this level's return will be used as the next - // level's candidates - gef(te, ret, bag); - } - if(!ret.length){ break; } - candidates = ret; - } - return ret; - }; - - //////////////////////////////////////////////////////////////////////// - // the query runner - //////////////////////////////////////////////////////////////////////// - - // these are the primary caches for full-query results. The query - // dispatcher functions are generated then stored here for hash lookup in - // the future - var _queryFuncCacheDOM = {}, - _queryFuncCacheQSA = {}; - - // this is the second level of spliting, from full-length queries (e.g., - // "div.foo .bar") into simple query expressions (e.g., ["div.foo", - // ".bar"]) - var getStepQueryFunc = function(query){ - var qparts = getQueryParts(trim(query)); - - // if it's trivial, avoid iteration and zipping costs - if(qparts.length == 1){ - // we optimize this case here to prevent dispatch further down the - // chain, potentially slowing things down. We could more elegantly - // handle this in filterDown(), but it's slower for simple things - // that need to be fast (e.g., "#someId"). - var tef = getElementsFunc(qparts[0]); - return function(root){ - var r = tef(root, []); - if(r){ r.nozip = true; } - return r; - } - } - - // otherwise, break it up and return a runner that iterates over the parts recursively - return function(root){ - return filterDown(root, qparts); - } - }; - - // NOTES: - // * we can't trust QSA for anything but document-rooted queries, so - // caching is split into DOM query evaluators and QSA query evaluators - // * caching query results is dirty and leak-prone (or, at a minimum, - // prone to unbounded growth). Other toolkits may go this route, but - // they totally destroy their own ability to manage their memory - // footprint. If we implement it, it should only ever be with a fixed - // total element reference # limit and an LRU-style algorithm since JS - // has no weakref support. Caching compiled query evaluators is also - // potentially problematic, but even on large documents the size of the - // query evaluators is often < 100 function objects per evaluator (and - // LRU can be applied if it's ever shown to be an issue). - // * since IE's QSA support is currently only for HTML documents and even - // then only in IE 8's "standards mode", we have to detect our dispatch - // route at query time and keep 2 separate caches. Ugg. - - // we need to determine if we think we can run a given query via - // querySelectorAll or if we'll need to fall back on DOM queries to get - // there. We need a lot of information about the environment and the query - // to make the determiniation (e.g. does it support QSA, does the query in - // question work in the native QSA impl, etc.). - var nua = navigator.userAgent; - // some versions of Safari provided QSA, but it was buggy and crash-prone. - // We need te detect the right "internal" webkit version to make this work. - var wk = "WebKit/"; - var is525 = ( - dojo.isWebKit && - (nua.indexOf(wk) > 0) && - (parseFloat(nua.split(wk)[1]) > 528) - ); - - // IE QSA queries may incorrectly include comment nodes, so we throw the - // zipping function into "remove" comments mode instead of the normal "skip - // it" which every other QSA-clued browser enjoys - var noZip = dojo.isIE ? "commentStrip" : "nozip"; - - var qsa = "querySelectorAll"; - var qsaAvail = ( - !!getDoc()[qsa] && - // see #5832 - (!dojo.isSafari || (dojo.isSafari > 3.1) || is525 ) - ); - - //Don't bother with n+3 type of matches, IE complains if we modify those. - var infixSpaceRe = /n\+\d|([^ ])?([>~+])([^ =])?/g; - var infixSpaceFunc = function(match, pre, ch, post){ - return ch ? (pre ? pre + " " : "") + ch + (post ? " " + post : "") : /*n+3*/ match; - }; - - var getQueryFunc = function(query, forceDOM){ - //Normalize query. The CSS3 selectors spec allows for omitting spaces around - //infix operators, >, ~ and + - //Do the work here since detection for spaces is used as a simple "not use QSA" - //test below. - query = query.replace(infixSpaceRe, infixSpaceFunc); - - if(qsaAvail){ - // if we've got a cached variant and we think we can do it, run it! - var qsaCached = _queryFuncCacheQSA[query]; - if(qsaCached && !forceDOM){ return qsaCached; } - } - - // else if we've got a DOM cached variant, assume that we already know - // all we need to and use it - var domCached = _queryFuncCacheDOM[query]; - if(domCached){ return domCached; } - - // 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. - - var qcz = query.charAt(0); - var nospace = (-1 == query.indexOf(" ")); - - // byId searches are wicked fast compared to QSA, even when filtering - // is required - if( (query.indexOf("#") >= 0) && (nospace) ){ - forceDOM = true; - } - - 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) && - // IE's QSA impl sucks on pseudos - (!dojo.isIE || (query.indexOf(":") == -1)) && - - (!(cssCaseBug && (query.indexOf(".") >= 0))) && - - // FIXME: - // need to tighten up browser rules on ":contains" and "|=" to - // figure out which aren't good - // Latest webkit (around 531.21.8) does not seem to do well with :checked on option - // 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("|=") == -1) // some browsers don't grok it - ); - - // 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 - // trivially rewrite the query to the form "#synid > .thinger" to - // use the QSA branch - - - if(useQSA){ - var tq = (specials.indexOf(query.charAt(query.length-1)) >= 0) ? - (query + " *") : query; - return _queryFuncCacheQSA[query] = function(root){ - try{ - // the QSA system contains an egregious spec bug which - // limits us, effectively, to only running QSA queries over - // entire documents. See: - // http://ejohn.org/blog/thoughts-on-queryselectorall/ - // despite this, we can also handle QSA runs on simple - // selectors, but we don't want detection to be expensive - // so we're just checking for the presence of a space char - // right now. Not elegant, but it's cheaper than running - // the query parser when we might not need to - if(!((9 == root.nodeType) || nospace)){ throw ""; } - var r = root[qsa](tq); - // skip expensive duplication checks and just wrap in a NodeList - r[noZip] = true; - return r; - }catch(e){ - // else run the DOM branch on this query, ensuring that we - // default that way in the future - return getQueryFunc(query, true)(root); - } - } - }else{ - // DOM branch - var parts = query.split(/\s*,\s*/); - return _queryFuncCacheDOM[query] = ((parts.length < 2) ? - // if not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher - 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 - function(root){ - var pindex = 0, // avoid array alloc for every invocation - ret = [], - tp; - while((tp = parts[pindex++])){ - ret = ret.concat(getStepQueryFunc(tp)(root)); - } - return ret; - } - ); - } - }; - - var _zipIdx = 0; - - // NOTE: - // this function is Moo inspired, but our own impl to deal correctly - // with XML in IE - var _nodeUID = dojo.isIE ? function(node){ - if(caseSensitive){ - // XML docs don't have uniqueID on their nodes - return (node.getAttribute("_uid") || node.setAttribute("_uid", ++_zipIdx) || _zipIdx); - - }else{ - return node.uniqueID; - } - } : - function(node){ - return (node._uid || (node._uid = ++_zipIdx)); - }; - - // determine if a node in is unique in a "bag". In this case we don't want - // 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. - var _isUnique = function(node, bag){ - if(!bag){ return 1; } - var id = _nodeUID(node); - if(!bag[id]){ return bag[id] = 1; } - return 0; - }; - - // attempt to efficiently determine if an item in a list is a dupe, - // returning a list of "uniques", hopefully in doucment order - var _zipIdxName = "_zipIdx"; - var _zip = function(arr){ - if(arr && arr.nozip){ - return arr; - } - var ret = []; - if(!arr || !arr.length){ return ret; } - if(arr[0]){ - ret.push(arr[0]); - } - if(arr.length < 2){ return ret; } - - _zipIdx++; - - // we have to fork here for IE and XML docs because we can't set - // expandos on their nodes (apparently). *sigh* - if(dojo.isIE && caseSensitive){ - var szidx = _zipIdx+""; - arr[0].setAttribute(_zipIdxName, szidx); - for(var x = 1, te; te = arr[x]; x++){ - if(arr[x].getAttribute(_zipIdxName) != szidx){ - ret.push(te); - } - te.setAttribute(_zipIdxName, szidx); - } - }else if(dojo.isIE && arr.commentStrip){ - try{ - for(var x = 1, te; te = arr[x]; x++){ - if(_isElement(te)){ - ret.push(te); - } - } - }catch(e){ /* squelch */ } - }else{ - if(arr[0]){ arr[0][_zipIdxName] = _zipIdx; } - for(var x = 1, te; te = arr[x]; x++){ - if(arr[x][_zipIdxName] != _zipIdx){ - ret.push(te); - } - te[_zipIdxName] = _zipIdx; - } - } - return ret; - }; - - // the main executor - var query = function(/*String*/ query, /*String|DOMNode?*/ root){ - // summary: - // Returns nodes which match the given CSS3 selector, searching the - // entire document by default but optionally taking a node to scope - // the search by. Returns an array. - // description: - // dojo.query() is the swiss army knife of DOM node manipulation in - // Dojo. Much like Prototype's "$$" (bling-bling) function or JQuery's - // "$" function, dojo.query provides robust, high-performance - // CSS-based node selector support with the option of scoping searches - // to a particular sub-tree of a document. - // - // Supported Selectors: - // -------------------- - // - // acme supports a rich set of CSS3 selectors, including: - // - // * class selectors (e.g., `.foo`) - // * node type selectors like `span` - // * ` ` descendant selectors - // * `>` child element selectors - // * `#foo` style ID selectors - // * `*` universal selector - // * `~`, the preceded-by sibling selector - // * `+`, the immediately preceded-by sibling selector - // * attribute queries: - // | * `[foo]` attribute presence selector - // | * `[foo='bar']` attribute value exact match - // | * `[foo~='bar']` attribute value list item match - // | * `[foo^='bar']` attribute start match - // | * `[foo$='bar']` attribute end match - // | * `[foo*='bar']` attribute substring match - // * `:first-child`, `:last-child`, and `:only-child` positional selectors - // * `:empty` content emtpy selector - // * `:checked` pseudo selector - // * `:nth-child(n)`, `:nth-child(2n+1)` style positional calculations - // * `:nth-child(even)`, `:nth-child(odd)` positional selectors - // * `:not(...)` negation pseudo selectors - // - // Any legal combination of these selectors will work with - // `dojo.query()`, including compound selectors ("," delimited). - // Very complex and useful searches can be constructed with this - // 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 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: - // | * `:root`, `:lang()`, `:target`, `:focus` - // * all visual and state selectors: - // | * `: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 - // Strict), dojo.query() will detect this and "do the right - // thing". Case sensitivity is dependent upon the document being - // searched and not the query used. It is therefore possible to - // use case-sensitive queries on strict sub-documents (iframes, - // etc.) or XML documents while still assuming case-insensitivity - // for a host/root document. - // - // Non-selector Queries: - // --------------------- - // - // If something other than a String is passed for the query, - // `dojo.query` will return a new `dojo.NodeList` instance - // constructed from that parameter alone and all further - // processing will stop. This means that if you have a reference - // to a node or NodeList, you can quickly construct a new NodeList - // from the original by calling `dojo.query(node)` or - // `dojo.query(list)`. - // - // query: - // The CSS3 expression to match against. For details on the syntax of - // CSS3 selectors, see <http://www.w3.org/TR/css3-selectors/#selectors> - // root: - // A DOMNode (or node id) to scope the search from. Optional. - // returns: Array - // example: - // search the entire document for elements with the class "foo": - // | dojo.query(".foo"); - // these elements will match: - // | <span class="foo"></span> - // | <span class="foo bar"></span> - // | <p class="thud foo"></p> - // example: - // search the entire document for elements with the classes "foo" *and* "bar": - // | dojo.query(".foo.bar"); - // these elements will match: - // | <span class="foo bar"></span> - // while these will not: - // | <span class="foo"></span> - // | <p class="thud foo"></p> - // example: - // find `<span>` elements which are descendants of paragraphs and - // which have a "highlighted" class: - // | dojo.query("p span.highlighted"); - // the innermost span in this fragment matches: - // | <p class="foo"> - // | <span>... - // | <span class="highlighted foo bar">...</span> - // | </span> - // | </p> - // example: - // set an "odd" class on all odd table rows inside of the table - // `#tabular_data`, using the `>` (direct child) selector to avoid - // affecting any nested tables: - // | dojo.query("#tabular_data > tbody > tr:nth-child(odd)").addClass("odd"); - // example: - // remove all elements with the class "error" from the document - // and store them in a list: - // | var errors = dojo.query(".error").orphan(); - // example: - // add an onclick handler to every submit button in the document - // which causes the form to be sent via Ajax instead: - // | dojo.query("input[type='submit']").onclick(function(e){ - // | dojo.stopEvent(e); // prevent sending the form - // | var btn = e.target; - // | dojo.xhrPost({ - // | form: btn.form, - // | load: function(data){ - // | // replace the form with the response - // | var div = dojo.doc.createElement("div"); - // | dojo.place(div, btn.form, "after"); - // | div.innerHTML = data; - // | dojo.style(btn.form, "display", "none"); - // | } - // | }); - // | }); - - root = root||getDoc(); - var od = root.ownerDocument||root.documentElement; - - // throw the big case sensitivity switch - - // 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") || - (dojo.isOpera && (root.doctype || od.toString() == "[object XMLDocument]")) || - (!!od) && - (dojo.isIE ? od.xml : (root.xmlVersion || od.xmlVersion)); - - // 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. - var r = getQueryFunc(query)(root); - - // FIXME: - // need to investigate this branch WRT #8074 and #8075 - if(r && r.nozip){ - return r; - } - return _zip(r); // dojo.NodeList - }; - query.filter = function(/*Node[]*/ nodeList, /*String*/ filter, /*String|DOMNode?*/ root){ - // summary: - // function for filtering a NodeList based on a selector, optimized for simple selectors - var tmpNodeList = [], - 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; - }; - return query; -});//end defineQuery - -}, -'dojo/dnd/autoscroll':function(){ -define("dojo/dnd/autoscroll", ["../main", "../window"], function(dojo) { - // module: - // dojo/dnd/autoscroll - // summary: - // TODOC - -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){ - // summary: - // a handler for onmousemove event, which scrolls the window, if - // necesary - // e: Event - // onmousemove event - - // FIXME: needs more docs! - 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){ - // summary: - // a handler for onmousemove event, which scrolls the first avaialble - // Dom element, it falls back to dojo.dnd.autoScroll() - // e: Event - // onmousemove event - - // FIXME: needs more docs! - - var b, t, w, h, rx, ry, dx = 0, dy = 0, oldLeft, oldTop; - - for(var n = e.target; n;){ - if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){ - var s = dojo.getComputedStyle(n), - overflow = (s.overflow.toLowerCase() in dojo.dnd._validOverflow), - overflowX = (s.overflowX.toLowerCase() in dojo.dnd._validOverflow), - overflowY = (s.overflowY.toLowerCase() in dojo.dnd._validOverflow); - if(overflow || overflowX || overflowY){ - b = dojo._getContentBox(n, s); - t = dojo.position(n, true); - } - // overflow-x - if(overflow || overflowX){ - w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2); - rx = e.pageX - t.x; - if(dojo.isWebKit || dojo.isOpera){ - // 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; - } - dx = 0; - if(rx > 0 && rx < b.w){ - if(rx < w){ - dx = -w; - }else if(rx > b.w - w){ - dx = w; - } - oldLeft = n.scrollLeft; - n.scrollLeft = n.scrollLeft + dx; - } - } - // overflow-y - if(overflow || overflowY){ - //console.log(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop); - h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2); - ry = e.pageY - t.y; - if(dojo.isWebKit || dojo.isOpera){ - // 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 - ry += dojo.body().scrollTop; - } - dy = 0; - if(ry > 0 && ry < b.h){ - if(ry < h){ - dy = -h; - }else if(ry > b.h - h){ - dy = h; - } - oldTop = n.scrollTop; - n.scrollTop = n.scrollTop + dy; - } - } - if(dx || dy){ return; } - } - try{ - n = n.parentNode; - }catch(x){ - n = null; - } - } - dojo.dnd.autoScroll(e); -}; - - return dojo.dnd; -}); - -}, -'dojo/data/ItemFileWriteStore':function(){ -define("dojo/data/ItemFileWriteStore", ["../_base/lang", "../_base/declare", "../_base/array", "../_base/json", "../_base/window", - "./ItemFileReadStore", "../date/stamp" -], function(lang, declare, arrayUtil, jsonUtil, window, ItemFileReadStore, dateStamp) { - // module: - // dojo/data/ItemFileWriteStore - // summary: - // TODOC - -/*===== var ItemFileReadStore = dojo.data.ItemFileReadStore; =====*/ -return declare("dojo.data.ItemFileWriteStore", ItemFileReadStore, { - constructor: function(/* object */ keywordParameters){ - // keywordParameters: {typeMap: object) - // The structure of the typeMap object is as follows: - // { - // type0: function || object, - // type1: function || object, - // ... - // typeN: function || object - // } - // Where if it is a function, it is assumed to be an object constructor that takes the - // value of _value as the initialization parameters. It is serialized assuming object.toString() - // serialization. If it is an object, then it is assumed - // to be an object of general form: - // { - // type: function, //constructor. - // deserialize: function(value) //The function that parses the value and constructs the object defined by type appropriately. - // serialize: function(object) //The function that converts the object back into the proper file format form. - // } - - // ItemFileWriteStore extends ItemFileReadStore to implement these additional dojo.data APIs - this._features['dojo.data.api.Write'] = true; - this._features['dojo.data.api.Notification'] = true; - - // For keeping track of changes so that we can implement isDirty and revert - this._pending = { - _newItems:{}, - _modifiedItems:{}, - _deletedItems:{} - }; - - if(!this._datatypeMap['Date'].serialize){ - this._datatypeMap['Date'].serialize = function(obj){ - return dateStamp.toISOString(obj, {zulu:true}); - }; - } - //Disable only if explicitly set to false. - if(keywordParameters && (keywordParameters.referenceIntegrity === false)){ - this.referenceIntegrity = false; - } - - // this._saveInProgress is set to true, briefly, from when save() is first called to when it completes - this._saveInProgress = false; - }, - - referenceIntegrity: true, //Flag that defaultly enabled reference integrity tracking. This way it can also be disabled pogrammatially or declaratively. - - _assert: function(/* boolean */ condition){ - if(!condition){ - throw new Error("assertion failed in ItemFileWriteStore"); - } - }, - - _getIdentifierAttribute: function(){ - // this._assert((identifierAttribute === Number) || (dojo.isString(identifierAttribute))); - return this.getFeatures()['dojo.data.api.Identity']; - }, - - -/* dojo.data.api.Write */ - - newItem: function(/* Object? */ keywordArgs, /* Object? */ parentInfo){ - // summary: See dojo.data.api.Write.newItem() - - this._assert(!this._saveInProgress); - - if(!this._loadFinished){ - // We need to do this here so that we'll be able to find out what - // identifierAttribute was specified in the data file. - this._forceLoad(); - } - - if(typeof keywordArgs != "object" && typeof keywordArgs != "undefined"){ - throw new Error("newItem() was passed something other than an object"); - } - var newIdentity = null; - var identifierAttribute = this._getIdentifierAttribute(); - if(identifierAttribute === Number){ - newIdentity = this._arrayOfAllItems.length; - }else{ - newIdentity = keywordArgs[identifierAttribute]; - if(typeof newIdentity === "undefined"){ - throw new Error("newItem() was not passed an identity for the new item"); - } - if(lang.isArray(newIdentity)){ - throw new Error("newItem() was not passed an single-valued identity"); - } - } - - // 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"); - } - this._assert(typeof this._pending._newItems[newIdentity] === "undefined"); - this._assert(typeof this._pending._deletedItems[newIdentity] === "undefined"); - - var newItem = {}; - newItem[this._storeRefPropName] = this; - newItem[this._itemNumPropName] = this._arrayOfAllItems.length; - if(this._itemsByIdentity){ - this._itemsByIdentity[newIdentity] = newItem; - //We have to set the identifier now, otherwise we can't look it - //up at calls to setValueorValues in parentInfo handling. - newItem[identifierAttribute] = [newIdentity]; - } - this._arrayOfAllItems.push(newItem); - - //We need to construct some data for the onNew call too... - var pInfo = null; - - // Now we need to check to see where we want to assign this thingm if any. - if(parentInfo && parentInfo.parent && parentInfo.attribute){ - pInfo = { - item: parentInfo.parent, - attribute: parentInfo.attribute, - oldValue: undefined - }; - - //See if it is multi-valued or not and handle appropriately - //Generally, all attributes are multi-valued for this store - //So, we only need to append if there are already values present. - var values = this.getValues(parentInfo.parent, parentInfo.attribute); - if(values && values.length > 0){ - var tempValues = values.slice(0, values.length); - if(values.length === 1){ - pInfo.oldValue = values[0]; - }else{ - pInfo.oldValue = values.slice(0, values.length); - } - tempValues.push(newItem); - this._setValueOrValues(parentInfo.parent, parentInfo.attribute, tempValues, false); - pInfo.newValue = this.getValues(parentInfo.parent, parentInfo.attribute); - }else{ - this._setValueOrValues(parentInfo.parent, parentInfo.attribute, newItem, false); - pInfo.newValue = newItem; - } - }else{ - //Toplevel item, add to both top list as well as all list. - newItem[this._rootItemPropName]=true; - this._arrayOfTopLevelItems.push(newItem); - } - - this._pending._newItems[newIdentity] = newItem; - - //Clone over the properties to the new item - for(var key in keywordArgs){ - if(key === this._storeRefPropName || key === this._itemNumPropName){ - // 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 - // of all the items/objects. So, we need to iterate over all - // 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 - // items checking for that. - throw new Error("encountered bug in ItemFileWriteStore.newItem"); - } - var value = keywordArgs[key]; - if(!lang.isArray(value)){ - value = [value]; - } - newItem[key] = value; - if(this.referenceIntegrity){ - for(var i = 0; i < value.length; i++){ - var val = value[i]; - if(this.isItem(val)){ - this._addReferenceToMap(val, newItem, key); - } - } - } - } - this.onNew(newItem, pInfo); // dojo.data.api.Notification call - return newItem; // item - }, - - _removeArrayElement: function(/* Array */ array, /* anything */ element){ - var index = arrayUtil.indexOf(array, element); - if(index != -1){ - array.splice(index, 1); - return true; - } - return false; - }, - - deleteItem: function(/* item */ item){ - // summary: See dojo.data.api.Write.deleteItem() - this._assert(!this._saveInProgress); - 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() - // 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 - //As this item is going away, no need to track its references anymore. - - //Get the attributes list before we generate the backup so it - //doesn't pollute the attributes list. - var attributes = this.getAttributes(item); - - //Backup the map, we'll have to restore it potentially, in a revert. - if(item[this._reverseRefMap]){ - item["backup_" + this._reverseRefMap] = lang.clone(item[this._reverseRefMap]); - } - - //TODO: This causes a reversion problem. This list won't be restored on revert since it is - //attached to the 'value'. item, not ours. Need to back tese up somehow too. - //Maybe build a map of the backup of the entries and attach it to the deleted item to be restored - //later. Or just record them and call _addReferenceToMap on them in revert. - arrayUtil.forEach(attributes, function(attribute){ - arrayUtil.forEach(this.getValues(item, attribute), function(value){ - if(this.isItem(value)){ - //We have to back up all the references we had to others so they can be restored on a revert. - if(!item["backupRefs_" + this._reverseRefMap]){ - item["backupRefs_" + this._reverseRefMap] = []; - } - item["backupRefs_" + this._reverseRefMap].push({id: this.getIdentity(value), attr: attribute}); - this._removeReferenceFromMap(value, item, attribute); - } - }, this); - }, this); - - //Next, see if we have references to this item, if we do, we have to clean them up too. - var references = item[this._reverseRefMap]; - if(references){ - //Look through all the items noted as references to clean them up. - for(var itemId in references){ - var containingItem = null; - if(this._itemsByIdentity){ - containingItem = this._itemsByIdentity[itemId]; - }else{ - containingItem = this._arrayOfAllItems[itemId]; - } - //We have a reference to a containing item, now we have to process the - //attributes and clear all references to the item being deleted. - if(containingItem){ - for(var attribute in references[itemId]){ - var oldValues = this.getValues(containingItem, attribute) || []; - var newValues = arrayUtil.filter(oldValues, function(possibleItem){ - 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); - if(newValues.length < oldValues.length){ - this._setValueOrValues(containingItem, attribute, newValues, true); - } - } - } - } - } - } - - this._arrayOfAllItems[indexInArrayOfAllItems] = null; - - item[this._storeRefPropName] = null; - if(this._itemsByIdentity){ - delete this._itemsByIdentity[identity]; - } - this._pending._deletedItems[identity] = item; - - //Remove from the toplevel items, if necessary... - if(item[this._rootItemPropName]){ - this._removeArrayElement(this._arrayOfTopLevelItems, item); - } - this.onDelete(item); // dojo.data.api.Notification call - return true; - }, - - setValue: function(/* item */ item, /* attribute-name-string */ attribute, /* almost anything */ value){ - // summary: See dojo.data.api.Write.set() - return this._setValueOrValues(item, attribute, value, true); // boolean - }, - - setValues: function(/* item */ item, /* attribute-name-string */ attribute, /* array */ values){ - // summary: See dojo.data.api.Write.setValues() - return this._setValueOrValues(item, attribute, values, true); // boolean - }, - - unsetAttribute: function(/* item */ item, /* attribute-name-string */ attribute){ - // summary: See dojo.data.api.Write.unsetAttribute() - return this._setValueOrValues(item, attribute, [], true); - }, - - _setValueOrValues: function(/* item */ item, /* attribute-name-string */ attribute, /* anything */ newValueOrValues, /*boolean?*/ callOnSet){ - this._assert(!this._saveInProgress); - - // Check for valid arguments - this._assertIsItem(item); - this._assert(lang.isString(attribute)); - this._assert(typeof newValueOrValues !== "undefined"); - - // Make sure the user isn't trying to change the item's identity - var identifierAttribute = this._getIdentifierAttribute(); - if(attribute == identifierAttribute){ - throw new Error("ItemFileWriteStore does not have support for changing the value of an item's identifier."); - } - - // To implement the Notification API, we need to make a note of what - // the old attribute value was, so that we can pass that info when - // we call the onSet method. - var oldValueOrValues = this._getValueOrValues(item, attribute); - - 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 - // 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. - var copyOfItemState = {}; - for(var key in item){ - if((key === this._storeRefPropName) || (key === this._itemNumPropName) || (key === this._rootItemPropName)){ - copyOfItemState[key] = item[key]; - }else if(key === this._reverseRefMap){ - copyOfItemState[key] = lang.clone(item[key]); - }else{ - copyOfItemState[key] = item[key].slice(0, item[key].length); - } - } - // Now mark the item as dirty, and save the copy of the original state - this._pending._modifiedItems[identity] = copyOfItemState; - } - - // Okay, now we can actually change this attribute on the item - var success = false; - - if(lang.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 - // attribute from the item. - success = delete item[attribute]; - newValueOrValues = undefined; // used in the onSet Notification call below - - if(this.referenceIntegrity && oldValueOrValues){ - var oldValues = oldValueOrValues; - if(!lang.isArray(oldValues)){ - oldValues = [oldValues]; - } - for(var i = 0; i < oldValues.length; i++){ - var value = oldValues[i]; - if(this.isItem(value)){ - this._removeReferenceFromMap(value, item, attribute); - } - } - } - }else{ - var newValueArray; - if(lang.isArray(newValueOrValues)){ - // Unfortunately, it's not safe to just do this: - // newValueArray = newValueOrValues; - // Instead, we need to copy the array, which slice() does very nicely. - // 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); - }else{ - newValueArray = [newValueOrValues]; - } - - //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){ - if(oldValueOrValues){ - var oldValues = oldValueOrValues; - if(!lang.isArray(oldValues)){ - oldValues = [oldValues]; - } - //Use an associative map to determine what was added/removed from the list. - //Should be O(n) performant. First look at all the old values and make a list of them - //Then for any item not in the old list, we add it. If it was already present, we remove it. - //Then we pass over the map and any references left it it need to be removed (IE, no match in - //the new values list). - var map = {}; - arrayUtil.forEach(oldValues, function(possibleItem){ - if(this.isItem(possibleItem)){ - var id = this.getIdentity(possibleItem); - map[id.toString()] = true; - } - }, this); - arrayUtil.forEach(newValueArray, function(possibleItem){ - if(this.isItem(possibleItem)){ - var id = this.getIdentity(possibleItem); - if(map[id.toString()]){ - delete map[id.toString()]; - }else{ - this._addReferenceToMap(possibleItem, item, attribute); - } - } - }, this); - for(var rId in map){ - var removedItem; - if(this._itemsByIdentity){ - removedItem = this._itemsByIdentity[rId]; - }else{ - removedItem = this._arrayOfAllItems[rId]; - } - this._removeReferenceFromMap(removedItem, item, attribute); - } - }else{ - //Everything is new (no old values) so we have to just - //insert all the references, if any. - for(var i = 0; i < newValueArray.length; i++){ - var value = newValueArray[i]; - if(this.isItem(value)){ - this._addReferenceToMap(value, item, attribute); - } - } - } - } - item[attribute] = newValueArray; - success = true; - } - - // Now we make the dojo.data.api.Notification call - if(callOnSet){ - this.onSet(item, attribute, oldValueOrValues, newValueOrValues); - } - return success; // boolean - }, - - _addReferenceToMap: function(/* item */ refItem, /* item */ parentItem, /* string */ attribute){ - // summary: - // Method to add an reference map entry for an item and attribute. - // description: - // Method to add an reference map entry for an item and attribute. // - // refItem: - // The item that is referenced. - // parentItem: - // The item that holds the new reference to refItem. - // attribute: - // The attribute on parentItem that contains the new reference. - - var parentId = this.getIdentity(parentItem); - var references = refItem[this._reverseRefMap]; - - if(!references){ - references = refItem[this._reverseRefMap] = {}; - } - var itemRef = references[parentId]; - if(!itemRef){ - itemRef = references[parentId] = {}; - } - itemRef[attribute] = true; - }, - - _removeReferenceFromMap: function(/* item */ refItem, /* item */ parentItem, /* string */ attribute){ - // summary: - // 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 - // the item, its reference object and entry are removed. - // - // refItem: - // The item that is referenced. - // parentItem: - // The item holding a reference to refItem. - // attribute: - // The attribute on parentItem that contains the reference. - var identity = this.getIdentity(parentItem); - var references = refItem[this._reverseRefMap]; - var itemId; - if(references){ - for(itemId in references){ - if(itemId == identity){ - delete references[itemId][attribute]; - if(this._isEmpty(references[itemId])){ - delete references[itemId]; - } - } - } - if(this._isEmpty(references)){ - delete refItem[this._reverseRefMap]; - } - } - }, - - _dumpReferenceMap: function(){ - // summary: - // Function to dump the reverse reference map of all items in the store for debug purposes. - // description: - // Function to dump the reverse reference map of all items in the store for debug purposes. - 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: " + jsonUtil.toJson(item[this._reverseRefMap])); - } - } - }, - - _getValueOrValues: function(/* item */ item, /* attribute-name-string */ attribute){ - var valueOrValues = undefined; - if(this.hasAttribute(item, attribute)){ - var valueArray = this.getValues(item, attribute); - if(valueArray.length == 1){ - valueOrValues = valueArray[0]; - }else{ - valueOrValues = valueArray; - } - } - return valueOrValues; - }, - - _flatten: function(/* anything */ value){ - if(this.isItem(value)){ - // 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"}); - // we want to return - // {_reference:2} - return {_reference: this.getIdentity(value)}; - }else{ - if(typeof value === "object"){ - for(var type in this._datatypeMap){ - var typeMap = this._datatypeMap[type]; - if(lang.isObject(typeMap) && !lang.isFunction(typeMap)){ - if(value instanceof typeMap.type){ - if(!typeMap.serialize){ - throw new Error("ItemFileWriteStore: No serializer defined for type mapping: [" + type + "]"); - } - return {_type: type, _value: typeMap.serialize(value)}; - } - } else if(value instanceof typeMap){ - //SImple mapping, therefore, return as a toString serialization. - return {_type: type, _value: value.toString()}; - } - } - } - return value; - } - }, - - _getNewFileContentString: function(){ - // 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 - var serializableStructure = {}; - - var identifierAttribute = this._getIdentifierAttribute(); - if(identifierAttribute !== Number){ - serializableStructure.identifier = identifierAttribute; - } - if(this._labelAttr){ - serializableStructure.label = this._labelAttr; - } - serializableStructure.items = []; - for(var i = 0; i < this._arrayOfAllItems.length; ++i){ - var item = this._arrayOfAllItems[i]; - if(item !== null){ - var serializableItem = {}; - for(var key in item){ - if(key !== this._storeRefPropName && key !== this._itemNumPropName && key !== this._reverseRefMap && key !== this._rootItemPropName){ - var valueArray = this.getValues(item, key); - if(valueArray.length == 1){ - serializableItem[key] = this._flatten(valueArray[0]); - }else{ - var serializableArray = []; - for(var j = 0; j < valueArray.length; ++j){ - serializableArray.push(this._flatten(valueArray[j])); - serializableItem[key] = serializableArray; - } - } - } - } - serializableStructure.items.push(serializableItem); - } - } - var prettyPrint = true; - return jsonUtil.toJson(serializableStructure, prettyPrint); - }, - - _isEmpty: function(something){ - // summary: - // Function to determine if an array or object has no properties or values. - // something: - // The array or object to examine. - var empty = true; - if(lang.isObject(something)){ - var i; - for(i in something){ - empty = false; - break; - } - }else if(lang.isArray(something)){ - if(something.length > 0){ - empty = false; - } - } - return empty; //boolean - }, - - save: function(/* object */ keywordArgs){ - // summary: See dojo.data.api.Write.save() - this._assert(!this._saveInProgress); - - // this._saveInProgress is set to true, briefly, from when save is first called to when it completes - this._saveInProgress = true; - - var self = this; - var saveCompleteCallback = function(){ - self._pending = { - _newItems:{}, - _modifiedItems:{}, - _deletedItems:{} - }; - - self._saveInProgress = false; // must come after this._pending is cleared, but before any callbacks - if(keywordArgs && keywordArgs.onComplete){ - var scope = keywordArgs.scope || window.global; - keywordArgs.onComplete.call(scope); - } - }; - var saveFailedCallback = function(err){ - self._saveInProgress = false; - if(keywordArgs && keywordArgs.onError){ - var scope = keywordArgs.scope || window.global; - keywordArgs.onError.call(scope, err); - } - }; - - if(this._saveEverything){ - var newFileContentString = this._getNewFileContentString(); - this._saveEverything(saveCompleteCallback, saveFailedCallback, newFileContentString); - } - if(this._saveCustom){ - this._saveCustom(saveCompleteCallback, saveFailedCallback); - } - if(!this._saveEverything && !this._saveCustom){ - // Looks like there is no user-defined save-handler function. - // That's fine, it just means the datastore is acting as a "mock-write" - // store -- changes get saved in memory but don't get saved to disk. - saveCompleteCallback(); - } - }, - - revert: function(){ - // summary: See dojo.data.api.Write.revert() - this._assert(!this._saveInProgress); - - var identity; - for(identity in this._pending._modifiedItems){ - // find the original item and the modified item that replaced it - var copyOfItemState = this._pending._modifiedItems[identity]; - var modifiedItem = null; - if(this._itemsByIdentity){ - modifiedItem = this._itemsByIdentity[identity]; - }else{ - modifiedItem = this._arrayOfAllItems[identity]; - } - - // 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(var key in modifiedItem){ - delete modifiedItem[key]; - } - lang.mixin(modifiedItem, copyOfItemState); - } - var deletedItem; - for(identity in this._pending._deletedItems){ - deletedItem = this._pending._deletedItems[identity]; - deletedItem[this._storeRefPropName] = this; - var index = deletedItem[this._itemNumPropName]; - - //Restore the reverse refererence map, if any. - if(deletedItem["backup_" + this._reverseRefMap]){ - deletedItem[this._reverseRefMap] = deletedItem["backup_" + this._reverseRefMap]; - delete deletedItem["backup_" + this._reverseRefMap]; - } - this._arrayOfAllItems[index] = deletedItem; - if(this._itemsByIdentity){ - this._itemsByIdentity[identity] = deletedItem; - } - if(deletedItem[this._rootItemPropName]){ - this._arrayOfTopLevelItems.push(deletedItem); - } - } - //We have to pass through it again and restore the reference maps after all the - //undeletes have occurred. - for(identity in this._pending._deletedItems){ - deletedItem = this._pending._deletedItems[identity]; - if(deletedItem["backupRefs_" + this._reverseRefMap]){ - arrayUtil.forEach(deletedItem["backupRefs_" + this._reverseRefMap], function(reference){ - var refItem; - if(this._itemsByIdentity){ - refItem = this._itemsByIdentity[reference.id]; - }else{ - refItem = this._arrayOfAllItems[reference.id]; - } - this._addReferenceToMap(refItem, deletedItem, reference.attr); - }, this); - delete deletedItem["backupRefs_" + this._reverseRefMap]; - } - } - - for(identity in this._pending._newItems){ - var newItem = this._pending._newItems[identity]; - newItem[this._storeRefPropName] = null; - // null out the new item, but don't change the array index so - // so we can keep using _arrayOfAllItems.length. - this._arrayOfAllItems[newItem[this._itemNumPropName]] = null; - if(newItem[this._rootItemPropName]){ - this._removeArrayElement(this._arrayOfTopLevelItems, newItem); - } - if(this._itemsByIdentity){ - delete this._itemsByIdentity[identity]; - } - } - - this._pending = { - _newItems:{}, - _modifiedItems:{}, - _deletedItems:{} - }; - return true; // boolean - }, - - isDirty: function(/* item? */ item){ - // summary: See dojo.data.api.Write.isDirty() - if(item){ - // return true if the item is dirty - var identity = this.getIdentity(item); - 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 - return !this._isEmpty(this._pending._newItems) || - !this._isEmpty(this._pending._modifiedItems) || - !this._isEmpty(this._pending._deletedItems); // boolean - } - }, - -/* dojo.data.api.Notification */ - - 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 - // 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. - }, - - 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. - }, - - close: function(/* object? */ request){ - // summary: - // Over-ride of base close function of ItemFileReadStore to add in check for store state. - // description: - // Over-ride of base close function of ItemFileReadStore to add in check for store state. - // If the store is still dirty (unsaved changes), then an error will be thrown instead of - // clearing the internal state for reload from the url. - - //Clear if not dirty ... or throw an error - if(this.clearOnClose){ - if(!this.isDirty()){ - this.inherited(arguments); - }else{ - //Only throw an error if the store was dirty and we were loading from a url (cannot reload from url until state is saved). - throw new Error("dojo.data.ItemFileWriteStore: There are unsaved changes present in the store. Please save or revert the changes before invoking close."); - } - } - } -}); - -}); - -}, -'dijit/form/_RadioButtonMixin':function(){ -define("dijit/form/_RadioButtonMixin", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/_base/event", // event.stop - "dojo/_base/lang", // lang.hitch - "dojo/query", // query - "dojo/_base/window", // win.doc - "../registry" // registry.getEnclosingWidget -], function(array, declare, domAttr, event, lang, query, win, registry){ - - // module: - // dijit/form/_RadioButtonMixin - // summary: - // Mixin to provide widget functionality for an HTML radio button - - return declare("dijit.form._RadioButtonMixin", null, { - // summary: - // Mixin to provide widget functionality for an HTML radio button - - // type: [private] String - // type attribute on <input> node. - // Users should not change this value. - type: "radio", - - _getRelatedWidgets: function(){ - // Private function needed to help iterate over all radio buttons in a group. - var ary = []; - query("input[type=radio]", this.focusNode.form || win.doc).forEach( // can't use name= since query doesn't support [] in the name - lang.hitch(this, function(inputNode){ - if(inputNode.name == this.name && inputNode.form == this.focusNode.form){ - var widget = registry.getEnclosingWidget(inputNode); - if(widget){ - ary.push(widget); - } - } - }) - ); - return ary; - }, - - _setCheckedAttr: function(/*Boolean*/ value){ - // If I am being checked then have to deselect currently checked radio button - this.inherited(arguments); - if(!this._created){ return; } - if(value){ - array.forEach(this._getRelatedWidgets(), lang.hitch(this, function(widget){ - if(widget != this && widget.checked){ - widget.set('checked', false); - } - })); - } - }, - - _onClick: function(/*Event*/ e){ - if(this.checked || this.disabled){ // nothing to do - event.stop(e); - return false; - } - if(this.readOnly){ // ignored by some browsers so we have to resync the DOM elements with widget values - event.stop(e); - array.forEach(this._getRelatedWidgets(), lang.hitch(this, function(widget){ - domAttr.set(this.focusNode || this.domNode, 'checked', widget.checked); - })); - return false; - } - return this.inherited(arguments); - } - }); -}); - -}, -'url:dijit/templates/TreeNode.html':"<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div data-dojo-attach-point=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" data-dojo-attach-event=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" data-dojo-attach-point=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span data-dojo-attach-point=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span data-dojo-attach-point=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" data-dojo-attach-point=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span data-dojo-attach-point=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" data-dojo-attach-event=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div data-dojo-attach-point=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n", -'dojo/dnd/TimedMoveable':function(){ -define("dojo/dnd/TimedMoveable", ["../main", "./Moveable"], function(dojo) { - // module: - // dojo/dnd/TimedMoveable - // summary: - // TODOC - - /*===== - dojo.declare("dojo.dnd.__TimedMoveableArgs", [dojo.dnd.__MoveableArgs], { - // timeout: Number - // delay move by this number of ms, - // accumulating position changes during the timeout - timeout: 0 - }); - =====*/ - - // precalculate long expressions - var oldOnMove = dojo.dnd.Moveable.prototype.onMove; - - 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 - // the CPU load. The additional parameter "timeout" regulates - // the delay before actually moving the moveable object. - - // object attributes (for markup) - timeout: 40, // in ms, 40ms corresponds to 25 fps - - constructor: function(node, params){ - // summary: - // an object that makes a node moveable with a timer - // node: Node||String - // a node (or node's id) to be moved - // params: dojo.dnd.__TimedMoveableArgs - // object with additional parameters. - - // sanitize parameters - if(!params){ params = {}; } - if(params.timeout && typeof params.timeout == "number" && params.timeout >= 0){ - this.timeout = params.timeout; - } - }, - - onMoveStop: function(/* dojo.dnd.Mover */ mover){ - if(mover._timer){ - // stop timer - clearTimeout(mover._timer); - // reflect the last received position - oldOnMove.call(this, mover, mover._leftTop) - } - dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments); - }, - onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){ - mover._leftTop = leftTop; - if(!mover._timer){ - var _t = this; // to avoid using dojo.hitch() - mover._timer = setTimeout(function(){ - // we don't have any pending requests - mover._timer = null; - // reflect the last received position - oldOnMove.call(_t, mover, mover._leftTop); - }, this.timeout); - } - } - }); - - return dojo.dnd.TimedMoveable; - -}); - -}, -'dojo/NodeList-fx':function(){ -define("dojo/NodeList-fx", ["dojo/_base/NodeList", "./_base/lang", "./_base/connect", "./_base/fx", "./fx"], - function(NodeList, lang, connectLib, baseFx, coreFx) { - // module: - // dojo/NodeList-fx - // summary: - // TODOC - -/*===== -dojo["NodeList-fx"] = { - // summary: Adds dojo.fx animation support to dojo.query() by extending the NodeList class - // with additional FX functions. NodeList is the array-like object used to hold query results. -}; - -// doc alias helpers: -NodeList = dojo.NodeList; -=====*/ - -lang.extend(NodeList, { - _anim: function(obj, method, args){ - args = args||{}; - var a = coreFx.combine( - this.map(function(item){ - var tmpArgs = { node: item }; - lang.mixin(tmpArgs, args); - return obj[method](tmpArgs); - }) - ); - return args.auto ? a.play() && this : a; // dojo.Animation|dojo.NodeList - }, - - wipeIn: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Fade in all tables with class "blah": - // | dojo.query("table.blah").wipeIn().play(); - // - // example: - // Utilizing `auto` to get the NodeList back: - // | dojo.query(".titles").wipeIn({ auto:true }).onclick(someFunction); - // - return this._anim(coreFx, "wipeIn", args); // dojo.Animation|dojo.NodeList - }, - - wipeOut: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Wipe out all tables with class "blah": - // | dojo.query("table.blah").wipeOut().play(); - return this._anim(coreFx, "wipeOut", args); // dojo.Animation|dojo.NodeList - }, - - slideTo: function(args){ - // summary: - // slide all elements of the node list to the specified place via `dojo.fx.slideTo` - // - // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // | Move all tables with class "blah" to 300/300: - // | dojo.query("table.blah").slideTo({ - // | left: 40, - // | top: 50 - // | }).play(); - return this._anim(coreFx, "slideTo", args); // dojo.Animation|dojo.NodeList - }, - - - fadeIn: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Fade in all tables with class "blah": - // | dojo.query("table.blah").fadeIn().play(); - return this._anim(baseFx, "fadeIn", args); // dojo.Animation|dojo.NodeList - }, - - fadeOut: function(args){ - // summary: - // 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 - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // Fade out all elements with class "zork": - // | dojo.query(".zork").fadeOut().play(); - // example: - // Fade them on a delay and do something at the end: - // | var fo = dojo.query(".zork").fadeOut(); - // | dojo.connect(fo, "onEnd", function(){ /*...*/ }); - // | fo.play(); - // example: - // Using `auto`: - // | dojo.query("li").fadeOut({ auto:true }).filter(filterFn).forEach(doit); - // - return this._anim(baseFx, "fadeOut", args); // dojo.Animation|dojo.NodeList - }, - - animateProperty: function(args){ - // summary: - // Animate all elements of this NodeList across the properties specified. - // syntax identical to `dojo.animateProperty` - // - // args: Object? - // Additional dojo.Animation arguments to mix into this set with the addition of - // an `auto` parameter. - // - // returns: dojo.Animation|dojo.NodeList - // A special args member `auto` can be passed to automatically play the animation. - // If args.auto is present, the original dojo.NodeList will be returned for further - // chaining. Otherwise the dojo.Animation instance is returned and must be .play()'ed - // - // example: - // | dojo.query(".zork").animateProperty({ - // | duration: 500, - // | properties: { - // | color: { start: "black", end: "white" }, - // | left: { end: 300 } - // | } - // | }).play(); - // - // example: - // | dojo.query(".grue").animateProperty({ - // | auto:true, - // | properties: { - // | height:240 - // | } - // | }).onclick(handler); - return this._anim(baseFx, "animateProperty", args); // dojo.Animation|dojo.NodeList - }, - - anim: function( /*Object*/ properties, - /*Integer?*/ duration, - /*Function?*/ easing, - /*Function?*/ onEnd, - /*Integer?*/ delay){ - // summary: - // Animate one or more CSS properties for all nodes in this list. - // The returned animation object will already be playing when it - // is returned. See the docs for `dojo.anim` for full details. - // properties: Object - // the properties to animate. does NOT support the `auto` parameter like other - // NodeList-fx methods. - // duration: Integer? - // Optional. The time to run the animations for - // easing: Function? - // Optional. The easing function to use. - // onEnd: Function? - // A function to be called when the animation ends - // delay: - // how long to delay playing the returned animation - // example: - // Another way to fade out: - // | dojo.query(".thinger").anim({ opacity: 0 }); - // example: - // animate all elements with the "thigner" class to a width of 500 - // pixels over half a second - // | dojo.query(".thinger").anim({ width: 500 }, 700); - var canim = coreFx.combine( - this.map(function(item){ - return baseFx.animateProperty({ - node: item, - properties: properties, - duration: duration||350, - easing: easing - }); - }) - ); - if(onEnd){ - connectLib.connect(canim, "onEnd", onEnd); - } - return canim.play(delay||0); // dojo.Animation - } -}); - -return NodeList; -}); - -}, -'dijit/form/_ListMouseMixin':function(){ -define("dijit/form/_ListMouseMixin", [ - "dojo/_base/declare", // declare - "dojo/_base/event", // event.stop - "dojo/touch", - "./_ListBase" -], function(declare, event, touch, _ListBase){ - -/*===== -var _ListBase = dijit.form._ListBase; -=====*/ - -// module: -// dijit/form/_ListMouseMixin -// summary: -// a mixin to handle mouse or touch events for a focus-less menu - -return declare( "dijit.form._ListMouseMixin", _ListBase, { - // summary: - // a Mixin to handle mouse or touch events for a focus-less menu - // Abstract methods that must be defined externally: - // onClick: item was chosen (mousedown somewhere on the menu and mouseup somewhere on the menu) - // tags: - // private - - postCreate: function(){ - this.inherited(arguments); - this.connect(this.domNode, touch.press, "_onMouseDown"); - this.connect(this.domNode, touch.release, "_onMouseUp"); - this.connect(this.domNode, "onmouseover", "_onMouseOver"); - this.connect(this.domNode, "onmouseout", "_onMouseOut"); - }, - - _onMouseDown: function(/*Event*/ evt){ - event.stop(evt); - if(this._hoveredNode){ - this.onUnhover(this._hoveredNode); - this._hoveredNode = null; - } - this._isDragging = true; - this._setSelectedAttr(this._getTarget(evt)); - }, - - _onMouseUp: function(/*Event*/ evt){ - event.stop(evt); - this._isDragging = false; - var selectedNode = this._getSelectedAttr(); - var target = this._getTarget(evt); - var hoveredNode = this._hoveredNode; - if(selectedNode && target == selectedNode){ - this.onClick(selectedNode); - }else if(hoveredNode && target == hoveredNode){ // drag to select - this._setSelectedAttr(hoveredNode); - this.onClick(hoveredNode); - } - }, - - _onMouseOut: function(/*Event*/ /*===== evt ====*/){ - if(this._hoveredNode){ - this.onUnhover(this._hoveredNode); - if(this._getSelectedAttr() == this._hoveredNode){ - this.onSelect(this._hoveredNode); - } - this._hoveredNode = null; - } - if(this._isDragging){ - this._cancelDrag = (new Date()).getTime() + 1000; // cancel in 1 second if no _onMouseOver fires - } - }, - - _onMouseOver: function(/*Event*/ evt){ - if(this._cancelDrag){ - var time = (new Date()).getTime(); - if(time > this._cancelDrag){ - this._isDragging = false; - } - this._cancelDrag = null; - } - var node = this._getTarget(evt); - if(!node){ return; } - if(this._hoveredNode != node){ - if(this._hoveredNode){ - this._onMouseOut({ target: this._hoveredNode }); - } - if(node && node.parentNode == this.containerNode){ - if(this._isDragging){ - this._setSelectedAttr(node); - }else{ - this._hoveredNode = node; - this.onHover(node); - } - } - } - } -}); - -}); - -}, -'url:dijit/templates/Tree.html':"<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdata-dojo-attach-event=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" data-dojo-attach-point=\"indentDetector\"></div>\n</div>\n", -'dojo/cookie':function(){ -define("dojo/cookie", ["./_base/kernel", "./regexp"], function(dojo, regexp) { - // module: - // dojo/cookie - // summary: - // TODOC - - -/*===== -dojo.__cookieProps = function(){ - // expires: Date|String|Number? - // If a number, the number of days from today at which the cookie - // will expire. If a date, the date past which the cookie will expire. - // If expires is in the past, the cookie will be deleted. - // If expires is omitted or is 0, the cookie will expire when the browser closes. - // path: String? - // The path to use for the cookie. - // domain: String? - // The domain to use for the cookie. - // secure: Boolean? - // Whether to only send the cookie on secure connections - this.expires = expires; - this.path = path; - this.domain = domain; - this.secure = secure; -} -=====*/ - - -dojo.cookie = function(/*String*/name, /*String?*/value, /*dojo.__cookieProps?*/props){ - // summary: - // Get or set a cookie. - // description: - // If one argument is passed, returns the value of the cookie - // For two or more arguments, acts as a setter. - // name: - // Name of the cookie - // value: - // Value for the cookie - // 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}); - var c = document.cookie, ret; - if(arguments.length == 1){ - var matches = c.match(new RegExp("(?:^|; )" + regexp.escapeString(name) + "=([^;]*)")); - ret = matches ? decodeURIComponent(matches[1]) : undefined; - }else{ - props = props || {}; -// FIXME: expires=0 seems to disappear right away, not on close? (FF3) Change docs? - var exp = props.expires; - if(typeof exp == "number"){ - var d = new Date(); - d.setTime(d.getTime() + exp*24*60*60*1000); - exp = props.expires = d; - } - if(exp && exp.toUTCString){ props.expires = exp.toUTCString(); } - - value = encodeURIComponent(value); - var updatedCookie = name + "=" + value, propName; - for(propName in props){ - updatedCookie += "; " + propName; - var propValue = props[propName]; - if(propValue !== true){ updatedCookie += "=" + propValue; } - } - document.cookie = updatedCookie; - } - return ret; // String|undefined -}; - -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. - - if(!("cookieEnabled" in navigator)){ - this("__djCookieTest__", "CookiesAllowed"); - navigator.cookieEnabled = this("__djCookieTest__") == "CookiesAllowed"; - if(navigator.cookieEnabled){ - this("__djCookieTest__", "", {expires: -1}); - } - } - return navigator.cookieEnabled; -}; - -return dojo.cookie; -}); - -}, -'dojo/cache':function(){ -define("dojo/cache", ["./_base/kernel", "./text"], function(dojo, text){ - // module: - // dojo/cache - // summary: - // The module defines dojo.cache by loading dojo/text. - - //dojo.cache is defined in dojo/text - return dojo.cache; -}); - -}, -'url:dijit/form/templates/DropDownBox.html':"<div class=\"dijit dijitReset dijitInline dijitLeft\"\n\tid=\"widget_${id}\"\n\trole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdata-dojo-attach-point=\"_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\tdata-dojo-attach-point=\"textbox,focusNode\" role=\"textbox\" aria-haspopup=\"true\"\n\t/></div\n></div>\n", -'dijit/ProgressBar':function(){ -require({cache:{ -'url:dijit/templates/ProgressBar.html':"<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div data-dojo-attach-point=\"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 data-dojo-attach-point=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img data-dojo-attach-point=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n"}}); -define("dijit/ProgressBar", [ - "require", // require.toUrl - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.toggle - "dojo/_base/lang", // lang.mixin - "dojo/number", // number.format - "./_Widget", - "./_TemplatedMixin", - "dojo/text!./templates/ProgressBar.html" -], function(require, declare, domClass, lang, number, _Widget, _TemplatedMixin, template){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; -=====*/ - -// module: -// dijit/ProgressBar -// summary: -// A progress indication widget, showing the amount completed -// (often the percentage completed) of a task. - - -return declare("dijit.ProgressBar", [_Widget, _TemplatedMixin], { - // summary: - // A progress indication widget, showing the amount completed - // (often the percentage completed) of a task. - // - // example: - // | <div data-dojo-type="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: template, - - // _indeterminateHighContrastImagePath: [private] URL - // URL to image to use for indeterminate progress bar when display is in high contrast mode - _indeterminateHighContrastImagePath: - require.toUrl("./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 - - lang.mixin(this, attributes || {}); - var tip = this.internalProgress, ap = this.domNode; - var percent = 1; - if(this.indeterminate){ - ap.removeAttribute("aria-valuenow"); - ap.removeAttribute("aria-valuemin"); - ap.removeAttribute("aria-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.maximum ? this.progress / this.maximum : 0; - } - - ap.setAttribute("aria-describedby", this.labelNode.id); - ap.setAttribute("aria-valuenow", this.progress); - ap.setAttribute("aria-valuemin", 0); - ap.setAttribute("aria-valuemax", this.maximum); - } - this.labelNode.innerHTML = this.report(percent); - - domClass.toggle(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 ? " " : number.format(percent, { type: "percent", places: this.places, locale: this.lang })); - }, - - onChange: function(){ - // summary: - // Callback fired when progress updates. - // tags: - // extension - } -}); - -}); - -}, -'dijit/_base/popup':function(){ -define("dijit/_base/popup", [ - "dojo/dom-class", // domClass.contains - "../popup", - "../BackgroundIframe" // just loading for back-compat, in case client code is referencing it -], function(domClass, popup){ - -// module: -// dijit/_base/popup -// summary: -// Old module for popups, new code should use dijit/popup directly - - -// Hack support for old API passing in node instead of a widget (to various methods) -var origCreateWrapper = popup._createWrapper; -popup._createWrapper = function(widget){ - if(!widget.declaredClass){ - // make fake widget to pass to new API - widget = { - _popupWrapper: (widget.parentNode && domClass.contains(widget.parentNode, "dijitPopup")) ? - widget.parentNode : null, - domNode: widget, - destroy: function(){} - }; - } - return origCreateWrapper.call(this, widget); -}; - -// Support old format of orient parameter -var origOpen = popup.open; -popup.open = function(/*dijit.popup.__OpenArgs*/ args){ - // Convert old hash structure (ex: {"BL": "TL", ...}) of orient to format compatible w/new popup.open() API. - // Don't do conversion for: - // - null parameter (that means to use the default positioning) - // - "R" or "L" strings used to indicate positioning for context menus (when there is no around node) - // - new format, ex: ["below", "above"] - // - return value from deprecated dijit.getPopupAroundAlignment() method, - // ex: ["below", "above"] - if(args.orient && typeof args.orient != "string" && !("length" in args.orient)){ - var ary = []; - for(var key in args.orient){ - ary.push({aroundCorner: key, corner: args.orient[key]}); - } - args.orient = ary; - } - - return origOpen.call(this, args); -}; - -return popup; -}); - -}, -'dijit/ColorPalette':function(){ -require({cache:{ -'url:dijit/templates/ColorPalette.html':"<div class=\"dijitInline dijitColorPalette\">\n\t<table dojoAttachPoint=\"paletteTableNode\" class=\"dijitPaletteTable\" cellSpacing=\"0\" cellPadding=\"0\" role=\"grid\">\n\t\t<tbody data-dojo-attach-point=\"gridNode\"></tbody>\n\t</table>\n</div>\n"}}); -define("dijit/ColorPalette", [ - "require", // require.toUrl - "dojo/text!./templates/ColorPalette.html", - "./_Widget", - "./_TemplatedMixin", - "./_PaletteMixin", - "dojo/i18n", // i18n.getLocalization - "dojo/_base/Color", // dojo.Color dojo.Color.named - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.contains - "dojo/dom-construct", // domConstruct.place - "dojo/_base/window", // win.body - "dojo/string", // string.substitute - "dojo/i18n!dojo/nls/colors", // translations - "dojo/colors" // extend dojo.Color w/names of other colors -], function(require, template, _Widget, _TemplatedMixin, _PaletteMixin, i18n, Color, - declare, domClass, domConstruct, win, string){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _PaletteMixin = dijit._PaletteMixin; -=====*/ - -// module: -// dijit/ColorPalette -// summary: -// A keyboard accessible color-picking widget - -var ColorPalette = declare("dijit.ColorPalette", [_Widget, _TemplatedMixin, _PaletteMixin], { - // summary: - // A keyboard accessible color-picking widget - // description: - // Grid showing various colors, so the user can pick a certain color. - // Can be used standalone, or as a popup. - // - // example: - // | <div data-dojo-type="dijit.ColorPalette"></div> - // - // example: - // | var picker = new dijit.ColorPalette({ },srcNode); - // | picker.startup(); - - - // palette: [const] String - // Size of grid, either "7x10" or "3x4". - palette: "7x10", - - // _palettes: [protected] Map - // This represents the value of the colors. - // The first level is a hashmap of the different palettes available. - // The next two dimensions represent the columns and rows of colors. - _palettes: { - "7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"], - ["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"], - ["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"], - ["gray", "red", "orangered", "darkorange", "yellow", "limegreen", "darkseagreen", "royalblue", "slateblue", "mediumorchid"], - ["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"], - ["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ], - ["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]], - - "3x4": [["white", "lime", "green", "blue"], - ["silver", "yellow", "fuchsia", "navy"], - ["gray", "red", "purple", "black"]] - }, - - // templateString: String - // The template of this widget. - templateString: template, - - baseClass: "dijitColorPalette", - - _dyeFactory: function(value, row, col){ - // Overrides _PaletteMixin._dyeFactory(). - return new this._dyeClass(value, row, col); - }, - - buildRendering: function(){ - // Instantiate the template, which makes a skeleton into which we'll insert a bunch of - // <img> nodes - this.inherited(arguments); - - // Creates customized constructor for dye class (color of a single cell) for - // specified palette and high-contrast vs. normal mode. Used in _getDye(). - this._dyeClass = declare(ColorPalette._Color, { - hc: domClass.contains(win.body(), "dijit_a11y"), - palette: this.palette - }); - - // Creates <img> nodes in each cell of the template. - this._preparePalette( - this._palettes[this.palette], - i18n.getLocalization("dojo", "colors", this.lang)); - } -}); - -ColorPalette._Color = declare("dijit._Color", Color, { - // summary: - // Object associated with each cell in a ColorPalette palette. - // Implements dijit.Dye. - - // 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>", - - // _imagePaths: [protected] Map - // This is stores the path to the palette images used for high-contrast mode display - _imagePaths: { - "7x10": require.toUrl("./themes/a11y/colors7x10.png"), - "3x4": require.toUrl("./themes/a11y/colors3x4.png") - }, - - constructor: function(/*String*/alias, /*Number*/ row, /*Number*/ col){ - this._alias = alias; - this._row = row; - this._col = col; - this.setColor(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 = 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" - }); - - domConstruct.place(html, cell); - } -}); - - -return ColorPalette; -}); - -}, -'url:dijit/form/templates/Button.html':"<span class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdata-dojo-attach-event=\"ondijitclick:_onClick\" role=\"presentation\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdata-dojo-attach-point=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" data-dojo-attach-point=\"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\tdata-dojo-attach-point=\"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\ttabIndex=\"-1\" role=\"presentation\" data-dojo-attach-point=\"valueNode\"\n/></span>\n", -'dojo/_base/url':function(){ -define("dojo/_base/url", ["./kernel"], function(dojo) { - // module: - // dojo/url - // summary: - // This module contains dojo._Url - - var - ore = new RegExp("^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$"), - ire = new RegExp("^((([^\\[:]+):)?([^@]+)@)?(\\[([^\\]]+)\\]|([^\\[:]*))(:([0-9]+))?$"), - _Url = function(){ - var n = null, - _a = arguments, - uri = [_a[0]]; - // resolve uri components relative to each other - for(var i = 1; i<_a.length; i++){ - if(!_a[i]){ continue; } - - // Safari doesn't support this.constructor so we have to be explicit - // FIXME: Tracked (and fixed) in Webkit bug 3537. - // http://bugs.webkit.org/show_bug.cgi?id=3537 - var relobj = new _Url(_a[i]+""), - uriobj = new _Url(uri[0]+""); - - if( - relobj.path == "" && - !relobj.scheme && - !relobj.authority && - !relobj.query - ){ - if(relobj.fragment != n){ - uriobj.fragment = relobj.fragment; - } - relobj = uriobj; - }else if(!relobj.scheme){ - relobj.scheme = uriobj.scheme; - - if(!relobj.authority){ - relobj.authority = uriobj.authority; - - if(relobj.path.charAt(0) != "/"){ - var path = uriobj.path.substring(0, - uriobj.path.lastIndexOf("/") + 1) + relobj.path; - - var segs = path.split("/"); - for(var j = 0; j < segs.length; j++){ - if(segs[j] == "."){ - // flatten "./" references - if(j == segs.length - 1){ - segs[j] = ""; - }else{ - segs.splice(j, 1); - j--; - } - }else if(j > 0 && !(j == 1 && segs[0] == "") && - segs[j] == ".." && segs[j-1] != ".."){ - // flatten "../" references - if(j == (segs.length - 1)){ - segs.splice(j, 1); - segs[j - 1] = ""; - }else{ - segs.splice(j - 1, 2); - j -= 2; - } - } - } - relobj.path = segs.join("/"); - } - } - } - - uri = []; - if(relobj.scheme){ - uri.push(relobj.scheme, ":"); - } - if(relobj.authority){ - uri.push("//", relobj.authority); - } - uri.push(relobj.path); - if(relobj.query){ - uri.push("?", relobj.query); - } - if(relobj.fragment){ - uri.push("#", relobj.fragment); - } - } - - this.uri = uri.join(""); - - // break the uri into its main components - var r = this.uri.match(ore); - - this.scheme = r[2] || (r[1] ? "" : n); - this.authority = r[4] || (r[3] ? "" : n); - this.path = r[5]; // can never be undefined - this.query = r[7] || (r[6] ? "" : n); - this.fragment = r[9] || (r[8] ? "" : n); - - if(this.authority != n){ - // server based naming authority - r = this.authority.match(ire); - - this.user = r[3] || n; - this.password = r[4] || n; - this.host = r[6] || r[7]; // ipv6 || ipv4 - this.port = r[9] || n; - } - }; - _Url.prototype.toString = function(){ return this.uri; }; - - return dojo._Url = _Url; -}); - -}, -'dojo/text':function(){ -define("dojo/text", ["./_base/kernel", "require", "./has", "./_base/xhr"], function(dojo, require, has, xhr){ - // module: - // dojo/text - // summary: - // This module implements the !dojo/text plugin and the dojo.cache API. - // description: - // We choose to include our own plugin to leverage functionality already contained in dojo - // and thereby reduce the size of the plugin compared to various foreign loader implementations. - // Also, this allows foreign AMD loaders to be used without their plugins. - // - // CAUTION: this module is designed to optionally function synchronously to support the dojo v1.x synchronous - // loader. This feature is outside the scope of the CommonJS plugins specification. - - var getText; - if(1){ - getText= function(url, sync, load){ - xhr("GET", {url:url, sync:!!sync, load:load}); - }; - }else{ - // TODOC: only works for dojo AMD loader - if(require.getText){ - getText= require.getText; - }else{ - console.error("dojo/text plugin failed to load because loader does not support getText"); - } - } - - var - theCache= {}, - - strip= function(text){ - //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; - }, - - notFound = {}, - - pending = {}, - - result= { - dynamic: - // the dojo/text caches it's own resources because of dojo.cache - true, - - normalize:function(id, toAbsMid){ - // id is something like (path may be relative): - // - // "path/to/text.html" - // "path/to/text.html!strip" - var parts= id.split("!"), - url= parts[0]; - return (/^\./.test(url) ? toAbsMid(url) : url) + (parts[1] ? "!" + parts[1] : ""); - }, - - load:function(id, require, load){ - // id is something like (path is always absolute): - // - // "path/to/text.html" - // "path/to/text.html!strip" - var - parts= id.split("!"), - stripFlag= parts.length>1, - absMid= parts[0], - url = require.toUrl(parts[0]), - text = notFound, - finish = function(text){ - load(stripFlag ? strip(text) : text); - }; - if(absMid in theCache){ - text = theCache[absMid]; - }else if(url in require.cache){ - text = require.cache[url]; - }else if(url in theCache){ - text = theCache[url]; - } - if(text===notFound){ - if(pending[url]){ - pending[url].push(finish); - }else{ - var pendingList = pending[url] = [finish]; - getText(url, !require.async, function(text){ - theCache[absMid]= theCache[url]= text; - for(var i = 0; i<pendingList.length;){ - pendingList[i++](text); - } - delete pending[url]; - }); - } - }else{ - finish(text); - } - } - }; - - dojo.cache= function(/*String||Object*/module, /*String*/url, /*String||Object?*/value){ - // * (string string [value]) => (module, url, value) - // * (object [value]) => (module, value), url defaults to "" - // - // * if module is an object, then it must be convertable to a string - // * (module, url) module + (url ? ("/" + url) : "") must be a legal argument to require.toUrl - // * value may be a string or an object; if an object then may have the properties "value" and/or "sanitize" - var key; - if(typeof module=="string"){ - if(/\//.test(module)){ - // module is a version 1.7+ resolved path - key = module; - value = url; - }else{ - // module is a version 1.6- argument to dojo.moduleUrl - key = require.toUrl(module.replace(/\./g, "/") + (url ? ("/" + url) : "")); - } - }else{ - key = module + ""; - value = url; - } - var - val = (value != undefined && typeof value != "string") ? value.value : value, - sanitize = value && value.sanitize; - - if(typeof val == "string"){ - //We have a string, set cache value - theCache[key] = val; - return sanitize ? strip(val) : val; - }else if(val === null){ - //Remove cached value - delete theCache[key]; - return null; - }else{ - //Allow cache values to be empty strings. If key property does - //not exist, fetch it. - if(!(key in theCache)){ - getText(key, true, function(text){ - theCache[key]= text; - }); - } - return sanitize ? strip(theCache[key]) : theCache[key]; - } - }; - - return result; - -/*===== -dojo.cache = function(module, url, value){ - // summary: - // A getter and setter for storing the string content associated with the - // module and url arguments. - // description: - // If module is a string that contains slashes, then it is interpretted as a fully - // resolved path (typically a result returned by require.toUrl), and url should not be - // provided. This is the preferred signature. If module is a string that does not - // contain slashes, then url must also be provided and module and url are used to - // call `dojo.moduleUrl()` to generate a module URL. This signature is deprecated. - // If value is specified, the cache value for the moduleUrl will be set to - // that value. Otherwise, dojo.cache will fetch the moduleUrl and store it - // in its internal cache and return that cached value for the URL. To clear - // a cache value pass null for value. Since XMLHttpRequest (XHR) is used to fetch the - // the URL contents, only modules on the same domain of the page can use this capability. - // The build system can inline the cache values though, to allow for xdomain hosting. - // module: String||Object - // If a String with slashes, a fully resolved path; if a String without slashes, the - // module name to use for the base part of the URL, similar to module argument - // to `dojo.moduleUrl`. If an Object, something that has a .toString() method that - // generates a valid path for the cache item. For example, a dojo._Url object. - // url: String - // The rest of the path to append to the path derived from the module argument. If - // module is an object, then this second argument should be the "value" argument instead. - // value: String||Object? - // If a String, the value to use in the cache for the module/url combination. - // If an Object, it can have two properties: value and sanitize. The value property - // should be the value to use in the cache, and sanitize can be set to true or false, - // to indicate if XML declarations should be removed from the value and if the HTML - // inside a body tag in the value should be extracted as the real value. The value argument - // or the value property on the value argument are usually only used by the build system - // as it inlines cache content. - // example: - // To ask dojo.cache to fetch content and store it in the cache (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 "<h1>Hello</h1>" that will be - // | //the value for the text variable. - // | 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 - // 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 - // | //text variable will contain just "<h1>Hello</h1>". - // | var text = dojo["cache"]("my.module", "template.html", {sanitize: true}); - // example: - // Same example as previous, but demostrates how an object can be passed in as - // the first argument, then the value argument can then be the second argument. - // | //If template.html contains "<html><body><h1>Hello</h1></body></html>", the - // | //text variable will contain just "<h1>Hello</h1>". - // | var text = dojo["cache"](new dojo._Url("my/module/template.html"), {sanitize: true}); - return val; //String -}; -=====*/ -}); - - -}, -'url:dijit/templates/MenuItem.html':"<tr class=\"dijitReset dijitMenuItem\" data-dojo-attach-point=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdata-dojo-attach-event=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" data-dojo-attach-point=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" data-dojo-attach-point=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" data-dojo-attach-point=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" role=\"presentation\">\n\t\t<div data-dojo-attach-point=\"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", -'url: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\tdata-dojo-attach-point=\"focusNode\"\n\t \tdata-dojo-attach-event=\"onclick:_onClick\"\n/></div>\n", -'dojo/uacss':function(){ -define("dojo/uacss", ["./dom-geometry", "./_base/lang", "./ready", "./_base/sniff", "./_base/window"], - function(geometry, lang, ready, has, baseWindow){ - // module: - // dojo/uacss - // summary: - // Applies pre-set CSS classes to the top-level HTML node, based on: - // - browser (ex: dj_ie) - // - browser version (ex: dj_ie6) - // - box model (ex: dj_contentBox) - // - text direction (ex: dijitRtl) - // - // In addition, browser, browser version, and box model are - // combined with an RTL flag when browser text is RTL. ex: dj_ie-rtl. - - var - html = baseWindow.doc.documentElement, - ie = has("ie"), - opera = has("opera"), - maj = Math.floor, - ff = has("ff"), - boxModel = geometry.boxModel.replace(/-/,''), - - classes = { - "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": has("quirks"), - "dj_iequirks": ie && has("quirks"), - - // NOTE: Opera not supported by dijit - "dj_opera": opera, - - "dj_khtml": has("khtml"), - - "dj_webkit": has("webkit"), - "dj_safari": has("safari"), - "dj_chrome": has("chrome"), - - "dj_gecko": has("mozilla"), - "dj_ff3": maj(ff) == 3 - }; // no dojo unsupported browsers - - classes["dj_" + boxModel] = true; - - // apply browser, browser version, and box model class names - var classStr = ""; - for(var clz in classes){ - if(classes[clz]){ - classStr += clz + " "; - } - } - html.className = lang.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). - // priority is 90 to run ahead of parser priority of 100 - ready(90, function(){ - if(!geometry.isBodyLtr()){ - var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl "); - html.className = lang.trim(html.className + " " + rtlClassStr + "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ")); - } - }); - return has; -}); - -}, -'dijit/Tooltip':function(){ -require({cache:{ -'url:dijit/templates/Tooltip.html':"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" data-dojo-attach-point=\"containerNode\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" data-dojo-attach-point=\"connectorNode\"></div\n></div>\n"}}); -define("dijit/Tooltip", [ - "dojo/_base/array", // array.forEach array.indexOf array.map - "dojo/_base/declare", // declare - "dojo/_base/fx", // fx.fadeIn fx.fadeOut - "dojo/dom", // dom.byId - "dojo/dom-class", // domClass.add - "dojo/dom-geometry", // domGeometry.getMarginBox domGeometry.position - "dojo/dom-style", // domStyle.set, domStyle.get - "dojo/_base/lang", // lang.hitch lang.isArrayLike - "dojo/_base/sniff", // has("ie") - "dojo/_base/window", // win.body - "./_base/manager", // manager.defaultDuration - "./place", - "./_Widget", - "./_TemplatedMixin", - "./BackgroundIframe", - "dojo/text!./templates/Tooltip.html", - "." // sets dijit.showTooltip etc. for back-compat -], function(array, declare, fx, dom, domClass, domGeometry, domStyle, lang, has, win, - manager, place, _Widget, _TemplatedMixin, BackgroundIframe, template, dijit){ - -/*===== - var _Widget = dijit._Widget; - var BackgroundIframe = dijit.BackgroundIframe; - var _TemplatedMixin = dijit._TemplatedMixin; -=====*/ - - // module: - // dijit/Tooltip - // summary: - // Defines dijit.Tooltip widget (to display a tooltip), showTooltip()/hideTooltip(), and _MasterTooltip - - - var MasterTooltip = declare("dijit._MasterTooltip", [_Widget, _TemplatedMixin], { - // summary: - // Internal widget that holds the actual tooltip markup, - // which occurs once per page. - // Called by Tooltip widgets which are just containers to hold - // the markup - // tags: - // protected - - // duration: Integer - // Milliseconds to fade in/fade out - duration: manager.defaultDuration, - - templateString: template, - - postCreate: function(){ - win.body().appendChild(this.domNode); - - this.bgIframe = new BackgroundIframe(this.domNode); - - // Setup fade-in and fade-out functions. - this.fadeIn = fx.fadeIn({ node: this.domNode, duration: this.duration, onEnd: lang.hitch(this, "_onShow") }); - this.fadeOut = fx.fadeOut({ node: this.domNode, duration: this.duration, onEnd: lang.hitch(this, "_onHide") }); - }, - - show: function(innerHTML, aroundNode, position, rtl, textDir){ - // summary: - // Display tooltip w/specified contents to right of specified node - // (To left if there's no space on the right, or if rtl == true) - // innerHTML: String - // Contents of the tooltip - // aroundNode: DomNode || dijit.__Rectangle - // Specifies that tooltip should be next to this node / area - // position: String[]? - // List of positions to try to position tooltip (ex: ["right", "above"]) - // rtl: Boolean? - // Corresponds to `WidgetBase.dir` attribute, where false means "ltr" and true - // means "rtl"; specifies GUI direction, not text direction. - // textDir: String? - // Corresponds to `WidgetBase.textdir` attribute; specifies direction of text. - - - if(this.aroundNode && this.aroundNode === aroundNode && this.containerNode.innerHTML == innerHTML){ - 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; - return; - } - this.containerNode.innerHTML=innerHTML; - - this.set("textDir", textDir); - this.containerNode.align = rtl? "right" : "left"; //fix the text alignment - - var pos = place.around(this.domNode, aroundNode, - position && position.length ? position : Tooltip.defaultPosition, !rtl, lang.hitch(this, "orient")); - - // Position the tooltip connector for middle alignment. - // This could not have been done in orient() since the tooltip wasn't positioned at that time. - var aroundNodeCoords = pos.aroundNodePos; - if(pos.corner.charAt(0) == 'M' && pos.aroundCorner.charAt(0) == 'M'){ - this.connectorNode.style.top = aroundNodeCoords.y + ((aroundNodeCoords.h - this.connectorNode.offsetHeight) >> 1) - pos.y + "px"; - this.connectorNode.style.left = ""; - }else if(pos.corner.charAt(1) == 'M' && pos.aroundCorner.charAt(1) == 'M'){ - this.connectorNode.style.left = aroundNodeCoords.x + ((aroundNodeCoords.w - this.connectorNode.offsetWidth) >> 1) - pos.x + "px"; - } - - // show it - domStyle.set(this.domNode, "opacity", 0); - this.fadeIn.play(); - this.isShowingNow = true; - this.aroundNode = aroundNode; - }, - - 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. 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 " + - { - "MR-ML": "dijitTooltipRight", - "ML-MR": "dijitTooltipLeft", - "TM-BM": "dijitTooltipAbove", - "BM-TM": "dijitTooltipBelow", - "BL-TL": "dijitTooltipBelow dijitTooltipABLeft", - "TL-BL": "dijitTooltipAbove dijitTooltipABLeft", - "BR-TR": "dijitTooltipBelow dijitTooltipABRight", - "TR-BR": "dijitTooltipAbove dijitTooltipABRight", - "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 = domGeometry.getContentBox(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 + domStyle.get(this.domNode,"paddingLeft") + domStyle.get(this.domNode,"paddingRight"); - this.domNode.style.width = scrollWidth + "px"; - } - } - - // Reposition the tooltip connector. - if(tooltipCorner.charAt(0) == 'B' && aroundCorner.charAt(0) == 'B'){ - var mb = domGeometry.getMarginBox(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 + tooltipConnectorHeight) >> 1); - 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(){ - // summary: - // Called at end of fade-in operation - // tags: - // protected - if(has("ie")){ - // the arrow won't show up on a node w/an opacity filter - this.domNode.style.filter=""; - } - }, - - hide: function(aroundNode){ - // summary: - // Hide the tooltip - - if(this._onDeck && this._onDeck[1] == aroundNode){ - // this hide request is for a show() that hasn't even started yet; - // just cancel the pending show() - this._onDeck=null; - }else if(this.aroundNode === aroundNode){ - // this hide request is for the currently displayed tooltip - this.fadeIn.stop(); - this.isShowingNow = false; - this.aroundNode = null; - this.fadeOut.play(); - }else{ - // just ignore the call, it's for a tooltip that has already been erased - } - }, - - _onHide: function(){ - // summary: - // Called at end of fade-out operation - // tags: - // protected - - this.domNode.style.cssText=""; // to position offscreen again - this.containerNode.innerHTML=""; - if(this._onDeck){ - // a show request has been queued up; do it now - this.show.apply(this, this._onDeck); - this._onDeck=null; - } - }, - - _setAutoTextDir: function(/*Object*/node){ - // summary: - // Resolve "auto" text direction for children nodes - // tags: - // private - - this.applyTextDir(node, has("ie") ? node.outerText : node.textContent); - array.forEach(node.children, function(child){this._setAutoTextDir(child); }, this); - }, - - _setTextDirAttr: function(/*String*/ textDir){ - // summary: - // Setter for textDir. - // description: - // Users shouldn't call this function; they should be calling - // set('textDir', value) - // tags: - // private - - this._set("textDir", typeof textDir != 'undefined'? textDir : ""); - if (textDir == "auto"){ - this._setAutoTextDir(this.containerNode); - }else{ - this.containerNode.dir = this.textDir; - } - } - }); - - dijit.showTooltip = function(innerHTML, aroundNode, position, rtl, textDir){ - // summary: - // Static method to display tooltip w/specified contents in specified position. - // See description of dijit.Tooltip.defaultPosition for details on position parameter. - // If position is not specified then dijit.Tooltip.defaultPosition is used. - // innerHTML: String - // Contents of the tooltip - // aroundNode: dijit.__Rectangle - // Specifies that tooltip should be next to this node / area - // position: String[]? - // List of positions to try to position tooltip (ex: ["right", "above"]) - // rtl: Boolean? - // Corresponds to `WidgetBase.dir` attribute, where false means "ltr" and true - // means "rtl"; specifies GUI direction, not text direction. - // textDir: String? - // Corresponds to `WidgetBase.textdir` attribute; specifies direction of text. - - // after/before don't work, but they used to, so for back-compat convert them to after-centered, before-centered - if(position){ - position = array.map(position, function(val){ - return {after: "after-centered", before: "before-centered"}[val] || val; - }); - } - - if(!Tooltip._masterTT){ dijit._masterTT = Tooltip._masterTT = new MasterTooltip(); } - return Tooltip._masterTT.show(innerHTML, aroundNode, position, rtl, textDir); - }; - - dijit.hideTooltip = function(aroundNode){ - // summary: - // Static method to hide the tooltip displayed via showTooltip() - return Tooltip._masterTT && Tooltip._masterTT.hide(aroundNode); - }; - - var Tooltip = declare("dijit.Tooltip", _Widget, { - // summary: - // Pops up a tooltip (a help message) when you hover over a node. - - // label: String - // Text to display in the tooltip. - // Specified as innerHTML when creating the widget from markup. - label: "", - - // showDelay: Integer - // Number of milliseconds to wait after hovering over/focusing on the object, before - // the tooltip is displayed. - showDelay: 400, - - // connectId: String|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: [], - - _setConnectIdAttr: function(/*String|String[]*/ newId){ - // summary: - // Connect to specified node(s) - - // Remove connections to old nodes (if there are any) - array.forEach(this._connections || [], function(nested){ - array.forEach(nested, lang.hitch(this, "disconnect")); - }, this); - - // Make array of id's to connect to, excluding entries for nodes that don't exist yet, see startup() - this._connectIds = array.filter(lang.isArrayLike(newId) ? newId : (newId ? [newId] : []), - function(id){ return dom.byId(id); }); - - // Make connections - this._connections = array.map(this._connectIds, function(id){ - var node = dom.byId(id); - return [ - this.connect(node, "onmouseenter", "_onHover"), - this.connect(node, "onmouseleave", "_onUnHover"), - this.connect(node, "onfocus", "_onHover"), - this.connect(node, "onblur", "_onUnHover") - ]; - }, this); - - this._set("connectId", newId); - }, - - addTarget: function(/*DOMNODE || String*/ node){ - // summary: - // 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(array.indexOf(this._connectIds, id) == -1){ - this.set("connectId", this._connectIds.concat(id)); - } - }, - - removeTarget: function(/*DomNode || String*/ node){ - // summary: - // Detach tooltip from specified node - - // 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 = array.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); - } - }, - - buildRendering: function(){ - this.inherited(arguments); - domClass.add(this.domNode,"dijitTooltipData"); - }, - - startup: function(){ - this.inherited(arguments); - - // If this tooltip was created in a template, or for some other reason the specified connectId[s] - // didn't exist during the widget's initialization, then connect now. - var ids = this.connectId; - array.forEach(lang.isArrayLike(ids) ? ids : [ids], this.addTarget, this); - }, - - _onHover: function(/*Event*/ e){ - // summary: - // Despite the name of this method, it actually handles both hover and focus - // events on the target node, setting a timer to show the tooltip. - // tags: - // private - if(!this._showTimer){ - var target = e.target; - this._showTimer = setTimeout(lang.hitch(this, function(){this.open(target)}), this.showDelay); - } - }, - - _onUnHover: function(/*Event*/ /*===== e =====*/){ - // summary: - // Despite the name of this method, it actually handles both mouseleave and blur - // events on the target node, hiding the tooltip. - // tags: - // private - - // keep a tooltip open if the associated element still has focus (even though the - // mouse moved away) - if(this._focus){ return; } - - if(this._showTimer){ - clearTimeout(this._showTimer); - delete this._showTimer; - } - this.close(); - }, - - open: function(/*DomNode*/ target){ - // summary: - // Display the tooltip; usually not called directly. - // tags: - // private - - if(this._showTimer){ - clearTimeout(this._showTimer); - delete this._showTimer; - } - Tooltip.show(this.label || this.domNode.innerHTML, target, this.position, !this.isLeftToRight(), this.textDir); - - this._connectNode = target; - this.onShow(target, this.position); - }, - - close: function(){ - // summary: - // Hide the tooltip or cancel timer for show of tooltip - // tags: - // private - - if(this._connectNode){ - // if tooltip is currently shown - Tooltip.hide(this._connectNode); - delete this._connectNode; - this.onHide(); - } - if(this._showTimer){ - // if tooltip is scheduled to be shown (after a brief delay) - clearTimeout(this._showTimer); - delete this._showTimer; - } - }, - - onShow: function(/*===== target, position =====*/){ - // summary: - // Called when the tooltip is shown - // tags: - // callback - }, - - onHide: function(){ - // summary: - // Called when the tooltip is hidden - // tags: - // callback - }, - - uninitialize: function(){ - this.close(); - this.inherited(arguments); - } - }); - - Tooltip._MasterTooltip = MasterTooltip; // for monkey patching - Tooltip.show = dijit.showTooltip; // export function through module return value - Tooltip.hide = dijit.hideTooltip; // export function through module return value - - // dijit.Tooltip.defaultPosition: String[] - // This variable controls the position of tooltips, if the position is not specified to - // the Tooltip widget or *TextBox widget itself. It's an array of strings with the values - // possible for `dijit/place::around()`. The recommended values are: - // - // * before-centered: centers tooltip to the left of the anchor node/widget, or to the right - // in the case of RTL scripts like Hebrew and Arabic - // * after-centered: centers tooltip to the right of the anchor node/widget, or to the left - // in the case of RTL scripts like Hebrew and Arabic - // * above-centered: tooltip is centered above anchor node - // * below-centered: tooltip is centered above anchor node - // - // The list is positions is tried, in order, until a position is found where the tooltip fits - // within the viewport. - // - // Be careful setting this parameter. A value of "above-centered" may work fine until the user scrolls - // the screen so that there's no room above the target node. Nodes with drop downs, like - // DropDownButton or FilteringSelect, are especially problematic, in that you need to be sure - // that the drop down and tooltip don't overlap, even when the viewport is scrolled so that there - // is only room below (or above) the target node, but not both. - Tooltip.defaultPosition = ["after-centered", "before-centered"]; - - - return Tooltip; -}); - -}, -'dojo/string':function(){ -define("dojo/string", ["./_base/kernel", "./_base/lang"], function(dojo, lang) { - // module: - // dojo/string - // summary: - // TODOC - -lang.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 ? - lang.hitch(thisObject, transform) : function(v){ return v; }; - - return template.replace(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g, - function(match, key, format){ - var value = lang.getObject(key, false, map); - if(format){ - value = lang.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 -} -=====*/ - -dojo.string.trim = String.prototype.trim ? - lang.trim : // aliasing to the native function - 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; - }; - -return dojo.string; -}); - -}, -'url: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>", -'dijit/dijit':function(){ -define("dijit/dijit", [ - ".", - "./_base", - "dojo/parser", - "./_Widget", - "./_TemplatedMixin", - "./_Container", - "./layout/_LayoutWidget", - "./form/_FormWidget", - "./form/_FormValueWidget" -], function(dijit){ - - // module: - // dijit/dijit - // summary: - // A roll-up for common dijit methods - // 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 - - return dijit; -}); - -}, -'dijit/form/DropDownButton':function(){ -require({cache:{ -'url:dijit/form/templates/DropDownButton.html':"<span class=\"dijit dijitReset dijitInline\"\n\t><span class='dijitReset dijitInline dijitButtonNode'\n\t\tdata-dojo-attach-event=\"ondijitclick:_onClick\" data-dojo-attach-point=\"_buttonNode\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdata-dojo-attach-point=\"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\tdata-dojo-attach-point=\"iconNode\"\n\t\t\t></span\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\"\n\t\t\t\tdata-dojo-attach-point=\"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\tdata-dojo-attach-point=\"valueNode\"\n/></span>\n"}}); -define("dijit/form/DropDownButton", [ - "dojo/_base/declare", // declare - "dojo/_base/lang", // hitch - "dojo/query", // query - "../registry", // registry.byNode - "../popup", // dijit.popup2.hide - "./Button", - "../_Container", - "../_HasDropDown", - "dojo/text!./templates/DropDownButton.html" -], function(declare, lang, query, registry, popup, Button, _Container, _HasDropDown, template){ - -/*===== - Button = dijit.form.Button; - _Container = dijit._Container; - _HasDropDown = dijit._HasDropDown; -=====*/ - -// module: -// dijit/form/DropDownButton -// summary: -// A button with a drop down - - -return declare("dijit.form.DropDownButton", [Button, _Container, _HasDropDown], { - // summary: - // A button with a drop down - // - // example: - // | <button data-dojo-type="dijit.form.DropDownButton"> - // | Hello world - // | <div data-dojo-type="dijit.Menu">...</div> - // | </button> - // - // example: - // | var button1 = new dijit.form.DropDownButton({ label: "hi", dropDown: new dijit.Menu(...) }); - // | win.body().appendChild(button1); - // - - baseClass : "dijitDropDownButton", - - templateString: template, - - _fillContent: function(){ - // Overrides Button._fillContent(). - // - // My inner HTML contains both the button contents and a drop down widget, like - // <DropDownButton> <span>push me</span> <Menu> ... </Menu> </DropDownButton> - // The first node is assumed to be the button content. The widget is the popup. - - if(this.srcNodeRef){ // programatically created buttons might not define srcNodeRef - //FIXME: figure out how to filter out the widget and use all remaining nodes as button - // content, not just nodes[0] - var nodes = query("*", this.srcNodeRef); - this.inherited(arguments, [nodes[0]]); - - // save pointer to srcNode so we can grab the drop down widget after it's instantiated - this.dropDownContainer = this.srcNodeRef; - } - }, - - startup: function(){ - if(this._started){ return; } - - // 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 && this.dropDownContainer){ - var dropDownNode = query("[widgetId]", this.dropDownContainer)[0]; - this.dropDown = registry.byNode(dropDownNode); - delete this.dropDownContainer; - } - if(this.dropDown){ - popup.hide(this.dropDown); - } - - this.inherited(arguments); - }, - - isLoaded: function(){ - // 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 && (!dropDown.href || dropDown.isLoaded)); - }, - - loadDropDown: function(/*Function*/ callback){ - // Default implementation assumes that drop down already exists, - // but hasn't loaded it's data (ex: ContentPane w/href). - // App must override if the drop down is lazy-created. - var dropDown = this.dropDown; - var handler = dropDown.on("load", lang.hitch(this, function(){ - handler.remove(); - callback(); - })); - dropDown.refresh(); // tell it to load - }, - - isFocusable: function(){ - // Overridden so that focus is handled by the _HasDropDown mixin, not by - // the _FormWidget mixin. - return this.inherited(arguments) && !this._mouseDown; - } -}); - -}); - -}, -'dijit/form/_FormValueMixin':function(){ -define("dijit/form/_FormValueMixin", [ - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/keys", // keys.ESCAPE - "dojo/_base/sniff", // has("ie"), has("quirks") - "./_FormWidgetMixin" -], function(declare, domAttr, keys, has, _FormWidgetMixin){ - -/*===== - var _FormWidgetMixin = dijit.form._FormWidgetMixin; -=====*/ - - // module: - // dijit/form/_FormValueMixin - // summary: - // Mixin for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values. - - return declare("dijit.form._FormValueMixin", _FormWidgetMixin, { - // summary: - // Mixin for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values. - // description: - // Each _FormValueMixin represents a single input value, and has a (possibly hidden) <input> element, - // to which it serializes it's input value, so that form submission (either normal submission or via FormBind?) - // works as expected. - - // readOnly: Boolean - // Should this widget respond to user input? - // In markup, this is specified as "readOnly". - // Similar to disabled except readOnly form values are submitted. - readOnly: false, - - _setReadOnlyAttr: function(/*Boolean*/ value){ - domAttr.set(this.focusNode, 'readOnly', value); - this.focusNode.setAttribute("aria-readonly", value); - this._set("readOnly", value); - }, - - postCreate: function(){ - this.inherited(arguments); - - if(has("ie")){ // 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._lastValueReported = this._resetValue = this.value; - } - }, - - _setValueAttr: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){ - // summary: - // 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._handleOnChange(newValue, priorityChange); - }, - - _handleOnChange: function(/*anything*/ newValue, /*Boolean?*/ priorityChange){ - // summary: - // 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(){ - // summary: - // Restore the value to the last value passed to onChange - this._setValueAttr(this._lastValueReported, false); - }, - - reset: function(){ - // summary: - // Reset the widget's value to what it was at initialization time - this._hasBeenBlurred = false; - this._setValueAttr(this._resetValue, true); - }, - - _onKeyDown: function(e){ - if(e.keyCode == keys.ESCAPE && !(e.ctrlKey || e.altKey || e.metaKey)){ - var te; - if(has("ie") < 9 || (has("ie") && has("quirks"))){ - e.preventDefault(); // default behavior needs to be stopped here since keypress is too late - te = document.createEventObject(); - te.keyCode = keys.ESCAPE; - te.shiftKey = e.shiftKey; - e.srcElement.fireEvent('onkeypress', te); - } - } - } - }); -}); - -}, -'dijit/form/_FormWidgetMixin':function(){ -define("dijit/form/_FormWidgetMixin", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/dom-style", // domStyle.get - "dojo/_base/lang", // lang.hitch lang.isArray - "dojo/mouse", // mouse.isLeft - "dojo/_base/sniff", // has("webkit") - "dojo/_base/window", // win.body - "dojo/window", // winUtils.scrollIntoView - "../a11y" // a11y.hasDefaultTabStop -], function(array, declare, domAttr, domStyle, lang, mouse, has, win, winUtils, a11y){ - -// module: -// dijit/form/_FormWidgetMixin -// summary: -// Mixin for widgets corresponding to native HTML elements such as <checkbox> or <button>, -// which can be children of a <form> node or a `dijit.form.Form` widget. - -return declare("dijit.form._FormWidgetMixin", null, { - // summary: - // Mixin for widgets corresponding to native HTML elements such as <checkbox> or <button>, - // which can be children of a <form> node or a `dijit.form.Form` widget. - // - // description: - // Represents a single HTML element. - // All these widgets should have these attributes just like native HTML input elements. - // You can set them during widget construction or afterwards, via `dijit._Widget.attr`. - // - // They also share some common methods. - - // name: [const] String - // Name used when submitting form; same as "name" attribute or plain HTML elements - name: "", - - // alt: String - // Corresponds to the native HTML <input> element's attribute. - alt: "", - - // value: String - // Corresponds to the native HTML <input> element's attribute. - value: "", - - // type: [const] String - // Corresponds to the native HTML <input> element's attribute. - type: "text", - - // tabIndex: Integer - // Order fields are traversed when user hits the tab key - tabIndex: "0", - _setTabIndexAttr: "focusNode", // force copy even when tabIndex default value, needed since Button is <span> - - // disabled: Boolean - // Should this widget respond to user input? - // In markup, this is specified as "disabled='disabled'", or just "disabled". - disabled: false, - - // intermediateChanges: Boolean - // Fires onChange for each value change or only on demand - intermediateChanges: false, - - // scrollOnFocus: Boolean - // On focus, should this widget scroll into view? - scrollOnFocus: true, - - // Override _WidgetBase mapping id to this.domNode, needs to be on focusNode so <label> etc. - // works with screen reader - _setIdAttr: "focusNode", - - _setDisabledAttr: function(/*Boolean*/ value){ - this._set("disabled", value); - domAttr.set(this.focusNode, 'disabled', value); - if(this.valueNode){ - domAttr.set(this.valueNode, 'disabled', value); - } - this.focusNode.setAttribute("aria-disabled", value ? "true" : "false"); - - if(value){ - // reset these, because after the domNode is disabled, we can no longer receive - // mouse related events, see #4200 - 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 : - ("_setTabIndexAttr" in this) ? this._setTabIndexAttr : "focusNode"; - array.forEach(lang.isArray(attachPointNames) ? attachPointNames : [attachPointNames], function(attachPointName){ - var node = this[attachPointName]; - // complex code because tabIndex=-1 on a <div> doesn't work on FF - if(has("webkit") || a11y.hasDefaultTabStop(node)){ // see #11064 about webkit bug - node.setAttribute('tabIndex', "-1"); - }else{ - node.removeAttribute('tabIndex'); - } - }, this); - }else{ - if(this.tabIndex != ""){ - this.set('tabIndex', this.tabIndex); - } - } - }, - - _onFocus: function(/*String*/ by){ - // If user clicks on the widget, even if the mouse is released outside of it, - // this widget's focusNode should get focus (to mimic native browser hehavior). - // Browsers often need help to make sure the focus via mouse actually gets to the focusNode. - if(by == "mouse" && this.isFocusable()){ - // IE exhibits strange scrolling behavior when refocusing a node so only do it when !focused. - var focusConnector = this.connect(this.focusNode, "onfocus", function(){ - this.disconnect(mouseUpConnector); - this.disconnect(focusConnector); - }); - // 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(win.body(), "onmouseup", function(){ - this.disconnect(mouseUpConnector); - this.disconnect(focusConnector); - // if here, then the mousedown did not focus the focusNode as the default action - if(this.focused){ - this.focus(); - } - }); - } - if(this.scrollOnFocus){ - this.defer(function(){ winUtils.scrollIntoView(this.domNode); }); // without defer, the input caret position can change on mouse click - } - this.inherited(arguments); - }, - - isFocusable: function(){ - // summary: - // Tells if this widget is focusable or not. Used internally by dijit. - // tags: - // protected - return !this.disabled && this.focusNode && (domStyle.get(this.domNode, "display") != "none"); - }, - - focus: function(){ - // summary: - // Put focus on this widget - if(!this.disabled && this.focusNode.focus){ - try{ this.focusNode.focus(); }catch(e){}/*squelch errors from hidden nodes*/ - } - }, - - compare: function(/*anything*/ val1, /*anything*/ val2){ - // summary: - // Compare 2 values (as returned by get('value') for this widget). - // tags: - // protected - 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(/*===== newValue =====*/){ - // summary: - // Callback when this widget's value is changed. - // tags: - // callback - }, - - // _onChangeActive: [private] Boolean - // Indicates that changes to the value should call onChange() callback. - // This is false during widget initialization, to avoid calling onChange() - // when the initial value is set. - _onChangeActive: false, - - _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==false, - // onChange is only called form priorityChange=true events. - // tags: - // private - 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; - } - 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){ - this._onChangeHandle.remove(); - } - // defer allows hidden value processing to run and - // also the onChange handler can safely adjust focus, etc - this._onChangeHandle = this.defer( - function(){ - this._onChangeHandle = null; - this.onChange(newValue); - }); // try to collapse multiple onChange's fired faster than can be processed - } - } - }, - - create: function(){ - // Overrides _Widget.create() - this.inherited(arguments); - this._onChangeActive = true; - }, - - destroy: function(){ - if(this._onChangeHandle){ // destroy called before last onChange has fired - this._onChangeHandle.remove(); - this.onChange(this._lastValueReported); - } - this.inherited(arguments); - } -}); - -}); - -}, -'url:dijit/templates/ProgressBar.html':"<div class=\"dijitProgressBar dijitProgressBarEmpty\" role=\"progressbar\"\n\t><div data-dojo-attach-point=\"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 data-dojo-attach-point=\"labelNode\" class=\"dijitProgressBarLabel\" id=\"${id}_label\"></div\n\t><img data-dojo-attach-point=\"indeterminateHighContrastImage\" class=\"dijitProgressBarIndeterminateHighContrastImage\" alt=\"\"\n/></div>\n", -'dijit/layout/_ContentPaneResizeMixin':function(){ -define("dijit/layout/_ContentPaneResizeMixin", [ - "dojo/_base/array", // array.filter array.forEach - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.has - "dojo/dom-class", // domClass.contains domClass.toggle - "dojo/dom-geometry",// domGeometry.contentBox domGeometry.marginBox - "dojo/_base/lang", // lang.mixin - "dojo/query", // query - "dojo/_base/sniff", // has("ie") - "dojo/_base/window", // win.global - "../registry", // registry.byId - "./utils", // marginBox2contextBox - "../_Contained" -], function(array, declare, domAttr, domClass, domGeometry, lang, query, has, win, - registry, layoutUtils, _Contained){ - -/*===== -var _Contained = dijit._Contained; -=====*/ - -// module: -// dijit/layout/_ContentPaneResizeMixin -// 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. - - -return 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, - - // isLayoutContainer: [protected] Boolean - // Indicates that this widget will call resize() on it's child widgets - // when they become visible. - isLayoutContainer: 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 = this.getParent(); - 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); - - 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(has("ie") ? this.domNode : win.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 = 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 domAttr.has(node, "data-dojo-type") || domAttr.has(node, "dojoType") || domAttr.has(node, "widgetId"); - }), - candidateWidgets = array.filter(childWidgetNodes.map(registry.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) - domClass.toggle(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(); - } - - this._resizeCalled = true; - - this._scheduleLayout(changeSize, resultSize); - }, - - _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; - } - }, - - _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 - - // Set margin box size, unless it wasn't specified, in which case use current size. - if(changeSize){ - domGeometry.setMarginBox(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 || {}; - lang.mixin(mb, changeSize || {}); // changeSize overrides resultSize - if(!("h" in mb) || !("w" in mb)){ - mb = lang.mixin(domGeometry.getMarginBox(cn), mb); // just use domGeometry.setMarginBox() to fill in missing values - } - this._contentBox = layoutUtils.marginBox2contentBox(cn, mb); - }else{ - this._contentBox = domGeometry.getContentBox(cn); - } - - this._layoutChildren(); - - 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(); - } - - if(this._singleChild && this._singleChild.resize){ - var cb = this._contentBox || domGeometry.getContentBox(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. - array.forEach(this.getChildren(), function(widget){ - if(widget.resize){ - widget.resize(); - } - }); - } - }, - - _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{ - var node = this.domNode, parent = this.domNode.parentNode; - return (node.style.display != 'none') && (node.style.visibility != 'hidden') && !domClass.contains(node, "dijitHidden") && - parent && parent.style && (parent.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) - - 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; - } -}); - -}); - -}, -'dijit/WidgetSet':function(){ -define("dijit/WidgetSet", [ - "dojo/_base/array", // array.forEach array.map - "dojo/_base/declare", // declare - "dojo/_base/window", // win.global - "./registry" // to add functions to dijit.registry -], function(array, declare, win, registry){ - - // module: - // dijit/WidgetSet - // summary: - // Legacy registry code. New modules should just use registry. - // Will be removed in 2.0. - - var WidgetSet = declare("dijit.WidgetSet", null, { - // summary: - // A set of widgets indexed by id. A default instance of this class is - // available as `dijit.registry` - // - // example: - // Create a small list of widgets: - // | var ws = new dijit.WidgetSet(); - // | ws.add(dijit.byId("one")); - // | ws.add(dijit.byId("two")); - // | // destroy both: - // | ws.forEach(function(w){ w.destroy(); }); - // - // example: - // Using dijit.registry: - // | dijit.registry.forEach(function(w){ /* do something */ }); - - constructor: function(){ - this._hash = {}; - this.length = 0; - }, - - add: function(/*dijit._Widget*/ widget){ - // summary: - // Add a widget to this list. If a duplicate ID is detected, a error is thrown. - // - // widget: dijit._Widget - // Any dijit._Widget subclass. - if(this._hash[widget.id]){ - throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered"); - } - this._hash[widget.id] = widget; - this.length++; - }, - - remove: function(/*String*/ id){ - // summary: - // Remove a widget from this WidgetSet. Does not destroy the widget; simply - // removes the reference. - if(this._hash[id]){ - delete this._hash[id]; - this.length--; - } - }, - - forEach: function(/*Function*/ func, /* Object? */thisObj){ - // summary: - // Call specified function for each widget in this set. - // - // func: - // A callback function to run for each item. Is passed the widget, the index - // in the iteration, and the full hash, similar to `array.forEach`. - // - // thisObj: - // An optional scope parameter - // - // example: - // Using the default `dijit.registry` instance: - // | dijit.registry.forEach(function(widget){ - // | console.log(widget.declaredClass); - // | }); - // - // returns: - // Returns self, in order to allow for further chaining. - - thisObj = thisObj || win.global; - var i = 0, id; - for(id in this._hash){ - func.call(thisObj, this._hash[id], i++, this._hash); - } - return this; // dijit.WidgetSet - }, - - filter: function(/*Function*/ filter, /* Object? */thisObj){ - // summary: - // Filter down this WidgetSet to a smaller new WidgetSet - // Works the same as `array.filter` and `NodeList.filter` - // - // filter: - // Callback function to test truthiness. Is passed the widget - // reference and the pseudo-index in the object. - // - // thisObj: Object? - // Option scope to use for the filter function. - // - // example: - // Arbitrary: select the odd widgets in this list - // | dijit.registry.filter(function(w, i){ - // | return i % 2 == 0; - // | }).forEach(function(w){ /* odd ones */ }); - - thisObj = thisObj || win.global; - var res = new WidgetSet(), i = 0, id; - for(id in this._hash){ - var w = this._hash[id]; - if(filter.call(thisObj, w, i++, this._hash)){ - res.add(w); - } - } - return res; // dijit.WidgetSet - }, - - byId: function(/*String*/ id){ - // summary: - // Find a widget in this list by it's id. - // example: - // Test if an id is in a particular WidgetSet - // | var ws = new dijit.WidgetSet(); - // | ws.add(dijit.byId("bar")); - // | var t = ws.byId("bar") // returns a widget - // | var x = ws.byId("foo"); // returns undefined - - return this._hash[id]; // dijit._Widget - }, - - byClass: function(/*String*/ cls){ - // summary: - // Reduce this widgetset to a new WidgetSet of a particular `declaredClass` - // - // cls: String - // The Class to scan for. Full dot-notated string. - // - // example: - // Find all `dijit.TitlePane`s in a page: - // | dijit.registry.byClass("dijit.TitlePane").forEach(function(tp){ tp.close(); }); - - var res = new WidgetSet(), id, widget; - for(id in this._hash){ - widget = this._hash[id]; - if(widget.declaredClass == cls){ - res.add(widget); - } - } - return res; // dijit.WidgetSet - }, - - toArray: function(){ - // summary: - // Convert this WidgetSet into a true Array - // - // example: - // Work with the widget .domNodes in a real Array - // | array.map(dijit.registry.toArray(), function(w){ return w.domNode; }); - - var ar = []; - for(var id in this._hash){ - ar.push(this._hash[id]); - } - return ar; // dijit._Widget[] - }, - - map: function(/* Function */func, /* Object? */thisObj){ - // summary: - // Create a new Array from this WidgetSet, following the same rules as `array.map` - // example: - // | var nodes = dijit.registry.map(function(w){ return w.domNode; }); - // - // returns: - // A new array of the returned values. - return array.map(this.toArray(), func, thisObj); // Array - }, - - every: function(func, thisObj){ - // summary: - // A synthetic clone of `array.every` acting explicitly on this WidgetSet - // - // func: Function - // A callback function run for every widget in this list. Exits loop - // when the first false return is encountered. - // - // thisObj: Object? - // Optional scope parameter to use for the callback - - thisObj = thisObj || win.global; - var x = 0, i; - for(i in this._hash){ - if(!func.call(thisObj, this._hash[i], x++, this._hash)){ - return false; // Boolean - } - } - return true; // Boolean - }, - - some: function(func, thisObj){ - // summary: - // A synthetic clone of `array.some` acting explicitly on this WidgetSet - // - // func: Function - // A callback function run for every widget in this list. Exits loop - // when the first true return is encountered. - // - // thisObj: Object? - // Optional scope parameter to use for the callback - - thisObj = thisObj || win.global; - var x = 0, i; - for(i in this._hash){ - if(func.call(thisObj, this._hash[i], x++, this._hash)){ - return true; // Boolean - } - } - return false; // Boolean - } - - }); - - // Add in 1.x compatibility methods to dijit.registry. - // These functions won't show up in the API doc but since they are deprecated anyway, - // that's probably for the best. - array.forEach(["forEach", "filter", "byClass", "map", "every", "some"], function(func){ - registry[func] = WidgetSet.prototype[func]; - }); - - - return WidgetSet; -}); - -}, -'dojo/dnd/Moveable':function(){ -define("dojo/dnd/Moveable", ["../main", "../Evented", "../touch", "./Mover"], function(dojo, Evented, touch) { - // module: - // dojo/dnd/Moveable - // summary: - // TODOC - - -/*===== -dojo.declare("dojo.dnd.__MoveableArgs", [], { - // handle: Node||String - // A node (or node's id), which is used as a mouse handle. - // If omitted, the node itself is used as a handle. - handle: null, - - // delay: Number - // delay move by this number of pixels - delay: 0, - - // skip: Boolean - // skip move of form elements - skip: false, - - // mover: Object - // a constructor of custom Mover - mover: dojo.dnd.Mover -}); -=====*/ - -dojo.declare("dojo.dnd.Moveable", [Evented], { - // object attributes (for markup) - handle: "", - delay: 0, - skip: false, - - constructor: function(node, params){ - // summary: - // an object, which makes a node moveable - // node: Node - // a node (or node's id) to be moved - // params: dojo.dnd.__MoveableArgs? - // optional parameters - this.node = dojo.byId(node); - if(!params){ params = {}; } - this.handle = params.handle ? dojo.byId(params.handle) : null; - if(!this.handle){ this.handle = this.node; } - this.delay = params.delay > 0 ? params.delay : 0; - this.skip = params.skip; - this.mover = params.mover ? params.mover : dojo.dnd.Mover; - this.events = [ - dojo.connect(this.handle, touch.press, this, "onMouseDown"), - // cancel text selection and text dragging - dojo.connect(this.handle, "ondragstart", this, "onSelectStart"), - dojo.connect(this.handle, "onselectstart", this, "onSelectStart") - ]; - }, - - // markup methods - markupFactory: function(params, node, ctor){ - return new ctor(node, params); - }, - - // methods - destroy: function(){ - // summary: - // stops watching for possible move, deletes all references, so the object can be garbage-collected - dojo.forEach(this.events, dojo.disconnect); - this.events = this.node = this.handle = null; - }, - - // mouse event processors - onMouseDown: function(e){ - // summary: - // event processor for onmousedown/ontouchstart, creates a Mover for the node - // e: Event - // mouse/touch event - if(this.skip && dojo.dnd.isFormElement(e)){ return; } - if(this.delay){ - this.events.push( - dojo.connect(this.handle, touch.move, this, "onMouseMove"), - dojo.connect(this.handle, touch.release, this, "onMouseUp") - ); - this._lastX = e.pageX; - this._lastY = e.pageY; - }else{ - this.onDragDetected(e); - } - dojo.stopEvent(e); - }, - onMouseMove: function(e){ - // summary: - // event processor for onmousemove/ontouchmove, used only for delayed drags - // e: Event - // mouse/touch event - 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){ - // summary: - // event processor for onmouseup, used only for delayed drags - // e: Event - // mouse event - for(var i = 0; i < 2; ++i){ - dojo.disconnect(this.events.pop()); - } - dojo.stopEvent(e); - }, - onSelectStart: function(e){ - // summary: - // event processor for onselectevent and ondragevent - // e: Event - // mouse event - if(!this.skip || !dojo.dnd.isFormElement(e)){ - dojo.stopEvent(e); - } - }, - - // local events - onDragDetected: function(/* Event */ e){ - // summary: - // called when the drag is detected; - // responsible for creation of the mover - new this.mover(this.node, e, this); - }, - onMoveStart: function(/* dojo.dnd.Mover */ mover){ - // summary: - // called before every move operation - dojo.publish("/dnd/move/start", [mover]); - dojo.addClass(dojo.body(), "dojoMove"); - dojo.addClass(this.node, "dojoMoveItem"); - }, - onMoveStop: function(/* dojo.dnd.Mover */ mover){ - // summary: - // called after every move operation - dojo.publish("/dnd/move/stop", [mover]); - dojo.removeClass(dojo.body(), "dojoMove"); - dojo.removeClass(this.node, "dojoMoveItem"); - }, - onFirstMove: function(/* dojo.dnd.Mover */ mover, /* Event */ e){ - // summary: - // called during the very first move notification; - // can be used to initialize coordinates, can be overwritten. - - // default implementation does nothing - }, - onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop, /* Event */ e){ - // summary: - // called during every move notification; - // should actually move the node; can be overwritten. - this.onMoving(mover, leftTop); - var s = mover.node.style; - s.left = leftTop.l + "px"; - s.top = leftTop.t + "px"; - this.onMoved(mover, leftTop); - }, - onMoving: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){ - // summary: - // called before every incremental move; can be overwritten. - - // default implementation does nothing - }, - onMoved: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){ - // summary: - // called after every incremental move; can be overwritten. - - // default implementation does nothing - } -}); - -return dojo.dnd.Moveable; -}); - -}, -'dojo/store/util/SimpleQueryEngine':function(){ -define("dojo/store/util/SimpleQueryEngine", ["../../_base/array"], function(arrayUtil) { - // module: - // dojo/store/util/SimpleQueryEngine - // summary: - // The module defines a simple filtering query engine for object stores. - -return 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 = arrayUtil.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; -}; -}); - -}, -'dijit/typematic':function(){ -define("dijit/typematic", [ - "dojo/_base/array", // array.forEach - "dojo/_base/connect", // connect.connect - "dojo/_base/event", // event.stop - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.mixin, lang.hitch - "dojo/on", - "dojo/_base/sniff", // has("ie") - "." // setting dijit.typematic global -], function(array, connect, event, kernel, lang, on, has, dijit){ - -// module: -// dijit/typematic -// summary: -// These functions are used to repetitively call a user specified callback -// method when a specific key or mouse click over a specific DOM node is -// held down for a specific amount of time. -// Only 1 such event is allowed to occur on the browser page at 1 time. - -var typematic = (dijit.typematic = { - // summary: - // These functions are used to repetitively call a user specified callback - // method when a specific key or mouse click over a specific DOM node is - // held down for a specific amount of time. - // Only 1 such event is allowed to occur on the browser page at 1 time. - - _fireEventAndReload: function(){ - this._timer = null; - this._callback(++this._count, this._node, this._evt); - - // Schedule next event, timer is at most minDelay (default 10ms) to avoid - // browser overload (particularly avoiding starving DOH robot so it never gets to send a mouseup) - 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(lang.hitch(this, "_fireEventAndReload"), this._currentTimeout); - }, - - trigger: function(/*Event*/ evt, /*Object*/ _this, /*DOMNode*/ node, /*Function*/ callback, /*Object*/ obj, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){ - // summary: - // Start a timed, repeating callback sequence. - // If already started, the function call is ignored. - // This method is not normally called by the user but can be - // when the normal listener code is insufficient. - // evt: - // key or mouse event object to pass to the user callback - // _this: - // pointer to the user's widget space. - // node: - // the DOM node object to pass the the callback function - // callback: - // function to call until the sequence is stopped called with 3 parameters: - // count: - // integer representing number of repeated calls (0..n) with -1 indicating the iteration has stopped - // node: - // the DOM node object passed in - // evt: - // key or mouse event object - // obj: - // user space object used to uniquely identify each typematic sequence - // subsequentDelay (optional): - // if > 1, the number of milliseconds until the 3->n events occur - // or else the fractional time multiplier for the next event's delay, default=0.9 - // initialDelay (optional): - // the number of milliseconds until the 2nd event occurs, default=500ms - // minDelay (optional): - // the maximum delay in milliseconds for event to fire, default=10ms - if(obj != this._obj){ - this.stop(); - this._initialDelay = initialDelay || 500; - this._subsequentDelay = subsequentDelay || 0.90; - this._minDelay = minDelay || 10; - this._obj = obj; - this._evt = evt; - this._node = node; - this._currentTimeout = -1; - this._count = -1; - this._callback = lang.hitch(_this, callback); - this._fireEventAndReload(); - this._evt = lang.mixin({faux: true}, evt); - } - }, - - stop: function(){ - // summary: - // Stop an ongoing timed, repeating callback sequence. - if(this._timer){ - clearTimeout(this._timer); - this._timer = null; - } - if(this._obj){ - this._callback(-1, this._node, this._evt); - this._obj = null; - } - }, - - addKeyListener: function(/*DOMNode*/ node, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){ - // summary: - // Start listening for a specific typematic key. - // See also the trigger method for other parameters. - // keyObject: - // an object defining the key to listen for: - // charOrCode: - // the printable character (string) or keyCode (number) to listen for. - // keyCode: - // (deprecated - use charOrCode) the keyCode (number) to listen for (implies charCode = 0). - // charCode: - // (deprecated - use charOrCode) the charCode (number) to listen for. - // ctrlKey: - // desired ctrl key state to initiate the callback sequence: - // - pressed (true) - // - released (false) - // - either (unspecified) - // altKey: - // same as ctrlKey but for the alt key - // shiftKey: - // same as ctrlKey but for the shift key - // returns: - // a connection handle - if(keyObject.keyCode){ - keyObject.charOrCode = keyObject.keyCode; - kernel.deprecated("keyCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0"); - }else if(keyObject.charCode){ - keyObject.charOrCode = String.fromCharCode(keyObject.charCode); - kernel.deprecated("charCode attribute parameter for dijit.typematic.addKeyListener is deprecated. Use charOrCode instead.", "", "2.0"); - } - var handles = [ - on(node, connect._keypress, lang.hitch(this, function(evt){ - if(evt.charOrCode == keyObject.charOrCode && - (keyObject.ctrlKey === undefined || keyObject.ctrlKey == evt.ctrlKey) && - (keyObject.altKey === undefined || keyObject.altKey == evt.altKey) && - (keyObject.metaKey === undefined || keyObject.metaKey == (evt.metaKey || false)) && // IE doesn't even set metaKey - (keyObject.shiftKey === undefined || keyObject.shiftKey == evt.shiftKey)){ - event.stop(evt); - typematic.trigger(evt, _this, node, callback, keyObject, subsequentDelay, initialDelay, minDelay); - }else if(typematic._obj == keyObject){ - typematic.stop(); - } - })), - on(node, "keyup", lang.hitch(this, function(){ - if(typematic._obj == keyObject){ - typematic.stop(); - } - })) - ]; - return { remove: function(){ array.forEach(handles, function(h){ h.remove(); }); } }; - }, - - addMouseListener: function(/*DOMNode*/ node, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){ - // summary: - // Start listening for a typematic mouse click. - // See the trigger method for other parameters. - // returns: - // a connection handle - var handles = [ - on(node, "mousedown", lang.hitch(this, function(evt){ - event.stop(evt); - typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay); - })), - on(node, "mouseup", lang.hitch(this, function(evt){ - if(this._obj){ - event.stop(evt); - } - typematic.stop(); - })), - on(node, "mouseout", lang.hitch(this, function(evt){ - event.stop(evt); - typematic.stop(); - })), - on(node, "mousemove", lang.hitch(this, function(evt){ - evt.preventDefault(); - })), - on(node, "dblclick", lang.hitch(this, function(evt){ - event.stop(evt); - if(has("ie")){ - typematic.trigger(evt, _this, node, callback, node, subsequentDelay, initialDelay, minDelay); - setTimeout(lang.hitch(this, typematic.stop), 50); - } - })) - ]; - return { remove: function(){ array.forEach(handles, function(h){ h.remove(); }); } }; - }, - - addListener: function(/*Node*/ mouseNode, /*Node*/ keyNode, /*Object*/ keyObject, /*Object*/ _this, /*Function*/ callback, /*Number*/ subsequentDelay, /*Number*/ initialDelay, /*Number?*/ minDelay){ - // summary: - // Start listening for a specific typematic key and mouseclick. - // This is a thin wrapper to addKeyListener and addMouseListener. - // See the addMouseListener and addKeyListener methods for other parameters. - // mouseNode: - // the DOM node object to listen on for mouse events. - // keyNode: - // the DOM node object to listen on for key events. - // returns: - // a connection handle - var handles = [ - this.addKeyListener(keyNode, keyObject, _this, callback, subsequentDelay, initialDelay, minDelay), - this.addMouseListener(mouseNode, _this, callback, subsequentDelay, initialDelay, minDelay) - ]; - return { remove: function(){ array.forEach(handles, function(h){ h.remove(); }); } }; - } -}); - -return typematic; - -}); - -}, -'dijit/MenuItem':function(){ -require({cache:{ -'url:dijit/templates/MenuItem.html':"<tr class=\"dijitReset dijitMenuItem\" data-dojo-attach-point=\"focusNode\" role=\"menuitem\" tabIndex=\"-1\"\n\t\tdata-dojo-attach-event=\"onmouseenter:_onHover,onmouseleave:_onUnhover,ondijitclick:_onClick\">\n\t<td class=\"dijitReset dijitMenuItemIconCell\" role=\"presentation\">\n\t\t<img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitMenuItemIcon\" data-dojo-attach-point=\"iconNode\"/>\n\t</td>\n\t<td class=\"dijitReset dijitMenuItemLabel\" colspan=\"2\" data-dojo-attach-point=\"containerNode\"></td>\n\t<td class=\"dijitReset dijitMenuItemAccelKey\" style=\"display: none\" data-dojo-attach-point=\"accelKeyNode\"></td>\n\t<td class=\"dijitReset dijitMenuArrowCell\" role=\"presentation\">\n\t\t<div data-dojo-attach-point=\"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"}}); -define("dijit/MenuItem", [ - "dojo/_base/declare", // declare - "dojo/dom", // dom.setSelectable - "dojo/dom-attr", // domAttr.set - "dojo/dom-class", // domClass.toggle - "dojo/_base/event", // event.stop - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/sniff", // has("ie") - "./_Widget", - "./_TemplatedMixin", - "./_Contained", - "./_CssStateMixin", - "dojo/text!./templates/MenuItem.html" -], function(declare, dom, domAttr, domClass, event, kernel, has, - _Widget, _TemplatedMixin, _Contained, _CssStateMixin, template){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _Contained = dijit._Contained; - var _CssStateMixin = dijit._CssStateMixin; -=====*/ - - // module: - // dijit/MenuItem - // summary: - // A line item in a Menu Widget - - - return declare("dijit.MenuItem", - [_Widget, _TemplatedMixin, _Contained, _CssStateMixin], - { - // summary: - // A line item in a Menu Widget - - // Make 3 columns - // icon, label, and expand arrow (BiDi-dependent) indicating sub-menu - templateString: template, - - baseClass: "dijitMenuItem", - - // label: String - // Menu text - label: '', - _setLabelAttr: { node: "containerNode", type: "innerHTML" }, - - // iconClass: String - // Class to apply to DOMNode to make it display an icon. - iconClass: "dijitNoIcon", - _setIconClassAttr: { node: "iconNode", type: "class" }, - - // accelKey: String - // Text for the accelerator (shortcut) key combination. - // Note that although Menu can display accelerator keys there - // is no infrastructure to actually catch and execute these - // accelerators. - accelKey: "", - - // disabled: Boolean - // If true, the menu item is disabled. - // If false, the menu item is enabled. - disabled: false, - - _fillContent: function(/*DomNode*/ source){ - // If button label is specified as srcNodeRef.innerHTML rather than - // this.params.label, handle it here. - if(source && !("label" in this.params)){ - this.set('label', source.innerHTML); - } - }, - - buildRendering: function(){ - this.inherited(arguments); - var label = this.id+"_text"; - domAttr.set(this.containerNode, "id", label); - if(this.accelKeyNode){ - domAttr.set(this.accelKeyNode, "id", this.id + "_accel"); - label += " " + this.id + "_accel"; - } - this.domNode.setAttribute("aria-labelledby", label); - dom.setSelectable(this.domNode, false); - }, - - _onHover: function(){ - // summary: - // Handler when mouse is moved onto menu item - // tags: - // protected - this.getParent().onItemHover(this); - }, - - _onUnhover: function(){ - // summary: - // Handler when mouse is moved off of menu item, - // possibly to a child menu, or maybe to a sibling - // menuitem or somewhere else entirely. - // tags: - // protected - - // if we are unhovering the currently selected item - // then unselect it - this.getParent().onItemUnhover(this); - - // 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){ - // summary: - // Internal handler for click events on MenuItem. - // tags: - // private - this.getParent().onItemClick(this, evt); - event.stop(evt); - }, - - onClick: function(/*Event*/){ - // summary: - // User defined function to handle clicks - // tags: - // callback - }, - - focus: function(){ - // summary: - // Focus on this MenuItem - try{ - if(has("ie") == 8){ - // needed for IE8 which won't scroll TR tags into view on focus yet calling scrollIntoView creates flicker (#10275) - this.containerNode.focus(); - } - this.focusNode.focus(); - }catch(e){ - // this throws on IE (at least) in some scenarios - } - }, - - _onFocus: function(){ - // summary: - // This is called by the focus manager when focus - // goes to this MenuItem or a child menu. - // tags: - // protected - this._setSelected(true); - this.getParent()._onItemFocus(this); - - this.inherited(arguments); - }, - - _setSelected: function(selected){ - // summary: - // Indicate that this node is the currently selected one - // tags: - // private - - /*** - * TODO: remove this method and calls to it, when _onBlur() is working for MenuItem. - * Currently _onBlur() gets called when focus is moved from the MenuItem to a child menu. - * That's not supposed to happen, but the problem is: - * In order to allow dijit.popup's getTopPopup() to work,a sub menu's popupParent - * points to the parent Menu, bypassing the parent MenuItem... thus the - * MenuItem is not in the chain of active widgets and gets a premature call to - * _onBlur() - */ - - domClass.toggle(this.domNode, "dijitMenuItemSelected", selected); - }, - - setLabel: function(/*String*/ content){ - // summary: - // Deprecated. Use set('label', ...) instead. - // tags: - // deprecated - kernel.deprecated("dijit.MenuItem.setLabel() is deprecated. Use set('label', ...) instead.", "", "2.0"); - this.set("label", content); - }, - - setDisabled: function(/*Boolean*/ disabled){ - // summary: - // Deprecated. Use set('disabled', bool) instead. - // tags: - // deprecated - kernel.deprecated("dijit.Menu.setDisabled() is deprecated. Use set('disabled', bool) instead.", "", "2.0"); - this.set('disabled', disabled); - }, - _setDisabledAttr: function(/*Boolean*/ value){ - // summary: - // Hook for attr('disabled', ...) to work. - // Enable or disable this menu item. - - this.focusNode.setAttribute('aria-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.accelKeyNode.style.display=value?"":"none"; - this.accelKeyNode.innerHTML=value; - //have to use colSpan to make it work in IE - domAttr.set(this.containerNode,'colSpan',value?"1":"2"); - - this._set("accelKey", value); - } - }); -}); - -}, -'dijit/layout/TabController':function(){ -require({cache:{ -'url:dijit/layout/templates/_TabButton.html':"<div role=\"presentation\" data-dojo-attach-point=\"titleNode\" data-dojo-attach-event='onclick:onClick'>\n <div role=\"presentation\" class='dijitTabInnerDiv' data-dojo-attach-point='innerDiv'>\n <div role=\"presentation\" class='dijitTabContent' data-dojo-attach-point='tabContent'>\n \t<div role=\"presentation\" data-dojo-attach-point='focusNode'>\n\t\t <img src=\"${_blankGif}\" alt=\"\" class=\"dijitIcon dijitTabButtonIcon\" data-dojo-attach-point='iconNode' />\n\t\t <span data-dojo-attach-point='containerNode' class='tabLabel'></span>\n\t\t <span class=\"dijitInline dijitTabCloseButton dijitTabCloseIcon\" data-dojo-attach-point='closeNode'\n\t\t \t\tdata-dojo-attach-event='onclick: onClickCloseButton' role=\"presentation\">\n\t\t <span data-dojo-attach-point='closeText' class='dijitTabCloseText'>[x]</span\n\t\t ></span>\n\t\t\t</div>\n </div>\n </div>\n</div>\n"}}); -define("dijit/layout/TabController", [ - "dojo/_base/declare", // declare - "dojo/dom", // dom.setSelectable - "dojo/dom-attr", // domAttr.attr - "dojo/dom-class", // domClass.toggle - "dojo/i18n", // i18n.getLocalization - "dojo/_base/lang", // lang.hitch lang.trim - "./StackController", - "../Menu", - "../MenuItem", - "dojo/text!./templates/_TabButton.html", - "dojo/i18n!../nls/common" -], function(declare, dom, domAttr, domClass, i18n, lang, StackController, Menu, MenuItem, template){ - -/*===== - var StackController = dijit.layout.StackController; - var Menu = dijit.Menu; - var MenuItem = dijit.MenuItem; -=====*/ - - // module: - // dijit/layout/TabController - // summary: - // Set of tabs (the things with titles and a close button, that you click to show a tab panel). - // Used internally by `dijit.layout.TabContainer`. - - var TabButton = declare("dijit.layout._TabButton", StackController.StackButton, { - // summary: - // A tab (the thing you click to select a pane). - // description: - // Contains the title of the pane, and optionally a close-button to destroy the pane. - // This is an internal widget and should not be instantiated directly. - // tags: - // private - - // baseClass: String - // The CSS class applied to the domNode. - baseClass: "dijitTab", - - // Apply dijitTabCloseButtonHover when close button is hovered - cssStateNodes: { - closeNode: "dijitTabCloseButton" - }, - - templateString: template, - - // Override _FormWidget.scrollOnFocus. - // Don't scroll the whole tab container into view when the button is focused. - scrollOnFocus: false, - - buildRendering: function(){ - this.inherited(arguments); - - dom.setSelectable(this.containerNode, false); - }, - - startup: function(){ - this.inherited(arguments); - var n = this.domNode; - - // Required to give IE6 a kick, as it initially hides the - // tabs until they are focused on. - setTimeout(function(){ - n.className = n.className; - }, 1); - }, - - _setCloseButtonAttr: function(/*Boolean*/ disp){ - // summary: - // Hide/show close button - this._set("closeButton", disp); - domClass.toggle(this.innerDiv, "dijitClosable", disp); - this.closeNode.style.display = disp ? "" : "none"; - if(disp){ - var _nlsResources = i18n.getLocalization("dijit", "common"); - if(this.closeNode){ - domAttr.set(this.closeNode,"title", _nlsResources.itemClose); - } - // add context menu onto title button - this._closeMenu = new Menu({ - id: this.id+"_Menu", - dir: this.dir, - lang: this.lang, - textDir: this.textDir, - targetNodeIds: [this.domNode] - }); - - this._closeMenu.addChild(new MenuItem({ - label: _nlsResources.itemClose, - dir: this.dir, - lang: this.lang, - textDir: this.textDir, - onClick: lang.hitch(this, "onClickCloseButton") - })); - }else{ - if(this._closeMenu){ - this._closeMenu.destroyRecursive(); - delete this._closeMenu; - } - } - }, - _setLabelAttr: function(/*String*/ content){ - // summary: - // Hook for set('label', ...) to work. - // description: - // takes an HTML string. - // 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 && !this.params.title){ - this.iconNode.alt = lang.trim(this.containerNode.innerText || this.containerNode.textContent || ''); - } - }, - - destroy: function(){ - if(this._closeMenu){ - this._closeMenu.destroyRecursive(); - delete this._closeMenu; - } - this.inherited(arguments); - } - }); - - var TabController = declare("dijit.layout.TabController", StackController, { - // summary: - // Set of tabs (the things with titles and a close button, that you click to show a tab panel). - // Used internally by `dijit.layout.TabContainer`. - // description: - // Lets the user select the currently shown pane in a TabContainer or StackContainer. - // TabController also monitors the TabContainer, and whenever a pane is - // added or deleted updates itself accordingly. - // tags: - // private - - baseClass: "dijitTabController", - - templateString: "<div role='tablist' data-dojo-attach-event='onkeypress:onkeypress'></div>", - - // tabPosition: String - // Defines where tabs go relative to the content. - // "top", "bottom", "left-h", "right-h" - tabPosition: "top", - - // buttonWidget: Constructor - // The tab widget to create to correspond to each page - buttonWidget: TabButton, - - _rectifyRtlTabList: function(){ - // summary: - // For left/right TabContainer when page is RTL mode, rectify the width of all tabs to be equal, otherwise the tab widths are different in IE - - if(0 >= this.tabPosition.indexOf('-h')){ return; } - if(!this.pane2button){ return; } - - var maxWidth = 0; - for(var pane in this.pane2button){ - var ow = this.pane2button[pane].innerDiv.scrollWidth; - maxWidth = Math.max(maxWidth, ow); - } - //unify the length of all the tabs - for(pane in this.pane2button){ - this.pane2button[pane].innerDiv.style.width = maxWidth + 'px'; - } - } - }); - - TabController.TabButton = TabButton; // for monkey patching - - return TabController; -}); - -}, -'dijit/layout/_LayoutWidget':function(){ -define("dijit/layout/_LayoutWidget", [ - "dojo/_base/lang", // lang.mixin - "../_Widget", - "../_Container", - "../_Contained", - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add domClass.remove - "dojo/dom-geometry", // domGeometry.marginBox - "dojo/dom-style", // domStyle.getComputedStyle - "dojo/_base/sniff", // has("ie") - "dojo/_base/window" // win.global -], function(lang, _Widget, _Container, _Contained, - declare, domClass, domGeometry, domStyle, has, win){ - -/*===== - var _Widget = dijit._Widget; - var _Container = dijit._Container; - var _Contained = dijit._Contained; -=====*/ - - // module: - // dijit/layout/_LayoutWidget - // summary: - // _LayoutWidget Base class for a _Container widget which is responsible for laying out its children. - // Widgets which mixin this code must define layout() to manage placement and sizing of the children. - - - return declare("dijit.layout._LayoutWidget", [_Widget, _Container, _Contained], { - // summary: - // Base class for a _Container widget which is responsible for laying out its children. - // Widgets which mixin this code must define layout() to manage placement and sizing of the children. - - // baseClass: [protected extension] String - // This class name is applied to the widget's domNode - // and also may be used to generate names for sub nodes, - // for example dijitTabContainer-content. - baseClass: "dijitLayoutContainer", - - // isLayoutContainer: [protected] Boolean - // Indicates that this widget is going to call resize() on its - // children widgets, setting their size, when they become visible. - isLayoutContainer: true, - - buildRendering: function(){ - this.inherited(arguments); - domClass.add(this.domNode, "dijitContainer"); - }, - - startup: function(){ - // summary: - // Called after all the widgets have been instantiated and their - // dom nodes have been inserted somewhere under win.doc.body. - // - // Widgets should override this method to do any initialization - // dependent on other widgets existing, and then call - // this superclass method to finish things off. - // - // startup() in subclasses shouldn't do anything - // size related because the size of the widget hasn't been set yet. - - if(this._started){ return; } - - // Need to call inherited first - so that child widgets get started - // up correctly - this.inherited(arguments); - - // If I am a not being controlled by a parent layout widget... - var parent = this.getParent && this.getParent(); - if(!(parent && parent.isLayoutContainer)){ - // Do recursive sizing and layout of all my descendants - // (passing in no argument to resize means that it has to glean the size itself) - this.resize(); - - // Since my parent isn't a layout container, and my style *may be* width=height=100% - // or something similar (either set directly or via a CSS class), - // monitor when viewport size changes so that I can re-layout. - this.connect(win.global, 'onresize', function(){ - // Using function(){} closure to ensure no arguments passed to resize(). - this.resize(); - }); - } - }, - - resize: function(changeSize, resultSize){ - // summary: - // Call this to resize a widget, or after its size has changed. - // description: - // Change size mode: - // When changeSize is specified, changes the marginBox of this widget - // and forces it to relayout its contents accordingly. - // changeSize may specify height, width, or both. - // - // If resultSize is specified it indicates the size the widget will - // become after changeSize has been applied. - // - // Notification mode: - // When changeSize is null, indicates that the caller has already changed - // the size of the widget, or perhaps it changed because the browser - // window was resized. Tells widget to relayout its contents accordingly. - // - // If resultSize is also specified it indicates the size the widget has - // become. - // - // In either mode, this method also: - // 1. Sets this._borderBox and this._contentBox to the new size of - // the widget. Queries the current domNode size if necessary. - // 2. Calls layout() to resize contents (and maybe adjust child widgets). - // - // changeSize: Object? - // Sets the widget to this margin-box size and position. - // May include any/all of the following properties: - // | {w: int, h: int, l: int, t: int} - // - // resultSize: Object? - // The margin-box size of this widget after applying changeSize (if - // changeSize is specified). If caller knows this size and - // passes it in, we don't need to query the browser to get the size. - // | {w: int, h: int} - - var node = this.domNode; - - // set margin box size, unless it wasn't specified, in which case use current size - if(changeSize){ - domGeometry.setMarginBox(node, changeSize); - } - - // If either height or width wasn't specified by the user, then query node for it. - // But note that setting the margin box and then immediately querying dimensions may return - // inaccurate results, so try not to depend on it. - var mb = resultSize || {}; - lang.mixin(mb, changeSize || {}); // changeSize overrides resultSize - if( !("h" in mb) || !("w" in mb) ){ - mb = lang.mixin(domGeometry.getMarginBox(node), mb); // just use domGeometry.marginBox() to fill in missing values - } - - // Compute and save the size of my border box and content box - // (w/out calling domGeometry.getContentBox() since that may fail if size was recently set) - var cs = domStyle.getComputedStyle(node); - var me = domGeometry.getMarginExtents(node, cs); - var be = domGeometry.getBorderExtents(node, cs); - var bb = (this._borderBox = { - w: mb.w - (me.w + be.w), - h: mb.h - (me.h + be.h) - }); - var pe = domGeometry.getPadExtents(node, cs); - this._contentBox = { - l: domStyle.toPixelValue(node, cs.paddingLeft), - t: domStyle.toPixelValue(node, cs.paddingTop), - w: bb.w - pe.w, - h: bb.h - pe.h - }; - - // Callback for widget to adjust size of its children - this.layout(); - }, - - layout: function(){ - // summary: - // Widgets override this method to size and position their contents/children. - // When this is called this._contentBox is guaranteed to be set (see resize()). - // - // This is called after startup(), and also when the widget's size has been - // changed. - // tags: - // protected extension - }, - - _setupChild: function(/*dijit._Widget*/child){ - // summary: - // Common setup for initial children and children which are added after startup - // tags: - // protected extension - - var cls = this.baseClass + "-child " - + (child.baseClass ? this.baseClass + "-" + child.baseClass : ""); - domClass.add(child.domNode, cls); - }, - - addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){ - // Overrides _Container.addChild() to call _setupChild() - this.inherited(arguments); - if(this._started){ - this._setupChild(child); - } - }, - - removeChild: function(/*dijit._Widget*/ child){ - // Overrides _Container.removeChild() to remove class added by _setupChild() - var cls = this.baseClass + "-child" - + (child.baseClass ? - " " + this.baseClass + "-" + child.baseClass : ""); - domClass.remove(child.domNode, cls); - - this.inherited(arguments); - } - }); -}); - -}, -'dijit/popup':function(){ -define("dijit/popup", [ - "dojo/_base/array", // array.forEach array.some - "dojo/aspect", - "dojo/_base/connect", // connect._keypress - "dojo/_base/declare", // declare - "dojo/dom", // dom.isDescendant - "dojo/dom-attr", // domAttr.set - "dojo/dom-construct", // domConstruct.create domConstruct.destroy - "dojo/dom-geometry", // domGeometry.isBodyLtr - "dojo/dom-style", // domStyle.set - "dojo/_base/event", // event.stop - "dojo/keys", - "dojo/_base/lang", // lang.hitch - "dojo/on", - "dojo/_base/sniff", // has("ie") has("mozilla") - "dojo/_base/window", // win.body - "./place", - "./BackgroundIframe", - "." // dijit (defining dijit.popup to match API doc) -], function(array, aspect, connect, declare, dom, domAttr, domConstruct, domGeometry, domStyle, event, keys, lang, on, has, win, - place, BackgroundIframe, dijit){ - - // module: - // dijit/popup - // summary: - // Used to show drop downs (ex: the select list of a ComboBox) - // or popups (ex: right-click context menus) - - - /*===== - dijit.popup.__OpenArgs = function(){ - // popup: Widget - // widget to display - // parent: Widget - // the button etc. that is displaying this popup - // around: DomNode - // DOM node (typically a button); place popup relative to this node. (Specify this *or* "x" and "y" parameters.) - // x: Integer - // Absolute horizontal position (in pixels) to place node at. (Specify this *or* "around" parameter.) - // y: Integer - // Absolute vertical position (in pixels) to place node at. (Specify this *or* "around" parameter.) - // orient: Object|String - // When the around parameter is specified, orient should be a list of positions to try, ex: - // | [ "below", "above" ] - // For backwards compatibility it can also be an (ordered) hash of tuples of the form - // (around-node-corner, popup-node-corner), ex: - // | { "BL": "TL", "TL": "BL" } - // where BL means "bottom left" and "TL" means "top left", etc. - // - // dijit.popup.open() tries to position the popup according to each specified position, in order, - // until the popup appears fully within the viewport. - // - // The default value is ["below", "above"] - // - // When an (x,y) position is specified rather than an around node, orient is either - // "R" or "L". R (for right) means that it tries to put the popup to the right of the mouse, - // specifically positioning the popup's top-right corner at the mouse position, and if that doesn't - // fit in the viewport, then it tries, in order, the bottom-right corner, the top left corner, - // and the top-right corner. - // onCancel: Function - // callback when user has canceled the popup by - // 1. hitting ESC or - // 2. by using the popup widget's proprietary cancel mechanism (like a cancel button in a dialog); - // i.e. whenever popupWidget.onCancel() is called, args.onCancel is called - // onClose: Function - // callback whenever this popup is closed - // onExecute: Function - // callback when user "executed" on the popup/sub-popup by selecting a menu choice, etc. (top menu only) - // padding: dijit.__Position - // adding a buffer around the opening position. This is only useful when around is not set. - this.popup = popup; - this.parent = parent; - this.around = around; - this.x = x; - this.y = y; - this.orient = orient; - this.onCancel = onCancel; - this.onClose = onClose; - this.onExecute = onExecute; - this.padding = padding; - } - =====*/ - - /*===== - dijit.popup = { - // summary: - // Used to show drop downs (ex: the select list of a ComboBox) - // or popups (ex: right-click context menus). - // - // Access via require(["dijit/popup"], function(popup){ ... }). - - moveOffScreen: function(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. - // widget: dijit._WidgetBase - // The widget - }, - - hide: function(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. - // widget: dijit._WidgetBase - // The widget - }, - - open: function(args){ - // summary: - // Popup the widget at the specified position - // example: - // opening at the mouse position - // | popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY}); - // example: - // opening the widget as a dropdown - // | popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}}); - // - // Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback - // (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed. - // args: dijit.popup.__OpenArgs - // Parameters - return {}; // Object specifying which position was chosen - }, - - close: function(popup){ - // summary: - // Close specified popup and any popups that it parented. - // If no popup is specified, closes all popups. - // widget: dijit._WidgetBase? - // The widget, optional - } - }; - =====*/ - - var PopupManager = declare(null, { - // _stack: dijit._Widget[] - // Stack of currently popped up widgets. - // (someone opened _stack[0], and then it opened _stack[1], etc.) - _stack: [], - - // _beginZIndex: Number - // Z-index of the first popup. (If first popup opens other - // popups they get a higher z-index.) - _beginZIndex: 1000, - - _idGen: 1, - - _createWrapper: function(/*Widget*/ widget){ - // summary: - // 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._popupWrapper, - node = widget.domNode; - - 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 = domConstruct.create("div",{ - "class":"dijitPopup", - style:{ display: "none"}, - role: "presentation" - }, win.body()); - wrapper.appendChild(node); - - var s = node.style; - s.display = ""; - s.visibility = ""; - s.position = ""; - s.top = "0px"; - - widget._popupWrapper = wrapper; - aspect.after(widget, "destroy", function(){ - domConstruct.destroy(wrapper); - delete widget._popupWrapper; - }); - } - - return wrapper; - }, - - moveOffScreen: function(/*Widget*/ 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. - - // Create wrapper if not already there - var wrapper = this._createWrapper(widget); - - domStyle.set(wrapper, { - visibility: "hidden", - top: "-9999px", // prevent transient scrollbar causing misalign (#5776), and initial flash in upper left (#10111) - display: "" - }); - }, - - hide: function(/*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); - - domStyle.set(wrapper, "display", "none"); - }, - - getTopPopup: function(){ - // summary: - // Compute the closest ancestor popup that's *not* a child of another popup. - // Ex: For a TooltipDialog with a button that spawns a tree of menus, find the popup of the button. - var stack = this._stack; - for(var pi=stack.length-1; pi > 0 && stack[pi].parent === stack[pi-1].widget; pi--){ - /* do nothing, just trying to get right value for pi */ - } - return stack[pi]; - }, - - open: function(/*dijit.popup.__OpenArgs*/ args){ - // summary: - // Popup the widget at the specified position - // - // example: - // opening at the mouse position - // | popup.open({popup: menuWidget, x: evt.pageX, y: evt.pageY}); - // - // example: - // opening the widget as a dropdown - // | popup.open({parent: this, popup: menuWidget, around: this.domNode, onClose: function(){...}}); - // - // Note that whatever widget called dijit.popup.open() should also listen to its own _onBlur callback - // (fired from _base/focus.js) to know that focus has moved somewhere else and thus the popup should be closed. - - var stack = this._stack, - widget = args.popup, - orient = args.orient || ["below", "below-alt", "above", "above-alt"], - ltr = args.parent ? args.parent.isLeftToRight() : domGeometry.isBodyLtr(), - around = args.around, - id = (args.around && args.around.id) ? (args.around.id+"_dropdown") : ("popup_"+this._idGen++); - - // 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 || !dom.isDescendant(args.parent.domNode, stack[stack.length-1].widget.domNode))){ - this.close(stack[stack.length-1].widget); - } - - // Get pointer to popup wrapper, and create wrapper if it doesn't exist - var wrapper = this._createWrapper(widget); - - - domAttr.set(wrapper, { - id: id, - style: { - zIndex: this._beginZIndex + stack.length - }, - "class": "dijitPopup " + (widget.baseClass || widget["class"] || "").split(" ")[0] +"Popup", - dijitPopupParent: args.parent ? args.parent.id : "" - }); - - if(has("ie") || has("mozilla")){ - if(!widget.bgIframe){ - // setting widget.bgIframe triggers cleanup in _Widget.destroy() - widget.bgIframe = new BackgroundIframe(wrapper); - } - } - - // position the wrapper node and make it visible - var best = around ? - place.around(wrapper, around, orient, ltr, widget.orient ? lang.hitch(widget, "orient") : null) : - place.at(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 - - var handlers = []; - - // provide default escape and tab key handling - // (this will work for any widget, not just menu) - handlers.push(on(wrapper, connect._keypress, lang.hitch(this, function(evt){ - if(evt.charOrCode == keys.ESCAPE && args.onCancel){ - event.stop(evt); - args.onCancel(); - }else if(evt.charOrCode === keys.TAB){ - event.stop(evt); - var topPopup = this.getTopPopup(); - if(topPopup && topPopup.onCancel){ - topPopup.onCancel(); - } - } - }))); - - // watch for cancel/execute events on the popup and notify the caller - // (for a menu, "execute" means clicking an item) - if(widget.onCancel && args.onCancel){ - handlers.push(widget.on("cancel", args.onCancel)); - } - - handlers.push(widget.on(widget.onExecute ? "execute" : "change", lang.hitch(this, function(){ - var topPopup = this.getTopPopup(); - if(topPopup && topPopup.onExecute){ - topPopup.onExecute(); - } - }))); - - stack.push({ - widget: widget, - parent: args.parent, - onExecute: args.onExecute, - onCancel: args.onCancel, - onClose: args.onClose, - handlers: handlers - }); - - if(widget.onOpen){ - // TODO: in 2.0 standardize onShow() (used by StackContainer) and onOpen() (used here) - widget.onOpen(best); - } - - return best; - }, - - close: function(/*Widget?*/ popup){ - // summary: - // Close specified popup and any popups that it parented. - // If no popup is specified, closes all popups. - - var stack = this._stack; - - // Basically work backwards from the top of the stack closing popups - // until we hit the specified popup, but IIRC there was some issue where closing - // 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((popup && array.some(stack, function(elem){return elem.widget == popup;})) || - (!popup && stack.length)){ - var top = stack.pop(), - widget = top.widget, - onClose = top.onClose; - - if(widget.onClose){ - // TODO: in 2.0 standardize onHide() (used by StackContainer) and onClose() (used here) - widget.onClose(); - } - - var h; - while(h = top.handlers.pop()){ h.remove(); } - - // Hide the widget and it's wrapper unless it has already been destroyed in above onClose() etc. - if(widget && widget.domNode){ - this.hide(widget); - } - - if(onClose){ - onClose(); - } - } - } - }); - - return (dijit.popup = new PopupManager()); -}); - -}, -'dijit/_base/manager':function(){ -define("dijit/_base/manager", [ - "dojo/_base/array", - "dojo/_base/config", // defaultDuration - "../registry", - ".." // for setting exports to dijit namespace -], function(array, config, registry, dijit){ - - // module: - // dijit/_base/manager - // summary: - // Shim to methods on registry, plus a few other declarations. - // New code should access dijit/registry directly when possible. - - /*===== - dijit.byId = function(id){ - // summary: - // Returns a widget by it's id, or if passed a widget, no-op (like dom.byId()) - // id: String|dijit._Widget - return registry.byId(id); // dijit._Widget - }; - - dijit.getUniqueId = function(widgetType){ - // summary: - // Generates a unique id for a given widgetType - // widgetType: String - return registry.getUniqueId(widgetType); // String - }; - - dijit.findWidgets = function(root){ - // summary: - // Search subtree under root returning widgets found. - // Doesn't search for nested widgets (ie, widgets inside other widgets). - // root: DOMNode - return registry.findWidgets(root); - }; - - dijit._destroyAll = function(){ - // summary: - // Code to destroy all widgets and do other cleanup on page unload - - return registry._destroyAll(); - }; - - dijit.byNode = function(node){ - // summary: - // Returns the widget corresponding to the given DOMNode - // node: DOMNode - return registry.byNode(node); // dijit._Widget - }; - - dijit.getEnclosingWidget = function(node){ - // summary: - // Returns the widget whose DOM tree contains the specified DOMNode, or null if - // the node is not contained within the DOM tree of any widget - // node: DOMNode - return registry.getEnclosingWidget(node); - }; - =====*/ - array.forEach(["byId", "getUniqueId", "findWidgets", "_destroyAll", "byNode", "getEnclosingWidget"], function(name){ - dijit[name] = registry[name]; - }); - - /*===== - dojo.mixin(dijit, { - // defaultDuration: Integer - // The default fx.animation speed (in ms) to use for all Dijit - // transitional fx.animations, unless otherwise specified - // on a per-instance basis. Defaults to 200, overrided by - // `djConfig.defaultDuration` - defaultDuration: 200 - }); - =====*/ - dijit.defaultDuration = config["defaultDuration"] || 200; - - return dijit; -}); - -}, -'dijit/layout/StackController':function(){ -define("dijit/layout/StackController", [ - "dojo/_base/array", // array.forEach array.indexOf array.map - "dojo/_base/declare", // declare - "dojo/_base/event", // event.stop - "dojo/keys", // keys - "dojo/_base/lang", // lang.getObject - "dojo/_base/sniff", // has("ie") - "../focus", // focus.focus() - "../registry", // registry.byId - "../_Widget", - "../_TemplatedMixin", - "../_Container", - "../form/ToggleButton", - "dojo/i18n!../nls/common" -], function(array, declare, event, keys, lang, has, - focus, registry, _Widget, _TemplatedMixin, _Container, ToggleButton){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _Container = dijit._Container; - var ToggleButton = dijit.form.ToggleButton; -=====*/ - - // module: - // dijit/layout/StackController - // summary: - // Set of buttons to select a page in a `dijit.layout.StackContainer` - - var StackButton = declare("dijit.layout._StackButton", ToggleButton, { - // summary: - // Internal widget used by StackContainer. - // description: - // The button-like or tab-like object you click to select or delete a page - // tags: - // private - - // Override _FormWidget.tabIndex. - // StackContainer buttons are not in the tab order by default. - // Probably we should be calling this.startupKeyNavChildren() instead. - tabIndex: "-1", - - // closeButton: Boolean - // When true, display close button for this tab - closeButton: false, - - _setCheckedAttr: function(/*Boolean*/ value, /*Boolean?*/ priorityChange){ - this.inherited(arguments); - this.focusNode.removeAttribute("aria-pressed"); - }, - - buildRendering: function(/*Event*/ evt){ - this.inherited(arguments); - (this.focusNode || this.domNode).setAttribute("role", "tab"); - }, - - onClick: function(/*Event*/ /*===== evt =====*/){ - // summary: - // This is for TabContainer where the tabs are <span> rather than button, - // so need to set focus explicitly (on some browsers) - // Note that you shouldn't override this method, but you can connect to it. - focus.focus(this.focusNode); - - // ... now let StackController catch the event and tell me what to do - }, - - onClickCloseButton: function(/*Event*/ evt){ - // summary: - // StackContainer connects to this function; if your widget contains a close button - // then clicking it should call this function. - // Note that you shouldn't override this method, but you can connect to it. - evt.stopPropagation(); - } - }); - - - var StackController = declare("dijit.layout.StackController", [_Widget, _TemplatedMixin, _Container], { - // summary: - // Set of buttons to select a page in a `dijit.layout.StackContainer` - // description: - // Monitors the specified StackContainer, and whenever a page is - // added, deleted, or selected, updates itself accordingly. - - baseClass: "dijitStackController", - - templateString: "<span role='tablist' data-dojo-attach-event='onkeypress'></span>", - - // containerId: [const] String - // The id of the page container that I point to - containerId: "", - - // buttonWidget: [const] Constructor - // The button widget to create to correspond to each page - buttonWidget: StackButton, - - constructor: function(){ - this.pane2button = {}; // mapping from pane id to buttons - this.pane2connects = {}; // mapping from pane id to this.connect() handles - this.pane2watches = {}; // mapping from pane id to watch() handles - }, - - postCreate: function(){ - this.inherited(arguments); - - // Listen to notifications from StackContainer - 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(/*Object*/ info){ - // summary: - // Called after StackContainer has finished initializing - // tags: - // private - array.forEach(info.children, this.onAddChild, this); - if(info.selected){ - // Show button corresponding to selected pane (unless selected - // is null because there are no panes) - this.onSelectChild(info.selected); - } - }, - - destroy: function(){ - for(var pane in this.pane2button){ - this.onRemoveChild(registry.byId(pane)); - } - this.inherited(arguments); - }, - - onAddChild: function(/*dijit._Widget*/ page, /*Integer?*/ insertIndex){ - // summary: - // Called whenever a page is added to the container. - // Create button corresponding to the page. - // tags: - // private - - // create an instance of the button widget - // (remove typeof buttonWidget == string support in 2.0) - var cls = lang.isString(this.buttonWidget) ? lang.getObject(this.buttonWidget) : this.buttonWidget; - var button = new cls({ - id: this.id + "_" + page.id, - label: page.title, - dir: page.dir, - lang: page.lang, - textDir: page.textDir, - showLabel: page.showTitle, - iconClass: page.iconClass, - closeButton: page.closable, - title: page.tooltip - }); - button.focusNode.setAttribute("aria-selected", "false"); - - - // 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] = array.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', lang.hitch(this,"onButtonClick", page)), - this.connect(button, 'onClickCloseButton', lang.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 - if(!this._currentChild){ // put the first child into the tab order - button.focusNode.setAttribute("tabIndex", "0"); - button.focusNode.setAttribute("aria-selected", "true"); - this._currentChild = page; - } - // make sure all tabs have the same length - if(!this.isLeftToRight() && has("ie") && this._rectifyRtlTabList){ - this._rectifyRtlTabList(); - } - }, - - onRemoveChild: function(/*dijit._Widget*/ page){ - // summary: - // Called whenever a page is removed from the container. - // Remove the button corresponding to the page. - // tags: - // private - - if(this._currentChild === page){ this._currentChild = null; } - - // disconnect/unwatch connections/watches related to page being removed - array.forEach(this.pane2connects[page.id], lang.hitch(this, "disconnect")); - delete this.pane2connects[page.id]; - array.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); - delete this.pane2button[page.id]; - button.destroy(); - } - delete page.controlButton; - }, - - onSelectChild: function(/*dijit._Widget*/ page){ - // summary: - // Called when a page has been selected in the StackContainer, either by me or by another StackController - // tags: - // private - - if(!page){ return; } - - if(this._currentChild){ - var oldButton=this.pane2button[this._currentChild.id]; - oldButton.set('checked', false); - oldButton.focusNode.setAttribute("aria-selected", "false"); - oldButton.focusNode.setAttribute("tabIndex", "-1"); - } - - var newButton=this.pane2button[page.id]; - newButton.set('checked', true); - newButton.focusNode.setAttribute("aria-selected", "true"); - this._currentChild = page; - newButton.focusNode.setAttribute("tabIndex", "0"); - var container = registry.byId(this.containerId); - container.containerNode.setAttribute("aria-labelledby", newButton.id); - }, - - onButtonClick: function(/*dijit._Widget*/ page){ - // summary: - // Called whenever one of my child buttons is pressed in an attempt to select a page - // tags: - // private - - if(this._currentChild.id === page.id) { - //In case the user clicked the checked button, keep it in the checked state because it remains to be the selected stack page. - var button=this.pane2button[page.id]; - button.set('checked', true); - } - var container = registry.byId(this.containerId); - container.selectChild(page); - }, - - onCloseButtonClick: function(/*dijit._Widget*/ page){ - // summary: - // Called whenever one of my child buttons [X] is pressed in an attempt to close a page - // tags: - // private - - var container = registry.byId(this.containerId); - container.closeChild(page); - if(this._currentChild){ - var b = this.pane2button[this._currentChild.id]; - if(b){ - focus.focus(b.focusNode || b.domNode); - } - } - }, - - // TODO: this is a bit redundant with forward, back api in StackContainer - adjacent: function(/*Boolean*/ forward){ - // summary: - // Helper for onkeypress to find next/previous button - // tags: - // private - - if(!this.isLeftToRight() && (!this.tabPosition || /top|bottom/.test(this.tabPosition))){ forward = !forward; } - // find currently focused button in children array - var children = this.getChildren(); - var current = array.indexOf(children, this.pane2button[this._currentChild.id]); - // pick next button to focus on - var offset = forward ? 1 : children.length - 1; - return children[ (current + offset) % children.length ]; // dijit._Widget - }, - - onkeypress: function(/*Event*/ e){ - // summary: - // Handle keystrokes on the page list, for advancing to next/previous button - // and closing the current page if the page is closable. - // tags: - // private - - if(this.disabled || e.altKey ){ return; } - var forward = null; - if(e.ctrlKey || !e._djpage){ - switch(e.charOrCode){ - case keys.LEFT_ARROW: - case keys.UP_ARROW: - if(!e._djpage){ forward = false; } - break; - case keys.PAGE_UP: - if(e.ctrlKey){ forward = false; } - break; - case keys.RIGHT_ARROW: - case keys.DOWN_ARROW: - if(!e._djpage){ forward = true; } - break; - case keys.PAGE_DOWN: - if(e.ctrlKey){ forward = true; } - break; - case keys.HOME: - case keys.END: - var children = this.getChildren(); - if(children && children.length){ - children[e.charOrCode == keys.HOME ? 0 : children.length-1].onClick(); - } - event.stop(e); - break; - case keys.DELETE: - if(this._currentChild.closable){ - this.onCloseButtonClick(this._currentChild); - } - event.stop(e); - break; - default: - if(e.ctrlKey){ - if(e.charOrCode === keys.TAB){ - this.adjacent(!e.shiftKey).onClick(); - event.stop(e); - }else if(e.charOrCode == "w"){ - if(this._currentChild.closable){ - this.onCloseButtonClick(this._currentChild); - } - event.stop(e); // avoid browser tab closing. - } - } - } - // handle next/previous page navigation (left/right arrow, etc.) - if(forward !== null){ - this.adjacent(forward).onClick(); - event.stop(e); - } - } - }, - - onContainerKeyPress: function(/*Object*/ info){ - // summary: - // Called when there was a keypress on the container - // tags: - // private - info.e._djpage = info.page; - this.onkeypress(info.e); - } - }); - - StackController.StackButton = StackButton; // for monkey patching - - return StackController; -}); - -}, -'dojo/dnd/Mover':function(){ -define("dojo/dnd/Mover", ["../main", "../Evented", "../touch", "./common", "./autoscroll"], function(dojo, Evented, touch) { - // module: - // dojo/dnd/Mover - // summary: - // TODOC - - -dojo.declare("dojo.dnd.Mover", [Evented], { - constructor: function(node, e, host){ - // summary: - // 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 - // e: Event - // a mouse event, which started the move; - // only pageX and pageY properties are used - // host: Object? - // object which implements the functionality of the move, - // and defines proper events (onMoveStart and onMoveStop) - this.node = dojo.byId(node); - this.marginBox = {l: e.pageX, t: e.pageY}; - this.mouseButton = e.button; - var h = (this.host = host), d = node.ownerDocument; - this.events = [ - // At the start of a drag, onFirstMove is called, and then the following two - // connects are disconnected - dojo.connect(d, touch.move, this, "onFirstMove"), - - // These are called continually during the drag - dojo.connect(d, touch.move, this, "onMouseMove"), - - // And these are called at the end of the drag - dojo.connect(d, touch.release, this, "onMouseUp"), - - // cancel text selection and text dragging - dojo.connect(d, "ondragstart", dojo.stopEvent), - dojo.connect(d.body, "onselectstart", dojo.stopEvent) - ]; - // notify that the move has started - if(h && h.onMoveStart){ - h.onMoveStart(this); - } - }, - // mouse event processors - onMouseMove: function(e){ - // summary: - // event processor for onmousemove/ontouchmove - // e: 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); - dojo.stopEvent(e); - }, - onMouseUp: function(e){ - 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); - }, - // utilities - onFirstMove: function(e){ - // summary: - // 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){ - case "relative": - case "absolute": - // assume that left and top values are in pixels already - l = Math.round(parseFloat(s.left)) || 0; - t = Math.round(parseFloat(s.top)) || 0; - break; - default: - s.position = "absolute"; // enforcing the absolute mode - var m = dojo.marginBox(this.node); - // event.pageX/pageY (which we used to generate the initial - // margin box) includes padding and margin set on the body. - // However, setting the node's position to absolute and then - // doing dojo.marginBox on it *doesn't* take that additional - // 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. - 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); - } - - // Disconnect onmousemove and ontouchmove events that call this function - dojo.disconnect(this.events.shift()); - }, - destroy: function(){ - // summary: - // stops the move, deletes all references, so the object can be garbage-collected - dojo.forEach(this.events, dojo.disconnect); - // undo global settings - var h = this.host; - if(h && h.onMoveStop){ - h.onMoveStop(this); - } - // destroy objects - this.events = this.node = this.host = null; - } -}); - -return dojo.dnd.Mover; -}); - -}, -'dijit/layout/TabContainer':function(){ -define("dijit/layout/TabContainer", [ - "dojo/_base/lang", // lang.getObject - "dojo/_base/declare", // declare - "./_TabContainerBase", - "./TabController", - "./ScrollingTabController" -], function(lang, declare, _TabContainerBase, TabController, ScrollingTabController){ - -/*===== - var _TabContainerBase = dijit.layout._TabContainerBase; - var TabController = dijit.layout.TabController; - var ScrollingTabController = dijit.layout.ScrollingTabController; -=====*/ - - // module: - // dijit/layout/TabContainer - // summary: - // A Container with tabs to select each child (only one of which is displayed at a time). - - - return declare("dijit.layout.TabContainer", _TabContainerBase, { - // summary: - // A Container with tabs to select each child (only one of which is displayed at a time). - // description: - // A TabContainer is a container that has multiple panes, but shows only - // one pane at a time. There are a set of tabs corresponding to each pane, - // where each tab has the name (aka title) of the pane, and optionally a close button. - - // 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, - - // useSlider: [const] Boolean - // True if a slider should be used to select tabs when they are too - // wide to fit the TabContainer, false otherwise. - useSlider: true, - - // controllerWidget: String - // An optional parameter to override the widget used to display the tab labels - controllerWidget: "", - - _makeController: function(/*DomNode*/ srcNode){ - // summary: - // Instantiate tablist controller widget and return reference to it. - // Callback from _TabContainerBase.postCreate(). - // tags: - // protected extension - - var cls = this.baseClass + "-tabs" + (this.doLayout ? "" : " dijitTabNoLayout"), - TabController = lang.getObject(this.controllerWidget); - - return new TabController({ - id: this.id + "_tablist", - dir: this.dir, - lang: this.lang, - textDir: this.textDir, - 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 - }, srcNode); - }, - - postMixInProperties: function(){ - this.inherited(arguments); - - // Scrolling controller only works for horizontal non-nested tabs - if(!this.controllerWidget){ - this.controllerWidget = (this.tabPosition == "top" || this.tabPosition == "bottom") && !this.nested ? - "dijit.layout.ScrollingTabController" : "dijit.layout.TabController"; - } - } - }); -}); - -}, -'dijit/BackgroundIframe':function(){ -define("dijit/BackgroundIframe", [ - "require", // require.toUrl - ".", // to export dijit.BackgroundIframe - "dojo/_base/config", - "dojo/dom-construct", // domConstruct.create - "dojo/dom-style", // domStyle.set - "dojo/_base/lang", // lang.extend lang.hitch - "dojo/on", - "dojo/_base/sniff", // has("ie"), has("mozilla"), has("quirks") - "dojo/_base/window" // win.doc.createElement -], function(require, dijit, config, domConstruct, domStyle, lang, on, has, win){ - - // module: - // dijit/BackgroundIFrame - // summary: - // new dijit.BackgroundIframe(node) - // Makes a background iframe as a child of node, that fills - // area (and position) of node - - // TODO: remove _frames, it isn't being used much, since popups never release their - // iframes (see [22236]) - var _frames = new function(){ - // summary: - // cache of iframes - - var queue = []; - - this.pop = function(){ - var iframe; - if(queue.length){ - iframe = queue.pop(); - iframe.style.display=""; - }else{ - if(has("ie") < 9){ - var burl = config["dojoBlankHtmlUrl"] || require.toUrl("dojo/resources/blank.html") || "javascript:\"\""; - var html="<iframe src='" + burl + "' role='presentation'" - + " style='position: absolute; left: 0px; top: 0px;" - + "z-index: -1; filter:Alpha(Opacity=\"0\");'>"; - iframe = win.doc.createElement(html); - }else{ - iframe = domConstruct.create("iframe"); - iframe.src = 'javascript:""'; - iframe.className = "dijitBackgroundIframe"; - iframe.setAttribute("role", "presentation"); - domStyle.set(iframe, "opacity", 0.1); - } - iframe.tabIndex = -1; // Magic to prevent iframe from getting focus on tab keypress - as style didn't work. - } - return iframe; - }; - - this.push = function(iframe){ - iframe.style.display="none"; - queue.push(iframe); - } - }(); - - - dijit.BackgroundIframe = function(/*DomNode*/ node){ - // summary: - // For IE/FF z-index schenanigans. id attribute is required. - // - // description: - // new dijit.BackgroundIframe(node) - // Makes a background iframe as a child of node, that fills - // area (and position) of node - - if(!node.id){ throw new Error("no id"); } - if(has("ie") || has("mozilla")){ - var iframe = (this.iframe = _frames.pop()); - node.appendChild(iframe); - if(has("ie")<7 || has("quirks")){ - this.resize(node); - this._conn = on(node, 'resize', lang.hitch(this, function(){ - this.resize(node); - })); - }else{ - domStyle.set(iframe, { - width: '100%', - height: '100%' - }); - } - } - }; - - lang.extend(dijit.BackgroundIframe, { - resize: function(node){ - // summary: - // 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){ - domStyle.set(this.iframe, { - width: node.offsetWidth + 'px', - height: node.offsetHeight + 'px' - }); - } - }, - destroy: function(){ - // summary: - // destroy the iframe - if(this._conn){ - this._conn.remove(); - this._conn = null; - } - if(this.iframe){ - _frames.push(this.iframe); - delete this.iframe; - } - } - }); - - return dijit.BackgroundIframe; -}); - -}, -'url:dijit/templates/Menu.html':"<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\" data-dojo-attach-event=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" data-dojo-attach-point=\"containerNode\"></tbody>\n</table>\n", -'dojo/dnd/Avatar':function(){ -define("dojo/dnd/Avatar", ["../main", "./common"], function(dojo) { - // module: - // dojo/dnd/Avatar - // summary: - // TODOC - - -dojo.declare("dojo.dnd.Avatar", null, { - // summary: - // Object that represents transferred DnD items visually - // manager: Object - // a DnD manager object - - constructor: function(manager){ - this.manager = manager; - this.construct(); - }, - - // methods - construct: function(){ - // summary: - // constructor function; - // it is separate so it can be (dynamically) overwritten in case of need - this.isA11y = dojo.hasClass(dojo.body(),"dijit_a11y"); - var a = dojo.create("table", { - "class": "dojoDndAvatar", - style: { - position: "absolute", - zIndex: "1999", - margin: "0px" - } - }), - source = 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: source.generateText ? this._generateText() : "" - }, td), - k = Math.min(5, this.manager.nodes.length), i = 0; - // we have to set the opacity on IE only after the node is live - dojo.attr(tr, { - "class": "dojoDndAvatarHeader", - style: {opacity: 0.9} - }); - for(; i < k; ++i){ - if(source.creator){ - // create an avatar representation of the node - node = source._normalizedCreator(source.getItem(this.manager.nodes[i].id).data, "avatar").node; - }else{ - // or just clone the node and hope it works - node = this.manager.nodes[i].cloneNode(true); - if(node.tagName.toLowerCase() == "tr"){ - // insert extra table nodes - var table = dojo.create("table"), - tbody = dojo.create("tbody", null, table); - tbody.appendChild(node); - node = table; - } - } - 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(){ - // summary: - // destructor for the avatar; called to remove all references so it can be garbage-collected - dojo.destroy(this.node); - this.node = false; - }, - update: function(){ - // summary: - // updates the avatar to reflect the current DnD state - dojo[(this.manager.canDropFlag ? "add" : "remove") + "Class"](this.node, "dojoDndAvatarCanDrop"); - if (this.isA11y){ - var icon = dojo.byId("a11yIcon"); - var text = '+'; // assume canDrop && copy - if (this.manager.canDropFlag && !this.manager.copy) { - text = '< '; // canDrop && move - }else if (!this.manager.canDropFlag && !this.manager.copy) { - text = "o"; //!canDrop && move - }else if(!this.manager.canDropFlag){ - text = 'x'; // !canDrop && copy - } - icon.innerHTML=text; - } - // replace text - dojo.query(("tr.dojoDndAvatarHeader td span" +(this.isA11y ? " span" : "")), this.node).forEach( - function(node){ - node.innerHTML = this._generateText(); - }, this); - }, - _generateText: function(){ - // summary: generates a proper text to reflect copying or moving of items - return this.manager.nodes.length.toString(); - } -}); - -return dojo.dnd.Avatar; -}); - -}, -'dijit/form/Button':function(){ -require({cache:{ -'url:dijit/form/templates/Button.html':"<span class=\"dijit dijitReset dijitInline\" role=\"presentation\"\n\t><span class=\"dijitReset dijitInline dijitButtonNode\"\n\t\tdata-dojo-attach-event=\"ondijitclick:_onClick\" role=\"presentation\"\n\t\t><span class=\"dijitReset dijitStretch dijitButtonContents\"\n\t\t\tdata-dojo-attach-point=\"titleNode,focusNode\"\n\t\t\trole=\"button\" aria-labelledby=\"${id}_label\"\n\t\t\t><span class=\"dijitReset dijitInline dijitIcon\" data-dojo-attach-point=\"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\tdata-dojo-attach-point=\"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\ttabIndex=\"-1\" role=\"presentation\" data-dojo-attach-point=\"valueNode\"\n/></span>\n"}}); -define("dijit/form/Button", [ - "require", - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.toggle - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.trim - "dojo/ready", - "./_FormWidget", - "./_ButtonMixin", - "dojo/text!./templates/Button.html" -], function(require, declare, domClass, kernel, lang, ready, _FormWidget, _ButtonMixin, template){ - -/*===== - var _FormWidget = dijit.form._FormWidget; - var _ButtonMixin = dijit.form._ButtonMixin; -=====*/ - -// module: -// dijit/form/Button -// summary: -// Button widget - -// Back compat w/1.6, remove for 2.0 -if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/form/DropDownButton", "dijit/form/ComboButton", "dijit/form/ToggleButton"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - -return declare("dijit.form.Button", [_FormWidget, _ButtonMixin], { - // summary: - // Basically the same thing as a normal HTML button, but with special styling. - // description: - // Buttons can display a label, an icon, or both. - // A label should always be specified (through innerHTML) or the label - // attribute. It can be hidden via showLabel=false. - // example: - // | <button data-dojo-type="dijit.form.Button" onClick="...">Hello world</button> - // - // example: - // | var button1 = new dijit.form.Button({label: "hello world", onClick: foo}); - // | dojo.body().appendChild(button1.domNode); - - // showLabel: Boolean - // Set this to true to hide the label text and display only the icon. - // (If showLabel=false then iconClass must be specified.) - // Especially useful for toolbars. - // If showLabel=true, the label will become the title (a.k.a. tooltip/hint) of the icon. - // - // The exception case is for computers in high-contrast mode, where the label - // will still be displayed, since the icon doesn't appear. - showLabel: true, - - // iconClass: String - // Class to apply to DOMNode in button to make it display an icon - iconClass: "dijitNoIcon", - _setIconClassAttr: { node: "iconNode", type: "class" }, - - baseClass: "dijitButton", - - templateString: template, - - // Map widget attributes to DOMNode attributes. - _setValueAttr: "valueNode", - - _onClick: function(/*Event*/ e){ - // summary: - // Internal function to handle click actions - var ok = this.inherited(arguments); - if(ok){ - if(this.valueNode){ - this.valueNode.click(); - e.preventDefault(); // cancel BUTTON click and continue with hidden INPUT click - // leave ok = true so that subclasses can do what they need to do - } - } - return ok; - }, - - _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))){ - var sourceLabel = lang.trim(source.innerHTML); - if(sourceLabel){ - this.label = sourceLabel; // _applyAttributes will be called after buildRendering completes to update the DOM - } - } - }, - - _setShowLabelAttr: function(val){ - if(this.containerNode){ - domClass.toggle(this.containerNode, "dijitDisplayNone", !val); - } - this._set("showLabel", val); - }, - - setLabel: function(/*String*/ content){ - // summary: - // Deprecated. Use set('label', ...) instead. - kernel.deprecated("dijit.form.Button.setLabel() is deprecated. Use set('label', ...) instead.", "", "2.0"); - this.set("label", content); - }, - - _setLabelAttr: function(/*String*/ content){ - // summary: - // Hook for set('label', ...) to work. - // description: - // Set the label (text) of the button; takes an HTML string. - // If the label is hidden (showLabel=false) then and no title has - // been specified, then label is also set as title attribute of icon. - this.inherited(arguments); - if(!this.showLabel && !("title" in this.params)){ - this.titleNode.title = lang.trim(this.containerNode.innerText || this.containerNode.textContent || ''); - } - } -}); - - -}); - - -}, -'url:dijit/layout/templates/TabContainer.html':"<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" data-dojo-attach-point=\"tablistNode\"></div>\n\t<div data-dojo-attach-point=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" data-dojo-attach-point=\"containerNode\"></div>\n</div>\n", -'dojo/dnd/move':function(){ -define("dojo/dnd/move", ["../main", "./Mover", "./Moveable"], function(dojo) { - // module: - // dojo/dnd/move - // summary: - // TODOC - - -/*===== -dojo.declare("dojo.dnd.move.__constrainedMoveableArgs", [dojo.dnd.__MoveableArgs], { - // constraints: Function - // Calculates a constraint box. - // It is called in a context of the moveable object. - constraints: function(){}, - - // within: Boolean - // restrict move within boundaries. - within: false -}); -=====*/ - -dojo.declare("dojo.dnd.move.constrainedMoveable", dojo.dnd.Moveable, { - // object attributes (for markup) - constraints: function(){}, - within: false, - - constructor: function(node, params){ - // summary: - // an object that makes a node moveable - // node: Node - // a node (or node's id) to be moved - // params: dojo.dnd.move.__constrainedMoveableArgs? - // an optional object with additional parameters; - // the rest is passed to the base class - if(!params){ params = {}; } - this.constraints = params.constraints; - this.within = params.within; - }, - onFirstMove: function(/* dojo.dnd.Mover */ mover){ - // summary: - // called during the very first move notification; - // can be used to initialize coordinates, can be overwritten. - var c = this.constraintBox = this.constraints.call(this, mover); - c.r = c.l + c.w; - c.b = c.t + c.h; - if(this.within){ - var mb = dojo._getMarginSize(mover.node); - c.r -= mb.w; - c.b -= mb.h; - } - }, - onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){ - // summary: - // called during every move notification; - // should actually move the node; can be overwritten. - var c = this.constraintBox, s = mover.node.style; - 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); - } -}); - -/*===== -dojo.declare("dojo.dnd.move.__boxConstrainedMoveableArgs", [dojo.dnd.move.__constrainedMoveableArgs], { - // box: Object - // a constraint box - box: {} -}); -=====*/ - -dojo.declare("dojo.dnd.move.boxConstrainedMoveable", dojo.dnd.move.constrainedMoveable, { - // box: - // object attributes (for markup) - box: {}, - - constructor: function(node, params){ - // summary: - // an object, which makes a node moveable - // node: Node - // a node (or node's id) to be moved - // params: dojo.dnd.move.__boxConstrainedMoveableArgs? - // an optional object with parameters - var box = params && params.box; - this.constraints = function(){ return box; }; - } -}); - -/*===== -dojo.declare("dojo.dnd.move.__parentConstrainedMoveableArgs", [dojo.dnd.move.__constrainedMoveableArgs], { - // area: String - // A parent's area to restrict the move. - // Can be "margin", "border", "padding", or "content". - area: "" -}); -=====*/ - -dojo.declare("dojo.dnd.move.parentConstrainedMoveable", dojo.dnd.move.constrainedMoveable, { - // area: - // object attributes (for markup) - area: "content", - - constructor: function(node, params){ - // summary: - // an object, which makes a node moveable - // node: Node - // a node (or node's id) to be moved - // params: dojo.dnd.move.__parentConstrainedMoveableArgs? - // an optional object with parameters - var area = params && params.area; - this.constraints = function(){ - var n = this.node.parentNode, - s = dojo.getComputedStyle(n), - mb = dojo._getMarginBox(n, s); - if(area == "margin"){ - return mb; // Object - } - var t = dojo._getMarginExtents(n, s); - mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; - if(area == "border"){ - return mb; // Object - } - t = dojo._getBorderExtents(n, s); - mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; - if(area == "padding"){ - return mb; // Object - } - t = dojo._getPadExtents(n, s); - mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; - return mb; // Object - }; - } -}); - -// patching functions one level up for compatibility - -dojo.dnd.constrainedMover = dojo.dnd.move.constrainedMover; -dojo.dnd.boxConstrainedMover = dojo.dnd.move.boxConstrainedMover; -dojo.dnd.parentConstrainedMover = dojo.dnd.move.parentConstrainedMover; - -return dojo.dnd.move; -}); - -}, -'dijit/_WidgetBase':function(){ -define("dijit/_WidgetBase", [ - "require", // require.toUrl - "dojo/_base/array", // array.forEach array.map - "dojo/aspect", - "dojo/_base/config", // config.blankGif - "dojo/_base/connect", // connect.connect - "dojo/_base/declare", // declare - "dojo/dom", // dom.byId - "dojo/dom-attr", // domAttr.set domAttr.remove - "dojo/dom-class", // domClass.add domClass.replace - "dojo/dom-construct", // domConstruct.create domConstruct.destroy domConstruct.place - "dojo/dom-geometry", // isBodyLtr - "dojo/dom-style", // domStyle.set, domStyle.get - "dojo/_base/kernel", - "dojo/_base/lang", // mixin(), isArray(), etc. - "dojo/on", - "dojo/ready", - "dojo/Stateful", // Stateful - "dojo/topic", - "dojo/_base/window", // win.doc.createTextNode - "./registry" // registry.getUniqueId(), registry.findWidgets() -], function(require, array, aspect, config, connect, declare, - dom, domAttr, domClass, domConstruct, domGeometry, domStyle, kernel, - lang, on, ready, Stateful, topic, win, registry){ - -/*===== -var Stateful = dojo.Stateful; -=====*/ - -// module: -// dijit/_WidgetBase -// summary: -// Future base class for all Dijit widgets. - -// For back-compat, remove in 2.0. -if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/_base/manager"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - -// Nested hash listing attributes for each tag, all strings in lowercase. -// ex: {"div": {"style": true, "tabindex" true}, "form": { ... -var tagAttrs = {}; -function getAttrs(obj){ - var ret = {}; - for(var attr in obj){ - ret[attr.toLowerCase()] = true; - } - return ret; -} - -function nonEmptyAttrToDom(attr){ - // summary: - // Returns a setter function that copies the attribute to this.domNode, - // or removes the attribute from this.domNode, depending on whether the - // value is defined or not. - return function(val){ - domAttr[val ? "set" : "remove"](this.domNode, attr, val); - this._set(attr, val); - }; -} - -return declare("dijit._WidgetBase", Stateful, { - // summary: - // Future base class for all Dijit widgets. - // description: - // Future base class for all Dijit widgets. - // _Widget extends this class adding support for various features needed by desktop. - // - // Provides stubs for widget lifecycle methods for subclasses to extend, like postMixInProperties(), buildRendering(), - // postCreate(), startup(), and destroy(), and also public API methods like set(), get(), and watch(). - // - // Widgets can provide custom setters/getters for widget attributes, which are called automatically by set(name, value). - // For an attribute XXX, define methods _setXXXAttr() and/or _getXXXAttr(). - // - // _setXXXAttr can also be a string/hash/array mapping from a widget attribute XXX to the widget's DOMNodes: - // - // - DOM node attribute - // | _setFocusAttr: {node: "focusNode", type: "attribute"} - // | _setFocusAttr: "focusNode" (shorthand) - // | _setFocusAttr: "" (shorthand, maps to this.domNode) - // Maps this.focus to this.focusNode.focus, or (last example) this.domNode.focus - // - // - DOM node innerHTML - // | _setTitleAttr: { node: "titleNode", type: "innerHTML" } - // Maps this.title to this.titleNode.innerHTML - // - // - DOM node innerText - // | _setTitleAttr: { node: "titleNode", type: "innerText" } - // Maps this.title to this.titleNode.innerText - // - // - DOM node CSS class - // | _setMyClassAttr: { node: "domNode", type: "class" } - // Maps this.myClass to this.domNode.className - // - // If the value of _setXXXAttr is an array, then each element in the array matches one of the - // formats of the above list. - // - // If the custom setter is null, no action is performed other than saving the new value - // in the widget (in this). - // - // If no custom setter is defined for an attribute, then it will be copied - // to this.focusNode (if the widget defines a focusNode), or this.domNode otherwise. - // That's only done though for attributes that match DOMNode attributes (title, - // alt, aria-labelledby, etc.) - - // id: [const] String - // A unique, opaque ID string that can be assigned by users or by the - // system. If the developer passes an ID which is known not to be - // unique, the specified ID is ignored and the system-generated ID is - // used instead. - id: "", - _setIdAttr: "domNode", // to copy to this.domNode even for auto-generated id's - - // lang: [const] String - // Rarely used. Overrides the default Dojo locale used to render this widget, - // as defined by the [HTML LANG](http://www.w3.org/TR/html401/struct/dirlang.html#adef-lang) attribute. - // Value must be among the list of locales specified during by the Dojo bootstrap, - // formatted according to [RFC 3066](http://www.ietf.org/rfc/rfc3066.txt) (like en-us). - lang: "", - // set on domNode even when there's a focus node. but don't set lang="", since that's invalid. - _setLangAttr: nonEmptyAttrToDom("lang"), - - // dir: [const] String - // Bi-directional support, as defined by the [HTML DIR](http://www.w3.org/TR/html401/struct/dirlang.html#adef-dir) - // attribute. Either left-to-right "ltr" or right-to-left "rtl". If undefined, widgets renders in page's - // default direction. - dir: "", - // set on domNode even when there's a focus node. but don't set dir="", since that's invalid. - _setDirAttr: nonEmptyAttrToDom("dir"), // to set on domNode even when there's a focus node - - // textDir: String - // Bi-directional support, the main variable which is responsible for the direction of the text. - // The text direction can be different than the GUI direction by using this parameter in creation - // of a widget. - // Allowed values: - // 1. "ltr" - // 2. "rtl" - // 3. "auto" - contextual the direction of a text defined by first strong letter. - // By default is as the page direction. - textDir: "", - - // class: String - // HTML class attribute - "class": "", - _setClassAttr: { node: "domNode", type: "class" }, - - // style: String||Object - // HTML style attributes as cssText string or name/value hash - style: "", - - // title: String - // HTML title attribute. - // - // For form widgets this specifies a tooltip to display when hovering over - // the widget (just like the native HTML title attribute). - // - // For TitlePane or for when this widget is a child of a TabContainer, AccordionContainer, - // etc., it's used to specify the tab label, accordion pane title, etc. - title: "", - - // tooltip: String - // When this widget's title attribute is used to for a tab label, accordion pane title, etc., - // this specifies the tooltip to appear when the mouse is hovered over that text. - tooltip: "", - - // baseClass: [protected] String - // Root CSS class of the widget (ex: dijitTextBox), used to construct CSS classes to indicate - // widget state. - baseClass: "", - - // srcNodeRef: [readonly] DomNode - // pointer to original DOM node - srcNodeRef: null, - - // domNode: [readonly] DomNode - // This is our visible representation of the widget! Other DOM - // Nodes may by assigned to other properties, usually through the - // template system's data-dojo-attach-point syntax, but the domNode - // property is the canonical "top level" node in widget UI. - domNode: null, - - // containerNode: [readonly] DomNode - // Designates where children of the source DOM node will be placed. - // "Children" in this case refers to both DOM nodes and widgets. - // For example, for myWidget: - // - // | <div data-dojo-type=myWidget> - // | <b> here's a plain DOM node - // | <span data-dojo-type=subWidget>and a widget</span> - // | <i> and another plain DOM node </i> - // | </div> - // - // containerNode would point to: - // - // | <b> here's a plain DOM node - // | <span data-dojo-type=subWidget>and a widget</span> - // | <i> and another plain DOM node </i> - // - // In templated widgets, "containerNode" is set via a - // data-dojo-attach-point assignment. - // - // containerNode must be defined for any widget that accepts innerHTML - // (like ContentPane or BorderContainer or even Button), and conversely - // is null for widgets that don't, like TextBox. - containerNode: null, - -/*===== - // _started: Boolean - // startup() has completed. - _started: false, -=====*/ - - // attributeMap: [protected] Object - // Deprecated. Instead of attributeMap, widget should have a _setXXXAttr attribute - // for each XXX attribute to be mapped to the DOM. - // - // attributeMap sets up a "binding" between attributes (aka properties) - // of the widget and the widget's DOM. - // Changes to widget attributes listed in attributeMap will be - // reflected into the DOM. - // - // For example, calling set('title', 'hello') - // on a TitlePane will automatically cause the TitlePane's DOM to update - // with the new title. - // - // attributeMap is a hash where the key is an attribute of the widget, - // and the value reflects a binding to a: - // - // - DOM node attribute - // | focus: {node: "focusNode", type: "attribute"} - // Maps this.focus to this.focusNode.focus - // - // - DOM node innerHTML - // | title: { node: "titleNode", type: "innerHTML" } - // Maps this.title to this.titleNode.innerHTML - // - // - DOM node innerText - // | title: { node: "titleNode", type: "innerText" } - // Maps this.title to this.titleNode.innerText - // - // - DOM node CSS class - // | myClass: { node: "domNode", type: "class" } - // Maps this.myClass to this.domNode.className - // - // If the value is an array, then each element in the array matches one of the - // formats of the above list. - // - // There are also some shorthands for backwards compatibility: - // - string --> { node: string, type: "attribute" }, for example: - // | "focusNode" ---> { node: "focusNode", type: "attribute" } - // - "" --> { node: "domNode", type: "attribute" } - attributeMap: {}, - - // _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: config.blankGif || require.toUrl("dojo/resources/blank.gif"), - - //////////// INITIALIZATION METHODS /////////////////////////////////////// - - postscript: function(/*Object?*/params, /*DomNode|String*/srcNodeRef){ - // summary: - // Kicks off widget instantiation. See create() for details. - // tags: - // private - this.create(params, srcNodeRef); - }, - - create: function(/*Object?*/params, /*DomNode|String?*/srcNodeRef){ - // summary: - // Kick off the life-cycle of a widget - // params: - // Hash of initialization parameters for widget, including - // scalar values (like title, duration etc.) and functions, - // typically callbacks like onClick. - // srcNodeRef: - // If a srcNodeRef (DOM node) is specified: - // - use srcNodeRef.innerHTML as my contents - // - if this is a behavioral widget then apply behavior - // to that srcNodeRef - // - otherwise, replace srcNodeRef with my generated DOM - // tree - // description: - // Create calls a number of widget methods (postMixInProperties, buildRendering, postCreate, - // etc.), some of which of you'll want to override. See http://dojotoolkit.org/reference-guide/dijit/_WidgetBase.html - // for a discussion of the widget creation lifecycle. - // - // Of course, adventurous developers could override create entirely, but this should - // only be done as a last resort. - // tags: - // private - - // store pointer to original DOM tree - this.srcNodeRef = dom.byId(srcNodeRef); - - // For garbage collection. An array of listener handles returned by this.connect() / this.subscribe() - this._connects = []; - - // For widgets internal to this widget, invisible to calling code - this._supportingWidgets = []; - - // this is here for back-compat, remove in 2.0 (but check NodeList-instantiate.html test) - if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; } - - // mix in our passed parameters - if(params){ - this.params = params; - lang.mixin(this, params); - } - this.postMixInProperties(); - - // generate an id for the widget if one wasn't specified - // (be sure to do this before buildRendering() because that function might - // expect the id to be there.) - if(!this.id){ - this.id = registry.getUniqueId(this.declaredClass.replace(/\./g,"_")); - } - registry.add(this); - - this.buildRendering(); - - 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 && this.domNode !== source){ - source.parentNode.replaceChild(this.domNode, source); - } - } - - 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(); - - // If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC. - if(this.srcNodeRef && !this.srcNodeRef.parentNode){ - delete this.srcNodeRef; - } - - this._created = true; - }, - - _applyAttributes: function(){ - // summary: - // Step during widget creation to copy widget attributes to the - // DOM according to attributeMap and _setXXXAttr objects, and also to call - // custom _setXXXAttr() methods. - // - // Skips over blank/false attribute values, unless they were explicitly specified - // as parameters to the widget, since those are the default anyway, - // and setting tabIndex="" is different than not setting tabIndex at all. - // - // For backwards-compatibility reasons attributeMap overrides _setXXXAttr when - // _setXXXAttr is a hash/string/array, but _setXXXAttr as a functions override attributeMap. - // tags: - // private - - // Get list of attributes where this.set(name, value) will do something beyond - // setting this[name] = value. Specifically, attributes that have: - // - associated _setXXXAttr() method/hash/string/array - // - entries in attributeMap. - var ctor = this.constructor, - list = ctor._setterAttrs; - if(!list){ - list = (ctor._setterAttrs = []); - for(var attr in this.attributeMap){ - list.push(attr); - } - - var proto = ctor.prototype; - for(var fxName in proto){ - if(fxName in this.attributeMap){ continue; } - var setterName = "_set" + fxName.replace(/^[a-z]|-[a-zA-Z]/g, function(c){ return c.charAt(c.length-1).toUpperCase(); }) + "Attr"; - if(setterName in proto){ - list.push(fxName); - } - } - } - - // Call this.set() for each attribute that was either specified as parameter to constructor, - // or was found above and has a default non-null value. For correlated attributes like value and displayedValue, the one - // specified as a parameter should take precedence, so apply attributes in this.params last. - // Particularly important for new DateTextBox({displayedValue: ...}) since DateTextBox's default value is - // NaN and thus is not ignored like a default value of "". - array.forEach(list, function(attr){ - if(this.params && attr in this.params){ - // skip this one, do it below - }else if(this[attr]){ - this.set(attr, this[attr]); - } - }, this); - for(var param in this.params){ - this.set(param, this[param]); - } - }, - - postMixInProperties: function(){ - // summary: - // Called after the parameters to the widget have been read-in, - // but before the widget template is instantiated. Especially - // useful to set properties that are referenced in the widget - // template. - // tags: - // protected - }, - - buildRendering: function(){ - // summary: - // Construct the UI for this widget, setting this.domNode. - // Most widgets will mixin `dijit._TemplatedMixin`, which implements this method. - // tags: - // protected - - if(!this.domNode){ - // Create root node if it wasn't created by _Templated - this.domNode = this.srcNodeRef || domConstruct.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( array.map(classes, function(name){ return name+"Rtl"; })); - } - domClass.add(this.domNode, classes); - } - }, - - postCreate: function(){ - // summary: - // Processing after the DOM fragment is created - // description: - // Called after the DOM fragment has been created, but not necessarily - // added to the document. Do not include any operations which rely on - // node dimensions or placement. - // tags: - // protected - }, - - startup: function(){ - // summary: - // Processing after the DOM fragment is added to the document - // description: - // Called after a widget and its children have been created and added to the page, - // and all related widgets have finished their create() cycle, up through postCreate(). - // This is useful for composite widgets that need to control or layout sub-widgets. - // Many layout widgets can use this as a wiring phase. - if(this._started){ return; } - this._started = true; - array.forEach(this.getChildren(), function(obj){ - if(!obj._started && !obj._destroyed && lang.isFunction(obj.startup)){ - obj.startup(); - obj._started = true; - } - }); - }, - - //////////// DESTROY FUNCTIONS //////////////////////////////// - - destroyRecursive: function(/*Boolean?*/ preserveDom){ - // summary: - // Destroy this widget and its descendants - // description: - // This is the generic "destructor" function that all widget users - // should call to cleanly discard with a widget. Once a widget is - // destroyed, it is removed from the manager object. - // preserveDom: - // If true, this method will leave the original DOM structure - // alone of descendant Widgets. Note: This will NOT work with - // dijit._Templated widgets. - - this._beingDestroyed = true; - this.destroyDescendants(preserveDom); - this.destroy(preserveDom); - }, - - destroy: function(/*Boolean*/ preserveDom){ - // summary: - // Destroy this widget, but not its descendants. - // This method will, however, destroy internal widgets such as those used within a template. - // preserveDom: Boolean - // If true, this method will leave the original DOM structure alone. - // Note: This will not yet work with _Templated widgets - - this._beingDestroyed = true; - this.uninitialize(); - - // remove this.connect() and this.subscribe() listeners - var c; - while((c = this._connects.pop())){ - c.remove(); - } - - // destroy widgets created as part of template, etc. - var w; - while((w = this._supportingWidgets.pop())){ - if(w.destroyRecursive){ - w.destroyRecursive(); - }else if(w.destroy){ - w.destroy(); - } - } - - this.destroyRendering(preserveDom); - registry.remove(this.id); - this._destroyed = true; - }, - - destroyRendering: function(/*Boolean?*/ preserveDom){ - // summary: - // Destroys the DOM nodes associated with this widget - // preserveDom: - // If true, this method will leave the original DOM structure alone - // during tear-down. Note: this will not work with _Templated - // widgets yet. - // tags: - // protected - - if(this.bgIframe){ - this.bgIframe.destroy(preserveDom); - delete this.bgIframe; - } - - if(this.domNode){ - if(preserveDom){ - domAttr.remove(this.domNode, "widgetId"); - }else{ - domConstruct.destroy(this.domNode); - } - delete this.domNode; - } - - if(this.srcNodeRef){ - if(!preserveDom){ - domConstruct.destroy(this.srcNodeRef); - } - delete this.srcNodeRef; - } - }, - - destroyDescendants: function(/*Boolean?*/ preserveDom){ - // summary: - // Recursively destroy the children of this widget and their - // descendants. - // preserveDom: - // If true, the preserveDom attribute is passed to all descendant - // widget's .destroy() method. Not for use with _Templated - // widgets. - - // get all direct descendants and destroy them recursively - array.forEach(this.getChildren(), function(widget){ - if(widget.destroyRecursive){ - widget.destroyRecursive(preserveDom); - } - }); - }, - - uninitialize: function(){ - // summary: - // Stub function. Override to implement custom widget tear-down - // behavior. - // tags: - // protected - return false; - }, - - ////////////////// GET/SET, CUSTOM SETTERS, ETC. /////////////////// - - _setStyleAttr: function(/*String||Object*/ value){ - // summary: - // 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: - // Determines which node to set the style on based on style setting - // in attributeMap. - // tags: - // protected - - var mapNode = this.domNode; - - // Note: technically we should revert any style setting made in a previous call - // to his method, but that's difficult to keep track of. - - if(lang.isObject(value)){ - domStyle.set(mapNode, value); - }else{ - if(mapNode.style.cssText){ - mapNode.style.cssText += "; " + value; - }else{ - mapNode.style.cssText = value; - } - } - - this._set("style", value); - }, - - _attrToDom: function(/*String*/ attr, /*String*/ value, /*Object?*/ commands){ - // summary: - // Reflect a widget attribute (title, tabIndex, duration etc.) to - // the widget DOM, as specified by commands parameter. - // If commands isn't specified then it's looked up from attributeMap. - // Note some attributes like "type" - // cannot be processed this way as they are not mutable. - // - // tags: - // private - - commands = arguments.length >= 3 ? commands : this.attributeMap[attr]; - - array.forEach(lang.isArray(commands) ? commands : [commands], function(command){ - - // Get target node and what we are doing to that node - var mapNode = this[command.node || command || "domNode"]; // DOM node - var type = command.type || "attribute"; // class, innerHTML, innerText, or attribute - - switch(type){ - case "attribute": - if(lang.isFunction(value)){ // functions execute in the context of the widget - value = lang.hitch(this, value); - } - - // Get the name of the DOM node attribute; usually it's the same - // as the name of the attribute in the widget (attr), but can be overridden. - // Also maps handler names to lowercase, like onSubmit --> onsubmit - var attrName = command.attribute ? command.attribute : - (/^on[A-Z][a-zA-Z]*$/.test(attr) ? attr.toLowerCase() : attr); - - domAttr.set(mapNode, attrName, value); - break; - case "innerText": - mapNode.innerHTML = ""; - mapNode.appendChild(win.doc.createTextNode(value)); - break; - case "innerHTML": - mapNode.innerHTML = value; - break; - case "class": - domClass.replace(mapNode, value, this[attr]); - break; - } - }, this); - }, - - get: function(name){ - // summary: - // Get a property from a widget. - // name: - // The property to get. - // 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. - // - // For example, if the widget has properties `foo` and `bar` - // and a method named `_getFooAttr()`, calling: - // `myWidget.get("foo")` would be equivalent to calling - // `widget._getFooAttr()` and `myWidget.get("bar")` - // would be equivalent to the expression - // `widget.bar2` - var names = this._getAttrNames(name); - return this[names.g] ? this[names.g]() : this[name]; - }, - - set: function(name, value){ - // summary: - // Set a property on a widget - // name: - // 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 - // setter in the widget. - // - // For example, if the widget has properties `foo` and `bar` - // and a method named `_setFooAttr()`, calling - // `myWidget.set("foo", "Howdy!")` would be equivalent to calling - // `widget._setFooAttr("Howdy!")` and `myWidget.set("bar", 3)` - // would be equivalent to the statement `widget.bar = 3;` - // - // set() may also be called with a hash of name/value pairs, ex: - // - // | myWidget.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 names = this._getAttrNames(name), - setter = this[names.s]; - if(lang.isFunction(setter)){ - // use the explicit setter - var result = setter.apply(this, Array.prototype.slice.call(arguments, 1)); - }else{ - // Mapping from widget attribute to DOMNode attribute/value/etc. - // Map according to: - // 1. attributeMap setting, if one exists (TODO: attributeMap deprecated, remove in 2.0) - // 2. _setFooAttr: {...} type attribute in the widget (if one exists) - // 3. apply to focusNode or domNode if standard attribute name, excluding funcs like onClick. - // Checks if an attribute is a "standard attribute" by whether the DOMNode JS object has a similar - // attribute name (ex: accept-charset attribute matches jsObject.acceptCharset). - // Note also that Tree.focusNode() is a function not a DOMNode, so test for that. - var defaultNode = this.focusNode && !lang.isFunction(this.focusNode) ? "focusNode" : "domNode", - tag = this[defaultNode].tagName, - attrsForTag = tagAttrs[tag] || (tagAttrs[tag] = getAttrs(this[defaultNode])), - map = name in this.attributeMap ? this.attributeMap[name] : - names.s in this ? this[names.s] : - ((names.l in attrsForTag && typeof value != "function") || - /^aria-|^data-|^role$/.test(name)) ? defaultNode : null; - if(map != null){ - this._attrToDom(name, value, map); - } - this._set(name, value); - } - return result || this; - }, - - _attrPairNames: {}, // shared between all widgets - _getAttrNames: function(name){ - // summary: - // Helper function for get() and set(). - // Caches attribute name values so we don't do the string ops every time. - // tags: - // private - - var apn = this._attrPairNames; - if(apn[name]){ return apn[name]; } - var uc = name.replace(/^[a-z]|-[a-zA-Z]/g, function(c){ return c.charAt(c.length-1).toUpperCase(); }); - return (apn[name] = { - n: name+"Node", - s: "_set"+uc+"Attr", // converts dashes to camel case, ex: accept-charset --> _setAcceptCharsetAttr - g: "_get"+uc+"Attr", - l: uc.toLowerCase() // lowercase name w/out dashes, ex: acceptcharset - }); - }, - - _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); - } - }, - - on: function(/*String*/ type, /*Function*/ func){ - // summary: - // Call specified function when event occurs, ex: myWidget.on("click", function(){ ... }). - // description: - // Call specified function when event `type` occurs, ex: `myWidget.on("click", function(){ ... })`. - // Note that the function is not run in any particular scope, so if (for example) you want it to run in the - // widget's scope you must do `myWidget.on("click", lang.hitch(myWidget, func))`. - - return aspect.after(this, this._onMap(type), func, true); - }, - - _onMap: function(/*String*/ type){ - // summary: - // Maps on() type parameter (ex: "mousemove") to method name (ex: "onMouseMove") - var ctor = this.constructor, map = ctor._onMap; - if(!map){ - map = (ctor._onMap = {}); - for(var attr in ctor.prototype){ - if(/^on/.test(attr)){ - map[attr.replace(/^on/, "").toLowerCase()] = attr; - } - } - } - return map[type.toLowerCase()]; // String - }, - - toString: function(){ - // summary: - // Returns a string that represents the widget - // description: - // When a widget is cast to a string, this method will be used to generate the - // output. Currently, it does not implement any sort of reversible - // serialization. - return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String - }, - - getChildren: function(){ - // summary: - // Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode. - // Does not return nested widgets, nor widgets that are part of this widget's template. - return this.containerNode ? registry.findWidgets(this.containerNode) : []; // dijit._Widget[] - }, - - getParent: function(){ - // summary: - // Returns the parent widget of this widget - return registry.getEnclosingWidget(this.domNode.parentNode); - }, - - 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. - // 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 handle = connect.connect(obj, event, this, method); - this._connects.push(handle); - return handle; // _Widget.Handle - }, - - disconnect: function(handle){ - // summary: - // Disconnects handle created by `connect`. - // Also removes handle from this widget's list of connects. - // tags: - // protected - var i = array.indexOf(this._connects, handle); - if(i != -1){ - handle.remove(); - this._connects.splice(i, 1); - } - }, - - subscribe: function(t, method){ - // summary: - // Subscribes to the specified topic and calls the specified method - // of this object and registers for unsubscribe() on widget destroy. - // description: - // Provide widget-specific analog to dojo.subscribe, except with the - // implicit use of this widget as the target object. - // t: String - // The topic - // method: Function - // The callback - // example: - // | var btn = new dijit.form.Button(); - // | // when /my/topic is published, this button changes its label to - // | // be the parameter of the topic. - // | btn.subscribe("/my/topic", function(v){ - // | this.set("label", v); - // | }); - // tags: - // protected - var handle = topic.subscribe(t, lang.hitch(this, method)); - this._connects.push(handle); - return handle; // _Widget.Handle - }, - - unsubscribe: function(/*Object*/ handle){ - // summary: - // Unsubscribes handle created by this.subscribe. - // Also removes handle from this widget's list of subscriptions - // tags: - // protected - this.disconnect(handle); - }, - - isLeftToRight: function(){ - // summary: - // Return this widget's explicit or implicit orientation (true for LTR, false for RTL) - // tags: - // protected - return this.dir ? (this.dir == "ltr") : domGeometry.isBodyLtr(); //Boolean - }, - - isFocusable: function(){ - // summary: - // Return true if this widget can currently be focused - // and false if not - return this.focus && (domStyle.get(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 - // on standard domConstruct.place conventions, or passing a Widget reference that - // contains and addChild member. - // - // description: - // A convenience function provided in all _Widgets, providing a simple - // shorthand mechanism to put an existing (or newly created) Widget - // somewhere in the dom, and allow chaining. - // - // reference: - // The String id of a domNode, a domNode reference, or a reference to a Widget possessing - // an addChild method. - // - // position: - // If passed a string or domNode reference, the position argument - // accepts a string just as domConstruct.place does, one of: "first", "last", - // "before", or "after". - // - // If passed a _Widget reference, and that widget reference has an ".addChild" method, - // it will be called passing this widget instance into that method, supplying the optional - // position index passed. - // - // returns: - // dijit._Widget - // Provides a useful return of the newly created dijit._Widget instance so you - // can "chain" this function by instantiating, placing, then saving the return value - // to a variable. - // - // example: - // | // create a Button with no srcNodeRef, and place it in the body: - // | var button = new dijit.form.Button({ label:"click" }).placeAt(win.body()); - // | // now, 'button' is still the widget reference to the newly created button - // | button.on("click", function(e){ console.log('click'); })); - // - // example: - // | // create a button out of a node with id="src" and append it to id="wrapper": - // | var button = new dijit.form.Button({},"src").placeAt("wrapper"); - // - // example: - // | // place a new button as the first element of some div - // | var button = new dijit.form.Button({ label:"click" }).placeAt("wrapper","first"); - // - // example: - // | // create a contentpane and add it to a TabContainer - // | var tc = dijit.byId("myTabs"); - // | new dijit.layout.ContentPane({ href:"foo.html", title:"Wow!" }).placeAt(tc) - - if(reference.declaredClass && reference.addChild){ - reference.addChild(this, position); - }else{ - domConstruct.place(this.domNode, reference, position); - } - return this; - }, - - getTextDir: function(/*String*/ text,/*String*/ originalDir){ - // summary: - // Return direction of the text. - // The function overridden in the _BidiSupport module, - // its main purpose is to calculate the direction of the - // text, if was defined by the programmer through textDir. - // tags: - // protected. - return originalDir; - }, - - applyTextDir: function(/*===== element, text =====*/){ - // summary: - // The function overridden in the _BidiSupport module, - // originally used for setting element.dir according to this.textDir. - // In this case does nothing. - // element: DOMNode - // text: String - // tags: - // protected. - }, - - defer: function(fcn, delay){ - // summary: - // Wrapper to setTimeout to avoid deferred functions executing - // after the originating widget has been destroyed. - // Returns an object handle with a remove method (that returns null) (replaces clearTimeout). - // fcn: function reference - // delay: Optional number (defaults to 0) - // tags: - // protected. - var timer = setTimeout(lang.hitch(this, - function(){ - timer = null; - if(!this._destroyed){ - lang.hitch(this, fcn)(); - } - }), - delay || 0 - ); - return { - remove: function(){ - if(timer){ - clearTimeout(timer); - timer = null; - } - return null; // so this works well: handle = handle.remove(); - } - }; - } -}); - -}); - -}, -'dijit/form/Form':function(){ -define("dijit/form/Form", [ - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/_base/event", // event.stop - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/sniff", // has("ie") - "../_Widget", - "../_TemplatedMixin", - "./_FormMixin", - "../layout/_ContentPaneResizeMixin" -], function(declare, domAttr, event, kernel, has, _Widget, _TemplatedMixin, _FormMixin, _ContentPaneResizeMixin){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _FormMixin = dijit.form._FormMixin; - var _ContentPaneResizeMixin = dijit.layout._ContentPaneResizeMixin; -=====*/ - - // module: - // dijit/form/Form - // summary: - // Widget corresponding to HTML form tag, for validation and serialization - - - return declare("dijit.form.Form", [_Widget, _TemplatedMixin, _FormMixin, _ContentPaneResizeMixin], { - // summary: - // Widget corresponding to HTML form tag, for validation and serialization - // - // example: - // | <form data-dojo-type="dijit.form.Form" id="myForm"> - // | Name: <input type="text" name="name" /> - // | </form> - // | myObj = {name: "John Doe"}; - // | dijit.byId('myForm').set('value', myObj); - // | - // | myObj=dijit.byId('myForm').get('value'); - - // HTML <FORM> attributes - - // name: String? - // Name of form for scripting. - name: "", - - // action: String? - // Server-side form handler. - action: "", - - // method: String? - // HTTP method used to submit the form, either "GET" or "POST". - method: "", - - // encType: String? - // Encoding type for the form, ex: application/x-www-form-urlencoded. - encType: "", - - // accept-charset: String? - // List of supported charsets. - "accept-charset": "", - - // accept: String? - // List of MIME types for file upload. - accept: "", - - // target: String? - // Target frame for the document to be opened in. - target: "", - - templateString: "<form data-dojo-attach-point='containerNode' data-dojo-attach-event='onreset:_onReset,onsubmit:_onSubmit' ${!nameAttrSetting}></form>", - - postMixInProperties: function(){ - // Setup name=foo string to be referenced from the template (but only if a name has been specified) - // Unfortunately we can't use _setNameAttr to set the name due to IE limitations, see #8660 - this.nameAttrSetting = this.name ? ("name='" + this.name + "'") : ""; - this.inherited(arguments); - }, - - execute: function(/*Object*/ /*===== formContents =====*/){ - // summary: - // Deprecated: use submit() - // tags: - // deprecated - }, - - onExecute: function(){ - // summary: - // Deprecated: use onSubmit() - // tags: - // deprecated - }, - - _setEncTypeAttr: function(/*String*/ value){ - this.encType = value; - domAttr.set(this.domNode, "encType", value); - if(has("ie")){ this.domNode.encoding = value; } - }, - - reset: function(/*Event?*/ e){ - // summary: - // restores all widget values back to their init values, - // calls onReset() which can cancel the reset by returning false - - // create fake event so we can know if preventDefault() is called - var faux = { - returnValue: true, // the IE way - preventDefault: function(){ // not IE - this.returnValue = false; - }, - 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 - if(!(this.onReset(faux) === false) && faux.returnValue){ - this.inherited(arguments, []); - } - }, - - onReset: function(/*Event?*/ /*===== e =====*/){ - // summary: - // Callback when user resets the form. This method is intended - // to be over-ridden. When the `reset` method is called - // programmatically, the return value from `onReset` is used - // to compute whether or not resetting should proceed - // tags: - // callback - return true; // Boolean - }, - - _onReset: function(e){ - this.reset(e); - event.stop(e); - return false; - }, - - _onSubmit: function(e){ - var fp = this.constructor.prototype; - // TODO: remove this if statement beginning with 2.0 - if(this.execute != fp.execute || this.onExecute != fp.onExecute){ - kernel.deprecated("dijit.form.Form:execute()/onExecute() are deprecated. Use onSubmit() instead.", "", "2.0"); - this.onExecute(); - this.execute(this.getValues()); - } - if(this.onSubmit(e) === false){ // only exactly false stops submit - event.stop(e); - } - }, - - onSubmit: function(/*Event?*/ /*===== e =====*/){ - // summary: - // Callback when user submits the form. - // description: - // This method is intended to be over-ridden, but by default it checks and - // returns the validity of form elements. When the `submit` - // method is called programmatically, the return value from - // `onSubmit` is used to compute whether or not submission - // should proceed - // tags: - // extension - - return this.isValid(); // Boolean - }, - - submit: function(){ - // summary: - // programmatically submit form if and only if the `onSubmit` returns true - if(!(this.onSubmit() === false)){ - this.containerNode.submit(); - } - } - }); -}); - -}, -'dijit/layout/_TabContainerBase':function(){ -require({cache:{ -'url:dijit/layout/templates/TabContainer.html':"<div class=\"dijitTabContainer\">\n\t<div class=\"dijitTabListWrapper\" data-dojo-attach-point=\"tablistNode\"></div>\n\t<div data-dojo-attach-point=\"tablistSpacer\" class=\"dijitTabSpacer ${baseClass}-spacer\"></div>\n\t<div class=\"dijitTabPaneWrapper ${baseClass}-container\" data-dojo-attach-point=\"containerNode\"></div>\n</div>\n"}}); -define("dijit/layout/_TabContainerBase", [ - "dojo/text!./templates/TabContainer.html", - "./StackContainer", - "./utils", // marginBox2contextBox, layoutChildren - "../_TemplatedMixin", - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add - "dojo/dom-geometry", // domGeometry.contentBox - "dojo/dom-style" // domStyle.style -], function(template, StackContainer, layoutUtils, _TemplatedMixin, declare, domClass, domGeometry, domStyle){ - - -/*===== - var StackContainer = dijit.layout.StackContainer; - var _TemplatedMixin = dijit._TemplatedMixin; -=====*/ - -// module: -// dijit/layout/_TabContainerBase -// summary: -// Abstract base class for TabContainer. Must define _makeController() to instantiate -// and return the widget that displays the tab labels - - -return declare("dijit.layout._TabContainerBase", [StackContainer, _TemplatedMixin], { - // summary: - // Abstract base class for TabContainer. Must define _makeController() to instantiate - // and return the widget that displays the tab labels - // description: - // A TabContainer is a container that has multiple panes, but shows only - // one pane at a time. There are a set of tabs corresponding to each pane, - // where each tab has the name (aka title) of the pane, and optionally a close button. - - // tabPosition: String - // Defines where tabs go relative to tab content. - // "top", "bottom", "left-h", "right-h" - tabPosition: "top", - - baseClass: "dijitTabContainer", - - // tabStrip: [const] Boolean - // Defines whether the tablist gets an extra class for layouting, putting a border/shading - // around the set of tabs. Not supported by claro theme. - tabStrip: false, - - // 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. - nested: false, - - templateString: template, - - postMixInProperties: function(){ - // set class name according to tab position, ex: dijitTabContainerTop - this.baseClass += this.tabPosition.charAt(0).toUpperCase() + this.tabPosition.substr(1).replace(/-.*/, ""); - - this.srcNodeRef && domStyle.set(this.srcNodeRef, "visibility", "hidden"); - - this.inherited(arguments); - }, - - buildRendering: function(){ - this.inherited(arguments); - - // Create the tab list that will have a tab (a.k.a. tab button) for each tab panel - this.tablist = this._makeController(this.tablistNode); - - if(!this.doLayout){ domClass.add(this.domNode, "dijitTabContainerNoLayout"); } - - if(this.nested){ - /* workaround IE's lack of support for "a > b" selectors by - * tagging each node in the template. - */ - domClass.add(this.domNode, "dijitTabContainerNested"); - domClass.add(this.tablist.containerNode, "dijitTabContainerTabListNested"); - domClass.add(this.tablistSpacer, "dijitTabContainerSpacerNested"); - domClass.add(this.containerNode, "dijitTabPaneWrapperNested"); - }else{ - domClass.add(this.domNode, "tabStrip-" + (this.tabStrip ? "enabled" : "disabled")); - } - }, - - _setupChild: function(/*dijit._Widget*/ tab){ - // Overrides StackContainer._setupChild(). - domClass.add(tab.domNode, "dijitTabPane"); - this.inherited(arguments); - }, - - startup: function(){ - if(this._started){ return; } - - // wire up the tablist and its tabs - this.tablist.startup(); - - this.inherited(arguments); - }, - - layout: function(){ - // Overrides StackContainer.layout(). - // Configure the content pane to take up all the space except for where the tabs are - - if(!this._contentBox || typeof(this._contentBox.l) == "undefined"){return;} - - var sc = this.selectedChildWidget; - - if(this.doLayout){ - // position and size the titles and the container node - var titleAlign = this.tabPosition.replace(/-h/, ""); - this.tablist.layoutAlign = titleAlign; - var children = [this.tablist, { - domNode: this.tablistSpacer, - layoutAlign: titleAlign - }, { - domNode: this.containerNode, - layoutAlign: "client" - }]; - layoutUtils.layoutChildren(this.domNode, this._contentBox, children); - - // Compute size to make each of my children. - // children[2] is the margin-box size of this.containerNode, set by layoutChildren() call above - this._containerContentBox = layoutUtils.marginBox2contentBox(this.containerNode, children[2]); - - if(sc && sc.resize){ - sc.resize(this._containerContentBox); - } - }else{ - // just layout the tab controller, so it can position left/right buttons etc. - if(this.tablist.resize){ - //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 = domGeometry.getContentBox(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 - if(sc && sc.resize){ - sc.resize(); - } - } - }, - - destroy: function(){ - if(this.tablist){ - this.tablist.destroy(); - } - this.inherited(arguments); - } -}); - -}); - -}, -'dojo/store/Memory':function(){ -define("dojo/store/Memory", ["../_base/declare", "./util/QueryResults", "./util/SimpleQueryEngine"], function(declare, QueryResults, SimpleQueryEngine) { - // module: - // dojo/store/Memory - // summary: - // The module defines an in-memory object store. - - -return 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. - for(var i in options){ - this[i] = options[i]; - } - 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 indices into the data array by id - index:null, - - // queryEngine: Function - // Defines the query engine to use for querying the data store - queryEngine: 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.data[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 data = this.data, - index = this.index, - idProperty = this.idProperty; - var id = (options && "id" in options) ? options.id : idProperty in object ? object[idProperty] : Math.random(); - if(id in index){ - // object exists - if(options && options.overwrite === false){ - throw new Error("Object already exists"); - } - // replace the entry in data - data[index[id]] = object; - }else{ - // add the new object - index[id] = data.push(object) - 1; - } - 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 - (options = options || {}).overwrite = false; - // call put with overwrite being false - 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 - // returns: Boolean - // Returns true if an object was removed, falsy (undefined) if no object matched the id - var index = this.index; - var data = this.data; - if(id in index){ - data.splice(index[id], 1); - // now we have to reindex - this.setData(data); - return true; - } - }, - 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 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; - } - this.index = {}; - for(var i = 0, l = data.length; i < l; i++){ - this.index[data[i][this.idProperty]] = i; - } - } -}); - -}); - -}, -'url:dijit/templates/Tooltip.html':"<div class=\"dijitTooltip dijitTooltipLeft\" id=\"dojoTooltip\"\n\t><div class=\"dijitTooltipContainer dijitTooltipContents\" data-dojo-attach-point=\"containerNode\" role='alert'></div\n\t><div class=\"dijitTooltipConnector\" data-dojo-attach-point=\"connectorNode\"></div\n></div>\n", -'dijit/_base/sniff':function(){ -define("dijit/_base/sniff", [ "dojo/uacss" ], function(){ - // module: - // dijit/_base/sniff - // summary: - // Back compatibility module, new code should require dojo/uacss directly instead of this module. -}); - -}, -'dijit/Toolbar':function(){ -define("dijit/Toolbar", [ - "require", - "dojo/_base/declare", // declare - "dojo/_base/kernel", - "dojo/keys", // keys.LEFT_ARROW keys.RIGHT_ARROW - "dojo/ready", - "./_Widget", - "./_KeyNavContainer", - "./_TemplatedMixin" -], function(require, declare, kernel, keys, ready, _Widget, _KeyNavContainer, _TemplatedMixin){ - -/*===== - var _Widget = dijit._Widget; - var _KeyNavContainer = dijit._KeyNavContainer; - var _TemplatedMixin = dijit._TemplatedMixin; -=====*/ - - // module: - // dijit/Toolbar - // summary: - // A Toolbar widget, used to hold things like `dijit.Editor` buttons - - - // Back compat w/1.6, remove for 2.0 - if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/ToolbarSeparator"]; - require(requires); // use indirection so modules not rolled into a build - }); - } - - return declare("dijit.Toolbar", [_Widget, _TemplatedMixin, _KeyNavContainer], { - // summary: - // A Toolbar widget, used to hold things like `dijit.Editor` buttons - - templateString: - '<div class="dijit" role="toolbar" tabIndex="${tabIndex}" data-dojo-attach-point="containerNode">' + - '</div>', - - baseClass: "dijitToolbar", - - postCreate: function(){ - this.inherited(arguments); - - this.connectKeyNavHandlers( - this.isLeftToRight() ? [keys.LEFT_ARROW] : [keys.RIGHT_ARROW], - this.isLeftToRight() ? [keys.RIGHT_ARROW] : [keys.LEFT_ARROW] - ); - } - }); -}); - -}, -'dijit/layout/StackContainer':function(){ -define("dijit/layout/StackContainer", [ - "dojo/_base/array", // array.forEach array.indexOf array.some - "dojo/cookie", // cookie - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add domClass.replace - "dojo/_base/kernel", // kernel.isAsync - "dojo/_base/lang", // lang.extend - "dojo/ready", - "dojo/topic", // publish - "../registry", // registry.byId - "../_WidgetBase", - "./_LayoutWidget", - "dojo/i18n!../nls/common" -], function(array, cookie, declare, domClass, kernel, lang, ready, topic, - registry, _WidgetBase, _LayoutWidget){ - -/*===== -var _WidgetBase = dijit._WidgetBase; -var _LayoutWidget = dijit.layout._LayoutWidget; -var StackController = dijit.layout.StackController; -=====*/ - -// module: -// dijit/layout/StackContainer -// summary: -// A container that has multiple children, but shows only one child at a time. - -// Back compat w/1.6, remove for 2.0 -if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/layout/StackController"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - -// 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.) -lang.extend(_WidgetBase, { - // selected: Boolean - // Parameter for children of `dijit.layout.StackContainer` or subclasses. - // Specifies that this widget should be the initially displayed pane. - // Note: to change the selected child use `dijit.layout.StackContainer.selectChild` - selected: false, - - // closable: Boolean - // Parameter for children of `dijit.layout.StackContainer` or subclasses. - // True if user can close (destroy) this child, such as (for example) clicking the X on the tab. - closable: false, - - // iconClass: String - // Parameter for children of `dijit.layout.StackContainer` or subclasses. - // CSS Class specifying icon to use in label associated with this pane. - iconClass: "dijitNoIcon", - - // showTitle: Boolean - // Parameter for children of `dijit.layout.StackContainer` or subclasses. - // When true, display title of this widget as tab label etc., rather than just using - // icon specified in iconClass - showTitle: true -}); - -return declare("dijit.layout.StackContainer", _LayoutWidget, { - // summary: - // A container that has multiple children, but shows only - // one child at a time - // - // description: - // A container for widgets (ContentPanes, for example) That displays - // only one Widget at a time. - // - // Publishes topics [widgetId]-addChild, [widgetId]-removeChild, and [widgetId]-selectChild - // - // Can be base class for container, Wizard, Show, etc. - - // doLayout: Boolean - // If true, change the size of my currently displayed child to match my size - doLayout: true, - - // persist: Boolean - // Remembers the selected child across sessions - persist: false, - - baseClass: "dijitStackContainer", - -/*===== - // selectedChildWidget: [readonly] dijit._Widget - // References the currently selected child widget, if any. - // Adjust selected child with selectChild() method. - selectedChildWidget: null, -=====*/ - - buildRendering: function(){ - this.inherited(arguments); - domClass.add(this.domNode, "dijitLayoutContainer"); - this.containerNode.setAttribute("role", "tabpanel"); - }, - - postCreate: function(){ - this.inherited(arguments); - this.connect(this.domNode, "onkeypress", this._onKeyPress); - }, - - startup: function(){ - if(this._started){ return; } - - var children = this.getChildren(); - - // Setup each page panel to be initially hidden - array.forEach(children, this._setupChild, this); - - // Figure out which child to initially display, defaulting to first one - if(this.persist){ - this.selectedChildWidget = registry.byId(cookie(this.id + "_selectedChild")); - }else{ - array.some(children, function(child){ - if(child.selected){ - this.selectedChildWidget = child; - } - return child.selected; - }, this); - } - var selected = this.selectedChildWidget; - if(!selected && children[0]){ - selected = this.selectedChildWidget = children[0]; - selected.selected = true; - } - - // Publish information about myself so any StackControllers can initialize. - // This needs to happen before this.inherited(arguments) so that for - // TabContainer, this._contentBox doesn't include the space for the tab labels. - topic.publish(this.id+"-startup", {children: children, selected: selected}); - - // Startup each child widget, and do initial layout like setting this._contentBox, - // then calls this.resize() which does the initial sizing on the selected child. - this.inherited(arguments); - }, - - resize: function(){ - // Resize is called when we are first made visible (it's called from startup() - // if we are initially visible). If this is the first time we've been made - // visible then show our first child. - if(!this._hasBeenShown){ - this._hasBeenShown = true; - var selected = this.selectedChildWidget; - if(selected){ - this._showChild(selected); - } - } - this.inherited(arguments); - }, - - _setupChild: function(/*dijit._Widget*/ child){ - // Overrides _LayoutWidget._setupChild() - - this.inherited(arguments); - - domClass.replace(child.domNode, "dijitHidden", "dijitVisible"); - - // remove the title attribute so it doesn't show up when i hover - // over a node - child.domNode.title = ""; - }, - - addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){ - // Overrides _Container.addChild() to do layout and publish events - - this.inherited(arguments); - - if(this._started){ - topic.publish(this.id+"-addChild", child, insertIndex); // publish - - // in case the tab titles have overflowed from one line to two lines - // (or, if this if first child, from zero lines to one line) - // TODO: w/ScrollingTabController this is no longer necessary, although - // ScrollTabController.resize() does need to get called to show/hide - // the navigation buttons as appropriate, but that's handled in ScrollingTabController.onAddChild(). - // If this is updated to not layout [except for initial child added / last child removed], update - // "childless startup" test in StackContainer.html to check for no resize event after second addChild() - this.layout(); - - // if this is the first child, then select it - if(!this.selectedChildWidget){ - this.selectChild(child); - } - } - }, - - removeChild: function(/*dijit._Widget*/ page){ - // Overrides _Container.removeChild() to do layout and publish events - - this.inherited(arguments); - - if(this._started){ - // this will notify any tablists to remove a button; do this first because it may affect sizing - topic.publish(this.id + "-removeChild", page); // publish - } - - // If all our children are being destroyed than don't run the code below (to select another page), - // because we are deleting every page one by one - if(this._descendantsBeingDestroyed){ return; } - - // Select new page to display, also updating TabController to show the respective tab. - // Do this before layout call because it can affect the height of the TabController. - if(this.selectedChildWidget === page){ - this.selectedChildWidget = undefined; - if(this._started){ - var children = this.getChildren(); - if(children.length){ - this.selectChild(children[0]); - } - } - } - - if(this._started){ - // In case the tab titles now take up one line instead of two lines - // (note though that ScrollingTabController never overflows to multiple lines), - // or the height has changed slightly because of addition/removal of tab which close icon - this.layout(); - } - }, - - selectChild: function(/*dijit._Widget|String*/ page, /*Boolean*/ animate){ - // summary: - // Show the given widget (which must be one of my children) - // page: - // Reference to child widget or id of child widget - - page = registry.byId(page); - - if(this.selectedChildWidget != page){ - // Deselect old page and select new one - var d = this._transition(page, this.selectedChildWidget, animate); - this._set("selectedChildWidget", page); - topic.publish(this.id+"-selectChild", page); // publish - - if(this.persist){ - 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(newWidget, oldWidget /*===== , animate =====*/){ - // summary: - // Hide the old widget and display the new widget. - // Subclasses should override this. - // newWidget: dijit._Widget - // The newly selected widget. - // oldWidget: dijit._Widget - // The previously selected widget. - // animate: Boolean - // Used by AccordionContainer to turn on/off slide effect. - // tags: - // protected extension - if(oldWidget){ - this._hideChild(oldWidget); - } - 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. - // Note that page must be visible for resizing to work. - if(newWidget.resize){ - if(this.doLayout){ - newWidget.resize(this._containerContentBox || this._contentBox); - }else{ - // the child should pick it's own size but we still need to call resize() - // (with no arguments) to let the widget lay itself out - newWidget.resize(); - } - } - - return d; // If child has an href, promise that fires when the child's href finishes loading - }, - - _adjacent: function(/*Boolean*/ forward){ - // summary: - // Gets the next/previous child widget in this container from the current selection. - var children = this.getChildren(); - var index = array.indexOf(children, this.selectedChildWidget); - index += forward ? 1 : children.length - 1; - return children[ index % children.length ]; // dijit._Widget - }, - - forward: function(){ - // summary: - // Advance to next page. - return this.selectChild(this._adjacent(true), true); - }, - - back: function(){ - // summary: - // Go back to previous page. - return this.selectChild(this._adjacent(false), true); - }, - - _onKeyPress: function(e){ - topic.publish(this.id+"-containerKeyPress", { e: e, page: this}); // publish - }, - - layout: function(){ - // Implement _LayoutWidget.layout() virtual method. - var child = this.selectedChildWidget; - if(child && child.resize){ - if(this.doLayout){ - child.resize(this._containerContentBox || this._contentBox); - }else{ - child.resize(); - } - } - }, - - _showChild: function(/*dijit._Widget*/ page){ - // 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._set("selected", true); - - domClass.replace(page.domNode, "dijitVisible", "dijitHidden"); - - return (page._onShow && 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._set("selected", false); - domClass.replace(page.domNode, "dijitHidden", "dijitVisible"); - - page.onHide && page.onHide(); - }, - - closeChild: function(/*dijit._Widget*/ page){ - // summary: - // Callback when user clicks the [X] to remove a page. - // If onClose() returns true then remove and destroy the child. - // tags: - // private - var remove = page.onClose(this, page); - if(remove){ - this.removeChild(page); - // makes sure we can clean up executeScripts in ContentPane onUnLoad - page.destroyRecursive(); - } - }, - - destroyDescendants: function(/*Boolean*/ preserveDom){ - this._descendantsBeingDestroyed = true; - this.selectedChildWidget = undefined; - array.forEach(this.getChildren(), function(child){ - if(!preserveDom){ - this.removeChild(child); - } - child.destroyRecursive(preserveDom); - }, this); - this._descendantsBeingDestroyed = false; - } -}); - -}); - -}, -'dojo/regexp':function(){ -define("dojo/regexp", ["./_base/kernel", "./_base/lang"], function(dojo, lang) { - // module: - // dojo/regexp - // summary: - // TODOC - -lang.getObject("regexp", true, dojo); - -/*===== -dojo.regexp = { - // summary: Regular expressions and Builder resources -}; -=====*/ - -dojo.regexp.escapeString = function(/*String*/str, /*String?*/except){ - // summary: - // Adds escape sequences for special characters in regular expressions - // except: - // a String with special characters to be left unescaped - - return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, function(ch){ - if(except && except.indexOf(ch) != -1){ - return ch; - } - return "\\" + ch; - }); // String -}; - -dojo.regexp.buildGroupRE = function(/*Object|Array*/arr, /*Function*/re, /*Boolean?*/nonCapture){ - // summary: - // Builds a regular expression that groups subexpressions - // description: - // A utility function used by some of the RE generators. The - // subexpressions are constructed by the function, re, in the second - // parameter. re builds one subexpression for each elem in the array - // a, in the first parameter. Returns a string for a regular - // expression that groups all the subexpressions. - // arr: - // A single value or an array of values. - // re: - // A function. Takes one parameter and converts it to a regular - // expression. - // nonCapture: - // If true, uses non-capturing match, otherwise matches are retained - // by regular expression. Defaults to false - - // case 1: a is a single value. - if(!(arr instanceof Array)){ - return re(arr); // String - } - - // case 2: a is an array - var b = []; - for(var i = 0; i < arr.length; i++){ - // convert each elem to a RE - b.push(re(arr[i])); - } - - // join the REs as alternatives in a RE group. - return dojo.regexp.group(b.join("|"), nonCapture); // String -}; - -dojo.regexp.group = function(/*String*/expression, /*Boolean?*/nonCapture){ - // summary: - // adds group match to expression - // nonCapture: - // If true, uses non-capturing match, otherwise matches are retained - // by regular expression. - return "(" + (nonCapture ? "?:":"") + expression + ")"; // String -}; - -return dojo.regexp; -}); - -}, -'dijit/form/_FormMixin':function(){ -define("dijit/form/_FormMixin", [ - "dojo/_base/array", // array.every array.filter array.forEach array.indexOf array.map - "dojo/_base/declare", // declare - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.hitch lang.isArray - "dojo/window" // winUtils.scrollIntoView -], function(array, declare, kernel, lang, winUtils){ - - // module: - // dijit/form/_FormMixin - // 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) - - return 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) - // description: - // Can extract all the form widgets - // values and combine them into a single javascript object, or alternately - // take such an object and set the values for all the contained - // form widgets - - /*===== - // 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). - // - // If a child widget's name is a dot separated list (like a.b.c.d), it's a nested structure. - // - // Example: - // | { 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 - // * people[3].sex (for a list of people [{name: Bill, sex: M}, ...]) - // - // - - _getDescendantFormWidgets: function(/*dijit._WidgetBase[]?*/ children){ - // summary: - // Returns all form widget descendants, searching through non-form child widgets like BorderContainer - var res = []; - array.forEach(children || this.getChildren(), function(child){ - if("value" in child){ - res.push(child); - }else{ - res = res.concat(this._getDescendantFormWidgets(child.getChildren())); - } - }, this); - return res; - }, - - reset: function(){ - array.forEach(this._getDescendantFormWidgets(), function(widget){ - if(widget.reset){ - widget.reset(); - } - }); - }, - - 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 - var didFocus = false; - return array.every(array.map(this._getDescendantFormWidgets(), function(widget){ - // Need to set this so that "required" widgets get their - // state set. - widget._hasBeenBlurred = true; - var valid = widget.disabled || !widget.validate || widget.validate(); - if(!valid && !didFocus){ - // Set focus of the first non-valid widget - winUtils.scrollIntoView(widget.containerNode || widget.domNode); - widget.focus(); - didFocus = true; - } - return valid; - }), function(item){ return item; }); - }, - - setValues: function(val){ - kernel.deprecated(this.declaredClass+"::setValues() is deprecated. Use set('value', val) instead.", "", "2.0"); - return this.set('value', val); - }, - _setValueAttr: function(/*Object*/ obj){ - // summary: - // 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 = { }; - array.forEach(this._getDescendantFormWidgets(), function(widget){ - if(!widget.name){ return; } - var entry = map[widget.name] || (map[widget.name] = [] ); - entry.push(widget); - }); - - for(var name in map){ - if(!map.hasOwnProperty(name)){ - continue; - } - var widgets = map[name], // array of widgets w/this name - values = lang.getObject(name, false, obj); // list of values for those widgets - - if(values === undefined){ - continue; - } - if(!lang.isArray(values)){ - values = [ values ]; - } - if(typeof widgets[0].checked == 'boolean'){ - // for checkbox/radio, values is a list of which widgets should be checked - array.forEach(widgets, function(w){ - w.set('value', array.indexOf(values, w.value) != -1); - }); - }else if(widgets[0].multiple){ - // it takes an array (e.g. multi-select) - widgets[0].set('value', values); - }else{ - // otherwise, values is a list of values to be assigned sequentially to each widget - array.forEach(widgets, function(w, i){ - w.set('value', values[i]); - }); - } - } - - /*** - * TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets) - - array.forEach(this.containerNode.elements, function(element){ - if(element.name == ''){return}; // like "continue" - var namePath = element.name.split("."); - var myObj=obj; - var name=namePath[namePath.length-1]; - for(var j=1,len2=namePath.length;j<len2;++j){ - var p=namePath[j - 1]; - // repeater support block - var nameA=p.split("["); - if(nameA.length > 1){ - if(typeof(myObj[nameA[0]]) == "undefined"){ - myObj[nameA[0]]=[ ]; - } // if - - nameIndex=parseInt(nameA[1]); - if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){ - myObj[nameA[0]][nameIndex] = { }; - } - myObj=myObj[nameA[0]][nameIndex]; - continue; - } // repeater support ends - - if(typeof(myObj[p]) == "undefined"){ - myObj=undefined; - break; - }; - myObj=myObj[p]; - } - - if(typeof(myObj) == "undefined"){ - return; // like "continue" - } - if(typeof(myObj[name]) == "undefined" && this.ignoreNullValues){ - return; // like "continue" - } - - // TODO: widget values (just call set('value', ...) on the widget) - - // TODO: maybe should call dojo.getNodeProp() instead - switch(element.type){ - case "checkbox": - element.checked = (name in myObj) && - array.some(myObj[name], function(val){ return val == element.value; }); - break; - case "radio": - element.checked = (name in myObj) && myObj[name] == element.value; - break; - case "select-multiple": - element.selectedIndex=-1; - array.forEach(element.options, function(option){ - option.selected = array.some(myObj[name], function(val){ return option.value == val; }); - }); - break; - case "select-one": - element.selectedIndex="0"; - array.forEach(element.options, function(option){ - option.selected = option.value == myObj[name]; - }); - break; - case "hidden": - case "text": - case "textarea": - case "password": - element.value = myObj[name] || ""; - break; - } - }); - */ - - // Note: no need to call this._set("value", ...) as the child updates will trigger onChange events - // which I am monitoring. - }, - - getValues: function(){ - kernel.deprecated(this.declaredClass+"::getValues() is deprecated. Use get('value') instead.", "", "2.0"); - return this.get('value'); - }, - _getValueAttr: function(){ - // summary: - // Returns Object representing form values. See description of `value` for details. - // description: - - // 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: - // - // 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 setTimeout(..., 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 = { }; - array.forEach(this._getDescendantFormWidgets(), function(widget){ - var name = widget.name; - if(!name || widget.disabled){ return; } - - // 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 - if(typeof widget.checked == 'boolean'){ - if(/Radio/.test(widget.declaredClass)){ - // radio button - if(value !== false){ - lang.setObject(name, value, obj); - }else{ - // give radio widgets a default of null - value = lang.getObject(name, false, obj); - if(value === undefined){ - lang.setObject(name, null, obj); - } - } - }else{ - // checkbox/toggle button - var ary=lang.getObject(name, false, obj); - if(!ary){ - ary=[]; - lang.setObject(name, ary, obj); - } - if(value !== false){ - ary.push(value); - } - } - }else{ - var prev=lang.getObject(name, false, obj); - if(typeof prev != "undefined"){ - if(lang.isArray(prev)){ - prev.push(value); - }else{ - lang.setObject(name, [prev, value], obj); - } - }else{ - // unique name - lang.setObject(name, value, obj); - } - } - }); - - /*** - * code for plain input boxes (see also domForm.formToObject, can we use that instead of this code? - * but it doesn't understand [] notation, presumably) - var obj = { }; - array.forEach(this.containerNode.elements, function(elm){ - if(!elm.name) { - return; // like "continue" - } - var namePath = elm.name.split("."); - var myObj=obj; - var name=namePath[namePath.length-1]; - for(var j=1,len2=namePath.length;j<len2;++j){ - var nameIndex = null; - var p=namePath[j - 1]; - var nameA=p.split("["); - if(nameA.length > 1){ - if(typeof(myObj[nameA[0]]) == "undefined"){ - myObj[nameA[0]]=[ ]; - } // if - nameIndex=parseInt(nameA[1]); - if(typeof(myObj[nameA[0]][nameIndex]) == "undefined"){ - myObj[nameA[0]][nameIndex] = { }; - } - }else if(typeof(myObj[nameA[0]]) == "undefined"){ - myObj[nameA[0]] = { } - } // if - - if(nameA.length == 1){ - myObj=myObj[nameA[0]]; - }else{ - myObj=myObj[nameA[0]][nameIndex]; - } // if - } // for - - if((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type == "radio" && elm.checked)){ - if(name == name.split("[")[0]){ - myObj[name]=elm.value; - }else{ - // can not set value when there is no name - } - }else if(elm.type == "checkbox" && elm.checked){ - if(typeof(myObj[name]) == 'undefined'){ - myObj[name]=[ ]; - } - myObj[name].push(elm.value); - }else if(elm.type == "select-multiple"){ - if(typeof(myObj[name]) == 'undefined'){ - myObj[name]=[ ]; - } - for(var jdx=0,len3=elm.options.length; jdx<len3; ++jdx){ - if(elm.options[jdx].selected){ - myObj[name].push(elm.options[jdx].value); - } - } - } // if - name=undefined; - }); // forEach - ***/ - return obj; - }, - - isValid: function(){ - // summary: - // Returns true if all of the widgets are valid. - // Deprecated, will be removed in 2.0. Use get("state") instead. - - return this.state == ""; - }, - - onValidStateChange: function(/*Boolean*/ /*===== 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. - }, - - _getState: function(){ - // summary: - // Compute what this.state should be based on state of children - var states = array.map(this._descendants, function(w){ - return w.get("state") || ""; - }); - - return array.indexOf(states, "Error") >= 0 ? "Error" : - array.indexOf(states, "Incomplete") >= 0 ? "Incomplete" : ""; - }, - - disconnectChildren: function(){ - // summary: - // Remove connections to monitor changes to children's value, error state, and disabled state, - // in order to update Form.value and Form.state. - array.forEach(this._childConnections || [], lang.hitch(this, "disconnect")); - array.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. - - var _this = this; - - // Remove old connections, if any - this.disconnectChildren(); - - this._descendants = this._getDescendantFormWidgets(); - - // (Re)set this.value and this.state. Send watch() notifications but not on startup. - var set = inStartup ? function(name, val){ _this[name] = val; } : lang.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 = []); - array.forEach(array.filter(this._descendants, - function(item){ return item.validate; } - ), - function(widget){ - // We are interested in whenever the widget changes validity state - or - // whenever the disabled attribute on that widget is changed. - array.forEach(["state", "disabled"], function(attr){ - watches.push(widget.watch(attr, function(){ - _this.set("state", _this._getState()); - })); - }); - }); - - // 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); - }; - array.forEach( - array.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 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); - } - - }); -}); - -}, -'dijit/DropDownMenu':function(){ -require({cache:{ -'url:dijit/templates/Menu.html':"<table class=\"dijit dijitMenu dijitMenuPassive dijitReset dijitMenuTable\" role=\"menu\" tabIndex=\"${tabIndex}\" data-dojo-attach-event=\"onkeypress:_onKeyPress\" cellspacing=\"0\">\n\t<tbody class=\"dijitReset\" data-dojo-attach-point=\"containerNode\"></tbody>\n</table>\n"}}); -define("dijit/DropDownMenu", [ - "dojo/_base/declare", // declare - "dojo/_base/event", // event.stop - "dojo/keys", // keys - "dojo/text!./templates/Menu.html", - "./_OnDijitClickMixin", - "./_MenuBase" -], function(declare, event, keys, template, _OnDijitClickMixin, _MenuBase){ - -/*===== - var _MenuBase = dijit._MenuBase; - var _OnDijitClickMixin = dijit._OnDijitClickMixin; -=====*/ - - // module: - // dijit/DropDownMenu - // summary: - // dijit.DropDownMenu widget - - return declare("dijit.DropDownMenu", [_MenuBase, _OnDijitClickMixin], { - // summary: - // A menu, without features for context menu (Meaning, drop down menu) - - templateString: template, - - baseClass: "dijitMenu", - - postCreate: function(){ - var l = this.isLeftToRight(); - this._openSubMenuKey = l ? keys.RIGHT_ARROW : keys.LEFT_ARROW; - this._closeSubMenuKey = l ? keys.LEFT_ARROW : keys.RIGHT_ARROW; - this.connectKeyNavHandlers([keys.UP_ARROW], [keys.DOWN_ARROW]); - }, - - _onKeyPress: function(/*Event*/ evt){ - // summary: - // Handle keyboard based menu navigation. - // tags: - // protected - - if(evt.ctrlKey || evt.altKey){ return; } - - switch(evt.charOrCode){ - case this._openSubMenuKey: - this._moveToPopup(evt); - event.stop(evt); - break; - case this._closeSubMenuKey: - if(this.parentMenu){ - if(this.parentMenu._isMenuBar){ - this.parentMenu.focusPrev(); - }else{ - this.onCancel(false); - } - }else{ - event.stop(evt); - } - break; - } - } - }); -}); - -}, -'dojo/data/util/simpleFetch':function(){ -define("dojo/data/util/simpleFetch", ["dojo/_base/lang", "dojo/_base/window", "./sorter"], - function(lang, winUtil, sorter) { - // module: - // dojo/data/util/simpleFetch - // summary: - // TODOC - -var simpleFetch = lang.getObject("dojo.data.util.simpleFetch", true); - -simpleFetch.fetch = function(/* Object? */ request){ - // summary: - // The simpleFetch mixin is designed to serve as a set of function(s) that can - // be mixed into other datastore implementations to accelerate their development. - // The simpleFetch mixin should work well for any datastore that can respond to a _fetchItems() - // call by returning an array of all the found items that matched the query. The simpleFetch mixin - // is not designed to work for datastores that respond to a fetch() call by incrementally - // loading items, or sequentially loading partial batches of the result - // set. For datastores that mixin simpleFetch, simpleFetch - // implements a fetch method that automatically handles eight of the fetch() - // arguments -- onBegin, onItem, onComplete, onError, start, count, sort and scope - // The class mixing in simpleFetch should not implement fetch(), - // but should instead implement a _fetchItems() method. The _fetchItems() - // method takes three arguments, the keywordArgs object that was passed - // to fetch(), a callback function to be called when the result array is - // available, and an error callback to be called if something goes wrong. - // The _fetchItems() method should ignore any keywordArgs parameters for - // start, count, onBegin, onItem, onComplete, onError, sort, and scope. - // The _fetchItems() method needs to correctly handle any other keywordArgs - // parameters, including the query parameter and any optional parameters - // (such as includeChildren). The _fetchItems() method should create an array of - // result items and pass it to the fetchHandler along with the original request object - // -- or, the _fetchItems() method may, if it wants to, create an new request object - // with other specifics about the request that are specific to the datastore and pass - // that as the request object to the handler. - // - // For more information on this specific function, see dojo.data.api.Read.fetch() - request = request || {}; - if(!request.store){ - request.store = this; - } - var self = this; - - var _errorHandler = function(errorData, requestObject){ - if(requestObject.onError){ - var scope = requestObject.scope || winUtil.global; - requestObject.onError.call(scope, errorData, requestObject); - } - }; - - var _fetchHandler = function(items, requestObject){ - var oldAbortFunction = requestObject.abort || null; - var aborted = false; - - var startIndex = requestObject.start?requestObject.start:0; - var endIndex = (requestObject.count && (requestObject.count !== Infinity))?(startIndex + requestObject.count):items.length; - - requestObject.abort = function(){ - aborted = true; - if(oldAbortFunction){ - oldAbortFunction.call(requestObject); - } - }; - - var scope = requestObject.scope || winUtil.global; - if(!requestObject.store){ - requestObject.store = self; - } - if(requestObject.onBegin){ - requestObject.onBegin.call(scope, items.length, requestObject); - } - if(requestObject.sort){ - items.sort(sorter.createSortFunction(requestObject.sort, self)); - } - if(requestObject.onItem){ - for(var i = startIndex; (i < items.length) && (i < endIndex); ++i){ - var item = items[i]; - if(!aborted){ - requestObject.onItem.call(scope, item, requestObject); - } - } - } - if(requestObject.onComplete && !aborted){ - var subset = null; - if(!requestObject.onItem){ - subset = items.slice(startIndex, endIndex); - } - requestObject.onComplete.call(scope, subset, requestObject); - } - }; - this._fetchItems(request, _fetchHandler, _errorHandler); - return request; // Object -}; - -return simpleFetch; -}); - -}, -'dijit/Menu':function(){ -define("dijit/Menu", [ - "require", - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/_base/event", // event.stop - "dojo/dom", // dom.byId dom.isDescendant - "dojo/dom-attr", // domAttr.get domAttr.set domAttr.has domAttr.remove - "dojo/dom-geometry", // domStyle.getComputedStyle domGeometry.position - "dojo/dom-style", // domStyle.getComputedStyle - "dojo/_base/kernel", - "dojo/keys", // keys.F10 - "dojo/_base/lang", // lang.hitch - "dojo/on", - "dojo/_base/sniff", // has("ie"), has("quirks") - "dojo/_base/window", // win.body win.doc.documentElement win.doc.frames win.withGlobal - "dojo/window", // winUtils.get - "./popup", - "./DropDownMenu", - "dojo/ready" -], function(require, array, declare, event, dom, domAttr, domGeometry, domStyle, kernel, keys, lang, on, - has, win, winUtils, pm, DropDownMenu, ready){ - -/*===== - var DropDownMenu = dijit.DropDownMenu; -=====*/ - -// module: -// dijit/Menu -// summary: -// Includes dijit.Menu widget and base class dijit._MenuBase - -// Back compat w/1.6, remove for 2.0 -if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/MenuItem", "dijit/PopupMenuItem", "dijit/CheckedMenuItem", "dijit/MenuSeparator"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - -return declare("dijit.Menu", DropDownMenu, { - // summary: - // A context menu you can assign to multiple elements - - constructor: function(){ - this._bindings = []; - }, - - // targetNodeIds: [const] String[] - // Array of dom node ids of nodes to attach to. - // Fill this with nodeIds upon widget creation and it becomes context menu for those nodes. - targetNodeIds: [], - - // contextMenuForWindow: [const] Boolean - // If true, right clicking anywhere on the window will cause this context menu to open. - // If false, must specify targetNodeIds. - contextMenuForWindow: false, - - // leftClickToOpen: [const] Boolean - // If true, menu will open on left click instead of right click, similar to a file menu. - leftClickToOpen: false, - - // refocus: Boolean - // When this menu closes, re-focus the element which had focus before it was opened. - refocus: true, - - postCreate: function(){ - if(this.contextMenuForWindow){ - this.bindDomNode(win.body()); - }else{ - // TODO: should have _setTargetNodeIds() method to handle initialization and a possible - // 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) - array.forEach(this.targetNodeIds, this.bindDomNode, this); - } - this.inherited(arguments); - }, - - // thanks burstlib! - _iframeContentWindow: function(/* HTMLIFrameElement */iframe_el){ - // summary: - // Returns the window reference of the passed iframe - // tags: - // private - return winUtils.get(this._iframeContentDocument(iframe_el)) || - // Moz. TODO: is this available when defaultView isn't? - this._iframeContentDocument(iframe_el)['__parent__'] || - (iframe_el.name && win.doc.frames[iframe_el.name]) || null; // Window - }, - - _iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){ - // summary: - // Returns a reference to the document object inside iframe_el - // tags: - // protected - return iframe_el.contentDocument // W3 - || (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE - || (iframe_el.name && win.doc.frames[iframe_el.name] && win.doc.frames[iframe_el.name].document) - || null; // HTMLDocument - }, - - bindDomNode: function(/*String|DomNode*/ node){ - // summary: - // Attach menu to given node - node = dom.byId(node); - - var cn; // Connect node - - // Support context menus on iframes. Rather than binding to the iframe itself we need - // to bind to the <body> node inside the iframe. - if(node.tagName.toLowerCase() == "iframe"){ - var iframe = node, - window = this._iframeContentWindow(iframe); - cn = win.withGlobal(window, win.body); - }else{ - - // To capture these events at the top level, attach to <html>, not <body>. - // Otherwise right-click context menu just doesn't work. - cn = (node == win.body() ? win.doc.documentElement : node); - } - - - // "binding" is the object to track our connection to the node (ie, the parameter to bindDomNode()) - var binding = { - node: node, - iframe: iframe - }; - - // Save info about binding in _bindings[], and make node itself record index(+1) into - // _bindings[] array. Prefix w/_dijitMenu to avoid setting an attribute that may - // start with a number, which fails on FF/safari. - domAttr.set(node, "_dijitMenu" + this.id, this._bindings.push(binding)); - - // Setup the connections to monitor click etc., unless we are connecting to an iframe which hasn't finished - // loading yet, in which case we need to wait for the onload event first, and then connect - // On linux Shift-F10 produces the oncontextmenu event, but on Windows it doesn't, so - // we need to monitor keyboard events in addition to the oncontextmenu event. - var doConnects = lang.hitch(this, function(cn){ - return [ - // TODO: when leftClickToOpen is true then shouldn't space/enter key trigger the menu, - // rather than shift-F10? - on(cn, this.leftClickToOpen ? "click" : "contextmenu", lang.hitch(this, function(evt){ - // Schedule context menu to be opened unless it's already been scheduled from onkeydown handler - event.stop(evt); - this._scheduleOpen(evt.target, iframe, {x: evt.pageX, y: evt.pageY}); - })), - on(cn, "keydown", lang.hitch(this, function(evt){ - if(evt.shiftKey && evt.keyCode == keys.F10){ - event.stop(evt); - this._scheduleOpen(evt.target, iframe); // no coords - open near target node - } - })) - ]; - }); - binding.connects = cn ? doConnects(cn) : []; - - if(iframe){ - // Setup handler to [re]bind to the iframe when the contents are initially loaded, - // and every time the contents change. - // Need to do this b/c we are actually binding to the iframe's <body> node. - // Note: can't use connect.connect(), see #9609. - - binding.onloadHandler = lang.hitch(this, function(){ - // want to remove old connections, but IE throws exceptions when trying to - // access the <body> node because it's already gone, or at least in a state of limbo - - var window = this._iframeContentWindow(iframe); - cn = win.withGlobal(window, win.body); - binding.connects = doConnects(cn); - }); - if(iframe.addEventListener){ - iframe.addEventListener("load", binding.onloadHandler, false); - }else{ - iframe.attachEvent("onload", binding.onloadHandler); - } - } - }, - - unBindDomNode: function(/*String|DomNode*/ nodeName){ - // summary: - // Detach menu from given node - - var node; - try{ - node = dom.byId(nodeName); - }catch(e){ - // On IE the dom.byId() call will get an exception if the attach point was - // the <body> node of an <iframe> that has since been reloaded (and thus the - // <body> node is in a limbo state of destruction. - return; - } - - // node["_dijitMenu" + this.id] contains index(+1) into my _bindings[] array - var attrName = "_dijitMenu" + this.id; - if(node && domAttr.has(node, attrName)){ - var bid = domAttr.get(node, attrName)-1, b = this._bindings[bid], h; - while(h = b.connects.pop()){ - h.remove(); - } - - // Remove listener for iframe onload events - var iframe = b.iframe; - if(iframe){ - if(iframe.removeEventListener){ - iframe.removeEventListener("load", b.onloadHandler, false); - }else{ - iframe.detachEvent("onload", b.onloadHandler); - } - } - - domAttr.remove(node, attrName); - delete this._bindings[bid]; - } - }, - - _scheduleOpen: function(/*DomNode?*/ target, /*DomNode?*/ iframe, /*Object?*/ coords){ - // summary: - // Set timer to display myself. Using a timer rather than displaying immediately solves - // two problems: - // - // 1. IE: without the delay, focus work in "open" causes the system - // context menu to appear in spite of stopEvent. - // - // 2. Avoid double-shows on linux, where shift-F10 generates an oncontextmenu event - // even after a event.stop(e). (Shift-F10 on windows doesn't generate the - // oncontextmenu event.) - - if(!this._openTimer){ - this._openTimer = setTimeout(lang.hitch(this, function(){ - delete this._openTimer; - this._openMyself({ - target: target, - iframe: iframe, - coords: coords - }); - }), 1); - } - }, - - _openMyself: function(args){ - // summary: - // Internal function for opening myself when the user does a right-click or something similar. - // args: - // This is an Object containing: - // * target: - // The node that is being clicked - // * iframe: - // If an <iframe> is being clicked, iframe points to that iframe - // * coords: - // Put menu at specified x/y position in viewport, or if iframe is - // specified, then relative to iframe. - // - // _openMyself() formerly took the event object, and since various code references - // evt.target (after connecting to _openMyself()), using an Object for parameters - // (so that old code still works). - - var target = args.target, - iframe = args.iframe, - coords = args.coords; - - // Get coordinates to open menu, either at specified (mouse) position or (if triggered via keyboard) - // then near the node the menu is assigned to. - if(coords){ - if(iframe){ - // Specified coordinates are on <body> node of an <iframe>, convert to match main document - var ifc = domGeometry.position(iframe, true), - window = this._iframeContentWindow(iframe), - scroll = win.withGlobal(window, "_docScroll", dojo); - - var cs = domStyle.getComputedStyle(iframe), - tp = domStyle.toPixelValue, - left = (has("ie") && has("quirks") ? 0 : tp(iframe, cs.paddingLeft)) + (has("ie") && has("quirks") ? tp(iframe, cs.borderLeftWidth) : 0), - top = (has("ie") && has("quirks") ? 0 : tp(iframe, cs.paddingTop)) + (has("ie") && has("quirks") ? tp(iframe, cs.borderTopWidth) : 0); - - coords.x += ifc.x + left - scroll.x; - coords.y += ifc.y + top - scroll.y; - } - }else{ - coords = domGeometry.position(target, true); - coords.x += 10; - coords.y += 10; - } - - var self=this; - var prevFocusNode = this._focusManager.get("prevNode"); - var curFocusNode = this._focusManager.get("curNode"); - var savedFocusNode = !curFocusNode || (dom.isDescendant(curFocusNode, this.domNode)) ? prevFocusNode : curFocusNode; - - function closeAndRestoreFocus(){ - // user has clicked on a menu or popup - if(self.refocus && savedFocusNode){ - savedFocusNode.focus(); - } - pm.close(self); - } - pm.open({ - popup: this, - x: coords.x, - y: coords.y, - onExecute: closeAndRestoreFocus, - onCancel: closeAndRestoreFocus, - orient: this.isLeftToRight() ? 'L' : 'R' - }); - this.focus(); - - this._onBlur = function(){ - this.inherited('_onBlur', arguments); - // Usually the parent closes the child widget but if this is a context - // menu then there is no parent - pm.close(this); - // don't try to restore focus; user has clicked another part of the screen - // and set focus there - }; - }, - - uninitialize: function(){ - array.forEach(this._bindings, function(b){ if(b){ this.unBindDomNode(b.node); } }, this); - this.inherited(arguments); - } -}); - -}); - -}, -'dijit/form/_CheckBoxMixin':function(){ -define("dijit/form/_CheckBoxMixin", [ - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/_base/event" // event.stop -], function(declare, domAttr, event){ - - // module: - // dijit/form/_CheckBoxMixin - // summary: - // Mixin to provide widget functionality corresponding to an HTML checkbox - - return declare("dijit.form._CheckBoxMixin", null, { - // summary: - // Mixin to provide widget functionality corresponding to an HTML checkbox - // - // description: - // User interacts with real html inputs. - // On onclick (which occurs by mouse click, space-bar, or - // using the arrow keys to switch the selected radio button), - // we update the state of the checkbox/radio. - // - - // type: [private] String - // type attribute on <input> node. - // 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). - value: "on", - - // readOnly: Boolean - // Should this widget respond to user input? - // In markup, this is specified as "readOnly". - // Similar to disabled except readOnly form values are submitted. - readOnly: false, - - // aria-pressed for toggle buttons, and aria-checked for checkboxes - _aria_attr: "aria-checked", - - _setReadOnlyAttr: function(/*Boolean*/ value){ - this._set("readOnly", value); - domAttr.set(this.focusNode, 'readOnly', value); - this.focusNode.setAttribute("aria-readonly", value); - }, - - // Override dijit.form.Button._setLabelAttr() since we don't even have a containerNode. - // Normally users won't try to set label, except when CheckBox or RadioButton is the child of a dojox.layout.TabContainer - _setLabelAttr: undefined, - - postMixInProperties: function(){ - if(this.value == ""){ - this.value = "on"; - } - this.inherited(arguments); - }, - - reset: function(){ - this.inherited(arguments); - // Handle unlikely event that the <input type=checkbox> value attribute has changed - this._set("value", this.params.value || "on"); - domAttr.set(this.focusNode, 'value', this.value); - }, - - _onClick: function(/*Event*/ e){ - // summary: - // Internal function to handle click actions - need to check - // readOnly, since button no longer does that check. - if(this.readOnly){ - event.stop(e); - return false; - } - return this.inherited(arguments); - } - }); -}); - -}, -'dijit/layout/ContentPane':function(){ -define("dijit/layout/ContentPane", [ - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.mixin lang.delegate lang.hitch lang.isFunction lang.isObject - "../_Widget", - "./_ContentPaneResizeMixin", - "dojo/string", // string.substitute - "dojo/html", // html._ContentSetter html._emptyNode - "dojo/i18n!../nls/loading", - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/_base/Deferred", // Deferred - "dojo/dom", // dom.byId - "dojo/dom-attr", // domAttr.attr - "dojo/_base/window", // win.body win.doc.createDocumentFragment - "dojo/_base/xhr", // xhr.get - "dojo/i18n" // i18n.getLocalization -], function(kernel, lang, _Widget, _ContentPaneResizeMixin, string, html, nlsLoading, - array, declare, Deferred, dom, domAttr, win, xhr, i18n){ - -/*===== - var _Widget = dijit._Widget; - var _ContentPaneResizeMixin = dijit.layout._ContentPaneResizeMixin; -=====*/ - -// module: -// dijit/layout/ContentPane -// summary: -// A widget containing an HTML fragment, specified inline -// or by uri. Fragment may include widgets. - - -return declare("dijit.layout.ContentPane", [_Widget, _ContentPaneResizeMixin], { - // summary: - // A widget containing an HTML fragment, specified inline - // or by uri. Fragment may include widgets. - // - // description: - // 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. - // - // example: - // Some quick samples: - // To change the innerHTML: cp.set('content', '<b>new content</b>') - // - // Or you can send it a NodeList: cp.set('content', dojo.query('div [class=selected]', userSelection)) - // - // To do an ajax update: cp.set('href', url) - - // href: String - // The href of the content that displays now. - // Set this at construction if you want to load data externally when the - // pane is shown. (Set preload=true to load it immediately.) - // Changing href after creation doesn't have any effect; Use set('href', ...); - href: "", - - // content: String || DomNode || NodeList || dijit._Widget - // The innerHTML of the ContentPane. - // Note that the initialization parameter / argument to set("content", ...) - // can be a String, DomNode, Nodelist, or _Widget. - content: "", - - // extractContent: Boolean - // Extract visible content from inside of <body> .... </body>. - // I.e., strip <html> and <head> (and it's contents) from the href - extractContent: false, - - // parseOnLoad: Boolean - // 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: kernel._scopeName, - - // preventCache: Boolean - // Prevent caching of data from href's by appending a timestamp to the href. - preventCache: false, - - // preload: Boolean - // Force load of data on initialization even if pane is hidden. - preload: false, - - // refreshOnShow: Boolean - // Refresh (re-download) content when pane goes from hidden to shown - refreshOnShow: false, - - // loadingMessage: String - // Message that shows while downloading - loadingMessage: "<span class='dijitContentPaneLoading'><span class='dijitInline dijitIconLoading'></span>${loadingState}</span>", - - // errorMessage: String - // Message that shows if an error occurs - errorMessage: "<span class='dijitContentPaneError'><span class='dijitInline dijitIconError'></span>${errorState}</span>", - - // isLoaded: [readonly] Boolean - // True if the ContentPane has data in it, either specified - // during initialization (via href or inline content), or set - // via set('content', ...) / set('href', ...) - // - // False if it doesn't have any content, or if ContentPane is - // still in the process of downloading href. - isLoaded: false, - - baseClass: "dijitContentPane", - - /*====== - // ioMethod: dojo.xhrGet|dojo.xhrPost - // Function that should grab the content specified via href. - ioMethod: dojo.xhrGet, - ======*/ - - // ioArgs: Object - // Parameters to pass to xhrGet() request, for example: - // | <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="href: './bar', ioArgs: {timeout: 500}"> - ioArgs: {}, - - // onLoadDeferred: [readonly] dojo.Deferred - // 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 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 - // or content is loaded. - onLoadDeferred: null, - - // Cancel _WidgetBase's _setTitleAttr because we don't want the title attribute (used to specify - // tab labels) to be copied to ContentPane.domNode... otherwise a tooltip shows up over the - // entire pane. - _setTitleAttr: null, - - // 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 = win.doc.createDocumentFragment(); - srcNodeRef = dom.byId(srcNodeRef); - while(srcNodeRef.firstChild){ - df.appendChild(srcNodeRef.firstChild); - } - params = lang.delegate(params, {content: df}); - } - this.inherited(arguments, [params, srcNodeRef]); - }, - - postMixInProperties: function(){ - this.inherited(arguments); - var messages = i18n.getLocalization("dijit", "loading", this.lang); - this.loadingMessage = string.substitute(this.loadingMessage, messages); - this.errorMessage = string.substitute(this.errorMessage, messages); - }, - - buildRendering: function(){ - 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){ - this.containerNode = this.domNode; - } - - // remove the title attribute so it doesn't show up when hovering - // over a node (TODO: remove in 2.0, no longer needed after #11490) - this.domNode.title = ""; - - if(!domAttr.get(this.domNode,"role")){ - this.domNode.setAttribute("role", "group"); - } - }, - - startup: function(){ - // summary: - // Call startup() on all children including non _Widget ones like dojo.dnd.Source objects - - // This starts all the widgets - this.inherited(arguments); - - // And this catches stuff like dojo.dnd.Source - if(this._contentSetter){ - array.forEach(this._contentSetter.parseResults, function(obj){ - if(!obj._started && !obj._destroyed && lang.isFunction(obj.startup)){ - obj.startup(); - obj._started = true; - } - }, this); - } - }, - - setHref: function(/*String|Uri*/ href){ - // summary: - // Deprecated. Use set('href', ...) instead. - kernel.deprecated("dijit.layout.ContentPane.setHref() is deprecated. Use set('href', ...) instead.", "", "2.0"); - return this.set("href", href); - }, - _setHrefAttr: function(/*String|Uri*/ href){ - // summary: - // 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 (a set('href', ...) will cancel any in-flight set('href', ...)) - this.cancel(); - - this.onLoadDeferred = new Deferred(lang.hitch(this, "cancel")); - this.onLoadDeferred.addCallback(lang.hitch(this, "onLoad")); - - this._set("href", href); - - // _setHrefAttr() is called during creation and by the user, after creation. - // 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 - // ContentPane is made visible - this._hrefChanged = true; - } - - return this.onLoadDeferred; // Deferred - }, - - setContent: function(/*String|DomNode|Nodelist*/data){ - // summary: - // Deprecated. Use set('content', ...) instead. - kernel.deprecated("dijit.layout.ContentPane.setContent() is deprecated. Use set('content', ...) instead.", "", "2.0"); - this.set("content", data); - }, - _setContentAttr: function(/*String|DomNode|Nodelist*/data){ - // summary: - // 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 - // - // if data is a NodeList (or an array of nodes) nodes are copied - // so you can import nodes from another document implicitly - - // clear href so we can't run refresh and clear content - // refresh should only work if we downloaded the content - this._set("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 Deferred(lang.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 data-dojo-type=ContentPane>...</div>) - // or as initialization parameter (ie: new ContentPane({content: ...}) - this.onLoadDeferred.addCallback(lang.hitch(this, "onLoad")); - } - - this._setContent(data || ""); - - this._isDownloaded = false; // mark that content is from a set('content') not a set('href') - - return this.onLoadDeferred; // Deferred - }, - _getContentAttr: function(){ - // summary: - // Hook to make get("content") work - return this.containerNode.innerHTML; - }, - - cancel: function(){ - // summary: - // Cancels an in-flight download of content - if(this._xhrDfd && (this._xhrDfd.fired == -1)){ - this._xhrDfd.cancel(); - } - delete this._xhrDfd; // garbage collect - - this.onLoadDeferred = null; - }, - - uninitialize: function(){ - if(this._beingDestroyed){ - this.cancel(); - } - this.inherited(arguments); - }, - - destroyRecursive: function(/*Boolean*/ preserveDom){ - // summary: - // Destroy the ContentPane and its contents - - // if we have multiple controllers destroying us, bail after the first - if(this._beingDestroyed){ - return; - } - this.inherited(arguments); - }, - - _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 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) - ){ - return this.refresh(); // If child has an href, promise that fires when the load is complete - } - } - }, - - refresh: function(){ - // summary: - // [Re]download contents of href and display - // description: - // 1. cancels any currently in-flight requests - // 2. posts "loading..." message - // 3. sends XHR to download new data - - // Cancel possible prior in-flight request - this.cancel(); - - this.onLoadDeferred = new Deferred(lang.hitch(this, "cancel")); - this.onLoadDeferred.addCallback(lang.hitch(this, "onLoad")); - this._load(); - return this.onLoadDeferred; // If child has an href, promise that fires when refresh is complete - }, - - _load: function(){ - // summary: - // Load/reload the href specified in this.href - - // display loading message - this._setContent(this.onDownloadStart(), true); - - var self = this; - var getArgs = { - preventCache: (this.preventCache || this.refreshOnShow), - url: this.href, - handleAs: "text" - }; - if(lang.isObject(this.ioArgs)){ - lang.mixin(getArgs, this.ioArgs); - } - - var hand = (this._xhrDfd = (this.ioMethod || xhr.get)(getArgs)); - - hand.addCallback(function(html){ - try{ - self._isDownloaded = true; - self._setContent(html, false); - self.onDownloadEnd(); - }catch(err){ - self._onError('Content', err); // onContentError - } - delete self._xhrDfd; - return html; - }); - - hand.addErrback(function(err){ - if(!hand.canceled){ - // show error message in the pane - self._onError('Download', err); // onDownloadError - } - delete self._xhrDfd; - return err; - }); - - // Remove flag saying that a load is needed - delete this._hrefChanged; - }, - - _onLoadHandler: function(data){ - // summary: - // This is called whenever new content is being loaded - this._set("isLoaded", true); - try{ - this.onLoadDeferred.callback(data); - }catch(e){ - console.error('Error '+this.widgetId+' running custom onLoad code: ' + e.message); - } - }, - - _onUnloadHandler: function(){ - // summary: - // This is called whenever the content is being unloaded - this._set("isLoaded", false); - try{ - this.onUnload(); - }catch(e){ - console.error('Error '+this.widgetId+' running custom onUnload code: ' + e.message); - } - }, - - destroyDescendants: function(/*Boolean*/ preserveDom){ - // summary: - // Destroy all the widgets inside the ContentPane and empty containerNode - - // Make sure we call onUnload (but only when the ContentPane has real content) - if(this.isLoaded){ - this._onUnloadHandler(); - } - - // Even if this.isLoaded == false there might still be a "Loading..." message - // to erase, so continue... - - // For historical reasons we need to delete all widgets under this.containerNode, - // even ones that the user has created manually. - var setter = this._contentSetter; - array.forEach(this.getChildren(), function(widget){ - if(widget.destroyRecursive){ - widget.destroyRecursive(preserveDom); - } - }); - if(setter){ - // Most of the widgets in setter.parseResults have already been destroyed, but - // things like Menu that have been moved to <body> haven't yet - array.forEach(setter.parseResults, function(widget){ - if(widget.destroyRecursive && widget.domNode && widget.domNode.parentNode == win.body()){ - widget.destroyRecursive(preserveDom); - } - }); - delete setter.parseResults; - } - - // And then clear away all the DOM nodes - if(!preserveDom){ - html._emptyNode(this.containerNode); - } - - // Delete any state information we have about current contents - delete this._singleChild; - }, - - _setContent: function(/*String|DocumentFragment*/ cont, /*Boolean*/ isFakeContent){ - // summary: - // Insert the content into the container node - - // first get rid of child widgets - this.destroyDescendants(); - - // html.set will take care of the rest of the details - // we provide an override for the error handling to ensure the widget gets the errors - // configure the setter instance with only the relevant widget instance properties - // NOTE: unless we hook into attr, or provide property setters for each property, - // we need to re-configure the ContentSetter with each use - var setter = this._contentSetter; - if(! (setter && setter instanceof html._ContentSetter)){ - setter = this._contentSetter = new html._ContentSetter({ - node: this.containerNode, - _onError: lang.hitch(this, this._onError), - onContentError: lang.hitch(this, function(e){ - // fires if a domfault occurs when we are appending this.errorMessage - // like for instance if domNode is a UL and we try append a DIV - var errMess = this.onContentError(e); - try{ - this.containerNode.innerHTML = errMess; - }catch(e){ - console.error('Fatal '+this.id+' could not change content due to '+e.message, e); - } - })/*, - _onError */ - }); - } - - var setterParams = lang.mixin({ - cleanContent: this.cleanContent, - extractContent: this.extractContent, - parseContent: !cont.domNode && this.parseOnLoad, - parserScope: this.parserScope, - startup: false, - dir: this.dir, - lang: this.lang, - textDir: this.textDir - }, this._contentSetterParams || {}); - - setter.set( (lang.isObject(cont) && cont.domNode) ? cont.domNode : cont, setterParams ); - - // setter params must be pulled afresh from the ContentPane each time - delete this._contentSetterParams; - - if(this.doLayout){ - this._checkIfSingleChild(); - } - - if(!isFakeContent){ - if(this._started){ - // Startup each top level child widget (and they will start their children, recursively) - delete this._started; - this.startup(); - - // 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); - } - }, - - _onError: function(type, err, consoleText){ - this.onLoadDeferred.errback(err); - - // shows user the string that is returned by on[type]Error - // 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); - }else if(errText){// a empty string won't change current content - this._setContent(errText, true); - } - }, - - // EVENT's, should be overide-able - onLoad: function(/*===== data =====*/){ - // summary: - // Event hook, is called after everything is loaded and widgetified - // tags: - // callback - }, - - onUnload: function(){ - // summary: - // Event hook, is called before old content is cleared - // tags: - // callback - }, - - onDownloadStart: function(){ - // summary: - // Called before download starts. - // description: - // The string returned by this function will be the html - // that tells the user we are loading something. - // Override with your own function if you want to change text. - // tags: - // extension - return this.loadingMessage; - }, - - onContentError: function(/*Error*/ /*===== error =====*/){ - // summary: - // Called on DOM faults, require faults etc. in content. - // - // In order to display an error message in the pane, return - // the error message from this method, as an HTML string. - // - // By default (if this method is not overriden), it returns - // nothing, so the error message is just printed to the console. - // tags: - // extension - }, - - onDownloadError: function(/*Error*/ /*===== error =====*/){ - // summary: - // Called when download error occurs. - // - // In order to display an error message in the pane, return - // the error message from this method, as an HTML string. - // - // Default behavior (if this method is not overriden) is to display - // the error message inside the pane. - // tags: - // extension - return this.errorMessage; - }, - - onDownloadEnd: function(){ - // summary: - // Called when download is finished. - // tags: - // callback - } -}); - -}); - -}, -'url:dijit/form/templates/ValidationTextBox.html':"<div class=\"dijit dijitReset dijitInline 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\" data-dojo-attach-point='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n", -'url: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\" data-dojo-attach-point='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n", -'dijit/layout/utils':function(){ -define("dijit/layout/utils", [ - "dojo/_base/array", // array.filter array.forEach - "dojo/dom-class", // domClass.add domClass.remove - "dojo/dom-geometry", // domGeometry.marginBox - "dojo/dom-style", // domStyle.getComputedStyle - "dojo/_base/lang", // lang.mixin - ".." // for exporting symbols to dijit, remove in 2.0 -], function(array, domClass, domGeometry, domStyle, lang, dijit){ - - // module: - // dijit/layout/utils - // summary: - // marginBox2contentBox() and layoutChildren() - - var layout = lang.getObject("layout", true, dijit); - /*===== layout = dijit.layout =====*/ - - layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){ - // summary: - // Given the margin-box size of a node, return its content box size. - // Functions like domGeometry.contentBox() but is more reliable since it doesn't have - // to wait for the browser to compute sizes. - var cs = domStyle.getComputedStyle(node); - var me = domGeometry.getMarginExtents(node, cs); - var pb = domGeometry.getPadBorderExtents(node, cs); - return { - l: domStyle.toPixelValue(node, cs.paddingLeft), - t: domStyle.toPixelValue(node, cs.paddingTop), - w: mb.w - (me.w + pb.w), - h: mb.h - (me.h + pb.h) - }; - }; - - function capitalize(word){ - return word.substring(0,1).toUpperCase() + word.substring(1); - } - - function size(widget, dim){ - // size the child - var newSize = widget.resize ? widget.resize(dim) : domGeometry.setMarginBox(widget.domNode, dim); - - // record child's size - if(newSize){ - // if the child returned it's new size then use that - lang.mixin(widget, newSize); - }else{ - // otherwise, call getMarginBox(), but favor our own numbers when we have them. - // the browser lies sometimes - lang.mixin(widget, domGeometry.getMarginBox(widget.domNode)); - lang.mixin(widget, dim); - } - } - - 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: - // parent node - // dim: - // {l, t, w, h} object specifying dimensions of container into which to place children - // children: - // 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 = lang.mixin({}, dim); - - domClass.add(container, "dijitLayoutContainer"); - - // Move "client" elements to the end of the array for layout. a11y dictates that the author - // needs to be able to put them in the document in tab-order, but this algorithm requires that - // client be last. TODO: move these lines to LayoutContainer? Unneeded other places I think. - children = array.filter(children, function(item){ return item.region != "center" && item.layoutAlign != "client"; }) - .concat(array.filter(children, function(item){ return item.region == "center" || item.layoutAlign == "client"; })); - - // set positions/sizes - array.forEach(children, function(child){ - var elm = child.domNode, - pos = (child.region || child.layoutAlign); - if(!pos){ - throw new Error("No region setting for " + child.id) - } - - // 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.position = "absolute"; - - domClass.add(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"){ - sizeSetting.w = dim.w; - size(child, sizeSetting); - dim.h -= child.h; - if(pos == "top"){ - dim.t += child.h; - }else{ - elmStyle.top = dim.t + dim.h + "px"; - } - }else if(pos == "left" || pos == "right"){ - 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" || pos == "center"){ - size(child, dim); - } - }); - }; - - - return { - marginBox2contentBox: layout.marginBox2contentBox, - layoutChildren: layout.layoutChildren - }; -}); - -}, -'dijit/_Contained':function(){ -define("dijit/_Contained", [ - "dojo/_base/declare", // declare - "./registry" // registry.getEnclosingWidget(), registry.byNode() -], function(declare, registry){ - - // module: - // dijit/_Contained - // summary: - // Mixin for widgets that are children of a container widget - - return declare("dijit._Contained", null, { - // summary: - // Mixin for widgets that are children of a container widget - // - // example: - // | // make a basic custom widget that knows about it's parents - // | declare("my.customClass",[dijit._Widget,dijit._Contained],{}); - - _getSibling: function(/*String*/ which){ - // summary: - // Returns next or previous sibling - // which: - // Either "next" or "previous" - // tags: - // private - var node = this.domNode; - do{ - node = node[which+"Sibling"]; - }while(node && node.nodeType != 1); - return node && registry.byNode(node); // dijit._Widget - }, - - getPreviousSibling: function(){ - // summary: - // Returns null if this is the first child of the parent, - // otherwise returns the next element sibling to the "left". - - return this._getSibling("previous"); // dijit._Widget - }, - - getNextSibling: function(){ - // summary: - // Returns null if this is the last child of the parent, - // otherwise returns the next element sibling to the "right". - - return this._getSibling("next"); // dijit._Widget - }, - - getIndexInParent: function(){ - // summary: - // Returns the index of this widget within its container parent. - // It returns -1 if the parent does not exist, or if the parent - // is not a dijit._Container - - var p = this.getParent(); - if(!p || !p.getIndexOfChild){ - return -1; // int - } - return p.getIndexOfChild(this); // int - } - }); -}); - -}, -'dijit/_KeyNavContainer':function(){ -define("dijit/_KeyNavContainer", [ - "dojo/_base/kernel", // kernel.deprecated - "./_Container", - "./_FocusMixin", - "dojo/_base/array", // array.forEach - "dojo/keys", // keys.END keys.HOME - "dojo/_base/declare", // declare - "dojo/_base/event", // event.stop - "dojo/dom-attr", // domAttr.set - "dojo/_base/lang" // lang.hitch -], function(kernel, _Container, _FocusMixin, array, keys, declare, event, domAttr, lang){ - -/*===== - var _FocusMixin = dijit._FocusMixin; - var _Container = dijit._Container; -=====*/ - - // module: - // dijit/_KeyNavContainer - // summary: - // A _Container with keyboard navigation of its children. - - return declare("dijit._KeyNavContainer", [_FocusMixin, _Container], { - - // summary: - // A _Container with keyboard navigation of its children. - // description: - // To use this mixin, call connectKeyNavHandlers() in - // postCreate(). - // It provides normalized keyboard and focusing code for Container - // widgets. - -/*===== - // focusedChild: [protected] Widget - // The currently focused child widget, or null if there isn't one - focusedChild: null, -=====*/ - - // tabIndex: Integer - // Tab index of the container; same as HTML tabIndex attribute. - // Note then when user tabs into the container, focus is immediately - // moved to the first item in the container. - tabIndex: "0", - - connectKeyNavHandlers: function(/*keys[]*/ prevKeyCodes, /*keys[]*/ nextKeyCodes){ - // summary: - // Call in postCreate() to attach the keyboard handlers - // to the container. - // preKeyCodes: keys[] - // Key codes for navigating to the previous child. - // nextKeyCodes: keys[] - // Key codes for navigating to the next child. - // tags: - // protected - - // TODO: call this automatically from my own postCreate() - - var keyCodes = (this._keyNavCodes = {}); - var prev = lang.hitch(this, "focusPrev"); - var next = lang.hitch(this, "focusNext"); - array.forEach(prevKeyCodes, function(code){ keyCodes[code] = prev; }); - array.forEach(nextKeyCodes, function(code){ keyCodes[code] = next; }); - keyCodes[keys.HOME] = lang.hitch(this, "focusFirstChild"); - keyCodes[keys.END] = lang.hitch(this, "focusLastChild"); - this.connect(this.domNode, "onkeypress", "_onContainerKeypress"); - this.connect(this.domNode, "onfocus", "_onContainerFocus"); - }, - - startupKeyNavChildren: function(){ - kernel.deprecated("startupKeyNavChildren() call no longer needed", "", "2.0"); - }, - - startup: function(){ - this.inherited(arguments); - array.forEach(this.getChildren(), lang.hitch(this, "_startupChild")); - }, - - addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){ - this.inherited(arguments); - this._startupChild(widget); - }, - - focus: function(){ - // summary: - // Default focus() implementation: focus the first child. - this.focusFirstChild(); - }, - - focusFirstChild: function(){ - // summary: - // Focus the first focusable child in the container. - // tags: - // protected - this.focusChild(this._getFirstFocusableChild()); - }, - - focusLastChild: function(){ - // summary: - // Focus the last focusable child in the container. - // tags: - // protected - this.focusChild(this._getLastFocusableChild()); - }, - - focusNext: function(){ - // summary: - // Focus the next widget - // tags: - // protected - this.focusChild(this._getNextFocusableChild(this.focusedChild, 1)); - }, - - focusPrev: function(){ - // summary: - // Focus the last focusable node in the previous widget - // (ex: go to the ComboButton icon section rather than button section) - // tags: - // protected - this.focusChild(this._getNextFocusableChild(this.focusedChild, -1), true); - }, - - focusChild: function(/*dijit._Widget*/ widget, /*Boolean*/ last){ - // summary: - // Focus specified child widget. - // widget: - // Reference to container's child widget - // last: - // If true and if widget has multiple focusable nodes, focus the - // last one instead of the first one - // tags: - // protected - - if(!widget){ return; } - - if(this.focusedChild && widget !== this.focusedChild){ - this._onChildBlur(this.focusedChild); // used by _MenuBase - } - widget.set("tabIndex", this.tabIndex); // for IE focus outline to appear, must set tabIndex before focs - widget.focus(last ? "end" : "start"); - 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 - // leave the container rather than visiting each child. - // tags: - // private - - widget.set("tabIndex", "-1"); - - this.connect(widget, "_onFocus", function(){ - // Set valid tabIndex so tabbing away from widget goes to right place, see #10272 - widget.set("tabIndex", this.tabIndex); - }); - this.connect(widget, "_onBlur", function(){ - widget.set("tabIndex", "-1"); - }); - }, - - _onContainerFocus: function(evt){ - // summary: - // Handler for when the container gets focus - // description: - // Initially the container itself has a tabIndex, but when it gets - // focus, switch focus to first child... - // tags: - // private - - // Note that we can't use _onFocus() because switching focus from the - // _onFocus() handler confuses the focus.js code - // (because it causes _onFocusNode() to be called recursively) - // Also, _onFocus() would fire when focus went directly to a child widget due to mouse click. - - // Ignore spurious focus events: - // 1. focus on a child widget bubbles on FF - // 2. on IE, clicking the scrollbar of a select dropdown moves focus from the focused child item to me - if(evt.target !== this.domNode || this.focusedChild){ return; } - - this.focusFirstChild(); - - // and then set the container's tabIndex to -1, - // (don't remove as that breaks Safari 4) - // so that tab or shift-tab will go to the fields after/before - // the container, rather than the container itself - domAttr.set(this.domNode, "tabIndex", "-1"); - }, - - _onBlur: function(evt){ - // When focus is moved away the container, and its descendant (popup) widgets, - // then restore the container's tabIndex so that user can tab to it again. - // Note that using _onBlur() so that this doesn't happen when focus is shifted - // to one of my child widgets (typically a popup) - if(this.tabIndex){ - domAttr.set(this.domNode, "tabIndex", this.tabIndex); - } - this.focusedChild = null; - this.inherited(arguments); - }, - - _onContainerKeypress: function(evt){ - // summary: - // When a key is pressed, if it's an arrow key etc. then - // it's handled here. - // tags: - // private - if(evt.ctrlKey || evt.altKey){ return; } - var func = this._keyNavCodes[evt.charOrCode]; - if(func){ - func(); - event.stop(evt); - } - }, - - _onChildBlur: function(/*dijit._Widget*/ /*===== widget =====*/){ - // summary: - // Called when focus leaves a child widget to go - // to a sibling widget. - // Used by MenuBase.js (TODO: move code there) - // tags: - // protected - }, - - _getFirstFocusableChild: function(){ - // summary: - // Returns first child that can be focused - 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 - // to "child" - // child: Widget - // The current widget - // dir: Integer - // * 1 = after - // * -1 = before - if(child){ - child = this._getSiblingOfChild(child, dir); - } - var children = this.getChildren(); - for(var i=0; i < children.length; i++){ - if(!child){ - child = children[(dir>0) ? 0 : (children.length-1)]; - } - if(child.isFocusable()){ - return child; // dijit._Widget - } - child = this._getSiblingOfChild(child, dir); - } - // no focusable child found - return null; // dijit._Widget - } - }); -}); - -}, -'dijit/form/DataList':function(){ -define("dijit/form/DataList", [ - "dojo/_base/declare", // declare - "dojo/dom", // dom.byId - "dojo/_base/lang", // lang.trim - "dojo/query", // query - "dojo/store/Memory", // dojo.store.Memory - "../registry" // registry.add registry.remove -], function(declare, dom, lang, query, MemoryStore, registry){ - - // module: - // dijit/form/DataList - // summary: - // Inefficient but small data store specialized for inlined data via OPTION tags - - function toItem(/*DOMNode*/ option){ - // summary: - // Convert <option> node to hash - return { - id: option.value, - value: option.value, - name: lang.trim(option.innerText || option.textContent || '') - }; - } - - return declare("dijit.form.DataList", MemoryStore, { - // summary: - // Inefficient but small data store specialized for inlined data via OPTION tags - // - // description: - // Provides a store for inlined data like: - // - // | <datalist> - // | <option value="AL">Alabama</option> - // | ... - - constructor: function(/*Object?*/ params, /*DomNode|String*/ srcNodeRef){ - // store pointer to original DOM tree - this.domNode = dom.byId(srcNodeRef); - - lang.mixin(this, params); - if(this.id){ - registry.add(this); // add to registry so it can be easily found by id - } - this.domNode.style.display = "none"; - - this.inherited(arguments, [{ - data: query("option", this.domNode).map(toItem) - }]); - }, - - destroy: function(){ - registry.remove(this.id); - }, - - fetchSelectedItem: function(){ - // summary: - // Get the option marked as selected, like `<option selected>`. - // Not part of dojo.data API. - var option = query("> option[selected]", this.domNode)[0] || query("> option", this.domNode)[0]; - return option && toItem(option); - } - }); -}); - -}, -'url:dijit/templates/Dialog.html':"<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div data-dojo-attach-point=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span data-dojo-attach-point=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span data-dojo-attach-point=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" data-dojo-attach-event=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span data-dojo-attach-point=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div data-dojo-attach-point=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n", -'dijit/form/CheckBox':function(){ -require({cache:{ -'url: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\tdata-dojo-attach-point=\"focusNode\"\n\t \tdata-dojo-attach-event=\"onclick:_onClick\"\n/></div>\n"}}); -define("dijit/form/CheckBox", [ - "require", - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/_base/kernel", - "dojo/query", // query - "dojo/ready", - "./ToggleButton", - "./_CheckBoxMixin", - "dojo/text!./templates/CheckBox.html", - "dojo/NodeList-dom" // NodeList.addClass/removeClass -], function(require, declare, domAttr, kernel, query, ready, ToggleButton, _CheckBoxMixin, template){ - -/*===== - var ToggleButton = dijit.form.ToggleButton; - var _CheckBoxMixin = dijit.form._CheckBoxMixin; -=====*/ - - // module: - // dijit/form/CheckBox - // summary: - // Checkbox widget - - // Back compat w/1.6, remove for 2.0 - if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/form/RadioButton"]; - require(requires); // use indirection so modules not rolled into a build - }); - } - - return declare("dijit.form.CheckBox", [ToggleButton, _CheckBoxMixin], { - // summary: - // Same as an HTML checkbox, but with fancy styling. - // - // description: - // User interacts with real html inputs. - // On onclick (which occurs by mouse click, space-bar, or - // using the arrow keys to switch the selected radio button), - // we update the state of the checkbox/radio. - // - // There are two modes: - // 1. High contrast mode - // 2. Normal mode - // - // In case 1, the regular html inputs are shown and used by the user. - // In case 2, the regular html inputs are invisible but still used by - // the user. They are turned quasi-invisible and overlay the background-image. - - templateString: template, - - baseClass: "dijitCheckBox", - - _setValueAttr: function(/*String|Boolean*/ newValue, /*Boolean*/ priorityChange){ - // summary: - // Handler for value= attribute to constructor, and also calls to - // set('value', val). - // description: - // During initialization, just saves as attribute to the <input type=checkbox>. - // - // After initialization, - // when passed a boolean, controls whether or not the CheckBox is checked. - // If passed a string, changes the value attribute of the CheckBox (the one - // specified as "value" when the CheckBox was constructed (ex: <input - // data-dojo-type="dijit.CheckBox" value="chicken">) - // widget.set('value', string) will check the checkbox and change the value to the - // specified string - // widget.set('value', boolean) will change the checked state. - if(typeof newValue == "string"){ - this._set("value", newValue); - domAttr.set(this.focusNode, 'value', newValue); - newValue = true; - } - if(this._created){ - this.set('checked', newValue, priorityChange); - } - }, - _getValueAttr: function(){ - // summary: - // Hook so get('value') works. - // description: - // If the CheckBox is checked, returns the value attribute. - // Otherwise returns false. - return (this.checked ? this.value : false); - }, - - // Override behavior from Button, since we don't have an iconNode - _setIconClassAttr: null, - - postMixInProperties: function(){ - this.inherited(arguments); - - // Need to set initial checked state as part of template, so that form submit works. - // domAttr.set(node, "checked", bool) doesn't work on IE until node has been attached - // to <body>, see #8666 - this.checkedAttrSetting = this.checked ? "checked" : ""; - }, - - _fillContent: function(){ - // Override Button::_fillContent() since it doesn't make sense for CheckBox, - // since CheckBox doesn't even have a container - }, - - _onFocus: function(){ - if(this.id){ - query("label[for='"+this.id+"']").addClass("dijitFocusedLabel"); - } - this.inherited(arguments); - }, - - _onBlur: function(){ - if(this.id){ - query("label[for='"+this.id+"']").removeClass("dijitFocusedLabel"); - } - this.inherited(arguments); - } - }); -}); - -}, -'dijit/tree/_dndSelector':function(){ -define("dijit/tree/_dndSelector", [ - "dojo/_base/array", // array.filter array.forEach array.map - "dojo/_base/connect", // connect.isCopyKey - "dojo/_base/declare", // declare - "dojo/_base/lang", // lang.hitch - "dojo/mouse", // mouse.isLeft - "dojo/on", - "dojo/touch", - "dojo/_base/window", // win.global - "./_dndContainer" -], function(array, connect, declare, lang, mouse, on, touch, win, _dndContainer){ - - // module: - // dijit/tree/_dndSelector - // 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`. - - - return declare("dijit.tree._dndSelector", _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 - - /*===== - // selection: Hash<String, DomNode> - // (id, DomNode) map for every TreeNode that's currently selected. - // The DOMNode is the TreeNode.rowNode. - selection: {}, - =====*/ - - constructor: function(){ - // summary: - // Initialization - // tags: - // private - - this.selection={}; - this.anchor = null; - - this.tree.domNode.setAttribute("aria-multiselect", !this.singular); - - this.events.push( - on(this.tree.domNode, touch.press, lang.hitch(this,"onMouseDown")), - on(this.tree.domNode, touch.release, lang.hitch(this,"onMouseUp")), - on(this.tree.domNode, touch.move, lang.hitch(this,"onMouseMove")) - ); - }, - - // 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, - - // 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; - }, - - selectNone: function(){ - // summary: - // Unselects all items - // tags: - // private - - this.setSelection([]); - return this; // self - }, - - 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. - - 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 - - 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(); - array.forEach(this._setDifference(oldSelection, newSelection), lang.hitch(this, function(node){ - node.setSelected(false); - if(this.anchor == node){ - delete this.anchor; - } - delete this.selection[node.id]; - })); - array.forEach(this._setDifference(newSelection, oldSelection), lang.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. - - array.forEach(ys, function(y){ y.__exclude__ = true; }); - var ret = array.filter(xs, function(x){ return !x.__exclude__; }); - - // clean up after ourselves. - array.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 = []; - array.forEach(selected, function(node){ - nodes.push(node); - paths.push(node.getTreePath()); - }); - var items = array.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/ontouchstart - // e: Event - // onmousedown/ontouchstart event - // tags: - // protected - - // ignore click on expando node - if(!this.current || this.tree.isExpandoNode(e.target, this.current)){ return; } - - if(!mouse.isLeft(e)){ return; } // ignore right-click - - e.preventDefault(); - - var treeNode = this.current, - copy = connect.isCopyKey(e), id = treeNode.id; - - // 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); - }, - - onMouseUp: function(e){ - // summary: - // Event processor for onmouseup/ontouchend - // e: Event - // onmouseup/ontouchend event - // tags: - // protected - - // _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, connect.isCopyKey(e), e.shiftKey); - }, - onMouseMove: function(/*===== e =====*/){ - // summary: - // event processor for onmousemove/ontouchmove - // e: Event - // onmousemove/ontouchmove event - this._doDeselect = false; - }, - - _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"); - } - }, - - 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 - - if(this.singular){ - if(this.anchor == node && multi){ - this.selectNone(); - }else{ - this.setSelection([node]); - this.anchor = node; - } - }else{ - if(range && this.anchor){ - var cr = this._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; - } - var nodes = []; - //add everything betweeen begin and end inclusively - while(begin != end){ - nodes.push(begin); - begin = this.tree._getNextNode(begin); - } - nodes.push(end); - - 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; - } - } - } - }, - - 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 - - var widget = this.selection[key]; - return { - data: widget, - type: ["treeNode"] - }; // dojo.dnd.Item - }, - - forInSelectedItems: function(/*Function*/ f, /*Object?*/ o){ - // summary: - // Iterates over selected items; - // see `dojo.dnd.Container.forInItems()` for details - o = o || win.global; - for(var id in this.selection){ - // console.log("selected item id: " + id); - f.call(o, this.getItem(id), id, this); - } - } - }); -}); - -}, -'dijit/_Container':function(){ -define("dijit/_Container", [ - "dojo/_base/array", // array.forEach array.indexOf - "dojo/_base/declare", // declare - "dojo/dom-construct", // domConstruct.place - "./registry" // registry.byNode() -], function(array, declare, domConstruct, registry){ - - // module: - // dijit/_Container - // summary: - // Mixin for widgets that contain a set of widget children. - - return declare("dijit._Container", null, { - // summary: - // Mixin for widgets that contain a set of widget children. - // description: - // Use this mixin for widgets that needs to know about and - // keep track of their widget children. Suitable for widgets like BorderContainer - // and TabContainer which contain (only) a set of child widgets. - // - // It's not suitable for widgets like ContentPane - // which contains mixed HTML (plain DOM nodes in addition to widgets), - // and where contained widgets are not necessarily directly below - // this.containerNode. In that case calls like addChild(node, position) - // wouldn't make sense. - - buildRendering: function(){ - this.inherited(arguments); - if(!this.containerNode){ - // all widgets with descendants must set containerNode - this.containerNode = this.domNode; - } - }, - - addChild: function(/*dijit._Widget*/ widget, /*int?*/ insertIndex){ - // summary: - // Makes the given widget a child of this widget. - // description: - // Inserts specified child widget's dom node as a child of this widget's - // container node, and possibly does other processing (such as layout). - - var refNode = this.containerNode; - if(insertIndex && typeof insertIndex == "number"){ - var children = this.getChildren(); - if(children && children.length >= insertIndex){ - refNode = children[insertIndex-1].domNode; - insertIndex = "after"; - } - } - domConstruct.place(widget.domNode, refNode, insertIndex); - - // If I've been started but the child widget hasn't been started, - // start it now. Make sure to do this after widget has been - // inserted into the DOM tree, so it can see that it's being controlled by me, - // so it doesn't try to size itself. - if(this._started && !widget._started){ - widget.startup(); - } - }, - - removeChild: function(/*Widget|int*/ widget){ - // summary: - // Removes the passed widget instance from this widget but does - // not destroy it. You can also pass in an integer indicating - // the index within the container to remove - - if(typeof widget == "number"){ - widget = this.getChildren()[widget]; - } - - if(widget){ - var node = widget.domNode; - if(node && node.parentNode){ - node.parentNode.removeChild(node); // detach but don't destroy - } - } - }, - - hasChildren: function(){ - // summary: - // Returns true if widget has children, i.e. if this.containerNode contains something. - return this.getChildren().length > 0; // Boolean - }, - - _getSiblingOfChild: function(/*dijit._Widget*/ child, /*int*/ dir){ - // summary: - // Get the next or previous widget sibling of child - // dir: - // if 1, get the next sibling - // if -1, get the previous sibling - // tags: - // private - var node = child.domNode, - which = (dir>0 ? "nextSibling" : "previousSibling"); - do{ - node = node[which]; - }while(node && (node.nodeType != 1 || !registry.byNode(node))); - return node && registry.byNode(node); // dijit._Widget - }, - - getIndexOfChild: function(/*dijit._Widget*/ child){ - // summary: - // Gets the index of the child in this container or -1 if not found - return array.indexOf(this.getChildren(), child); // int - } - }); -}); - -}, -'dojo/data/ItemFileReadStore':function(){ -define("dojo/data/ItemFileReadStore", ["../_base/kernel", "../_base/lang", "../_base/declare", "../_base/array", "../_base/xhr", - "../Evented", "../_base/window", "./util/filter", "./util/simpleFetch", "../date/stamp" -], function(kernel, lang, declare, array, xhr, Evented, window, filterUtil, simpleFetch, dateStamp) { - // module: - // dojo/data/ItemFileReadStore - // summary: - // TODOC - - -var ItemFileReadStore = declare("dojo.data.ItemFileReadStore", [Evented],{ - // summary: - // The ItemFileReadStore implements the dojo.data.api.Read API and reads - // data from JSON files that have contents in this format -- - // { items: [ - // { name:'Kermit', color:'green', age:12, friends:['Gonzo', {_reference:{name:'Fozzie Bear'}}]}, - // { name:'Fozzie Bear', wears:['hat', 'tie']}, - // { name:'Miss Piggy', pets:'Foo-Foo'} - // ]} - // Note that it can also contain an 'identifer' property that specified which attribute on the items - // in the array of items that acts as the unique identifier for that item. - // - constructor: function(/* Object */ keywordParameters){ - // summary: constructor - // keywordParameters: {url: String} - // keywordParameters: {data: jsonObject} - // keywordParameters: {typeMap: object) - // The structure of the typeMap object is as follows: - // { - // type0: function || object, - // type1: function || object, - // ... - // typeN: function || object - // } - // Where if it is a function, it is assumed to be an object constructor that takes the - // value of _value as the initialization parameters. If it is an object, then it is assumed - // to be an object of general form: - // { - // type: function, //constructor. - // deserialize: function(value) //The function that parses the value and constructs the object defined by type appropriately. - // } - - this._arrayOfAllItems = []; - this._arrayOfTopLevelItems = []; - this._loadFinished = false; - this._jsonFileUrl = keywordParameters.url; - this._ccUrl = keywordParameters.url; - this.url = keywordParameters.url; - this._jsonData = keywordParameters.data; - this.data = null; - this._datatypeMap = keywordParameters.typeMap || {}; - if(!this._datatypeMap['Date']){ - //If no default mapping for dates, then set this as default. - //We use the dojo.date.stamp here because the ISO format is the 'dojo way' - //of generically representing dates. - this._datatypeMap['Date'] = { - type: Date, - deserialize: function(value){ - return dateStamp.fromISOString(value); - } - }; - } - this._features = {'dojo.data.api.Read':true, 'dojo.data.api.Identity':true}; - this._itemsByIdentity = null; - this._storeRefPropName = "_S"; // Default name for the store reference to attach to every item. - this._itemNumPropName = "_0"; // Default Item Id for isItem to attach to every item. - this._rootItemPropName = "_RI"; // Default Item Id for isItem to attach to every item. - this._reverseRefMap = "_RRM"; // Default attribute for constructing a reverse reference map for use with reference integrity - this._loadInProgress = false; //Got to track the initial load to prevent duelling loads of the dataset. - this._queuedFetches = []; - if(keywordParameters.urlPreventCache !== undefined){ - this.urlPreventCache = keywordParameters.urlPreventCache?true:false; - } - if(keywordParameters.hierarchical !== undefined){ - this.hierarchical = keywordParameters.hierarchical?true:false; - } - if(keywordParameters.clearOnClose){ - this.clearOnClose = true; - } - if("failOk" in keywordParameters){ - this.failOk = keywordParameters.failOk?true:false; - } - }, - - url: "", // use "" rather than undefined for the benefit of the parser (#3539) - - //Internal var, crossCheckUrl. Used so that setting either url or _jsonFileUrl, can still trigger a reload - //when clearOnClose and close is used. - _ccUrl: "", - - data: null, // define this so that the parser can populate it - - typeMap: null, //Define so parser can populate. - - //Parameter to allow users to specify if a close call should force a reload or not. - //By default, it retains the old behavior of not clearing if close is called. But - //if set true, the store will be reset to default state. Note that by doing this, - //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. - //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, - - //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 - //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: - // The item to test for being contained by the store. - if(!this.isItem(item)){ - throw new Error("dojo.data.ItemFileReadStore: Invalid item argument."); - } - }, - - _assertIsAttribute: function(/* attribute-name-string */ attribute){ - // summary: - // This function tests whether the item passed in is indeed a valid 'attribute' like type for the store. - // attribute: - // The attribute to test for being contained by the store. - if(typeof attribute !== "string"){ - throw new Error("dojo.data.ItemFileReadStore: Invalid attribute argument."); - } - }, - - getValue: function( /* item */ item, - /* attribute-name-string */ attribute, - /* value? */ defaultValue){ - // summary: - // See dojo.data.api.Read.getValue() - var values = this.getValues(item, attribute); - return (values.length > 0)?values[0]:defaultValue; // mixed - }, - - getValues: function(/* item */ item, - /* attribute-name-string */ attribute){ - // summary: - // See dojo.data.api.Read.getValues() - - this._assertIsItem(item); - this._assertIsAttribute(attribute); - // Clone it before returning. refs: #10474 - return (item[attribute] || []).slice(0); // Array - }, - - getAttributes: function(/* item */ item){ - // summary: - // See dojo.data.api.Read.getAttributes() - this._assertIsItem(item); - var attributes = []; - for(var key in item){ - // Save off only the real item attributes, not the special id marks for O(1) isItem. - if((key !== this._storeRefPropName) && (key !== this._itemNumPropName) && (key !== this._rootItemPropName) && (key !== this._reverseRefMap)){ - attributes.push(key); - } - } - return attributes; // Array - }, - - hasAttribute: function( /* item */ item, - /* attribute-name-string */ attribute){ - // 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, - /* anything */ value){ - // summary: - // See dojo.data.api.Read.containsValue() - var regexp = undefined; - if(typeof value === "string"){ - regexp = filterUtil.patternToRegExp(value, false); - } - return this._containsValue(item, attribute, value, regexp); //boolean. - }, - - _containsValue: function( /* item */ item, - /* attribute-name-string */ attribute, - /* anything */ value, - /* RegExp?*/ regexp){ - // summary: - // Internal function for looking at the values contained by the item. - // description: - // Internal function for looking at the values contained by the item. This - // function allows for denoting if the comparison should be case sensitive for - // strings or not (for handling filtering cases where string case should not matter) - // - // item: - // The data item to examine for attribute values. - // attribute: - // The attribute to inspect. - // value: - // The value to match. - // regexp: - // Optional regular expression generated off value if value was of string type to handle wildcarding. - // If present and attribute values are string, then it can be used for comparison instead of 'value' - return array.some(this.getValues(item, attribute), function(possibleValue){ - if(possibleValue !== null && !lang.isObject(possibleValue) && regexp){ - if(possibleValue.toString().match(regexp)){ - return true; // Boolean - } - }else if(value === possibleValue){ - return true; // Boolean - } - }); - }, - - isItem: function(/* anything */ something){ - // summary: - // See dojo.data.api.Read.isItem() - if(something && something[this._storeRefPropName] === this){ - if(this._arrayOfAllItems[something[this._itemNumPropName]] === something){ - return true; - } - } - return false; // Boolean - }, - - isItemLoaded: function(/* anything */ something){ - // summary: - // See dojo.data.api.Read.isItemLoaded() - return this.isItem(something); //boolean - }, - - loadItem: function(/* object */ keywordArgs){ - // summary: - // See dojo.data.api.Read.loadItem() - this._assertIsItem(keywordArgs.item); - }, - - getFeatures: function(){ - // summary: - // See dojo.data.api.Read.getFeatures() - return this._features; //Object - }, - - getLabel: function(/* item */ item){ - // summary: - // See dojo.data.api.Read.getLabel() - if(this._labelAttr && this.isItem(item)){ - return this.getValue(item,this._labelAttr); //String - } - return undefined; //undefined - }, - - getLabelAttributes: function(/* item */ item){ - // summary: - // See dojo.data.api.Read.getLabelAttributes() - if(this._labelAttr){ - return [this._labelAttr]; //array - } - return null; //null - }, - - _fetchItems: function( /* Object */ keywordArgs, - /* Function */ findCallback, - /* Function */ errorCallback){ - // summary: - // See dojo.data.util.simpleFetch.fetch() - var self = this, - filter = function(requestArgs, arrayOfItems){ - var items = [], - i, key; - if(requestArgs.query){ - var value, - ignoreCase = requestArgs.queryOptions ? requestArgs.queryOptions.ignoreCase : false; - - //See if there are any string values that can be regexp parsed first to avoid multiple regexp gens on the - //same value for each item examined. Much more efficient. - var regexpList = {}; - for(key in requestArgs.query){ - value = requestArgs.query[key]; - if(typeof value === "string"){ - regexpList[key] = filterUtil.patternToRegExp(value, ignoreCase); - }else if(value instanceof RegExp){ - regexpList[key] = value; - } - } - for(i = 0; i < arrayOfItems.length; ++i){ - var match = true; - var candidateItem = arrayOfItems[i]; - if(candidateItem === null){ - match = false; - }else{ - for(key in requestArgs.query){ - value = requestArgs.query[key]; - if(!self._containsValue(candidateItem, key, value, regexpList[key])){ - match = false; - } - } - } - if(match){ - items.push(candidateItem); - } - } - findCallback(items, requestArgs); - }else{ - // We want a copy to pass back in case the parent wishes to sort the array. - // We shouldn't allow resort of the internal list, so that multiple callers - // can get lists and sort without affecting each other. We also need to - // filter out any null values that have been left as a result of deleteItem() - // calls in ItemFileWriteStore. - for(i = 0; i < arrayOfItems.length; ++i){ - var item = arrayOfItems[i]; - if(item !== null){ - items.push(item); - } - } - findCallback(items, requestArgs); - } - }; - - if(this._loadFinished){ - filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions)); - }else{ - //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 - //compatibility. People use _jsonFileUrl (even though officially - //private. - if(this._jsonFileUrl !== this._ccUrl){ - kernel.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; - } - - //See if there was any forced reset of data. - 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 - //invoked in the callback. - if(this._loadInProgress){ - this._queuedFetches.push({args: keywordArgs, filter: filter}); - }else{ - this._loadInProgress = true; - var getArgs = { - url: self._jsonFileUrl, - handleAs: "json-comment-optional", - preventCache: this.urlPreventCache, - failOk: this.failOk - }; - var getHandler = xhr.get(getArgs); - getHandler.addCallback(function(data){ - try{ - self._getItemsFromLoadedData(data); - self._loadFinished = true; - self._loadInProgress = false; - - filter(keywordArgs, self._getItemsArray(keywordArgs.queryOptions)); - self._handleQueuedFetches(); - }catch(e){ - self._loadFinished = true; - self._loadInProgress = false; - errorCallback(e, keywordArgs); - } - }); - getHandler.addErrback(function(error){ - self._loadInProgress = false; - errorCallback(error, keywordArgs); - }); - - //Wire up the cancel to abort of the request - //This call cancel on the deferred if it hasn't been called - //yet and then will chain to the simple abort of the - //simpleFetch keywordArgs - var oldAbort = null; - if(keywordArgs.abort){ - oldAbort = keywordArgs.abort; - } - keywordArgs.abort = function(){ - var df = getHandler; - if(df && df.fired === -1){ - df.cancel(); - df = null; - } - if(oldAbort){ - oldAbort.call(keywordArgs); - } - }; - } - }else if(this._jsonData){ - try{ - this._loadFinished = true; - this._getItemsFromLoadedData(this._jsonData); - this._jsonData = null; - filter(keywordArgs, this._getItemsArray(keywordArgs.queryOptions)); - }catch(e){ - errorCallback(e, keywordArgs); - } - }else{ - errorCallback(new Error("dojo.data.ItemFileReadStore: No JSON source data was provided as either URL or a nested Javascript object."), keywordArgs); - } - } - }, - - _handleQueuedFetches: function(){ - // summary: - // Internal function to execute delayed request in the store. - //Execute any deferred fetches now. - if(this._queuedFetches.length > 0){ - for(var i = 0; i < this._queuedFetches.length; i++){ - var fData = this._queuedFetches[i], - delayedQuery = fData.args, - delayedFilter = fData.filter; - if(delayedFilter){ - delayedFilter(delayedQuery, this._getItemsArray(delayedQuery.queryOptions)); - }else{ - this.fetchItemByIdentity(delayedQuery); - } - } - this._queuedFetches = []; - } - }, - - _getItemsArray: function(/*object?*/queryOptions){ - // summary: - // Internal function to determine which list of items to search over. - // queryOptions: The query options parameter, if any. - if(queryOptions && queryOptions.deep){ - return this._arrayOfAllItems; - } - return this._arrayOfTopLevelItems; - }, - - close: function(/*dojo.data.api.Request || keywordArgs || null */ request){ - // summary: - // See dojo.data.api.Read.close() - 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 - //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) && - (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(/* Object */ dataObject){ - // summary: - // Function to parse the loaded data into item format and build the internal items array. - // description: - // Function to parse the loaded data into item format and build the internal items array. - // - // dataObject: - // The JS data object containing the raw data to convery into item format. - // - // returns: array - // Array of items in store item format. - - // First, we define a couple little utility functions... - var addingArrays = false, - self = this; - - function valueIsAnItem(/* anything */ aValue){ - // summary: - // Given any sort of value that could be in the raw json data, - // return true if we should interpret the value as being an - // item itself, rather than a literal value or a reference. - // example: - // | false == valueIsAnItem("Kermit"); - // | false == valueIsAnItem(42); - // | false == valueIsAnItem(new Date()); - // | false == valueIsAnItem({_type:'Date', _value:'1802-05-14'}); - // | false == valueIsAnItem({_reference:'Kermit'}); - // | true == valueIsAnItem({name:'Kermit', color:'green'}); - // | true == valueIsAnItem({iggy:'pop'}); - // | true == valueIsAnItem({foo:42}); - return (aValue !== null) && - (typeof aValue === "object") && - (!lang.isArray(aValue) || addingArrays) && - (!lang.isFunction(aValue)) && - (aValue.constructor == Object || lang.isArray(aValue)) && - (typeof aValue._reference === "undefined") && - (typeof aValue._type === "undefined") && - (typeof aValue._value === "undefined") && - self.hierarchical; - } - - function addItemAndSubItemsToArrayOfAllItems(/* Item */ anItem){ - self._arrayOfAllItems.push(anItem); - for(var attribute in anItem){ - var valueForAttribute = anItem[attribute]; - if(valueForAttribute){ - if(lang.isArray(valueForAttribute)){ - var valueArray = valueForAttribute; - for(var k = 0; k < valueArray.length; ++k){ - var singleValue = valueArray[k]; - if(valueIsAnItem(singleValue)){ - addItemAndSubItemsToArrayOfAllItems(singleValue); - } - } - }else{ - if(valueIsAnItem(valueForAttribute)){ - addItemAndSubItemsToArrayOfAllItems(valueForAttribute); - } - } - } - } - } - - this._labelAttr = dataObject.label; - - // We need to do some transformations to convert the data structure - // that we read from the file into a format that will be convenient - // to work with in memory. - - // Step 1: Walk through the object hierarchy and build a list of all items - var i, - item; - this._arrayOfAllItems = []; - this._arrayOfTopLevelItems = dataObject.items; - - for(i = 0; i < this._arrayOfTopLevelItems.length; ++i){ - item = this._arrayOfTopLevelItems[i]; - if(lang.isArray(item)){ - addingArrays = true; - } - addItemAndSubItemsToArrayOfAllItems(item); - item[this._rootItemPropName]=true; - } - - // Step 2: Walk through all the attribute values of all the items, - // and replace single values with arrays. For example, we change this: - // { name:'Miss Piggy', pets:'Foo-Foo'} - // into this: - // { name:['Miss Piggy'], pets:['Foo-Foo']} - // - // We also store the attribute names so we can validate our store - // reference and item id special properties for the O(1) isItem - var allAttributeNames = {}, - key; - - for(i = 0; i < this._arrayOfAllItems.length; ++i){ - item = this._arrayOfAllItems[i]; - for(key in item){ - if(key !== this._rootItemPropName){ - var value = item[key]; - if(value !== null){ - if(!lang.isArray(value)){ - item[key] = [value]; - } - }else{ - item[key] = [null]; - } - } - allAttributeNames[key]=key; - } - } - - // Step 3: Build unique property names to use for the _storeRefPropName and _itemNumPropName - // This should go really fast, it will generally never even run the loop. - while(allAttributeNames[this._storeRefPropName]){ - this._storeRefPropName += "_"; - } - while(allAttributeNames[this._itemNumPropName]){ - this._itemNumPropName += "_"; - } - while(allAttributeNames[this._reverseRefMap]){ - 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 - // hash table of items keyed by the identity of the items. - var arrayOfValues; - - var identifier = dataObject.identifier; - if(identifier){ - this._itemsByIdentity = {}; - this._features['dojo.data.api.Identity'] = identifier; - for(i = 0; i < this._arrayOfAllItems.length; ++i){ - item = this._arrayOfAllItems[i]; - arrayOfValues = item[identifier]; - var identity = arrayOfValues[0]; - if(!Object.hasOwnProperty.call(this._itemsByIdentity, identity)){ - this._itemsByIdentity[identity] = item; - }else{ - if(this._jsonFileUrl){ - throw new Error("dojo.data.ItemFileReadStore: The json data as specified by: [" + this._jsonFileUrl + "] is malformed. Items within the list have identifier: [" + identifier + "]. Value collided: [" + identity + "]"); - }else if(this._jsonData){ - throw new Error("dojo.data.ItemFileReadStore: The json data provided by the creation arguments is malformed. Items within the list have identifier: [" + identifier + "]. Value collided: [" + identity + "]"); - } - } - } - }else{ - this._features['dojo.data.api.Identity'] = Number; - } - - // Step 5: Walk through all the items, and set each item's properties - // for _storeRefPropName and _itemNumPropName, so that store.isItem() will return true. - for(i = 0; i < this._arrayOfAllItems.length; ++i){ - item = this._arrayOfAllItems[i]; - item[this._storeRefPropName] = this; - item[this._itemNumPropName] = i; - } - - // Step 6: We walk through all the attribute values of all the items, - // looking for type/value literals and item-references. - // - // We replace item-references with pointers to items. For example, we change: - // { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] } - // into this: - // { name:['Kermit'], friends:[miss_piggy] } - // (where miss_piggy is the object representing the 'Miss Piggy' item). - // - // We replace type/value pairs with typed-literals. For example, we change: - // { name:['Nelson Mandela'], born:[{_type:'Date', _value:'1918-07-18'}] } - // into this: - // { 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){ - item = this._arrayOfAllItems[i]; // example: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] } - for(key in item){ - arrayOfValues = item[key]; // example: [{_reference:{name:'Miss Piggy'}}] - for(var j = 0; j < arrayOfValues.length; ++j){ - value = arrayOfValues[j]; // example: {_reference:{name:'Miss Piggy'}} - if(value !== null && typeof value == "object"){ - if(("_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){ - throw new Error("dojo.data.ItemFileReadStore: in the typeMap constructor arg, no object class was specified for the datatype '" + type + "'"); - }else if(lang.isFunction(mappingObj)){ - arrayOfValues[j] = new mappingObj(value._value); - }else if(lang.isFunction(mappingObj.deserialize)){ - arrayOfValues[j] = mappingObj.deserialize(value._value); - }else{ - throw new Error("dojo.data.ItemFileReadStore: Value provided in typeMap was neither a constructor, nor a an object with a deserialize function"); - } - } - if(value._reference){ - var referenceDescription = value._reference; // example: {name:'Miss Piggy'} - if(!lang.isObject(referenceDescription)){ - // example: 'Miss Piggy' - // from an item like: { name:['Kermit'], friends:[{_reference:'Miss Piggy'}]} - arrayOfValues[j] = this._getItemByIdentity(referenceDescription); - }else{ - // example: {name:'Miss Piggy'} - // from an item like: { name:['Kermit'], friends:[{_reference:{name:'Miss Piggy'}}] } - for(var k = 0; k < this._arrayOfAllItems.length; ++k){ - var candidateItem = this._arrayOfAllItems[k], - found = true; - for(var refKey in referenceDescription){ - if(candidateItem[refKey] != referenceDescription[refKey]){ - found = false; - } - } - if(found){ - arrayOfValues[j] = candidateItem; - } - } - } - if(this.referenceIntegrity){ - var refItem = arrayOfValues[j]; - if(this.isItem(refItem)){ - this._addReferenceToMap(refItem, item, key); - } - } - }else if(this.isItem(value)){ - //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){ - this._addReferenceToMap(value, item, key); - } - } - } - } - } - } - }, - - _addReferenceToMap: function(/*item*/ refItem, /*item*/ parentItem, /*string*/ attribute){ - // summary: - // Method to add an reference map entry for an item and attribute. - // description: - // Method to add an reference map entry for an item and attribute. // - // refItem: - // The item that is referenced. - // parentItem: - // The item that holds the new reference to refItem. - // attribute: - // The attribute on parentItem that contains the new reference. - - //Stub function, does nothing. Real processing is in ItemFileWriteStore. - }, - - getIdentity: function(/* item */ item){ - // summary: - // See dojo.data.api.Identity.getIdentity() - var identifier = this._features['dojo.data.api.Identity']; - if(identifier === Number){ - return item[this._itemNumPropName]; // Number - }else{ - var arrayOfValues = item[identifier]; - if(arrayOfValues){ - return arrayOfValues[0]; // Object || String - } - } - return null; // null - }, - - fetchItemByIdentity: function(/* Object */ keywordArgs){ - // summary: - // See dojo.data.api.Identity.fetchItemByIdentity() - - // Hasn't loaded yet, we have to trigger the load. - var item, - scope; - if(!this._loadFinished){ - 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 - //compatibility. People use _jsonFileUrl (even though officially - //private. - if(this._jsonFileUrl !== this._ccUrl){ - kernel.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; - } - - //See if there was any forced reset of data. - if(this.data != null && this._jsonData == null){ - this._jsonData = this.data; - this.data = null; - } - - if(this._jsonFileUrl){ - - if(this._loadInProgress){ - this._queuedFetches.push({args: keywordArgs}); - }else{ - this._loadInProgress = true; - var getArgs = { - url: self._jsonFileUrl, - handleAs: "json-comment-optional", - preventCache: this.urlPreventCache, - failOk: this.failOk - }; - var getHandler = xhr.get(getArgs); - getHandler.addCallback(function(data){ - var scope = keywordArgs.scope?keywordArgs.scope:window.global; - try{ - self._getItemsFromLoadedData(data); - self._loadFinished = true; - self._loadInProgress = false; - item = self._getItemByIdentity(keywordArgs.identity); - if(keywordArgs.onItem){ - keywordArgs.onItem.call(scope, item); - } - self._handleQueuedFetches(); - }catch(error){ - self._loadInProgress = false; - if(keywordArgs.onError){ - keywordArgs.onError.call(scope, error); - } - } - }); - getHandler.addErrback(function(error){ - self._loadInProgress = false; - if(keywordArgs.onError){ - var scope = keywordArgs.scope?keywordArgs.scope:window.global; - keywordArgs.onError.call(scope, error); - } - }); - } - - }else if(this._jsonData){ - // Passed in data, no need to xhr. - self._getItemsFromLoadedData(self._jsonData); - self._jsonData = null; - self._loadFinished = true; - item = self._getItemByIdentity(keywordArgs.identity); - if(keywordArgs.onItem){ - scope = keywordArgs.scope?keywordArgs.scope:window.global; - keywordArgs.onItem.call(scope, item); - } - } - }else{ - // Already loaded. We can just look it up and call back. - item = this._getItemByIdentity(keywordArgs.identity); - if(keywordArgs.onItem){ - scope = keywordArgs.scope?keywordArgs.scope:window.global; - keywordArgs.onItem.call(scope, item); - } - } - }, - - _getItemByIdentity: function(/* Object */ identity){ - // summary: - // Internal function to look an item up by its identity map. - var item = null; - if(this._itemsByIdentity){ - // If this map is defined, we need to just try to get it. If it fails - // the item does not exist. - if(Object.hasOwnProperty.call(this._itemsByIdentity, identity)){ - item = this._itemsByIdentity[identity]; - } - }else if (Object.hasOwnProperty.call(this._arrayOfAllItems, identity)){ - item = this._arrayOfAllItems[identity]; - } - if(item === undefined){ - item = null; - } - return item; // Object - }, - - getIdentityAttributes: function(/* item */ item){ - // 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 - return null; // null - }else{ - return [identifier]; // Array - } - }, - - _forceLoad: function(){ - // summary: - // Internal function to force a load of the store if it hasn't occurred yet. This is required - // for specific functions to work properly. - var self = this; - //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 - //compatibility. People use _jsonFileUrl (even though officially - //private. - if(this._jsonFileUrl !== this._ccUrl){ - kernel.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; - } - - //See if there was any forced reset of data. - if(this.data != null){ - this._jsonData = this.data; - this.data = null; - } - - if(this._jsonFileUrl){ - var getArgs = { - url: this._jsonFileUrl, - handleAs: "json-comment-optional", - preventCache: this.urlPreventCache, - failOk: this.failOk, - sync: true - }; - var getHandler = xhr.get(getArgs); - getHandler.addCallback(function(data){ - try{ - //Check to be sure there wasn't another load going on concurrently - //So we don't clobber data that comes in on it. If there is a load going on - //then do not save this data. It will potentially clobber current data. - //We mainly wanted to sync/wait here. - //TODO: Revisit the loading scheme of this store to improve multi-initial - //request handling. - if(self._loadInProgress !== true && !self._loadFinished){ - self._getItemsFromLoadedData(data); - self._loadFinished = true; - }else if(self._loadInProgress){ - //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."); - } - }catch(e){ - console.log(e); - throw e; - } - }); - getHandler.addErrback(function(error){ - throw error; - }); - }else if(this._jsonData){ - self._getItemsFromLoadedData(self._jsonData); - self._jsonData = null; - self._loadFinished = true; - } - } -}); -//Mix in the simple fetch implementation to this class. -lang.extend(ItemFileReadStore,simpleFetch); - -return ItemFileReadStore; -}); - -}, -'dojo/html':function(){ -define("dojo/html", ["./_base/kernel", "./_base/lang", "./_base/array", "./_base/declare", "./dom", "./dom-construct", "./parser"], function(dojo, lang, darray, declare, dom, domConstruct, parser) { - // module: - // dojo/html - // summary: - // TODOC - - lang.getObject("html", true, dojo); - - // the parser might be needed.. - - // idCounter is incremented with each instantiation to allow asignment of a unique id for tracking, logging purposes - var idCounter = 0; - - 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 - }; - -/*==== - dojo.html._emptyNode = function(node){ - // summary: - // removes all child nodes from the given node - // node: DOMNode - // the parent element - }; -=====*/ - dojo.html._emptyNode = domConstruct.empty; - - dojo.html._setNodeContent = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont){ - // summary: - // inserts the given content into the given node - // node: - // the parent element - // content: - // 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 - domConstruct.empty(node); - - if(cont) { - if(typeof cont == "string") { - cont = domConstruct.toDom(cont, node.ownerDocument); - } - if(!cont.nodeType && lang.isArrayLike(cont)) { - // handle as enumerable, but it may shrink as we enumerate it - for(var startlen=cont.length, i=0; i<cont.length; i=startlen==cont.length ? i+1 : 0) { - domConstruct.place( cont[i], node, "last"); - } - } else { - // pass nodes, documentFragments and unknowns through to dojo.place - domConstruct.place(cont, node, "last"); - } - } - - // return DomNode - return node; - }; - - // we wrap up the content-setting operation in a object - declare("dojo.html._ContentSetter", null, - { - // node: DomNode|String - // An node which will be the parent element that we set content into - node: "", - - // content: String|DomNode|DomNode[] - // The content to be placed in the node. Can be an HTML string, a node reference, or a enumerable list of nodes - content: "", - - // id: String? - // Usually only used internally, and auto-generated with each instance - id: "", - - // cleanContent: Boolean - // Should the content be treated as a full html document, - // and the real content stripped of <html>, <body> wrapper before injection - cleanContent: false, - - // extractContent: Boolean - // Should the content be treated as a full html document, and the real content stripped of <html>, <body> wrapper before injection - extractContent: false, - - // 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){ - // summary: - // Provides a configurable, extensible object to wrap the setting on content on a node - // call the set() method to actually set the content.. - - // the original params are mixed directly into the instance "this" - lang.mixin(this, params || {}); - - // give precedence to params.node vs. the node argument - // and ensure its a node, not an id string - node = this.node = dom.byId( this.node || node ); - - if(!this.id){ - this.id = [ - "Setter", - (node) ? node.id || node.tagName : "", - idCounter++ - ].join("_"); - } - }, - set: function(/* String|DomNode|NodeList? */ cont, /* Object? */ params){ - // summary: - // 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 - if(undefined !== cont){ - this.content = cont; - } - // in the re-use scenario, set needs to be able to mixin new configuration - if(params){ - this._mixin(params); - } - - this.onBegin(); - this.setContent(); - this.onEnd(); - - return this.node; - }, - setContent: function(){ - // summary: - // sets the content on the node - - var node = this.node; - if(!node) { - // can't proceed - throw new Error(this.declaredClass + ": setContent given no node"); - } - try{ - node = dojo.html._setNodeContent(node, this.content); - }catch(e){ - // check if a domfault occurs when we are appending this.errorMessage - // like for instance if domNode is a UL and we try append a DIV - - // FIXME: need to allow the user to provide a content error message string - var errMess = this.onContentError(e); - try{ - node.innerHTML = errMess; - }catch(e){ - console.error('Fatal ' + this.declaredClass + '.setContent could not change content due to '+e.message, e); - } - } - // always put back the node for the next method - this.node = node; // DomNode - }, - - empty: function() { - // summary - // cleanly empty out existing content - - // destroy any widgets from a previous run - // 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) { - darray.forEach(this.parseResults, function(w) { - if(w.destroy){ - w.destroy(); - } - }); - delete this.parseResults; - } - // 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 - // - including the node and content provided - before the set operation actually takes place - // This default implementation checks for cleanContent and extractContent flags to - // optionally pre-process html string content - var cont = this.content; - - if(lang.isString(cont)){ - if(this.cleanContent){ - cont = dojo.html._secureForInnerHtml(cont); - } - - if(this.extractContent){ - var match = cont.match(/<body[^>]*>\s*([\s\S]+)\s*<\/body>/im); - if(match){ cont = match[1]; } - } - } - - // clean out the node and any cruft associated with it - like widgets - this.empty(); - - this.content = cont; - return this.node; /* DomNode */ - }, - - onEnd: function(){ - // summary - // Called after set(), when the new content has been pushed into the node - // It provides an opportunity for post-processing before handing back the node to the caller - // This default implementation checks a parseContent flag to optionally run the dojo parser over the new content - if(this.parseContent){ - // populates this.parseResults if you need those.. - this._parse(); - } - return this.node; /* DomNode */ - }, - - tearDown: function(){ - // summary - // manually reset the Setter instance if its being re-used for example for another set() - // description - // 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; - }, - - onContentError: function(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 - // 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; - for(key in params){ - 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]; - } - }, - _parse: function(){ - // 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 = {}; - darray.forEach(["dir", "lang", "textDir"], function(name){ - if(this[name]){ - inherited[name] = this[name]; - } - }, this); - this.parseResults = parser.parse({ - rootNode: rootNode, - noStart: !this.startup, - inherited: inherited, - scope: this.parserScope - }); - }catch(e){ - this._onError('Content', e, "Error parsing in _ContentSetter#"+this.id); - } - }, - - _onError: function(type, err, consoleText){ - // summary: - // shows user the string that is returned by on[type]Error - // overide/implement on[type]Error and return your own string to customize - var errText = this['on' + type + 'Error'].call(this, err); - if(consoleText){ - console.error(consoleText, err); - }else if(errText){ // a empty string won't change current content - dojo.html._setNodeContent(this.node, errText, true); - } - } - }); // end dojo.declare() - - dojo.html.set = function(/* DomNode */ node, /* String|DomNode|NodeList */ cont, /* Object? */ params){ - // summary: - // inserts (replaces) the given content into the given node. dojo.place(cont, node, "only") - // may be a better choice for simple HTML insertion. - // description: - // Unless you need to use the params capabilities of this method, you should use - // dojo.place(cont, node, "only"). dojo.place() has more robust support for injecting - // an HTML string into the DOM, but it only handles inserting an HTML string as DOM - // elements, or inserting a DOM node. dojo.place does not handle NodeList insertions - // or the other capabilities as defined by the params object for this method. - // node: - // the parent element that will receive the content - // cont: - // 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: - // 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}); - 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{ - // 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(lang.mixin( - params, - { content: cont, node: node } - )); - return op.set(); - } - }; - - return dojo.html; -}); - -}, -'dijit/_PaletteMixin':function(){ -define("dijit/_PaletteMixin", [ - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/dom-class", // domClass.add domClass.remove - "dojo/dom-construct", // domConstruct.create domConstruct.place - "dojo/_base/event", // event.stop - "dojo/keys", // keys - "dojo/_base/lang", // lang.getObject - "./_CssStateMixin", - "./focus", - "./typematic" -], function(declare, domAttr, domClass, domConstruct, event, keys, lang, _CssStateMixin, focus, typematic){ - -/*===== - var _CssStateMixin = dijit._CssStateMixin; -=====*/ - -// module: -// dijit/_PaletteMixin -// summary: -// A keyboard accessible palette, for picking a color/emoticon/etc. - -return declare("dijit._PaletteMixin", [_CssStateMixin], { - // summary: - // A keyboard accessible palette, for picking a color/emoticon/etc. - // description: - // A mixin for a grid showing various entities, so the user can pick a certain entity. - - // defaultTimeout: Number - // Number of milliseconds before a held key or button becomes typematic - defaultTimeout: 500, - - // timeoutChangeRate: Number - // Fraction of time used to change the typematic timer between events - // 1.0 means that each typematic event fires at defaultTimeout intervals - // < 1.0 means that each typematic event fires at an increasing faster rate - timeoutChangeRate: 0.90, - - // value: String - // Currently selected color/emoticon/etc. - value: "", - - // _selectedCell: [private] Integer - // 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, -=====*/ - - // tabIndex: String - // Widget tab index. - tabIndex: "0", - - // cellClass: [protected] String - // CSS class applied to each cell in the palette - cellClass: "dijitPaletteCell", - - // dyeClass: [protected] String - // Name of javascript class for Object created for each cell of the palette. - // dyeClass should implements dijit.Dye interface - dyeClass: '', - - // summary: String - // Localized summary for the palette table - summary: '', - _setSummaryAttr: "paletteTableNode", - - _dyeFactory: function(value /*===== , row, col =====*/){ - // summary: - // Return instance of dijit.Dye for specified cell of palette - // tags: - // extension - var dyeClassObj = lang.getObject(this.dyeClass); - return new dyeClassObj(value); - }, - - _preparePalette: function(choices, titles) { - // summary: - // Subclass must call _preparePalette() from postCreate(), passing in the tooltip - // for each cell - // choices: String[][] - // id's for each cell of the palette, used to create Dye JS object for each cell - // titles: String[] - // Localized tooltip for each cell - - this._cells = []; - var url = this._blankGif; - - this.connect(this.gridNode, "ondijitclick", "_onCellClick"); - - for(var row=0; row < choices.length; row++){ - var rowNode = domConstruct.create("tr", {tabIndex: "-1"}, this.gridNode); - for(var col=0; col < choices[row].length; col++){ - var value = choices[row][col]; - if(value){ - var cellObject = this._dyeFactory(value, row, col); - - var cellNode = domConstruct.create("td", { - "class": this.cellClass, - tabIndex: "-1", - title: titles[value], - role: "gridcell" - }); - - // prepare cell inner structure - cellObject.fillCell(cellNode, url); - - domConstruct.place(cellNode, rowNode); - - cellNode.index = this._cells.length; - - // save cell info into _cells - this._cells.push({node:cellNode, dye:cellObject}); - } - } - } - this._xDim = choices[0].length; - this._yDim = choices.length; - - // Now set all events - // The palette itself is navigated to with the tab key on the keyboard - // Keyboard navigation within the Palette is with the arrow keys - // Spacebar selects the cell. - // For the up key the index is changed by negative the x dimension. - - var keyIncrementMap = { - UP_ARROW: -this._xDim, - // The down key the index is increase by the x dimension. - DOWN_ARROW: this._xDim, - // Right and left move the index by 1. - RIGHT_ARROW: this.isLeftToRight() ? 1 : -1, - LEFT_ARROW: this.isLeftToRight() ? -1 : 1 - }; - for(var key in keyIncrementMap){ - this._connects.push( - typematic.addKeyListener( - this.domNode, - {charOrCode:keys[key], ctrlKey:false, altKey:false, shiftKey:false}, - this, - function(){ - var increment = keyIncrementMap[key]; - return function(count){ this._navigateByKey(increment, count); }; - }(), - this.timeoutChangeRate, - this.defaultTimeout - ) - ); - } - }, - - postCreate: function(){ - this.inherited(arguments); - - // Set initial navigable node. - this._setCurrent(this._cells[0].node); - }, - - focus: function(){ - // summary: - // Focus this widget. Puts focus on the most recently focused cell. - - // The cell already has tabIndex set, just need to set CSS and focus it - focus.focus(this._currentFocus); - }, - - _onCellClick: function(/*Event*/ evt){ - // summary: - // Handler for click, enter key & space key. Selects the cell. - // evt: - // The event. - // tags: - // private - - var target = evt.target; - - // Find TD associated with click event. For ColorPalette user likely clicked IMG inside of TD - while(target.tagName != "TD"){ - if(!target.parentNode || target == this.gridNode){ // probably can never happen, but just in case - return; - } - target = target.parentNode; - } - - var value = this._getDye(target).getValue(); - - // First focus the clicked cell, and then send onChange() notification. - // onChange() (via _setValueAttr) must be after the focus call, because - // it may trigger a refocus to somewhere else (like the Editor content area), and that - // second focus should win. - this._setCurrent(target); - focus.focus(target); - this._setValueAttr(value, true); - - event.stop(evt); - }, - - _setCurrent: function(/*DomNode*/ node){ - // summary: - // Sets which node is the focused cell. - // description: - // At any point in time there's exactly one - // cell with tabIndex != -1. If focus is inside the palette then - // focus is on that cell. - // - // After calling this method, arrow key handlers and mouse click handlers - // should focus the cell in a setTimeout(). - // tags: - // protected - if("_currentFocus" in this){ - // Remove tabIndex on old cell - domAttr.set(this._currentFocus, "tabIndex", "-1"); - } - - // Set tabIndex of new cell - this._currentFocus = node; - if(node){ - domAttr.set(node, "tabIndex", this.tabIndex); - } - }, - - _setValueAttr: function(value, priorityChange){ - // summary: - // This selects a cell. It triggers the onChange event. - // value: String value of the cell to select - // tags: - // protected - // priorityChange: - // Optional parameter used to tell the select whether or not to fire - // onChange event. - - // clear old selected cell - if(this._selectedCell >= 0){ - domClass.remove(this._cells[this._selectedCell].node, this.cellClass + "Selected"); - } - this._selectedCell = -1; - - // search for cell matching specified value - if(value){ - for(var i = 0; i < this._cells.length; i++){ - if(value == this._cells[i].dye.getValue()){ - this._selectedCell = i; - domClass.add(this._cells[i].node, this.cellClass + "Selected"); - 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 =====*/){ - // summary: - // Callback when a cell is selected. - // value: String - // Value corresponding to cell. - }, - - _navigateByKey: function(increment, typeCount){ - // summary: - // This is the callback for typematic. - // It changes the focus and the highlighed cell. - // increment: - // How much the key is navigated. - // typeCount: - // How many times typematic has fired. - // tags: - // private - - // typecount == -1 means the key is released. - if(typeCount == -1){ return; } - - var newFocusIndex = this._currentFocus.index + increment; - if(newFocusIndex < this._cells.length && newFocusIndex > -1){ - var focusNode = this._cells[newFocusIndex].node; - this._setCurrent(focusNode); - - // Actually focus the node, for the benefit of screen readers. - // Use setTimeout because IE doesn't like changing focus inside of an event handler - setTimeout(lang.hitch(dijit, "focus", focusNode), 0); - } - }, - - _getDye: function(/*DomNode*/ cell){ - // summary: - // Get JS object for given cell DOMNode - - return this._cells[cell.index].dye; - } -}); - -/*===== -declare("dijit.Dye", - null, - { - // summary: - // Interface for the JS Object associated with a palette cell (i.e. DOMNode) - - constructor: function(alias, row, col){ - // summary: - // Initialize according to value or alias like "white" - // alias: String - }, - - getValue: function(){ - // summary: - // Return "value" of cell; meaning of "value" varies by subclass. - // description: - // For example color hex value, emoticon ascii value etc, entity hex value. - }, - - fillCell: function(cell, blankGif){ - // summary: - // Add cell DOMNode inner structure - // cell: DomNode - // The surrounding cell - // blankGif: String - // URL for blank cell image - } - } -); -=====*/ - -}); - -}, -'dijit/form/ValidationTextBox':function(){ -require({cache:{ -'url:dijit/form/templates/ValidationTextBox.html':"<div class=\"dijit dijitReset dijitInline 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\" data-dojo-attach-point='textbox,focusNode' autocomplete=\"off\"\n\t\t\t${!nameAttrSetting} type='${type}'\n\t/></div\n></div>\n"}}); -define("dijit/form/ValidationTextBox", [ - "dojo/_base/declare", // declare - "dojo/i18n", // i18n.getLocalization - "./TextBox", - "../Tooltip", - "dojo/text!./templates/ValidationTextBox.html", - "dojo/i18n!./nls/validate" -], function(declare, i18n, TextBox, Tooltip, template){ - -/*===== - var Tooltip = dijit.Tooltip; - var TextBox = dijit.form.TextBox; -=====*/ - - // module: - // dijit/form/ValidationTextBox - // summary: - // Base class for textbox widgets with the ability to validate content of various types and provide user feedback. - - - /*===== - dijit.form.ValidationTextBox.__Constraints = function(){ - // locale: String - // locale used for validation, picks up value from this widget's lang attribute - // _flags_: anything - // various flags passed to regExpGen function - this.locale = ""; - this._flags_ = ""; - } - =====*/ - - return declare("dijit.form.ValidationTextBox", TextBox, { - // summary: - // Base class for textbox widgets with the ability to validate content of various types and provide user feedback. - // tags: - // protected - - templateString: template, - baseClass: "dijitTextBox dijitValidationTextBox", - - // required: Boolean - // User is required to enter data into this field. - required: false, - - // 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. - // - // Message disappears when user starts typing. - promptMessage: "", - - // invalidMessage: String - // The message to display if value is invalid. - // The translated string value is read from the message file by default. - // Set to "" to use the promptMessage instead. - invalidMessage: "$_unset_$", - - // missingMessage: String - // The message to display if value is empty and the field is required. - // The translated string value is read from the message file by default. - // 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: {}, - - // regExp: [extension protected] String - // regular expression string used to validate the input - // Do not specify both regExp and regExpGen - regExp: ".*", - - 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. - // tags: - // extension protected - return this.regExp; // String - }, - - // state: [readonly] String - // Shows current state (ie, validation result) of input (""=Normal, Incomplete, or Error) - state: "", - - // tooltipPosition: String[] - // See description of `dijit.Tooltip.defaultPosition` for details on this parameter. - tooltipPosition: [], - - _setValueAttr: function(){ - // summary: - // Hook so set('value', ...) works. - this.inherited(arguments); - this.validate(this.focused); - }, - - validator: function(/*anything*/ value, /*dijit.form.ValidationTextBox.__Constraints*/ constraints){ - // summary: - // Overridable function used to validate the text input against the regular expression. - // tags: - // protected - return (new RegExp("^(?:" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) && - (!this.required || !this._isEmpty(value)) && - (this._isEmpty(value) || this.parse(value, constraints) !== undefined); // Boolean - }, - - _isValidSubset: function(){ - // summary: - // Returns true if the value is either already valid or could be made valid by appending characters. - // This is used for validation while the user [may be] still typing. - return this.textbox.value.search(this._partialre) == 0; - }, - - isValid: function(/*Boolean*/ /*===== isFocused =====*/){ - // summary: - // Tests if value is valid. - // Can override with your own routine in a subclass. - // tags: - // protected - return this.validator(this.textbox.value, this.constraints); - }, - - _isEmpty: function(value){ - // summary: - // Checks for whitespace - return (this.trim ? /^\s*$/ : /^$/).test(value); // Boolean - }, - - getErrorMessage: function(/*Boolean*/ /*===== isFocused =====*/){ - // summary: - // Return an error message to show if appropriate - // tags: - // protected - return (this.required && this._isEmpty(this.textbox.value)) ? this.missingMessage : this.invalidMessage; // String - }, - - getPromptMessage: function(/*Boolean*/ /*===== isFocused =====*/){ - // summary: - // Return a hint message to show when widget is first focused - // tags: - // protected - return this.promptMessage; // String - }, - - _maskValidSubsetError: true, - validate: function(/*Boolean*/ isFocused){ - // summary: - // Called by oninit, onblur, and onkeypress. - // description: - // Show missing or invalid messages if appropriate, and highlight textbox field. - // tags: - // protected - var message = ""; - var isValid = this.disabled || this.isValid(isFocused); - if(isValid){ this._maskValidSubsetError = true; } - var isEmpty = this._isEmpty(this.textbox.value); - var isValidSubset = !isValid && isFocused && this._isValidSubset(); - this._set("state", isValid ? "" : (((((!this._hasBeenBlurred || isFocused) && isEmpty) || isValidSubset) && this._maskValidSubsetError) ? "Incomplete" : "Error")); - this.focusNode.setAttribute("aria-invalid", isValid ? "false" : "true"); - - 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.set("message", message); - - return isValid; - }, - - displayMessage: function(/*String*/ message){ - // summary: - // Overridable method to display validation errors/hints. - // By default uses a tooltip. - // tags: - // extension - if(message && this.focused){ - Tooltip.show(message, this.domNode, this.tooltipPosition, !this.isLeftToRight()); - }else{ - Tooltip.hide(this.domNode); - } - }, - - _refreshState: function(){ - // Overrides TextBox._refreshState() - this.validate(this.focused); - this.inherited(arguments); - }, - - //////////// INITIALIZATION METHODS /////////////////////////////////////// - - constructor: function(){ - this.constraints = {}; - }, - - _setConstraintsAttr: function(/*Object*/ constraints){ - if(!constraints.locale && this.lang){ - constraints.locale = this.lang; - } - this._set("constraints", constraints); - this._computePartialRE(); - }, - - _computePartialRE: function(){ - var p = this.regExpGen(this.constraints); - this.regExp = p; - var partialre = ""; - // parse the regexp and produce a new regexp that matches valid subsets - // if the regexp is .* then there's no use in matching subsets since everything is valid - if(p != ".*"){ this.regExp.replace(/\\.|\[\]|\[.*?[^\\]{1}\]|\{.*?\}|\(\?[=:!]|./g, - function(re){ - switch(re.charAt(0)){ - case '{': - case '+': - case '?': - case '*': - case '^': - case '$': - case '|': - case '(': - partialre += re; - break; - case ")": - partialre += "|$)"; - break; - default: - partialre += "(?:"+re+"|$)"; - break; - } - } - );} - try{ // this is needed for now since the above regexp parsing needs more test verification - "".search(partialre); - }catch(e){ // should never be here unless the original RE is bad or the parsing is bad - partialre = this.regExp; - console.warn('RegExp error in ' + this.declaredClass + ': ' + this.regExp); - } // should never be here unless the original RE is bad or the parsing is bad - this._partialre = "^(?:" + partialre + ")$"; - }, - - postMixInProperties: function(){ - this.inherited(arguments); - this.messages = 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); // this needs to happen now (and later) due to codependency on _set*Attr calls attachPoints - }, - - _setDisabledAttr: function(/*Boolean*/ value){ - this.inherited(arguments); // call FormValueWidget._setDisabledAttr() - this._refreshState(); - }, - - _setRequiredAttr: function(/*Boolean*/ value){ - this._set("required", value); - this.focusNode.setAttribute("aria-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 - this._maskValidSubsetError = true; - this.inherited(arguments); - }, - - _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); - } - }); -}); - -}, -'dijit/_base/typematic':function(){ -define("dijit/_base/typematic", ["../typematic"], function(){ - // for back-compat, just loads top level module -}); - -}, -'dijit/_base':function(){ -define("dijit/_base", [ - ".", - "./a11y", // used to be in dijit/_base/manager - "./WidgetSet", // used to be in dijit/_base/manager - "./_base/focus", - "./_base/manager", - "./_base/place", - "./_base/popup", - "./_base/scroll", - "./_base/sniff", - "./_base/typematic", - "./_base/wai", - "./_base/window" -], function(dijit){ - - // module: - // dijit/_base - // summary: - // Includes all the modules in dijit/_base - - return dijit._base; -}); - -}, -'dijit/layout/BorderContainer':function(){ -define("dijit/layout/BorderContainer", [ - "dojo/_base/array", // array.filter array.forEach array.map - "dojo/cookie", // cookie - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add domClass.remove domClass.toggle - "dojo/dom-construct", // domConstruct.destroy domConstruct.place - "dojo/dom-geometry", // domGeometry.marginBox - "dojo/dom-style", // domStyle.style - "dojo/_base/event", // event.stop - "dojo/keys", - "dojo/_base/lang", // lang.getObject lang.hitch - "dojo/on", - "dojo/touch", - "dojo/_base/window", // win.body win.doc win.doc.createElement - "../_WidgetBase", - "../_Widget", - "../_TemplatedMixin", - "./_LayoutWidget", - "./utils" // layoutUtils.layoutChildren -], function(array, cookie, declare, domClass, domConstruct, domGeometry, domStyle, event, keys, lang, on, touch, win, - _WidgetBase, _Widget, _TemplatedMixin, _LayoutWidget, layoutUtils){ - -/*===== - var _WidgetBase = dijit._WidgetBase; - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _LayoutWidget = dijit.layout._LayoutWidget; -=====*/ - -// module: -// dijit/layout/BorderContainer -// summary: -// Provides layout in up to 5 regions, a mandatory center with optional borders along its 4 sides. - -var _Splitter = declare("dijit.layout._Splitter", [_Widget, _TemplatedMixin ], -{ - // summary: - // A draggable spacer between two items in a `dijit.layout.BorderContainer`. - // description: - // This is instantiated by `dijit.layout.BorderContainer`. Users should not - // create it directly. - // tags: - // private - -/*===== - // container: [const] dijit.layout.BorderContainer - // Pointer to the parent BorderContainer - container: null, - - // child: [const] dijit.layout._LayoutWidget - // Pointer to the pane associated with this splitter - child: null, - - // region: [const] String - // Region of pane associated with this splitter. - // "top", "bottom", "left", "right". - region: null, -=====*/ - - // live: [const] Boolean - // If true, the child's size changes and the child widget is redrawn as you drag the splitter; - // otherwise, the size doesn't change until you drop the splitter (by mouse-up) - live: true, - - templateString: '<div class="dijitSplitter" data-dojo-attach-event="onkeypress:_onKeyPress,press:_startDrag,onmouseenter:_onMouse,onmouseleave:_onMouse" tabIndex="0" role="separator"><div class="dijitSplitterThumb"></div></div>', - - constructor: function(){ - this._handlers = []; - }, - - 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); - - domClass.add(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V")); - - if(this.container.persist){ - // restore old size - var persistSize = cookie(this._cookieName); - if(persistSize){ - this.child.domNode.style[this.horizontal ? "height" : "width"] = persistSize; - } - } - }, - - _computeMaxSize: function(){ - // summary: - // Return the maximum size that my corresponding pane can be set to - - var dim = this.horizontal ? 'h' : 'w', - childSize = domGeometry.getMarginBox(this.child.domNode)[dim], - center = array.filter(this.container.getChildren(), function(child){ return child.region == "center";})[0], - spaceAvailable = domGeometry.getMarginBox(center.domNode)[dim]; // can expand until center is crushed to 0 - - return Math.min(this.child.maxSize, childSize + spaceAvailable); - }, - - _startDrag: function(e){ - if(!this.cover){ - this.cover = win.doc.createElement('div'); - domClass.add(this.cover, "dijitSplitterCover"); - domConstruct.place(this.cover, this.child.domNode, "after"); - } - domClass.add(this.cover, "dijitSplitterCoverActive"); - - // Safeguard in case the stop event was missed. Shouldn't be necessary if we always get the mouse up. - if(this.fake){ domConstruct.destroy(this.fake); } - if(!(this._resize = this.live)){ //TODO: disable live for IE6? - // create fake splitter to display at old position while we drag - (this.fake = this.domNode.cloneNode(true)).removeAttribute("id"); - domClass.add(this.domNode, "dijitSplitterShadow"); - domConstruct.place(this.fake, this.domNode, "after"); - } - domClass.add(this.domNode, "dijitSplitterActive dijitSplitter" + (this.horizontal ? "H" : "V") + "Active"); - if(this.fake){ - domClass.remove(this.fake, "dijitSplitterHover dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover"); - } - - //Performance: load data info local vars for onmousevent function closure - var factor = this._factor, - isHorizontal = this.horizontal, - axis = isHorizontal ? "pageY" : "pageX", - pageStart = e[axis], - splitterStyle = this.domNode.style, - dim = isHorizontal ? 'h' : 'w', - childStart = domGeometry.getMarginBox(this.child.domNode)[dim], - max = this._computeMaxSize(), - min = this.child.minSize || 20, - region = this.region, - splitterAttr = region == "top" || region == "bottom" ? "top" : "left", // style attribute of splitter to adjust - splitterStart = parseInt(splitterStyle[splitterAttr], 10), - resize = this._resize, - layoutFunc = lang.hitch(this.container, "_layoutChildren", this.child.id), - de = win.doc; - - this._handlers = this._handlers.concat([ - on(de, touch.move, this._drag = function(e, forceResize){ - var delta = e[axis] - pageStart, - childSize = factor * delta + childStart, - boundChildSize = Math.max(Math.min(childSize, max), min); - - if(resize || forceResize){ - layoutFunc(boundChildSize); - } - // TODO: setting style directly (usually) sets content box size, need to set margin box size - splitterStyle[splitterAttr] = delta + splitterStart + factor*(boundChildSize - childSize) + "px"; - }), - on(de, "dragstart", event.stop), - on(win.body(), "selectstart", event.stop), - on(de, touch.release, lang.hitch(this, "_stopDrag")) - ]); - event.stop(e); - }, - - _onMouse: function(e){ - // summary: - // Handler for onmouseenter / onmouseleave events - var o = (e.type == "mouseover" || e.type == "mouseenter"); - domClass.toggle(this.domNode, "dijitSplitterHover", o); - domClass.toggle(this.domNode, "dijitSplitter" + (this.horizontal ? "H" : "V") + "Hover", o); - }, - - _stopDrag: function(e){ - try{ - if(this.cover){ - domClass.remove(this.cover, "dijitSplitterCoverActive"); - } - if(this.fake){ domConstruct.destroy(this.fake); } - domClass.remove(this.domNode, "dijitSplitterActive dijitSplitter" - + (this.horizontal ? "H" : "V") + "Active dijitSplitterShadow"); - this._drag(e); //TODO: redundant with onmousemove? - this._drag(e, true); - }finally{ - this._cleanupHandlers(); - delete this._drag; - } - - if(this.container.persist){ - cookie(this._cookieName, this.child.domNode.style[this.horizontal ? "height" : "width"], {expires:365}); - } - }, - - _cleanupHandlers: function(){ - var h; - while(h = this._handlers.pop()){ h.remove(); } - }, - - _onKeyPress: function(/*Event*/ e){ - // should we apply typematic to this? - this._resize = true; - var horizontal = this.horizontal; - var tick = 1; - switch(e.charOrCode){ - case horizontal ? keys.UP_ARROW : keys.LEFT_ARROW: - tick *= -1; -// break; - case horizontal ? keys.DOWN_ARROW : keys.RIGHT_ARROW: - break; - default: -// this.inherited(arguments); - return; - } - var childSize = domGeometry.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)); - event.stop(e); - }, - - destroy: function(){ - this._cleanupHandlers(); - delete this.child; - delete this.container; - delete this.cover; - delete this.fake; - this.inherited(arguments); - } -}); - -var _Gutter = declare("dijit.layout._Gutter", [_Widget, _TemplatedMixin], -{ - // summary: - // Just a spacer div to separate side pane from center pane. - // Basically a trick to lookup the gutter/splitter width from the theme. - // description: - // Instantiated by `dijit.layout.BorderContainer`. Users should not - // create directly. - // tags: - // private - - templateString: '<div class="dijitGutter" role="presentation"></div>', - - postMixInProperties: function(){ - this.inherited(arguments); - this.horizontal = /top|bottom/.test(this.region); - }, - - buildRendering: function(){ - this.inherited(arguments); - domClass.add(this.domNode, "dijitGutter" + (this.horizontal ? "H" : "V")); - } -}); - -var BorderContainer = declare("dijit.layout.BorderContainer", _LayoutWidget, { - // summary: - // Provides layout in up to 5 regions, a mandatory center with optional borders along its 4 sides. - // - // description: - // A BorderContainer is a box with a specified size, such as style="width: 500px; height: 500px;", - // that contains a child widget marked region="center" and optionally children widgets marked - // region equal to "top", "bottom", "leading", "trailing", "left" or "right". - // Children along the edges will be laid out according to width or height dimensions and may - // include optional splitters (splitter="true") to make them resizable by the user. The remaining - // space is designated for the center region. - // - // 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 control layout precedence of horizontal vs. vertical panes. - // example: - // | <div data-dojo-type="dijit.layout.BorderContainer" data-dojo-props="design: 'sidebar', gutters: false" - // | style="width: 400px; height: 300px;"> - // | <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'top'">header text</div> - // | <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'right', splitter: true" style="width: 200px;">table of contents</div> - // | <div data-dojo-type="dijit.layout.ContentPane" data-dojo-props="region: 'center'">client area</div> - // | </div> - - // design: String - // Which design is used for the layout: - // - "headline" (default) where the top and bottom extend - // the full width of the container - // - "sidebar" where the left and right sides extend from top to bottom. - design: "headline", - - // 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: [const] Boolean - // Specifies whether splitters resize as you drag (true) or only upon mouseup (false) - liveSplitters: true, - - // persist: Boolean - // Save splitter positions in a cookie. - persist: false, - - baseClass: "dijitBorderContainer", - - // _splitterClass: Function||String - // Optional hook to override the default Splitter widget used by BorderContainer - _splitterClass: _Splitter, - - postMixInProperties: function(){ - // change class name to indicate that BorderContainer is being used purely for - // layout (like LayoutContainer) rather than for pretty formatting. - if(!this.gutters){ - this.baseClass += "NoGutter"; - } - this.inherited(arguments); - }, - - startup: function(){ - if(this._started){ return; } - array.forEach(this.getChildren(), this._setupChild, this); - this.inherited(arguments); - }, - - _setupChild: function(/*dijit._Widget*/ child){ - // Override _LayoutWidget._setupChild(). - - var region = child.region; - if(region){ - this.inherited(arguments); - - domClass.add(child.domNode, this.baseClass+"Pane"); - - var ltr = this.isLeftToRight(); - if(region == "leading"){ region = ltr ? "left" : "right"; } - if(region == "trailing"){ region = ltr ? "right" : "left"; } - - // Create draggable splitter for resizing pane, - // or alternately if splitter=false but BorderContainer.gutters=true then - // insert dummy div just for spacing - if(region != "center" && (child.splitter || this.gutters) && !child._splitterWidget){ - var _Splitter = child.splitter ? this._splitterClass : _Gutter; - if(lang.isString(_Splitter)){ - _Splitter = lang.getObject(_Splitter); // for back-compat, remove in 2.0 - } - var splitter = new _Splitter({ - id: child.id + "_splitter", - container: this, - child: child, - region: region, - live: this.liveSplitters - }); - splitter.isSplitter = true; - child._splitterWidget = splitter; - - domConstruct.place(splitter.domNode, child.domNode, "after"); - - // Splitters aren't added as Contained children, so we need to call startup explicitly - splitter.startup(); - } - child.region = region; // TODO: technically wrong since it overwrites "trailing" with "left" etc. - } - }, - - layout: function(){ - // Implement _LayoutWidget.layout() virtual method. - this._layoutChildren(); - }, - - addChild: function(/*dijit._Widget*/ child, /*Integer?*/ insertIndex){ - // Override _LayoutWidget.addChild(). - this.inherited(arguments); - if(this._started){ - this.layout(); //OPT - } - }, - - removeChild: function(/*dijit._Widget*/ child){ - // Override _LayoutWidget.removeChild(). - - var region = child.region; - var splitter = child._splitterWidget; - if(splitter){ - splitter.destroy(); - delete child._splitterWidget; - } - this.inherited(arguments); - - if(this._started){ - this._layoutChildren(); - } - // Clean up whatever style changes we made to the child pane. - // Unclear how height and width should be handled. - domClass.remove(child.domNode, this.baseClass+"Pane"); - domStyle.set(child.domNode, { - top: "auto", - bottom: "auto", - left: "auto", - right: "auto", - position: "static" - }); - domStyle.set(child.domNode, region == "top" || region == "bottom" ? "width" : "height", "auto"); - }, - - getChildren: function(){ - // Override _LayoutWidget.getChildren() to only return real children, not the splitters. - return array.filter(this.inherited(arguments), function(widget){ - return !widget.isSplitter; - }); - }, - - // TODO: remove in 2.0 - getSplitter: function(/*String*/region){ - // summary: - // Returns the widget responsible for rendering the splitter associated with region - // tags: - // deprecated - return array.filter(this.getChildren(), function(child){ - return child.region == region; - })[0]._splitterWidget; - }, - - resize: function(newSize, currentSize){ - // Overrides _LayoutWidget.resize(). - - // resetting potential padding to 0px to provide support for 100% width/height + padding - // TODO: this hack doesn't respect the box model and is a temporary fix - if(!this.cs || !this.pe){ - var node = this.domNode; - this.cs = domStyle.getComputedStyle(node); - this.pe = domGeometry.getPadExtents(node, this.cs); - this.pe.r = domStyle.toPixelValue(node, this.cs.paddingRight); - this.pe.b = domStyle.toPixelValue(node, this.cs.paddingBottom); - - domStyle.set(node, "padding", "0px"); - } - - this.inherited(arguments); - }, - - _layoutChildren: function(/*String?*/ changedChildId, /*Number?*/ changedChildSize){ - // summary: - // This is the main routine for setting size/position of each child. - // description: - // With no arguments, measures the height of top/bottom panes, the width - // of left/right panes, and then sizes all panes accordingly. - // - // 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. - // 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. - // Abort. Someone will resize us later. - return; - } - - // 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 = array.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]; - } - } - return 0; - }); - - // Make new list, combining the externally specified children with splitters and gutters - var childrenAndSplitters = []; - array.forEach(wrappers, function(wrapper){ - var pane = wrapper.pane; - childrenAndSplitters.push(pane); - if(pane._splitterWidget){ - childrenAndSplitters.push(pane._splitterWidget); - } - }); - - // Compute the box in which to lay out my children - var dim = { - l: this.pe.l, - t: this.pe.t, - w: this._borderBox.w - this.pe.w, - h: this._borderBox.h - this.pe.h - }; - - // Layout the children, possibly changing size due to a splitter drag - layoutUtils.layoutChildren(this.domNode, dim, childrenAndSplitters, - changedChildId, changedChildSize); - }, - - destroyRecursive: function(){ - // Destroy splitters first, while getChildren() still works - array.forEach(this.getChildren(), function(child){ - var splitter = child._splitterWidget; - if(splitter){ - splitter.destroy(); - } - delete child._splitterWidget; - }); - - // Then destroy the real children, and myself - this.inherited(arguments); - } -}); - -// This argument can be specified for the children of a BorderContainer. -// Since any widget can be specified as a LayoutContainer child, mix it -// into the base widget class. (This is a hack, but it's effective.) -lang.extend(_WidgetBase, { - // region: [const] String - // Parameter for children of `dijit.layout.BorderContainer`. - // Values: "top", "bottom", "leading", "trailing", "left", "right", "center". - // 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 - // this widget and the region=center widget. - splitter: false, - - // minSize: [const] Number - // Parameter for children of `dijit.layout.BorderContainer`. - // Specifies a minimum size (in pixels) for this widget when resized by a splitter. - minSize: 0, - - // maxSize: [const] Number - // Parameter for children of `dijit.layout.BorderContainer`. - // Specifies a maximum size (in pixels) for this widget when resized by a splitter. - maxSize: Infinity -}); - -// For monkey patching -BorderContainer._Splitter = _Splitter; -BorderContainer._Gutter = _Gutter; - -return BorderContainer; -}); - -}, -'dojo/window':function(){ -define("dojo/window", ["./_base/lang", "./_base/sniff", "./_base/window", "./dom", "./dom-geometry", "./dom-style"], - function(lang, has, baseWindow, dom, geom, style) { - -// module: -// dojo/window -// summary: -// TODOC - -var window = lang.getObject("dojo.window", true); - -/*===== -dojo.window = { - // summary: - // TODO -}; -window = dojo.window; -=====*/ - -window.getBox = function(){ - // summary: - // Returns the dimensions and scroll position of the viewable area of a browser window - - var - scrollRoot = (baseWindow.doc.compatMode == 'BackCompat') ? baseWindow.body() : baseWindow.doc.documentElement, - // get scroll position - scroll = geom.docScroll(), // scrollRoot.scrollTop/Left should work - w, h; - - if(has("touch")){ // if(scrollbars not supported) - var uiWindow = baseWindow.doc.parentWindow || baseWindow.doc.defaultView; // use UI window, not dojo.global window. baseWindow.doc.parentWindow probably not needed since it's not defined for webkit - // on mobile, scrollRoot.clientHeight <= uiWindow.innerHeight <= scrollRoot.offsetHeight, return uiWindow.innerHeight - w = uiWindow.innerWidth || scrollRoot.clientWidth; // || scrollRoot.clientXXX probably never evaluated - h = uiWindow.innerHeight || scrollRoot.clientHeight; - }else{ - // on desktops, scrollRoot.clientHeight <= scrollRoot.offsetHeight <= uiWindow.innerHeight, return scrollRoot.clientHeight - // uiWindow.innerWidth/Height includes the scrollbar and cannot be used - w = scrollRoot.clientWidth; - h = scrollRoot.clientHeight; - } - return { - l: scroll.x, - t: scroll.y, - w: w, - h: h - }; -}; - -window.get = function(doc){ - // summary: - // Get window object associated with document doc - - // In some IE versions (at least 6.0), document.parentWindow does not return a - // reference to the real window object (maybe a copy), so we must fix it as well - // We use IE specific execScript to attach the real window reference to - // document._parentWindow for later use - if(has("ie") && window !== document.parentWindow){ - /* - In IE 6, only the variable "window" can be used to connect events (others - may be only copies). - */ - doc.parentWindow.execScript("document._parentWindow = window;", "Javascript"); - //to prevent memory leak, unset it after use - //another possibility is to add an onUnload handler which seems overkill to me (liucougar) - var win = doc._parentWindow; - doc._parentWindow = null; - return win; // Window - } - - return doc.parentWindow || doc.defaultView; // Window -}; - -window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ - // summary: - // Scroll the passed node into view, if it is not already. - - // don't rely on node.scrollIntoView working just because the function is there - - try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method - node = dom.byId(node); - var doc = node.ownerDocument || baseWindow.doc, - body = doc.body || baseWindow.body(), - html = doc.documentElement || body.parentNode, - isIE = has("ie"), isWK = has("webkit"); - // if an untested browser, then use the native method - if((!(has("mozilla") || isIE || isWK || has("opera")) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){ - node.scrollIntoView(false); // short-circuit to native if possible - return; - } - var backCompat = doc.compatMode == 'BackCompat', - 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, - rtl = !geom.isBodyLtr(), - nodePos = pos || geom.position(node), - el = node.parentNode, - isFixed = function(el){ - return ((isIE <= 6 || (isIE && backCompat))? false : (style.get(el, 'position').toLowerCase() == "fixed")); - }; - if(isFixed(node)){ return; } // nothing to do - - while(el){ - if(el == body){ el = scrollRoot; } - var elPos = geom.position(el), - fixedPos = isFixed(el); - - if(el == scrollRoot){ - elPos.w = rootWidth; elPos.h = rootHeight; - if(scrollRoot == html && isIE && rtl){ elPos.x += scrollRoot.offsetWidth-elPos.w; } // IE workaround where scrollbar causes negative x - if(elPos.x < 0 || !isIE){ elPos.x = 0; } // IE can have values > 0 - if(elPos.y < 0 || !isIE){ elPos.y = 0; } - }else{ - var pb = geom.getPadBorderExtents(el); - elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t; - var clientSize = el.clientWidth, - scrollBarSize = elPos.w - clientSize; - if(clientSize > 0 && scrollBarSize > 0){ - elPos.w = clientSize; - elPos.x += (rtl && (isIE || el.clientLeft > pb.l/*Chrome*/)) ? scrollBarSize : 0; - } - clientSize = el.clientHeight; - scrollBarSize = elPos.h - clientSize; - if(clientSize > 0 && scrollBarSize > 0){ - elPos.h = clientSize; - } - } - if(fixedPos){ // bounded by viewport, not parents - if(elPos.y < 0){ - elPos.h += elPos.y; elPos.y = 0; - } - if(elPos.x < 0){ - elPos.w += elPos.x; elPos.x = 0; - } - if(elPos.y + elPos.h > rootHeight){ - elPos.h = rootHeight - elPos.y; - } - if(elPos.x + elPos.w > rootWidth){ - elPos.w = rootWidth - elPos.x; - } - } - // calculate overflow in all 4 directions - var l = nodePos.x - elPos.x, // beyond left: < 0 - t = nodePos.y - Math.max(elPos.y, 0), // beyond top: < 0 - r = l + nodePos.w - elPos.w, // beyond right: > 0 - 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 += s; - nodePos.x -= el.scrollLeft; - } - if(bot * t > 0){ - nodePos.y += el.scrollTop; - el.scrollTop += Math[t < 0? "max" : "min"](t, bot); - nodePos.y -= el.scrollTop; - } - el = (el != scrollRoot) && !fixedPos && el.parentNode; - } - }catch(error){ - console.error('scrollIntoView: ' + error); - node.scrollIntoView(false); - } -}; - -return window; -}); - -}, -'dojo/number':function(){ -define("dojo/number", ["./_base/kernel", "./_base/lang", "./i18n", "./i18n!./cldr/nls/number", "./string", "./regexp"], - function(dojo, lang, i18n, nlsNumber, dstring, dregexp) { - - // module: - // dojo/number - // summary: - // TODOC - -lang.getObject("number", true, dojo); - -/*===== -dojo.number = { - // summary: localized formatting and parsing routines for Number -} - -dojo.number.__FormatOptions = function(){ - // pattern: String? - // override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // with this string. Default value is based on locale. Overriding this property will defeat - // localization. Literal characters in patterns are not supported. - // type: String? - // choose a format type based on the locale from the following: - // decimal, scientific (not yet supported), percent, currency. decimal by default. - // places: Number? - // fixed number of decimal places to show. This overrides any - // information in the provided pattern. - // round: Number? - // 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1 - // means do not round. - // locale: String? - // override the locale used to determine formatting rules - // fractional: Boolean? - // If false, show no decimal places, overriding places and pattern settings. - this.pattern = pattern; - this.type = type; - this.places = places; - this.round = round; - this.locale = locale; - this.fractional = fractional; -} -=====*/ - -dojo.number.format = function(/*Number*/value, /*dojo.number.__FormatOptions?*/options){ - // summary: - // Format a Number as a String, using locale-specific settings - // description: - // Create a string from a Number using a known localized pattern. - // Formatting patterns appropriate to the locale are chosen from the - // [Common Locale Data Repository](http://unicode.org/cldr) as well as the appropriate symbols and - // delimiters. - // If value is Infinity, -Infinity, or is not a valid JavaScript number, return null. - // value: - // the number to be formatted - - options = lang.mixin({}, options || {}); - var locale = i18n.normalizeLocale(options.locale), - bundle = i18n.getLocalization("dojo.cldr", "number", locale); - options.customs = bundle; - var pattern = options.pattern || bundle[(options.type || "decimal") + "Format"]; - if(isNaN(value) || Math.abs(value) == Infinity){ return null; } // null - return dojo.number._applyPattern(value, pattern, options); // String -}; - -//dojo.number._numberPatternRE = /(?:[#0]*,?)*[#0](?:\.0*#*)?/; // not precise, but good enough -dojo.number._numberPatternRE = /[#0,]*[#0](?:\.0*#*)?/; // not precise, but good enough - -dojo.number._applyPattern = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatOptions?*/options){ - // summary: - // Apply pattern to format value as a string using options. Gives no - // consideration to local customs. - // value: - // the number to be formatted. - // pattern: - // a pattern string as described by - // [unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // options: dojo.number.__FormatOptions? - // _applyPattern is usually called via `dojo.number.format()` which - // populates an extra property in the options parameter, "customs". - // The customs object specifies group and decimal parameters if set. - - //TODO: support escapes - options = options || {}; - var group = options.customs.group, - decimal = options.customs.decimal, - patternList = pattern.split(';'), - positivePattern = patternList[0]; - pattern = patternList[(value < 0) ? 1 : 0] || ("-" + positivePattern); - - //TODO: only test against unescaped - if(pattern.indexOf('%') != -1){ - value *= 100; - }else if(pattern.indexOf('\u2030') != -1){ - value *= 1000; // per mille - }else if(pattern.indexOf('\u00a4') != -1){ - group = options.customs.currencyGroup || group;//mixins instead? - decimal = options.customs.currencyDecimal || decimal;// Should these be mixins instead? - pattern = pattern.replace(/\u00a4{1,3}/, function(match){ - var prop = ["symbol", "currency", "displayName"][match.length-1]; - return options[prop] || options.currency || ""; - }); - }else if(pattern.indexOf('E') != -1){ - throw new Error("exponential notation not supported"); - } - - //TODO: support @ sig figs? - var numberPatternRE = dojo.number._numberPatternRE; - var numberPattern = positivePattern.match(numberPatternRE); - if(!numberPattern){ - throw new Error("unable to find a number expression in pattern: "+pattern); - } - 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: - // Rounds to the nearest value with the given number of decimal places, away from zero - // description: - // Rounds to the nearest value with the given number of decimal places, away from zero if equal. - // Similar to Number.toFixed(), but compensates for browser quirks. Rounding can be done by - // fractional increments also, such as the nearest quarter. - // NOTE: Subject to floating point errors. See dojox.math.round for experimental workaround. - // value: - // The number to round - // places: - // The number of decimal places where rounding takes place. Defaults to 0 for whole rounding. - // Must be non-negative. - // increment: - // Rounds next place to nearest value of increment/10. 10 by default. - // example: - // >>> dojo.number.round(-0.5) - // -1 - // >>> dojo.number.round(162.295, 2) - // 162.29 // note floating point error. Should be 162.3 - // >>> dojo.number.round(10.71, 0, 2.5) - // 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 - // is just after the rounding place and is >=5 - var round = 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 round(v, p, m) + (v > 0 ? d : -d); - }; -} - -/*===== -dojo.number.__FormatAbsoluteOptions = function(){ - // decimal: String? - // the decimal separator - // group: String? - // the group separator - // places: Number?|String? - // number of decimal places. the range "n,m" will format to m places. - // round: Number? - // 5 rounds to nearest .5; 0 rounds to nearest whole (default). -1 - // means don't round. - this.decimal = decimal; - this.group = group; - this.places = places; - this.round = round; -} -=====*/ - -dojo.number._formatAbsolute = function(/*Number*/value, /*String*/pattern, /*dojo.number.__FormatAbsoluteOptions?*/options){ - // summary: - // Apply numeric pattern to absolute value using options. Gives no - // consideration to local customs. - // value: - // the number to be formatted, ignores sign - // pattern: - // the number portion of a pattern (e.g. `#,##0.00`) - options = options || {}; - if(options.places === true){options.places=0;} - if(options.places === Infinity){options.places=6;} // avoid a loop; pick a limit - - var patternParts = pattern.split("."), - comma = typeof options.places == "string" && options.places.indexOf(","), - maxPlaces = options.places; - if(comma){ - maxPlaces = options.places.substring(comma + 1); - }else if(!(maxPlaces >= 0)){ - maxPlaces = (patternParts[1] || []).length; - } - if(!(options.round < 0)){ - value = dojo.number.round(value, maxPlaces, options.round); - } - - var valueParts = String(Math.abs(value)).split("."), - fractional = valueParts[1] || ""; - if(patternParts[1] || options.places){ - if(comma){ - options.places = options.places.substring(0, comma); - } - // Pad fractional with trailing zeros - var pad = options.places !== undefined ? options.places : (patternParts[1] && patternParts[1].lastIndexOf("0") + 1); - if(pad > fractional.length){ - valueParts[1] = dstring.pad(fractional, pad, '0', true); - } - - // Truncate fractional - if(maxPlaces < fractional.length){ - valueParts[1] = fractional.substr(0, maxPlaces); - } - }else{ - if(valueParts[1]){ valueParts.pop(); } - } - - // Pad whole with leading zeros - var patternDigits = patternParts[0].replace(',', ''); - pad = patternDigits.indexOf("0"); - if(pad != -1){ - pad = patternDigits.length - pad; - if(pad > valueParts[0].length){ - valueParts[0] = dstring.pad(valueParts[0], pad); - } - - // Truncate whole - if(patternDigits.indexOf("#") == -1){ - valueParts[0] = valueParts[0].substr(valueParts[0].length - pad); - } - } - - // Add group separators - var index = patternParts[0].lastIndexOf(','), - groupSize, groupSize2; - if(index != -1){ - groupSize = patternParts[0].length - index - 1; - var remainder = patternParts[0].substr(0, index); - index = remainder.lastIndexOf(','); - if(index != -1){ - groupSize2 = remainder.length - index - 1; - } - } - var pieces = []; - for(var whole = valueParts[0]; whole;){ - var off = whole.length - groupSize; - pieces.push((off > 0) ? whole.substr(off) : whole); - whole = (off > 0) ? whole.slice(0, off) : ""; - if(groupSize2){ - groupSize = groupSize2; - delete groupSize2; - } - } - valueParts[0] = pieces.reverse().join(options.group || ","); - - return valueParts.join(options.decimal || "."); -}; - -/*===== -dojo.number.__RegexpOptions = function(){ - // pattern: String? - // override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // with this string. Default value is based on locale. Overriding this property will defeat - // localization. - // type: String? - // choose a format type based on the locale from the following: - // decimal, scientific (not yet supported), percent, currency. decimal by default. - // locale: String? - // override the locale used to determine formatting rules - // strict: Boolean? - // strict parsing, false by default. Strict parsing requires input as produced by the format() method. - // Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators - // places: Number|String? - // number of decimal places to accept: Infinity, a positive number, or - // a range "n,m". Defined by pattern or Infinity if pattern not provided. - this.pattern = pattern; - this.type = type; - this.locale = locale; - this.strict = strict; - this.places = places; -} -=====*/ -dojo.number.regexp = function(/*dojo.number.__RegexpOptions?*/options){ - // summary: - // Builds the regular needed to parse a number - // description: - // Returns regular expression with positive and negative match, group - // and decimal separators - return dojo.number._parseInfo(options).regexp; // String -}; - -dojo.number._parseInfo = function(/*Object?*/options){ - options = options || {}; - var locale = i18n.normalizeLocale(options.locale), - bundle = i18n.getLocalization("dojo.cldr", "number", locale), - pattern = options.pattern || bundle[(options.type || "decimal") + "Format"], -//TODO: memoize? - group = bundle.group, - decimal = bundle.decimal, - factor = 1; - - if(pattern.indexOf('%') != -1){ - factor /= 100; - }else if(pattern.indexOf('\u2030') != -1){ - factor /= 1000; // per mille - }else{ - var isCurrency = pattern.indexOf('\u00a4') != -1; - if(isCurrency){ - group = bundle.currencyGroup || group; - decimal = bundle.currencyDecimal || decimal; - } - } - - //TODO: handle quoted escapes - var patternList = pattern.split(';'); - if(patternList.length == 1){ - patternList.push("-" + patternList[0]); - } - - var re = dregexp.buildGroupRE(patternList, function(pattern){ - pattern = "(?:"+dregexp.escapeString(pattern, '.')+")"; - return pattern.replace(dojo.number._numberPatternRE, function(format){ - var flags = { - signed: false, - separator: options.strict ? group : [group,""], - fractional: options.fractional, - decimal: decimal, - exponent: false - }, - - parts = format.split('.'), - places = options.places; - - // special condition for percent (factor != 1) - // allow decimal places even if not specified in pattern - if(parts.length == 1 && factor != 1){ - parts[1] = "###"; - } - if(parts.length == 1 || places === 0){ - flags.fractional = false; - }else{ - if(places === undefined){ places = options.pattern ? parts[1].lastIndexOf('0') + 1 : Infinity; } - if(places && options.fractional == undefined){flags.fractional = true;} // required fractional, unless otherwise specified - if(!options.places && (places < parts[1].length)){ places += "," + parts[1].length; } - flags.places = places; - } - var groups = parts[0].split(','); - if(groups.length > 1){ - flags.groupSize = groups.pop().length; - if(groups.length > 1){ - flags.groupSize2 = groups.pop().length; - } - } - return "("+dojo.number._realNumberRegexp(flags)+")"; - }); - }, true); - - if(isCurrency){ - // substitute the currency symbol for the placeholder in the pattern - re = re.replace(/([\s\xa0]*)(\u00a4{1,3})([\s\xa0]*)/g, function(match, before, target, after){ - var prop = ["symbol", "currency", "displayName"][target.length-1], - symbol = dregexp.escapeString(options[prop] || options.currency || ""); - before = before ? "[\\s\\xa0]" : ""; - after = after ? "[\\s\\xa0]" : ""; - if(!options.strict){ - if(before){before += "*";} - if(after){after += "*";} - return "(?:"+before+symbol+after+")?"; - } - return before+symbol+after; - }); - } - -//TODO: substitute localized sign/percent/permille/etc.? - - // normalize whitespace and return - return {regexp: re.replace(/[\xa0 ]/g, "[\\s\\xa0]"), group: group, decimal: decimal, factor: factor}; // Object -}; - -/*===== -dojo.number.__ParseOptions = function(){ - // pattern: String? - // override [formatting pattern](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // with this string. Default value is based on locale. Overriding this property will defeat - // localization. Literal characters in patterns are not supported. - // type: String? - // choose a format type based on the locale from the following: - // decimal, scientific (not yet supported), percent, currency. decimal by default. - // locale: String? - // override the locale used to determine formatting rules - // strict: Boolean? - // strict parsing, false by default. Strict parsing requires input as produced by the format() method. - // Non-strict is more permissive, e.g. flexible on white space, omitting thousands separators - // fractional: Boolean?|Array? - // Whether to include the fractional portion, where the number of decimal places are implied by pattern - // or explicit 'places' parameter. The value [true,false] makes the fractional portion optional. - this.pattern = pattern; - this.type = type; - this.locale = locale; - this.strict = strict; - this.fractional = fractional; -} -=====*/ -dojo.number.parse = function(/*String*/expression, /*dojo.number.__ParseOptions?*/options){ - // summary: - // Convert a properly formatted string to a primitive Number, using - // locale-specific settings. - // description: - // Create a Number from a string using a known localized pattern. - // Formatting patterns are chosen appropriate to the locale - // and follow the syntax described by - // [unicode.org TR35](http://www.unicode.org/reports/tr35/#Number_Format_Patterns) - // Note that literal characters in patterns are not supported. - // expression: - // A string representation of a Number - var info = dojo.number._parseInfo(options), - results = (new RegExp("^"+info.regexp+"$")).exec(expression); - if(!results){ - return NaN; //NaN - } - var absoluteMatch = results[1]; // match for the positive expression - if(!results[1]){ - if(!results[2]){ - return NaN; //NaN - } - // matched the negative pattern - absoluteMatch =results[2]; - info.factor *= -1; - } - - // Transform it to something Javascript can parse as a number. Normalize - // decimal point and strip out group separators or alternate forms of whitespace - absoluteMatch = absoluteMatch. - replace(new RegExp("["+info.group + "\\s\\xa0"+"]", "g"), ""). - replace(info.decimal, "."); - // Adjust for negative sign, percent, etc. as necessary - return absoluteMatch * info.factor; //Number -}; - -/*===== -dojo.number.__RealNumberRegexpFlags = function(){ - // places: Number? - // The integer number of decimal places or a range given as "n,m". If - // not given, the decimal part is optional and the number of places is - // unlimited. - // decimal: String? - // A string for the character used as the decimal point. Default - // is ".". - // fractional: Boolean?|Array? - // Whether decimal places are used. Can be true, false, or [true, - // false]. Default is [true, false] which means optional. - // exponent: Boolean?|Array? - // Express in exponential notation. Can be true, false, or [true, - // false]. Default is [true, false], (i.e. will match if the - // exponential part is present are not). - // eSigned: Boolean?|Array? - // The leading plus-or-minus sign on the exponent. Can be true, - // false, or [true, false]. Default is [true, false], (i.e. will - // match if it is signed or unsigned). flags in regexp.integer can be - // applied. - this.places = places; - this.decimal = decimal; - this.fractional = fractional; - this.exponent = exponent; - this.eSigned = eSigned; -} -=====*/ - -dojo.number._realNumberRegexp = function(/*dojo.number.__RealNumberRegexpFlags?*/flags){ - // summary: - // Builds a regular expression to match a real number in exponential - // notation - - // assign default values to missing parameters - flags = flags || {}; - //TODO: use mixin instead? - if(!("places" in flags)){ flags.places = Infinity; } - if(typeof flags.decimal != "string"){ flags.decimal = "."; } - if(!("fractional" in flags) || /^0/.test(flags.places)){ flags.fractional = [true, false]; } - if(!("exponent" in flags)){ flags.exponent = [true, false]; } - if(!("eSigned" in flags)){ flags.eSigned = [true, false]; } - - var integerRE = dojo.number._integerRegexp(flags), - decimalRE = dregexp.buildGroupRE(flags.fractional, - function(q){ - var re = ""; - if(q && (flags.places!==0)){ - re = "\\" + flags.decimal; - if(flags.places == Infinity){ - re = "(?:" + re + "\\d+)?"; - }else{ - re += "\\d{" + flags.places + "}"; - } - } - return re; - }, - true - ); - - var exponentRE = dregexp.buildGroupRE(flags.exponent, - function(q){ - if(q){ return "([eE]" + dojo.number._integerRegexp({ signed: flags.eSigned}) + ")"; } - return ""; - } - ); - - 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 = dregexp.buildGroupRE(flags.signed, - function(q){ return q ? "[-+]" : ""; }, - true - ); - - var numberRE = dregexp.buildGroupRE(flags.separator, - function(sep){ - if(!sep){ - return "(?:\\d+)"; - } - - sep = dregexp.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 -}; - -return dojo.number; -}); - -}, -'dijit/_FocusMixin':function(){ -define("dijit/_FocusMixin", [ - "./focus", - "./_WidgetBase", - "dojo/_base/declare", // declare - "dojo/_base/lang" // lang.extend -], function(focus, _WidgetBase, declare, lang){ - -/*===== - var _WidgetBase = dijit._WidgetBase; -=====*/ - - // module: - // dijit/_FocusMixin - // summary: - // Mixin to widget to provide _onFocus() and _onBlur() methods that - // fire when a widget or it's descendants get/lose focus - - // We don't know where _FocusMixin will occur in the inheritance chain, but we need the _onFocus()/_onBlur() below - // to be last in the inheritance chain, so mixin to _WidgetBase. - lang.extend(_WidgetBase, { - // focused: [readonly] Boolean - // This widget or a widget it contains has focus, or is "active" because - // it was recently clicked. - focused: false, - - 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(){ - // 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(); - } - }); - - return declare("dijit._FocusMixin", null, { - // summary: - // Mixin to widget to provide _onFocus() and _onBlur() methods that - // fire when a widget or it's descendants get/lose focus - - // flag that I want _onFocus()/_onBlur() notifications from focus manager - _focusManager: focus - }); - -}); - -}, -'dojo/data/util/filter':function(){ -define("dojo/data/util/filter", ["dojo/_base/lang"], function(lang) { - // module: - // dojo/data/util/filter - // summary: - // TODOC - -var filter = lang.getObject("dojo.data.util.filter", true); - -filter.patternToRegExp = function(/*String*/pattern, /*boolean?*/ ignoreCase){ - // summary: - // Helper function to convert a simple pattern to a regular expression for matching. - // description: - // Returns a regular expression object that conforms to the defined conversion rules. - // For example: - // ca* -> /^ca.*$/ - // *ca* -> /^.*ca.*$/ - // *c\*a* -> /^.*c\*a.*$/ - // *c\*a?* -> /^.*c\*a..*$/ - // and so on. - // - // pattern: string - // A simple matching pattern to convert that follows basic rules: - // * Means match anything, so ca* means match anything starting with ca - // ? Means match single character. So, b?b will match to bob and bab, and so on. - // \ is an escape character. So for example, \* means do not treat * as a match, but literal character *. - // To use a \ as a character in the string, it must be escaped. So in the pattern it should be - // represented by \\ to be treated as an ordinary \ character instead of an escape. - // - // ignoreCase: - // An optional flag to indicate if the pattern matching should be treated as case-sensitive or not when comparing - // By default, it is assumed case sensitive. - - var rxp = "^"; - var c = null; - for(var i = 0; i < pattern.length; i++){ - c = pattern.charAt(i); - switch(c){ - case '\\': - rxp += c; - i++; - rxp += pattern.charAt(i); - break; - case '*': - rxp += ".*"; break; - case '?': - rxp += "."; break; - case '$': - case '^': - case '/': - case '+': - case '.': - case '|': - case '(': - case ')': - case '{': - case '}': - case '[': - case ']': - rxp += "\\"; //fallthrough - default: - rxp += c; - } - } - rxp += "$"; - if(ignoreCase){ - return new RegExp(rxp,"mi"); //RegExp - }else{ - return new RegExp(rxp,"m"); //RegExp - } - -}; - -return filter; -}); - -}, -'dijit/_WidgetsInTemplateMixin':function(){ -define("dijit/_WidgetsInTemplateMixin", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/parser", // parser.parse - "dijit/registry" // registry.findWidgets -], function(array, declare, parser, registry){ - - // module: - // dijit/_WidgetsInTemplateMixin - // summary: - // Mixin to supplement _TemplatedMixin when template contains widgets - - return declare("dijit._WidgetsInTemplateMixin", null, { - // summary: - // Mixin to supplement _TemplatedMixin when template contains widgets - - // _earlyTemplatedStartup: Boolean - // A fallback to preserve the 1.0 - 1.3 behavior of children in - // templates having their startup called before the parent widget - // fires postCreate. Defaults to 'false', causing child widgets to - // have their .startup() called immediately before a parent widget - // .startup(), but always after the parent .postCreate(). Set to - // 'true' to re-enable to previous, arguably broken, behavior. - _earlyTemplatedStartup: false, - - // widgetsInTemplate: [protected] Boolean - // Should we parse the template to find widgets that might be - // declared in markup inside it? (Remove for 2.0 and assume true) - widgetsInTemplate: true, - - _beforeFillContent: function(){ - if(this.widgetsInTemplate){ - // Before copying over content, instantiate widgets in template - var node = this.domNode; - - var cw = (this._startupWidgets = parser.parse(node, { - noStart: !this._earlyTemplatedStartup, - template: true, - inherited: {dir: this.dir, lang: this.lang, textDir: this.textDir}, - 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 - })); - - this._supportingWidgets = registry.findWidgets(node); - - this._attachTemplateNodes(cw, function(n,p){ - return n[p]; - }); - } - }, - - startup: function(){ - array.forEach(this._startupWidgets, function(w){ - if(w && !w._started && w.startup){ - w.startup(); - } - }); - this.inherited(arguments); - } - }); -}); - -}, -'dojo/fx/Toggler':function(){ -define("dojo/fx/Toggler", ["../_base/lang","../_base/declare","../_base/fx", "../_base/connect"], - function(lang, declare, baseFx, connectUtil) { - // module: - // dojo/fx/Toggler - // summary: - // TODOC - -return declare("dojo.fx.Toggler", null, { - // summary: - // A simple `dojo.Animation` toggler API. - // - // 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`). - // - // example: - // | var t = new dojo.fx.Toggler({ - // | node: "nodeId", - // | showDuration: 500, - // | // hideDuration will default to "200" - // | showFunc: dojo.fx.wipeIn, - // | // hideFunc will default to "fadeOut" - // | }); - // | t.show(100); // delay showing for 100ms - // | // ...time passes... - // | t.hide(); - - // node: DomNode - // the node to target for the showing and hiding animations - node: null, - - // showFunc: Function - // The function that returns the `dojo.Animation` to show the node - showFunc: baseFx.fadeIn, - - // hideFunc: Function - // The function that returns the `dojo.Animation` to hide the node - hideFunc: baseFx.fadeOut, - - // showDuration: - // Time in milliseconds to run the show Animation - showDuration: 200, - - // hideDuration: - // Time in milliseconds to run the hide Animation - hideDuration: 200, - - // FIXME: need a policy for where the toggler should "be" the next - // time show/hide are called if we're stopped somewhere in the - // middle. - // FIXME: also would be nice to specify individual showArgs/hideArgs mixed into - // each animation individually. - // FIXME: also would be nice to have events from the animations exposed/bridged - - /*===== - _showArgs: null, - _showAnim: null, - - _hideArgs: null, - _hideAnim: null, - - _isShowing: false, - _isHiding: false, - =====*/ - - constructor: function(args){ - var _t = this; - - lang.mixin(_t, args); - _t.node = args.node; - _t._showArgs = lang.mixin({}, args); - _t._showArgs.node = _t.node; - _t._showArgs.duration = _t.showDuration; - _t.showAnim = _t.showFunc(_t._showArgs); - - _t._hideArgs = lang.mixin({}, args); - _t._hideArgs.node = _t.node; - _t._hideArgs.duration = _t.hideDuration; - _t.hideAnim = _t.hideFunc(_t._hideArgs); - - connectUtil.connect(_t.showAnim, "beforeBegin", lang.hitch(_t.hideAnim, "stop", true)); - connectUtil.connect(_t.hideAnim, "beforeBegin", lang.hitch(_t.showAnim, "stop", true)); - }, - - show: function(delay){ - // summary: Toggle the node to showing - // delay: Integer? - // Ammount of time to stall playing the show animation - return this.showAnim.play(delay || 0); - }, - - hide: function(delay){ - // summary: Toggle the node to hidden - // delay: Integer? - // Ammount of time to stall playing the hide animation - return this.hideAnim.play(delay || 0); - } -}); - -}); - -}, -'dijit/form/FilteringSelect':function(){ -define("dijit/form/FilteringSelect", [ - "dojo/data/util/filter", // filter.patternToRegExp - "dojo/_base/declare", // declare - "dojo/_base/Deferred", // Deferred.when - "dojo/_base/lang", // lang.mixin - "./MappedTextBox", - "./ComboBoxMixin" -], function(filter, declare, Deferred, lang, MappedTextBox, ComboBoxMixin){ - -/*===== - var MappedTextBox = dijit.form.MappedTextBox; - var ComboBoxMixin = dijit.form.ComboBoxMixin; -=====*/ - - // module: - // dijit/form/FilteringSelect - // summary: - // An enhanced version of the HTML SELECT tag, populated dynamically - - - return declare("dijit.form.FilteringSelect", [MappedTextBox, ComboBoxMixin], { - // summary: - // An enhanced version of the HTML SELECT tag, populated dynamically - // - // description: - // An enhanced version of the HTML SELECT tag, populated dynamically. It works - // very nicely with very large data sets because it can load and page data as needed. - // It also resembles ComboBox, but does not allow values outside of the provided ones. - // If OPTION tags are used as the data provider via markup, then the - // OPTION tag's child text node is used as the displayed value when selected - // while the OPTION tag's value attribute is used as the widget value on form submit. - // To set the default value when using OPTION tags, specify the selected - // attribute on 1 of the child OPTION tags. - // - // Similar features: - // - There is a drop down list of possible values. - // - You can only enter a value from the drop down list. (You can't - // enter an arbitrary value.) - // - The value submitted with the form is the hidden value (ex: CA), - // not the displayed value a.k.a. label (ex: California) - // - // Enhancements over plain HTML version: - // - If you type in some text then it will filter down the list of - // possible values in the drop down list. - // - List can be specified either as a static list or via a javascript - // function (that can get the list from a server) - - // 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.item || (!this.required && this.get('displayedValue') == ""); // #5974 - }, - - _refreshState: function(){ - if(!this.searchTimer){ // state will be refreshed after results are returned - this.inherited(arguments); - } - }, - - _callbackSetLabel: function( - /*Array*/ result, - /*Object*/ query, - /*Object*/ options, - /*Boolean?*/ priorityChange){ - // summary: - // Callback from dojo.store after lookup of user entered value finishes - - // setValue does a synchronous lookup, - // so it calls _callbackSetLabel directly, - // and so does not pass dataObject - // still need to test against _lastQuery in case it came too late - if((query && query[this.searchAttr] !== this._lastQuery) || (!query && result.length && this.store.getIdentity(result[0]) != this._lastQuery)){ - return; - } - if(!result.length){ - //#3268: don't modify display value on bad input - //#3285: change CSS to indicate error - this.set("value", '', priorityChange || (priorityChange === undefined && !this.focused), this.textbox.value, null); - }else{ - this.set('item', result[0], priorityChange); - } - }, - - _openResultList: function(/*Object*/ results, /*Object*/ query, /*Object*/ options){ - // 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(query[this.searchAttr] !== this._lastQuery){ - return; - } - this.inherited(arguments); - - if(this.item === undefined){ // item == undefined for keyboard search - // 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); - } - }, - - _getValueAttr: function(){ - // summary: - // 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 - return this.valueNode.value; - }, - - _getValueField: function(){ - // Overrides ComboBox._getValueField() - return "value"; - }, - - _setValueAttr: function(/*String*/ value, /*Boolean?*/ priorityChange, /*String?*/ displayedValue, /*item?*/ item){ - // summary: - // Hook so set('value', value) works. - // description: - // Sets the value of the select. - // Also sets the label to the corresponding value by reverse lookup. - if(!this._onChangeActive){ priorityChange = null; } - - if(item === undefined){ - if(value === null || value === ''){ - value = ''; - if(!lang.isString(displayedValue)){ - this._setDisplayedValueAttr(displayedValue||'', priorityChange); - return; - } - } - - var self = this; - this._lastQuery = value; - Deferred.when(this.store.get(value), function(item){ - self._callbackSetLabel(item? [item] : [], undefined, undefined, priorityChange); - }); - }else{ - this.valueNode.value = value; - 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. - // description: - // Users shouldn't call this function; they should be calling - // set('item', value) - // tags: - // private - this.inherited(arguments); - this._lastDisplayedValue = this.textbox.value; - }, - - _getDisplayQueryString: function(/*String*/ text){ - return text.replace(/([\\\*\?])/g, "\\$1"); - }, - - _setDisplayedValueAttr: function(/*String*/ label, /*Boolean?*/ priorityChange){ - // summary: - // Hook so set('displayedValue', label) works. - // description: - // Sets textbox to display label. Also performs reverse lookup - // to set the hidden value. label should corresponding to item.searchAttr. - - 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.closeDropDown(); - var query = lang.clone(this.query); // #6196: populate query with user-specifics - - // Generate query - var qs = this._getDisplayQueryString(label), q; - if(this.store._oldAPI){ - // remove this branch for 2.0 - q = qs; - }else{ - // Query on searchAttr is a regex for benefit of dojo.store.Memory, - // but with a toString() method to help dojo.store.JsonRest. - // Search string like "Co*" converted to regex like /^Co.*$/i. - q = filter.patternToRegExp(qs, this.ignoreCase); - q.toString = function(){ return qs; }; - } - this._lastQuery = query[this.searchAttr] = q; - - // 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 options = { - ignoreCase: this.ignoreCase, - deep: true - }; - lang.mixin(options, this.fetchProperties); - this._fetchHandle = this.store.query(query, options); - Deferred.when(this._fetchHandle, function(result){ - _this._fetchHandle = null; - _this._callbackSetLabel(result || [], query, options, priorityChange); - }, function(err){ - _this._fetchHandle = null; - if(!_this._cancelingQuery){ // don't treat canceled query as an error - console.error('dijit.form.FilteringSelect: ' + err.toString()); - } - }); - } - }, - - undo: function(){ - this.set('displayedValue', this._lastDisplayedValue); - } - }); -}); - -}, -'dojo/data/util/sorter':function(){ -define("dojo/data/util/sorter", ["dojo/_base/lang"], function(lang) { - // module: - // dojo/data/util/sorter - // summary: - // TODOC - -var sorter = lang.getObject("dojo.data.util.sorter", true); - -sorter.basicComparator = function( /*anything*/ a, - /*anything*/ b){ - // summary: - // Basic comparision function that compares if an item is greater or less than another item - // description: - // returns 1 if a > b, -1 if a < b, 0 if equal. - // '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. - - //null is a problematic compare, so if null, we set to undefined. - //Makes the check logic simple, compact, and consistent - //And (null == undefined) === true, so the check later against null - //works for undefined and is less bytes. - 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; //int {-1,0,1} -}; - -sorter.createSortFunction = function( /* attributes array */sortSpec, /*dojo.data.core.Read*/ store){ - // summary: - // Helper function to generate the sorting function based off the list of sort attributes. - // description: - // The sort function creation will look for a property on the store called 'comparatorMap'. If it exists - // it will look in the mapping for comparisons function for the attributes. If one is found, it will - // use it instead of the basic comparator, which is typically used for strings, ints, booleans, and dates. - // Returns the sorting function for this particular list of attributes and sorting directions. - // - // sortSpec: array - // A JS object that array that defines out what attribute names to sort on and whether it should be descenting or asending. - // The objects should be formatted as follows: - // { - // attribute: "attributeName-string" || attribute, - // descending: true|false; // Default is false. - // } - // store: object - // The datastore object to look up item values from. - // - var sortFunctions=[]; - - function createSortFunction(attr, dir, comp, s){ - //Passing in comp and s (comparator and store), makes this - //function much faster. - return function(itemA, itemB){ - var a = s.getValue(itemA, attr); - var b = s.getValue(itemB, attr); - return dir * comp(a,b); //int - }; - } - var sortAttribute; - var map = store.comparatorMap; - var bc = sorter.basicComparator; - for(var i = 0; i < sortSpec.length; i++){ - sortAttribute = sortSpec[i]; - var attr = sortAttribute.attribute; - if(attr){ - var dir = (sortAttribute.descending) ? -1 : 1; - var comp = bc; - if(map){ - if(typeof attr !== "string" && ("toString" in attr)){ - attr = attr.toString(); - } - comp = map[attr] || bc; - } - sortFunctions.push(createSortFunction(attr, - dir, comp, store)); - } - } - return function(rowA, rowB){ - var i=0; - while(i < sortFunctions.length){ - var ret = sortFunctions[i++](rowA, rowB); - if(ret !== 0){ - return ret;//int - } - } - return 0; //int - }; // Function -}; - -return sorter; -}); - -}, -'dijit/form/_ButtonMixin':function(){ -define("dijit/form/_ButtonMixin", [ - "dojo/_base/declare", // declare - "dojo/dom", // dom.setSelectable - "dojo/_base/event", // event.stop - "../registry" // registry.byNode -], function(declare, dom, event, registry){ - -// module: -// dijit/form/_ButtonMixin -// summary: -// A mixin to add a thin standard API wrapper to a normal HTML button - -return declare("dijit.form._ButtonMixin", null, { - // summary: - // A mixin to add a thin standard API wrapper to a normal HTML button - // description: - // A label should always be specified (through innerHTML) or the label attribute. - // Attach points: - // focusNode (required): this node receives focus - // valueNode (optional): this node's value gets submitted with FORM elements - // containerNode (optional): this node gets the innerHTML assignment for label - // example: - // | <button data-dojo-type="dijit.form.Button" onClick="...">Hello world</button> - // - // example: - // | var button1 = new dijit.form.Button({label: "hello world", onClick: foo}); - // | dojo.body().appendChild(button1.domNode); - - // label: HTML String - // Content to display in button. - label: "", - - // type: [const] String - // Type of button (submit, reset, button, checkbox, radio) - type: "button", - - _onClick: function(/*Event*/ e){ - // summary: - // Internal function to handle click actions - if(this.disabled){ - event.stop(e); - return false; - } - var preventDefault = this.onClick(e) === false; // user click actions - if(!preventDefault && this.type == "submit" && !(this.valueNode||this.focusNode).form){ // see if a non-form widget needs to be signalled - for(var node=this.domNode; node.parentNode; node=node.parentNode){ - var widget=registry.byNode(node); - if(widget && typeof widget._onSubmit == "function"){ - widget._onSubmit(e); - preventDefault = true; - break; - } - } - } - if(preventDefault){ - e.preventDefault(); - } - return !preventDefault; - }, - - postCreate: function(){ - this.inherited(arguments); - dom.setSelectable(this.focusNode, false); - }, - - onClick: function(/*Event*/ /*===== e =====*/){ - // summary: - // Callback for when button is clicked. - // If type="submit", return true to perform submit, or false to cancel it. - // type: - // callback - return true; // Boolean - }, - - _setLabelAttr: function(/*String*/ content){ - // summary: - // Hook for set('label', ...) to work. - // description: - // Set the label (text) of the button; takes an HTML string. - this._set("label", content); - (this.containerNode||this.focusNode).innerHTML = content; - } -}); - -}); - -}, -'dojo/colors':function(){ -define("dojo/colors", ["./_base/kernel", "./_base/lang", "./_base/Color", "./_base/array"], function(dojo, lang, Color, ArrayUtil) { - // module: - // dojo/colors - // summary: - // TODOC - - var ColorExt = lang.getObject("dojo.colors", true); - -//TODO: this module appears to break naming conventions - -/*===== - lang.mixin(dojo, { - colors: { - // summary: Color utilities, extending Base dojo.Color - } - }); -=====*/ - - // this is a standard conversion prescribed by the CSS3 Color Module - var hue2rgb = function(m1, m2, h){ - if(h < 0){ ++h; } - if(h > 1){ --h; } - var h6 = 6 * h; - if(h6 < 1){ return m1 + (m2 - m1) * h6; } - if(2 * h < 1){ return m2; } - if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; } - return m1; - }; - // Override base Color.fromRgb with the impl in this module - dojo.colorFromRgb = Color.fromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ - // summary: - // get rgb(a) array from css-style color declarations - // description: - // this function can handle all 4 CSS3 Color Module formats: rgb, - // rgba, hsl, hsla, including rgb(a) with percentage values. - var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/); - if(m){ - var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1], a; - if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){ - var r = c[0]; - if(r.charAt(r.length - 1) == "%"){ - // 3 rgb percentage values - a = ArrayUtil.map(c, function(x){ - return parseFloat(x) * 2.56; - }); - if(l == 4){ a[3] = c[3]; } - return Color.fromArray(a, obj); // dojo.Color - } - return Color.fromArray(c, obj); // dojo.Color - } - if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){ - // normalize hsl values - var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360, - S = parseFloat(c[1]) / 100, - L = parseFloat(c[2]) / 100, - // calculate rgb according to the algorithm - // recommended by the CSS3 Color Module - m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S, - m1 = 2 * L - m2; - a = [ - hue2rgb(m1, m2, H + 1 / 3) * 256, - hue2rgb(m1, m2, H) * 256, - hue2rgb(m1, m2, H - 1 / 3) * 256, - 1 - ]; - if(l == 4){ a[3] = c[3]; } - return Color.fromArray(a, obj); // dojo.Color - } - } - return null; // dojo.Color - }; - - var confine = function(c, low, high){ - // summary: - // sanitize a color component by making sure it is a number, - // and clamping it to valid values - c = Number(c); - return isNaN(c) ? high : c < low ? low : c > high ? high : c; // Number - }; - - Color.prototype.sanitize = function(){ - // summary: makes sure that the object has correct attributes - var t = this; - t.r = Math.round(confine(t.r, 0, 255)); - t.g = Math.round(confine(t.g, 0, 255)); - t.b = Math.round(confine(t.b, 0, 255)); - t.a = confine(t.a, 0, 1); - return this; // dojo.Color - }; - - ColorExt.makeGrey = Color.makeGrey = function(/*Number*/ g, /*Number?*/ a){ - // summary: creates a greyscale color with an optional alpha - return Color.fromArray([g, g, g, a]); // dojo.Color - }; - - // mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings - lang.mixin(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], - "turquoise": [64,224,208], - "violet": [238,130,238], - "wheat": [245,222,179], - "whitesmoke": [245,245,245], - "yellowgreen": [154,205,50] - }); - - return Color; -}); - -}, -'dijit/registry':function(){ -define("dijit/registry", [ - "dojo/_base/array", // array.forEach array.map - "dojo/_base/sniff", // has("ie") - "dojo/_base/unload", // unload.addOnWindowUnload - "dojo/_base/window", // win.body - "." // dijit._scopeName -], function(array, has, unload, win, dijit){ - - // module: - // dijit/registry - // summary: - // Registry of existing widget on page, plus some utility methods. - // Must be accessed through AMD api, ex: - // require(["dijit/registry"], function(registry){ registry.byId("foo"); }) - - var _widgetTypeCtr = {}, hash = {}; - - var registry = { - // summary: - // A set of widgets indexed by id - - length: 0, - - add: function(/*dijit._Widget*/ widget){ - // summary: - // Add a widget to the registry. If a duplicate ID is detected, a error is thrown. - // - // widget: dijit._Widget - // Any dijit._Widget subclass. - if(hash[widget.id]){ - throw new Error("Tried to register widget with id==" + widget.id + " but that id is already registered"); - } - hash[widget.id] = widget; - this.length++; - }, - - remove: function(/*String*/ id){ - // summary: - // Remove a widget from the registry. Does not destroy the widget; simply - // removes the reference. - if(hash[id]){ - delete hash[id]; - this.length--; - } - }, - - byId: function(/*String|Widget*/ id){ - // summary: - // Find a widget by it's id. - // If passed a widget then just returns the widget. - return typeof id == "string" ? hash[id] : id; // dijit._Widget - }, - - byNode: function(/*DOMNode*/ node){ - // summary: - // Returns the widget corresponding to the given DOMNode - return hash[node.getAttribute("widgetId")]; // dijit._Widget - }, - - toArray: function(){ - // summary: - // Convert registry into a true Array - // - // example: - // Work with the widget .domNodes in a real Array - // | array.map(dijit.registry.toArray(), function(w){ return w.domNode; }); - - var ar = []; - for(var id in hash){ - ar.push(hash[id]); - } - return ar; // dijit._Widget[] - }, - - getUniqueId: function(/*String*/widgetType){ - // summary: - // Generates a unique id for a given widgetType - - var id; - do{ - id = widgetType + "_" + - (widgetType in _widgetTypeCtr ? - ++_widgetTypeCtr[widgetType] : _widgetTypeCtr[widgetType] = 0); - }while(hash[id]); - return dijit._scopeName == "dijit" ? id : dijit._scopeName + "_" + id; // String - }, - - findWidgets: function(/*DomNode*/ root){ - // summary: - // Search subtree under root returning widgets found. - // Doesn't search for nested widgets (ie, widgets inside other widgets). - - var outAry = []; - - function getChildrenHelper(root){ - for(var node = root.firstChild; node; node = node.nextSibling){ - if(node.nodeType == 1){ - var widgetId = node.getAttribute("widgetId"); - if(widgetId){ - var widget = hash[widgetId]; - if(widget){ // may be null on page w/multiple dojo's loaded - outAry.push(widget); - } - }else{ - getChildrenHelper(node); - } - } - } - } - - getChildrenHelper(root); - return outAry; - }, - - _destroyAll: function(){ - // summary: - // Code to destroy all widgets and do other cleanup on page unload - - // Clean up focus manager lingering references to widgets and nodes - dijit._curFocus = null; - dijit._prevFocus = null; - dijit._activeStack = []; - - // Destroy all the widgets, top down - array.forEach(registry.findWidgets(win.body()), function(widget){ - // Avoid double destroy of widgets like Menu that are attached to <body> - // even though they are logically children of other widgets. - if(!widget._destroyed){ - if(widget.destroyRecursive){ - widget.destroyRecursive(); - }else if(widget.destroy){ - widget.destroy(); - } - } - }); - }, - - getEnclosingWidget: function(/*DOMNode*/ node){ - // summary: - // Returns the widget whose DOM tree contains the specified DOMNode, or null if - // the node is not contained within the DOM tree of any widget - while(node){ - var id = node.getAttribute && node.getAttribute("widgetId"); - if(id){ - return hash[id]; - } - node = node.parentNode; - } - return null; - }, - - // In case someone needs to access hash. - // Actually, this is accessed from WidgetSet back-compatibility code - _hash: hash - }; - - if(has("ie")){ - // Only run _destroyAll() for IE because we think it's only necessary in that case, - // and because it causes problems on FF. See bug #3531 for details. - unload.addOnWindowUnload(function(){ - registry._destroyAll(); - }); - } - - /*===== - dijit.registry = { - // summary: - // A list of widgets on a page. - }; - =====*/ - dijit.registry = registry; - - return registry; -}); - -}, -'dijit/tree/_dndContainer':function(){ -define("dijit/tree/_dndContainer", [ - "dojo/aspect", // aspect.after - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add domClass.remove domClass.replace - "dojo/_base/event", // event.stop - "dojo/_base/lang", // lang.getObject lang.mixin lang.hitch - "dojo/mouse", // mouse.enter, mouse.leave - "dojo/on" -], function(aspect, declare, domClass, event, lang, mouse, on){ - - // module: - // dijit/tree/_dndContainer - // 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`. - - return declare("dijit.tree._dndContainer", null, { - - // 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 - - /*===== - // 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, - =====*/ - - 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 - lang.mixin(this, params); - - // class-specific variables - this.current = null; // current TreeNode's DOM node - - // states - this.containerState = ""; - domClass.add(this.node, "dojoDndContainer"); - - // set up events - this.events = [ - // container level events - on(this.node, mouse.enter, lang.hitch(this, "onOverEvent")), - on(this.node, mouse.leave, lang.hitch(this, "onOutEvent")), - - // switching between TreeNodes - aspect.after(this.tree, "_onNodeMouseEnter", lang.hitch(this, "onMouseOver"), true), - aspect.after(this.tree, "_onNodeMouseLeave", lang.hitch(this, "onMouseOut"), true), - - // cancel text selection and text dragging - on(this.node, "dragstart", lang.hitch(event, "stop")), - on(this.node, "selectstart", lang.hitch(event, "stop")) - ]; - }, - - destroy: function(){ - // summary: - // Prepares this object to be garbage-collected - - var h; - while(h = this.events.pop()){ h.remove(); } - - // this.clearItems(); - this.node = this.parent = null; - }, - - // mouse events - onMouseOver: function(widget /*===== , evt =====*/){ - // summary: - // Called when mouse is moved over a TreeNode - // widget: TreeNode - // evt: Event - // tags: - // protected - this.current = widget; - }, - - onMouseOut: function(/*===== widget, evt =====*/){ - // summary: - // Called when mouse is moved away from a TreeNode - // widget: TreeNode - // evt: Event - // tags: - // protected - this.current = null; - }, - - _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"; - //domClass.replace(this.node, prefix + newState, prefix + this[state]); - domClass.replace(this.node, prefix + newState, prefix + this[state]); - 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 - domClass.add(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 - domClass.remove(node, "dojoDndItem" + type); - }, - - 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", ""); - } - }); -}); - -}, -'url: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", -'dijit/_base/wai':function(){ -define("dijit/_base/wai", [ - "dojo/dom-attr", // domAttr.attr - "dojo/_base/lang", // lang.mixin - "..", // export symbols to dijit - "../hccss" // not using this module directly, but loading it sets CSS flag on <html> -], function(domAttr, lang, dijit){ - - // module: - // dijit/_base/wai - // summary: - // Deprecated methods for setting/getting wai roles and states. - // New code should call setAttribute()/getAttribute() directly. - // - // Also loads hccss to apply dijit_a11y class to root node if machine is in high-contrast mode. - - lang.mixin(dijit, { - hasWaiRole: function(/*Element*/ elem, /*String?*/ role){ - // summary: - // Determines if an element has a particular role. - // returns: - // True if elem has the specific role attribute and false if not. - // For backwards compatibility if role parameter not provided, - // 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 role for an element (which should be a wai role). - // returns: - // The role of elem or an empty string if elem - // does not have a role. - return lang.trim((domAttr.get(elem, "role") || "").replace("wairole:","")); - }, - - setWaiRole: function(/*Element*/ elem, /*String*/ role){ - // summary: - // Sets the role on an element. - // description: - // Replace existing role attribute with new role. - - domAttr.set(elem, "role", role); - }, - - removeWaiRole: function(/*Element*/ elem, /*String*/ role){ - // summary: - // Removes the specified role from an element. - // Removes role attribute if no specific role provided (for backwards compat.) - - var roleValue = domAttr.get(elem, "role"); - if(!roleValue){ return; } - if(role){ - var t = lang.trim((" " + roleValue + " ").replace(" " + role + " ", " ")); - domAttr.set(elem, "role", t); - }else{ - elem.removeAttribute("role"); - } - }, - - hasWaiState: function(/*Element*/ elem, /*String*/ state){ - // summary: - // Determines if an element has a given state. - // description: - // Checks for an attribute called "aria-"+state. - // returns: - // true if elem has a value for the given state and - // false if it does not. - - return elem.hasAttribute ? elem.hasAttribute("aria-"+state) : !!elem.getAttribute("aria-"+state); - }, - - getWaiState: function(/*Element*/ elem, /*String*/ state){ - // summary: - // Gets the value of a state on an element. - // description: - // Checks for an attribute called "aria-"+state. - // returns: - // The value of the requested state on elem - // or an empty string if elem has no value for state. - - return elem.getAttribute("aria-"+state) || ""; - }, - - setWaiState: function(/*Element*/ elem, /*String*/ state, /*String*/ value){ - // summary: - // Sets a state on an element. - // description: - // Sets an attribute called "aria-"+state. - - elem.setAttribute("aria-"+state, value); - }, - - removeWaiState: function(/*Element*/ elem, /*String*/ state){ - // summary: - // Removes a state from an element. - // description: - // Sets an attribute called "aria-"+state. - - elem.removeAttribute("aria-"+state); - } - }); - - return dijit; -}); - -}, -'dijit/form/_FormSelectWidget':function(){ -define("dijit/form/_FormSelectWidget", [ - "dojo/_base/array", // array.filter array.forEach array.map array.some - "dojo/aspect", // aspect.after - "dojo/data/util/sorter", // util.sorter.createSortFunction - "dojo/_base/declare", // declare - "dojo/dom", // dom.setSelectable - "dojo/dom-class", // domClass.toggle - "dojo/_base/kernel", // _scopeName - "dojo/_base/lang", // lang.delegate lang.isArray lang.isObject lang.hitch - "dojo/query", // query - "./_FormValueWidget" -], function(array, aspect, sorter, declare, dom, domClass, kernel, lang, query, _FormValueWidget){ - -/*===== - var _FormValueWidget = dijit.form._FormValueWidget; -=====*/ - -// module: -// dijit/form/_FormSelectWidget -// summary: -// Extends _FormValueWidget in order to provide "select-specific" -// values - i.e., those values that are unique to <select> elements. - - -/*===== -dijit.form.__SelectOption = function(){ - // value: String - // The value of the option. Setting to empty (or missing) will - // place a separator at that location - // label: String - // The label for our option. It can contain html tags. - // selected: Boolean - // Whether or not we are a selected option - // disabled: Boolean - // Whether or not this specific option is disabled - this.value = value; - this.label = label; - this.selected = selected; - this.disabled = disabled; -} -=====*/ - -return declare("dijit.form._FormSelectWidget", _FormValueWidget, { - // summary: - // Extends _FormValueWidget in order to provide "select-specific" - // values - i.e., those values that are unique to <select> elements. - // This also provides the mechanism for reading the elements from - // a store, if desired. - - // 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. - options: null, - - // store: dojo.data.api.Identity - // A store which, at the very least implements dojo.data.api.Identity - // to use for getting our list of options - rather than reading them - // from the <option> html tags. - store: null, - - // query: object - // A query to use when fetching items from our store - query: null, - - // queryOptions: object - // Query options to use when fetching from the store - queryOptions: null, - - // onFetch: Function - // A callback to do with an onFetch - but before any items are actually - // iterated over (i.e. to filter even further what you want to add) - onFetch: null, - - // sortByLabel: Boolean - // Flag to sort the options returned from a store by the label of - // the store. - sortByLabel: true, - - - // 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 clicks the button to open the - // dropdown. - loadChildrenOnOpen: false, - - getOptions: function(/*anything*/ valueOrIdx){ - // summary: - // Returns a given option (or options). - // valueOrIdx: - // If passed in as a string, that string is used to look up the option - // in the array of options - based on the value property. - // (See dijit.form.__SelectOption). - // - // If passed in a number, then the option with the given index (0-based) - // within this select will be returned. - // - // If passed in a dijit.form.__SelectOption, the same option will be - // returned if and only if it exists within this select. - // - // If passed an array, then an array will be returned with each element - // in the array being looked up. - // - // If not passed a value, then all options will be returned - // - // returns: - // The option corresponding with the given value or index. null - // is returned if any of the following are true: - // - A string value is passed in which doesn't exist - // - An index is passed in which is outside the bounds of the array of options - // - A dijit.form.__SelectOption is passed in which is not a part of the select - - // NOTE: the compare for passing in a dijit.form.__SelectOption checks - // if the value property matches - NOT if the exact option exists - // NOTE: if passing in an array, null elements will be placed in the returned - // array when a value is not found. - var lookupValue = valueOrIdx, opts = this.options || [], l = opts.length; - - if(lookupValue === undefined){ - return opts; // dijit.form.__SelectOption[] - } - if(lang.isArray(lookupValue)){ - return array.map(lookupValue, "return this.getOptions(item);", this); // dijit.form.__SelectOption[] - } - if(lang.isObject(valueOrIdx)){ - // We were passed an option - so see if it's in our array (directly), - // and if it's not, try and find it by value. - if(!array.some(this.options, function(o, idx){ - if(o === lookupValue || - (o.value && o.value === lookupValue.value)){ - lookupValue = idx; - return true; - } - return false; - })){ - lookupValue = -1; - } - } - if(typeof lookupValue == "string"){ - for(var i=0; i<l; i++){ - if(opts[i].value === lookupValue){ - lookupValue = i; - break; - } - } - } - if(typeof lookupValue == "number" && lookupValue >= 0 && lookupValue < l){ - return this.options[lookupValue]; // dijit.form.__SelectOption - } - return null; // null - }, - - 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. - // Passing in an array of options will yield slightly better performance - // since the children are only loaded once. - if(!lang.isArray(option)){ option = [option]; } - array.forEach(option, function(i){ - if(i && lang.isObject(i)){ - this.options.push(i); - } - }, this); - this._loadChildren(); - }, - - 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 - // index in the options array is removed), or select option (in - // which case, the select option with a matching value is removed). - // You can also pass in an array of those values for a slightly - // better performance since the children are only loaded once. - if(!lang.isArray(valueOrIdx)){ valueOrIdx = [valueOrIdx]; } - var oldOpts = this.getOptions(valueOrIdx); - array.forEach(oldOpts, function(i){ - // We can get null back in our array - if our option was not found. In - // that case, we don't want to blow up... - if(i){ - this.options = array.filter(this.options, function(node){ - return (node.value !== i.value || node.label !== i.label); - }); - this._removeOptionItem(i); - } - }, this); - this._loadChildren(); - }, - - 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 - // in an array of new options will yield better performance since - // the children will only be loaded once. - if(!lang.isArray(newOption)){ newOption = [newOption]; } - array.forEach(newOption, function(i){ - var oldOpt = this.getOptions(i), k; - if(oldOpt){ - for(k in i){ oldOpt[k] = i[k]; } - } - }, this); - this._loadChildren(); - }, - - 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 - // function returns the original store, in case you want to reuse - // it or something. - // store: dojo.data.api.Identity - // The store you would like to use - it MUST implement dojo.data.api.Identity, - // and MAY implement dojo.data.api.Notification. - // selectedValue: anything? - // The value that this widget should set itself to *after* the store - // has been loaded - // fetchArgs: Object? - // The arguments that will be passed to the store's fetch() function - var oStore = this.store; - fetchArgs = fetchArgs || {}; - if(oStore !== store){ - // Our store has changed, so update our notifications - var h; - while(h = this._notifyConnections.pop()){ h.remove(); } - - if(store && store.getFeatures()["dojo.data.api.Notification"]){ - this._notifyConnections = [ - aspect.after(store, "onNew", lang.hitch(this, "_onNewItem"), true), - aspect.after(store, "onDelete", lang.hitch(this, "_onDeleteItem"), true), - aspect.after(store, "onSet", lang.hitch(this, "_onSetItem"), true) - ]; - } - this._set("store", store); - } - - // Turn off change notifications while we make all these changes - this._onChangeActive = false; - - // Remove existing options (if there are any) - if(this.options && this.options.length){ - this.removeOption(this.options); - } - - // Add our new options - if(store){ - this._loadingStore = true; - store.fetch(lang.delegate(fetchArgs, { - onComplete: function(items, opts){ - if(this.sortByLabel && !fetchArgs.sort && items.length){ - items.sort(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 - array.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 - }, - - // 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. - if(this._loadingStore){ - // Our store is loading - so save our value, and we'll set it when - // we're done - this._pendingValue = newValue; - return; - } - var opts = this.getOptions() || []; - if(!lang.isArray(newValue)){ - newValue = [newValue]; - } - array.forEach(newValue, function(i, idx){ - if(!lang.isObject(i)){ - i = i + ""; - } - if(typeof i === "string"){ - newValue[idx] = array.filter(opts, function(node){ - return node.value === i; - })[0] || {value: "", label: ""}; - } - }, this); - - // Make sure some sane default is set - newValue = array.filter(newValue, function(i){ return i && i.value; }); - if(!this.multiple && (!newValue[0] || !newValue[0].value) && opts.length){ - newValue[0] = opts[0]; - } - array.forEach(opts, function(i){ - i.selected = array.some(newValue, function(v){ return v.value === i.value; }); - }); - var val = array.map(newValue, function(i){ return i.value; }), - disp = array.map(newValue, 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, priorityChange); - }, - - _getDisplayedValueAttr: function(){ - // summary: - // returns the displayed value of the widget - var val = this.get("value"); - if(!lang.isArray(val)){ - val = [val]; - } - var ret = array.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(){ - // summary: - // Loads the children represented by this widget's options. - // reset the menu to make it populatable on the next click - if(this._loadingStore){ return; } - array.forEach(this._getChildren(), function(child){ - child.destroyRecursive(); - }); - // Add each menu item - array.forEach(this.options, this._addOptionItem, this); - - // Update states - this._updateSelection(); - }, - - _updateSelection: function(){ - // summary: - // Sets the "selected" class on the item for styling purposes - this._set("value", this._getValueFromOpts()); - var val = this.value; - if(!lang.isArray(val)){ - val = [val]; - } - if(val && val[0]){ - array.forEach(this._getChildren(), function(child){ - var isSelected = array.some(val, function(v){ - return child.option && (v === child.option.value); - }); - domClass.toggle(child.domNode, this.baseClass + "SelectedOption", isSelected); - child.domNode.setAttribute("aria-selected", isSelected); - }, this); - } - }, - - _getValueFromOpts: function(){ - // summary: - // Returns the value of the widget by reading the options for - // the selected flag - var opts = this.getOptions() || []; - if(!this.multiple && opts.length){ - // Mirror what a select does - choose the first one - var opt = array.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){ - // Set value to be the sum of all selected - return array.map(array.filter(opts, function(i){ - return i.selected; - }), function(i){ - return i.value; - }) || []; - } - return ""; - }, - - // Internal functions to call when we have store notifications come in - _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){ - var store = this.store; - this.removeOption(store.getIdentity(item)); - }, - _onSetItem: function(/*item*/ item){ - this.updateOption(this._getOptionObjForItem(item)); - }, - - _getOptionObjForItem: function(item){ - // summary: - // Returns an option object based off the given item. The "value" - // of the option item will be the identity of the item, the "label" - // of the option will be the label of the item. If the item contains - // children, the children value of the item will be set - var store = this.store, label = store.getLabel(item), - value = (label ? store.getIdentity(item) : null); - return {value: value, label: label, item:item}; // dijit.form.__SelectOption - }, - - _addOptionForItem: function(/*item*/ item){ - // summary: - // Creates (and adds) the option for the given item - var store = this.store; - if(!store.isItemLoaded(item)){ - // We are not loaded - so let's load it and add later - store.loadItem({item: item, onItem: function(i){ - this._addOptionForItem(i); - }, - scope: this}); - return; - } - var newOpt = this._getOptionObjForItem(item); - this.addOption(newOpt); - }, - - 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; - this._notifyConnections = []; - }, - - buildRendering: function(){ - this.inherited(arguments); - dom.setSelectable(this.focusNode, false); - }, - - _fillContent: function(){ - // summary: - // Loads our options and sets up our dropdown correctly. We - // don't want any content, so we don't call any inherit chain - // function. - var opts = this.options; - if(!opts){ - opts = this.options = this.srcNodeRef ? query("> *", - this.srcNodeRef).map(function(node){ - if(node.getAttribute("type") === "separator"){ - return { value: "", label: "", selected: false, disabled: false }; - } - return { - value: (node.getAttribute("data-" + kernel._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 - }; - }, 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(){ - // summary: - // sets up our event handling that we need for functioning - // as a select - this.inherited(arguments); - - // Make our event connections for updating state - this.connect(this, "onChange", "_updateSelection"); - this.connect(this, "startup", "_loadChildren"); - - this._setValueAttr(this.value, null); - }, - - startup: function(){ - // summary: - // Connects in our store, if we have one defined - this.inherited(arguments); - var store = this.store, fetchArgs = {}; - array.forEach(["query", "queryOptions", "onFetch"], function(i){ - if(this[i]){ - fetchArgs[i] = this[i]; - } - delete this[i]; - }, this); - if(store && store.getFeatures()["dojo.data.api.Identity"]){ - // Temporarily set our store to null so that it will get set - // and connected appropriately - this.store = null; - this.setStore(store, this._oValue, fetchArgs); - } - }, - - destroy: function(){ - // summary: - // Clean up our connections - var h; - while(h = this._notifyConnections.pop()){ h.remove(); } - this.inherited(arguments); - }, - - _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 - // separator is added in that place. Make sure to store the option - // in the created option widget. - }, - - _removeOptionItem: function(/*dijit.form.__SelectOption*/ /*===== option =====*/){ - // summary: - // User-overridable function which, for the given option, removes - // its item from the select. - }, - - _setDisplay: function(/*String or String[]*/ /*===== newDisplay =====*/){ - // summary: - // Overridable function which will set the display for the - // widget. newDisplay is either a string (in the case of - // single selects) or array of strings (in the case of multi-selects) - }, - - _getChildren: function(){ - // summary: - // Overridable function to return the children that this widget contains. - return []; - }, - - _getSelectedOptionsAttr: function(){ - // summary: - // hooks into this.attr to provide a mechanism for getting the - // option items for the current value of the widget. - return this.getOptions(this.get("value")); - }, - - _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. - // items: - // An array of items that will be loaded, when needed - }, - - onSetStore: function(){ - // summary: - // a function that can be connected to in order to receive a - // notification that the store has finished loading and all options - // from that store are available - } -}); - -}); - -}, -'dijit/form/Select':function(){ -require({cache:{ -'url:dijit/form/templates/Select.html':"<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdata-dojo-attach-point=\"_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\" data-dojo-attach-point=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} data-dojo-attach-point=\"valueNode\" value=\"${value}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdata-dojo-attach-point=\"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"}}); -define("dijit/form/Select", [ - "dojo/_base/array", // array.forEach - "dojo/_base/declare", // declare - "dojo/dom-attr", // domAttr.set - "dojo/dom-class", // domClass.add domClass.remove domClass.toggle - "dojo/dom-construct", // domConstruct.create - "dojo/dom-geometry", // domGeometry.setMarginBox - "dojo/_base/event", // event.stop - "dojo/i18n", // i18n.getLocalization - "dojo/_base/lang", // lang.hitch - "./_FormSelectWidget", - "../_HasDropDown", - "../Menu", - "../MenuItem", - "../MenuSeparator", - "../Tooltip", - "dojo/text!./templates/Select.html", - "dojo/i18n!./nls/validate" -], function(array, declare, domAttr, domClass, domConstruct, domGeometry, event, i18n, lang, - _FormSelectWidget, _HasDropDown, Menu, MenuItem, MenuSeparator, Tooltip, template){ - -/*===== - var _FormSelectWidget = dijit.form._FormSelectWidget; - var _HasDropDown = dijit._HasDropDown; - var _FormSelectWidget = dijit._FormSelectWidget; - var Menu = dijit.Menu; - var MenuItem = dijit.MenuItem; - var MenuSeparator = dijit.MenuSeparator; - var Tooltip = dijit.Tooltip; -=====*/ - -// module: -// dijit/form/Select -// summary: -// This is a "styleable" select box - it is basically a DropDownButton which -// can take a <select> as its input. - - -var _SelectMenu = declare("dijit.form._SelectMenu", Menu, { - // summary: - // An internally-used menu for dropdown that allows us a vertical scrollbar - buildRendering: function(){ - // summary: - // Stub in our own changes, so that our domNode is not a table - // otherwise, we won't respond correctly to heights/overflows - this.inherited(arguments); - var o = (this.menuTableNode = this.domNode); - var n = (this.domNode = domConstruct.create("div", {style: {overflowX: "hidden", overflowY: "scroll"}})); - if(o.parentNode){ - o.parentNode.replaceChild(n, o); - } - domClass.remove(o, "dijitMenuTable"); - n.className = o.className + " dijitSelectMenu"; - o.className = "dijitReset dijitMenuTable"; - o.setAttribute("role", "listbox"); - n.setAttribute("role", "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", event.stop); - }, - - resize: function(/*Object*/ mb){ - // summary: - // Overridden so that we are able to handle resizing our - // internal widget. Note that this is not a "full" resize - // implementation - it only works correctly if you pass it a - // marginBox. - // - // mb: Object - // The margin box to set this dropdown to. - if(mb){ - domGeometry.setMarginBox(this.domNode, mb); - if("w" in mb){ - // We've explicitly set the wrapper <div>'s width, so set <table> width to match. - // 100% is safer than a pixel value because there may be a scroll bar with - // browser/OS specific width. - this.menuTableNode.style.width = "100%"; - } - } - } -}); - -var Select = declare("dijit.form.Select", [_FormSelectWidget, _HasDropDown], { - // summary: - // This is a "styleable" select box - it is basically a DropDownButton which - // can take a <select> as its input. - - baseClass: "dijitSelect", - - templateString: template, - - // required: Boolean - // Can be true or false, default is false. - required: false, - - // state: [readonly] String - // "Incomplete" if this select is required but unset (i.e. blank value), "" otherwise - 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: " ", //   - - // _isLoaded: Boolean - // Whether or not we have been loaded - _isLoaded: false, - - // _childrenLoaded: Boolean - // Whether or not our children have been loaded - _childrenLoaded: false, - - _fillContent: function(){ - // 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 || 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 _SelectMenu({id: this.id + "_menu"}); - domClass.add(this.dropDown.domNode, this.baseClass + "Menu"); - }, - - _getMenuItemForOption: function(/*dijit.form.__SelectOption*/ option){ - // 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 && !option.label){ - // We are a separator (no label set for it) - return new MenuSeparator(); - }else{ - // Just a regular menu option - var click = lang.hitch(this, "_setValueAttr", option); - var item = new MenuItem({ - option: option, - label: option.label || this.emptyLabel, - onClick: click, - disabled: option.disabled || false - }); - item.focusNode.setAttribute("role", "listitem"); - return item; - } - }, - - _addOptionItem: function(/*dijit.form.__SelectOption*/ option){ - // summary: - // For the given option, add an option to our dropdown. - // If the option doesn't have a value, then a separator is added - // in that place. - if(this.dropDown){ - this.dropDown.addChild(this._getMenuItemForOption(option)); - } - }, - - _getChildren: function(){ - if(!this.dropDown){ - return []; - } - return this.dropDown.getChildren(); - }, - - _loadChildren: function(/*Boolean*/ loadMenuItems){ - // summary: - // Resets the menu and the length attribute of the button - and - // ensures that the label is appropriately set. - // loadMenuItems: Boolean - // actually loads the child menu items - we only do this when we are - // populating for showing the dropdown. - - if(loadMenuItems === true){ - // this.inherited destroys this.dropDown's child widgets (MenuItems). - // Avoid this.dropDown (Menu widget) having a pointer to a destroyed widget (which will cause - // issues later in _setSelected). (see #10296) - if(this.dropDown){ - delete this.dropDown.focusedChild; - } - if(this.options.length){ - this.inherited(arguments); - }else{ - // Drop down menu is blank but add one blank entry just so something appears on the screen - // to let users know that they are no choices (mimicing native select behavior) - array.forEach(this._getChildren(), function(child){ child.destroyRecursive(); }); - var item = new MenuItem({label: " "}); - this.dropDown.addChild(item); - } - }else{ - this._updateSelection(); - } - - this._isLoaded = false; - this._childrenLoaded = true; - - if(!this._loadingStore){ - // Don't call this if we are loading - since we will handle it later - this._setValueAttr(this.value); - } - }, - - _setValueAttr: function(value){ - this.inherited(arguments); - domAttr.set(this.valueNode, "value", this.get("value")); - this.validate(this.focused); // to update this.state - }, - - _setDisabledAttr: function(/*Boolean*/ value){ - this.inherited(arguments); - this.validate(this.focused); // to update this.state - }, - - _setRequiredAttr: function(/*Boolean*/ value){ - this._set("required", value); - this.focusNode.setAttribute("aria-required", value); - this.validate(this.focused); // to update this.state - }, - - _setDisplay: function(/*String*/ newDisplay){ - // summary: - // sets the display for the given value (or values) - var lbl = newDisplay || this.emptyLabel; - this.containerNode.innerHTML = '<span class="dijitReset dijitInline ' + this.baseClass + 'Label">' + lbl + '</span>'; - this.focusNode.setAttribute("aria-valuetext", lbl); - }, - - validate: function(/*Boolean*/ isFocused){ - // summary: - // Called by oninit, onblur, and onkeypress, and whenever required/disabled state changes - // description: - // Show missing or invalid messages if appropriate, and highlight textbox field. - // Used when a select is initially set to no value and the user is required to - // set the value. - - var isValid = this.disabled || this.isValid(isFocused); - this._set("state", isValid ? "" : "Incomplete"); - this.focusNode.setAttribute("aria-invalid", isValid ? "false" : "true"); - var message = isValid ? "" : this._missingMsg; - if(message && this.focused && this._hasBeenBlurred){ - Tooltip.show(message, this.domNode, this.tooltipPosition, !this.isLeftToRight()); - }else{ - Tooltip.hide(this.domNode); - } - this._set("message", message); - return isValid; - }, - - isValid: function(/*Boolean*/ /*===== isFocused =====*/){ - // summary: - // 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 || this.value === 0 || !(/^\s*$/.test(this.value || ""))); // handle value is null or undefined - }, - - reset: function(){ - // summary: - // Overridden so that the state will be cleared. - this.inherited(arguments); - Tooltip.hide(this.domNode); - this.validate(this.focused); // to update this.state - }, - - postMixInProperties: function(){ - // summary: - // set the missing message - this.inherited(arguments); - this._missingMsg = i18n.getLocalization("dijit.form", "validate", - this.lang).missingMessage; - }, - - postCreate: function(){ - // summary: - // stop mousemove from selecting text on IE to be consistent with other browsers - - this.inherited(arguments); - - this.connect(this.domNode, "onmousemove", event.stop); - }, - - _setStyleAttr: function(/*String||Object*/ value){ - this.inherited(arguments); - domClass.toggle(this.domNode, this.baseClass + "FixedWidth", !!this.domNode.style.width); - }, - - isLoaded: function(){ - return this._isLoaded; - }, - - loadDropDown: function(/*Function*/ loadCallback){ - // summary: - // populates the menu - this._loadChildren(true); - this._isLoaded = true; - loadCallback(); - }, - - closeDropDown: function(){ - // overriding _HasDropDown.closeDropDown() - this.inherited(arguments); - - if(this.dropDown && this.dropDown.menuTableNode){ - // Erase possible width: 100% setting from _SelectMenu.resize(). - // Leaving it would interfere with the next openDropDown() call, which - // queries the natural size of the drop down. - this.dropDown.menuTableNode.style.width = ""; - } - }, - - uninitialize: function(preserveDom){ - if(this.dropDown && !this.dropDown._destroyed){ - this.dropDown.destroyRecursive(preserveDom); - delete this.dropDown; - } - this.inherited(arguments); - }, - - _onFocus: function(){ - this.validate(true); // show tooltip if second focus of required tooltip, but no selection - this.inherited(arguments); - }, - - _onBlur: function(){ - Tooltip.hide(this.domNode); - this.inherited(arguments); - } -}); - -Select._Menu = _SelectMenu; // for monkey patching - -return Select; -}); - -}, -'dojo/store/util/QueryResults':function(){ -define("dojo/store/util/QueryResults", ["../../_base/array", "../../_base/lang", "../../_base/Deferred" -], function(array, lang, Deferred) { - // module: - // dojo/store/util/QueryResults - // summary: - // The module defines a query results wrapper - -var util = lang.getObject("dojo.store.util", true); - -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 = lang.delegate(results); - } - function addIterativeMethod(method){ - if(!results[method]){ - results[method] = function(){ - var args = arguments; - return Deferred.when(results, function(results){ - Array.prototype.unshift.call(args, results); - return util.QueryResults(array[method].apply(array, args)); - }); - }; - } - } - addIterativeMethod("forEach"); - addIterativeMethod("filter"); - addIterativeMethod("map"); - if(!results.total){ - results.total = Deferred.when(results, function(results){ - return results.length; - }); - } - return results; -}; - -return util.QueryResults; -}); - -}, -'dijit/form/_ListBase':function(){ -define("dijit/form/_ListBase", [ - "dojo/_base/declare", // declare - "dojo/window" // winUtils.scrollIntoView -], function(declare, winUtils){ - -// module: -// dijit/form/_ListBase -// summary: -// Focus-less menu to handle UI events consistently - -return declare( "dijit.form._ListBase", null, { - // summary: - // Focus-less menu to handle UI events consistently - // Abstract methods that must be defined externally: - // onSelect: item is active (mousedown but not yet mouseup, or keyboard arrow selected but no Enter) - // onDeselect: cancels onSelect - // tags: - // private - - // selected: DOMnode - // currently selected node - selected: null, - - _getTarget: function(/*Event*/ evt){ - var tgt = evt.target; - var container = this.containerNode; - if(tgt == container || tgt == this.domNode){ return null; } - while(tgt && tgt.parentNode != container){ - // recurse to the top - tgt = tgt.parentNode; - } - return tgt; - }, - - selectFirstNode: function(){ - // summary: - // Select the first displayed item in the list. - var first = this.containerNode.firstChild; - while(first && first.style.display == "none"){ - first = first.nextSibling; - } - this._setSelectedAttr(first); - }, - - selectLastNode: function(){ - // summary: - // Select the last displayed item in the list - var last = this.containerNode.lastChild; - while(last && last.style.display == "none"){ - last = last.previousSibling; - } - this._setSelectedAttr(last); - }, - - selectNextNode: function(){ - // summary: - // Select the item just below the current selection. - // If nothing selected, select first node. - var selectedNode = this._getSelectedAttr(); - if(!selectedNode){ - this.selectFirstNode(); - }else{ - var next = selectedNode.nextSibling; - while(next && next.style.display == "none"){ - next = next.nextSibling; - } - if(!next){ - this.selectFirstNode(); - }else{ - this._setSelectedAttr(next); - } - } - }, - - selectPreviousNode: function(){ - // summary: - // Select the item just above the current selection. - // If nothing selected, select last node (if - // you select Previous and try to keep scrolling up the list). - var selectedNode = this._getSelectedAttr(); - if(!selectedNode){ - this.selectLastNode(); - }else{ - var prev = selectedNode.previousSibling; - while(prev && prev.style.display == "none"){ - prev = prev.previousSibling; - } - if(!prev){ - this.selectLastNode(); - }else{ - this._setSelectedAttr(prev); - } - } - }, - - _setSelectedAttr: function(/*DomNode*/ node){ - // summary: - // Does the actual select. - if(this.selected != node){ - var selectedNode = this._getSelectedAttr(); - if(selectedNode){ - this.onDeselect(selectedNode); - this.selected = null; - } - if(node && node.parentNode == this.containerNode){ - this.selected = node; - winUtils.scrollIntoView(node); - this.onSelect(node); - } - }else if(node){ - this.onSelect(node); - } - }, - - _getSelectedAttr: function(){ - // summary: - // Returns the selected node. - var v = this.selected; - return (v && v.parentNode == this.containerNode) ? v : (this.selected = null); - } -}); - -}); - -}, -'dijit/form/_FormWidget':function(){ -define("dijit/form/_FormWidget", [ - "dojo/_base/declare", // declare - "dojo/_base/kernel", // kernel.deprecated - "dojo/ready", - "../_Widget", - "../_CssStateMixin", - "../_TemplatedMixin", - "./_FormWidgetMixin" -], function(declare, kernel, ready, _Widget, _CssStateMixin, _TemplatedMixin, _FormWidgetMixin){ - -/*===== -var _Widget = dijit._Widget; -var _TemplatedMixin = dijit._TemplatedMixin; -var _CssStateMixin = dijit._CssStateMixin; -var _FormWidgetMixin = dijit.form._FormWidgetMixin; -=====*/ - -// module: -// dijit/form/_FormWidget -// summary: -// FormWidget - - -// Back compat w/1.6, remove for 2.0 -if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/form/_FormValueWidget"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - -return declare("dijit.form._FormWidget", [_Widget, _TemplatedMixin, _CssStateMixin, _FormWidgetMixin], { - // summary: - // Base class for widgets corresponding to native HTML elements such as <checkbox> or <button>, - // which can be children of a <form> node or a `dijit.form.Form` widget. - // - // description: - // Represents a single HTML element. - // All these widgets should have these attributes just like native HTML input elements. - // You can set them during widget construction or afterwards, via `dijit._Widget.attr`. - // - // They also share some common methods. - - setDisabled: function(/*Boolean*/ disabled){ - // summary: - // Deprecated. Use set('disabled', ...) instead. - kernel.deprecated("setDisabled("+disabled+") is deprecated. Use set('disabled',"+disabled+") instead.", "", "2.0"); - this.set('disabled', disabled); - }, - - setValue: function(/*String*/ value){ - // summary: - // Deprecated. Use set('value', ...) instead. - kernel.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. - kernel.deprecated(this.declaredClass+"::getValue() is deprecated. Use get('value') instead.", "", "2.0"); - return this.get('value'); - }, - - postMixInProperties: function(){ - // Setup name=foo string to be referenced from the template (but only if a name has been specified) - // Unfortunately we can't use _setNameAttr to set the name due to IE limitations, see #8484, #8660. - // Regarding escaping, see heading "Attribute values" in - // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2 - this.nameAttrSetting = this.name ? ('name="' + this.name.replace(/'/g, """) + '"') : ''; - this.inherited(arguments); - }, - - // Override automatic assigning type --> focusNode, it causes exception on IE. - // Instead, type must be specified as ${type} in the template, as part of the original DOM - _setTypeAttr: null -}); - -}); - -}, -'dojo/DeferredList':function(){ -define("dojo/DeferredList", ["./_base/kernel", "./_base/Deferred", "./_base/array"], function(dojo, Deferred, darray) { - // module: - // dojo/DeferredList - // summary: - // TODOC - - -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 = []; - Deferred.call(this); - var self = this; - if(list.length === 0 && !fireOnOneCallback){ - this.resolve([0, []]); - } - var finished = 0; - darray.forEach(list, function(item, i){ - item.then(function(result){ - if(fireOnOneCallback){ - self.resolve([i, result]); - }else{ - addResult(true, result); - } - },function(error){ - if(fireOnOneErrback){ - self.reject(error); - }else{ - addResult(false, error); - } - if(consumeErrors){ - return null; - } - throw error; - }); - function addResult(succeeded, result){ - resultList[i] = [succeeded, result]; - finished++; - if(finished === list.length){ - self.resolve(resultList); - } - - } - }); -}; -dojo.DeferredList.prototype = new Deferred(); - -dojo.DeferredList.prototype.gatherResults = function(deferredList){ - // summary: - // Gathers the results of the deferreds for packaging - // as the parameters to the Deferred Lists' callback - // deferredList: dojo.DeferredList - // The deferred list from which this function gathers results. - // returns: dojo.DeferredList - // The newly created deferred list which packs results as - // parameters to its callback. - - var d = new dojo.DeferredList(deferredList, false, true, false); - d.addCallback(function(results){ - var ret = []; - darray.forEach(results, function(result){ - ret.push(result[1]); - }); - return ret; - }); - return d; -}; - -return dojo.DeferredList; -}); - -}, -'dojo/dnd/common':function(){ -define("dojo/dnd/common", ["../main"], function(dojo) { - // module: - // dojo/dnd/common - // summary: - // TODOC - -dojo.getObject("dnd", true, dojo); - -dojo.dnd.getCopyKeyState = dojo.isCopyKey; - -dojo.dnd._uniqueId = 0; -dojo.dnd.getUniqueId = function(){ - // summary: - // returns a unique string for use with any DOM element - var id; - do{ - id = dojo._scopeName + "Unique" + (++dojo.dnd._uniqueId); - }while(dojo.byId(id)); - return id; -}; - -dojo.dnd._empty = {}; - -dojo.dnd.isFormElement = function(/*Event*/ e){ - // summary: - // returns true if user clicked on a form element - var t = e.target; - if(t.nodeType == 3 /*TEXT_NODE*/){ - t = t.parentNode; - } - return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0; // Boolean -}; - -return dojo.dnd; -}); - -}, -'dijit/_base/place':function(){ -define("dijit/_base/place", [ - "dojo/_base/array", // array.forEach - "dojo/_base/lang", // lang.isArray - "dojo/window", // windowUtils.getBox - "../place", - ".." // export to dijit namespace -], function(array, lang, windowUtils, place, dijit){ - - // module: - // dijit/_base/place - // summary: - // Back compatibility module, new code should use dijit/place directly instead of using this module. - - dijit.getViewport = function(){ - // summary: - // Deprecated method to return the dimensions and scroll position of the viewable area of a browser window. - // New code should use windowUtils.getBox() - - return windowUtils.getBox(); - }; - - /*===== - dijit.placeOnScreen = function(node, pos, corners, padding){ - // summary: - // Positions one of the node's corners at specified position - // such that node is fully visible in viewport. - // Deprecated, new code should use dijit.place.at() instead. - }; - =====*/ - dijit.placeOnScreen = place.at; - - /*===== - dijit.placeOnScreenAroundElement = function(node, aroundElement, aroundCorners, layoutNode){ - // summary: - // Like dijit.placeOnScreenAroundNode(), except it accepts an arbitrary object - // for the "around" argument and finds a proper processor to place a node. - // Deprecated, new code should use dijit.place.around() instead. - }; - ====*/ - dijit.placeOnScreenAroundElement = function(node, aroundNode, aroundCorners, layoutNode){ - // Convert old style {"BL": "TL", "BR": "TR"} type argument - // to style needed by dijit.place code: - // [ - // {aroundCorner: "BL", corner: "TL" }, - // {aroundCorner: "BR", corner: "TR" } - // ] - var positions; - if(lang.isArray(aroundCorners)){ - positions = aroundCorners; - }else{ - positions = []; - for(var key in aroundCorners){ - positions.push({aroundCorner: key, corner: aroundCorners[key]}); - } - } - - return place.around(node, aroundNode, positions, true, layoutNode); - }; - - /*===== - dijit.placeOnScreenAroundNode = function(node, aroundNode, aroundCorners, layoutNode){ - // summary: - // Position node adjacent or kitty-corner to aroundNode - // such that it's fully visible in viewport. - // Deprecated, new code should use dijit.place.around() instead. - }; - =====*/ - dijit.placeOnScreenAroundNode = dijit.placeOnScreenAroundElement; - - /*===== - dijit.placeOnScreenAroundRectangle = function(node, aroundRect, aroundCorners, layoutNode){ - // summary: - // Like dijit.placeOnScreenAroundNode(), except that the "around" - // parameter is an arbitrary rectangle on the screen (x, y, width, height) - // instead of a dom node. - // Deprecated, new code should use dijit.place.around() instead. - }; - =====*/ - dijit.placeOnScreenAroundRectangle = dijit.placeOnScreenAroundElement; - - dijit.getPopupAroundAlignment = function(/*Array*/ position, /*Boolean*/ leftToRight){ - // summary: - // Deprecated method, unneeded when using dijit/place directly. - // Transforms the passed array of preferred positions into a format suitable for - // passing as the aroundCorners argument to dijit.placeOnScreenAroundElement. - // - // position: String[] - // This variable controls the position of the drop down. - // It's an array of strings with the following values: - // - // * before: places drop down to the left of the target node/widget, or to the right in - // the case of RTL scripts like Hebrew and Arabic - // * after: places drop down to the right of the target node/widget, or to the left in - // the case of RTL scripts like Hebrew and Arabic - // * above: drop down goes above target node - // * below: drop down goes below target node - // - // The list is positions is tried, in order, until a position is found where the drop down fits - // within the viewport. - // - // leftToRight: Boolean - // Whether the popup will be displaying in leftToRight mode. - // - var align = {}; - array.forEach(position, function(pos){ - var ltr = leftToRight; - switch(pos){ - case "after": - align[leftToRight ? "BR" : "BL"] = leftToRight ? "BL" : "BR"; - break; - case "before": - align[leftToRight ? "BL" : "BR"] = leftToRight ? "BR" : "BL"; - break; - case "below-alt": - ltr = !ltr; - // fall through - case "below": - // first try to align left borders, next try to align right borders (or reverse for RTL mode) - align[ltr ? "BL" : "BR"] = ltr ? "TL" : "TR"; - align[ltr ? "BR" : "BL"] = ltr ? "TR" : "TL"; - break; - case "above-alt": - ltr = !ltr; - // fall through - case "above": - default: - // first try to align left borders, next try to align right borders (or reverse for RTL mode) - align[ltr ? "TL" : "TR"] = ltr ? "BL" : "BR"; - align[ltr ? "TR" : "TL"] = ltr ? "BR" : "BL"; - break; - } - }); - return align; - }; - - return dijit; -}); - -}, -'dijit/MenuSeparator':function(){ -require({cache:{ -'url: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>"}}); -define("dijit/MenuSeparator", [ - "dojo/_base/declare", // declare - "dojo/dom", // dom.setSelectable - "./_WidgetBase", - "./_TemplatedMixin", - "./_Contained", - "dojo/text!./templates/MenuSeparator.html" -], function(declare, dom, _WidgetBase, _TemplatedMixin, _Contained, template){ - -/*===== - var _WidgetBase = dijit._WidgetBase; - var _TemplatedMixin = dijit._TemplatedMixin; - var _Contained = dijit._Contained; -=====*/ - - // module: - // dijit/MenuSeparator - // summary: - // A line between two menu items - - return declare("dijit.MenuSeparator", [_WidgetBase, _TemplatedMixin, _Contained], { - // summary: - // A line between two menu items - - templateString: template, - - buildRendering: function(){ - this.inherited(arguments); - dom.setSelectable(this.domNode, false); - }, - - isFocusable: function(){ - // summary: - // Override to always return false - // tags: - // protected - - return false; // Boolean - } - }); -}); - -}, -'dijit/form/_ComboBoxMenu':function(){ -define("dijit/form/_ComboBoxMenu", [ - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add domClass.remove - "dojo/dom-construct", // domConstruct.create - "dojo/dom-style", // domStyle.get - "dojo/keys", // keys.DOWN_ARROW keys.PAGE_DOWN keys.PAGE_UP keys.UP_ARROW - "../_WidgetBase", - "../_TemplatedMixin", - "./_ComboBoxMenuMixin", - "./_ListMouseMixin" -], function(declare, domClass, domConstruct, domStyle, keys, - _WidgetBase, _TemplatedMixin, _ComboBoxMenuMixin, _ListMouseMixin){ - -/*===== - var _WidgetBase = dijit._WidgetBase; - var _TemplatedMixin = dijit._TemplatedMixin; - var _ComboBoxMenuMixin = dijit.form._ComboBoxMenuMixin; - var _ListMouseMixin = dijit.form._ListMouseMixin; -=====*/ - - // module: - // dijit/form/_ComboBoxMenu - // summary: - // Focus-less menu for internal use in `dijit.form.ComboBox` - - return declare("dijit.form._ComboBoxMenu",[_WidgetBase, _TemplatedMixin, _ListMouseMixin, _ComboBoxMenuMixin], { - // summary: - // Focus-less menu for internal use in `dijit.form.ComboBox` - // Abstract methods that must be defined externally: - // onChange: item was explicitly chosen (mousedown somewhere on the menu and mouseup somewhere on the menu) - // onPage: next(1) or previous(-1) button pressed - // tags: - // private - - templateString: "<div class='dijitReset dijitMenu' data-dojo-attach-point='containerNode' style='overflow: auto; overflow-x: hidden;'>" - +"<div class='dijitMenuItem dijitMenuPreviousButton' data-dojo-attach-point='previousButton' role='option'></div>" - +"<div class='dijitMenuItem dijitMenuNextButton' data-dojo-attach-point='nextButton' role='option'></div>" - +"</div>", - - baseClass: "dijitComboBoxMenu", - - postCreate: function(){ - this.inherited(arguments); - if(!this.isLeftToRight()){ - domClass.add(this.previousButton, "dijitMenuItemRtl"); - domClass.add(this.nextButton, "dijitMenuItemRtl"); - } - }, - - _createMenuItem: function(){ - return domConstruct.create("div", { - "class": "dijitReset dijitMenuItem" +(this.isLeftToRight() ? "" : " dijitMenuItemRtl"), - role: "option" - }); - }, - - onHover: function(/*DomNode*/ node){ - // summary: - // Add hover CSS - domClass.add(node, "dijitMenuItemHover"); - }, - - onUnhover: function(/*DomNode*/ node){ - // summary: - // Remove hover CSS - domClass.remove(node, "dijitMenuItemHover"); - }, - - onSelect: function(/*DomNode*/ node){ - // summary: - // Add selected CSS - domClass.add(node, "dijitMenuItemSelected"); - }, - - onDeselect: function(/*DomNode*/ node){ - // summary: - // Remove selected CSS - domClass.remove(node, "dijitMenuItemSelected"); - }, - - _page: function(/*Boolean*/ up){ - // summary: - // Handles page-up and page-down keypresses - - var scrollamount = 0; - var oldscroll = this.domNode.scrollTop; - var height = domStyle.get(this.domNode, "height"); - // if no item is highlighted, highlight the first option - if(!this.getHighlightedOption()){ - this.selectNextNode(); - } - while(scrollamount<height){ - var highlighted_option = this.getHighlightedOption(); - if(up){ - // stop at option 1 - if(!highlighted_option.previousSibling || - highlighted_option.previousSibling.style.display == "none"){ - break; - } - this.selectPreviousNode(); - }else{ - // stop at last option - if(!highlighted_option.nextSibling || - highlighted_option.nextSibling.style.display == "none"){ - break; - } - this.selectNextNode(); - } - // going backwards - var newscroll = this.domNode.scrollTop; - scrollamount += (newscroll-oldscroll)*(up ? -1:1); - oldscroll = newscroll; - } - }, - - 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 keys.DOWN_ARROW: - this.selectNextNode(); - return false; - case keys.PAGE_DOWN: - this._page(false); - return false; - case keys.UP_ARROW: - this.selectPreviousNode(); - return false; - case keys.PAGE_UP: - this._page(true); - return false; - default: - return true; - } - } - }); -}); - -}, -'url:dijit/layout/templates/ScrollingTabController.html':"<div class=\"dijitTabListContainer-${tabPosition}\" style=\"visibility:hidden\">\n\t<div data-dojo-type=\"dijit.layout._ScrollingTabControllerMenuButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_menuBtn\"\n\t\t\tdata-dojo-props=\"containerId: '${containerId}', iconClass: 'dijitTabStripMenuIcon',\n\t\t\t\t\tdropDownPosition: ['below-alt', 'above-alt']\"\n\t\t\tdata-dojo-attach-point=\"_menuBtn\" showLabel=\"false\" title=\"\">▼</div>\n\t<div data-dojo-type=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_leftBtn\"\n\t\t\tdata-dojo-props=\"iconClass:'dijitTabStripSlideLeftIcon', showLabel:false, title:''\"\n\t\t\tdata-dojo-attach-point=\"_leftBtn\" data-dojo-attach-event=\"onClick: doSlideLeft\">◀</div>\n\t<div data-dojo-type=\"dijit.layout._ScrollingTabControllerButton\"\n\t\t\tclass=\"tabStripButton-${tabPosition}\"\n\t\t\tid=\"${id}_rightBtn\"\n\t\t\tdata-dojo-props=\"iconClass:'dijitTabStripSlideRightIcon', showLabel:false, title:''\"\n\t\t\tdata-dojo-attach-point=\"_rightBtn\" data-dojo-attach-event=\"onClick: doSlideRight\">▶</div>\n\t<div class='dijitTabListWrapper' data-dojo-attach-point='tablistWrapper'>\n\t\t<div role='tablist' data-dojo-attach-event='onkeypress:onkeypress'\n\t\t\t\tdata-dojo-attach-point='containerNode' class='nowrapTabStrip'></div>\n\t</div>\n</div>", -'dijit/Dialog':function(){ -require({cache:{ -'url:dijit/templates/Dialog.html':"<div class=\"dijitDialog\" role=\"dialog\" aria-labelledby=\"${id}_title\">\n\t<div data-dojo-attach-point=\"titleBar\" class=\"dijitDialogTitleBar\">\n\t<span data-dojo-attach-point=\"titleNode\" class=\"dijitDialogTitle\" id=\"${id}_title\"></span>\n\t<span data-dojo-attach-point=\"closeButtonNode\" class=\"dijitDialogCloseIcon\" data-dojo-attach-event=\"ondijitclick: onCancel\" title=\"${buttonCancel}\" role=\"button\" tabIndex=\"-1\">\n\t\t<span data-dojo-attach-point=\"closeText\" class=\"closeText\" title=\"${buttonCancel}\">x</span>\n\t</span>\n\t</div>\n\t\t<div data-dojo-attach-point=\"containerNode\" class=\"dijitDialogPaneContent\"></div>\n</div>\n"}}); -define("dijit/Dialog", [ - "require", - "dojo/_base/array", // array.forEach array.indexOf array.map - "dojo/_base/connect", // connect._keypress - "dojo/_base/declare", // declare - "dojo/_base/Deferred", // Deferred - "dojo/dom", // dom.isDescendant - "dojo/dom-class", // domClass.add domClass.contains - "dojo/dom-geometry", // domGeometry.position - "dojo/dom-style", // domStyle.set - "dojo/_base/event", // event.stop - "dojo/_base/fx", // fx.fadeIn fx.fadeOut - "dojo/i18n", // i18n.getLocalization - "dojo/_base/kernel", // kernel.isAsync - "dojo/keys", - "dojo/_base/lang", // lang.mixin lang.hitch - "dojo/on", - "dojo/ready", - "dojo/_base/sniff", // has("ie") has("opera") - "dojo/_base/window", // win.body - "dojo/window", // winUtils.getBox - "dojo/dnd/Moveable", // Moveable - "dojo/dnd/TimedMoveable", // TimedMoveable - "./focus", - "./_base/manager", // manager.defaultDuration - "./_Widget", - "./_TemplatedMixin", - "./_CssStateMixin", - "./form/_FormMixin", - "./_DialogMixin", - "./DialogUnderlay", - "./layout/ContentPane", - "dojo/text!./templates/Dialog.html", - ".", // for back-compat, exporting dijit._underlay (remove in 2.0) - "dojo/i18n!./nls/common" -], function(require, array, connect, declare, Deferred, - dom, domClass, domGeometry, domStyle, event, fx, i18n, kernel, keys, lang, on, ready, has, win, winUtils, - Moveable, TimedMoveable, focus, manager, _Widget, _TemplatedMixin, _CssStateMixin, _FormMixin, _DialogMixin, - DialogUnderlay, ContentPane, template, dijit){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _CssStateMixin = dijit._CssStateMixin; - var _FormMixin = dijit.form._FormMixin; - var _DialogMixin = dijit._DialogMixin; -=====*/ - - - // module: - // dijit/Dialog - // summary: - // A modal dialog Widget - - - /*===== - dijit._underlay = function(kwArgs){ - // summary: - // A shared instance of a `dijit.DialogUnderlay` - // - // description: - // A shared instance of a `dijit.DialogUnderlay` created and - // used by `dijit.Dialog`, though never created until some Dialog - // or subclass thereof is shown. - }; - =====*/ - - var _DialogBase = declare("dijit._DialogBase", [_TemplatedMixin, _FormMixin, _DialogMixin, _CssStateMixin], { - // summary: - // A modal dialog Widget - // - // description: - // Pops up a modal dialog window, blocking access to the screen - // and also graying out the screen Dialog is extended from - // ContentPane so it supports all the same parameters (href, etc.) - // - // example: - // | <div data-dojo-type="dijit.Dialog" data-dojo-props="href: 'test.html'"></div> - // - // example: - // | var foo = new dijit.Dialog({ title: "test dialog", content: "test content" }; - // | dojo.body().appendChild(foo.domNode); - // | foo.startup(); - - templateString: template, - - baseClass: "dijitDialog", - - cssStateNodes: { - closeButtonNode: "dijitDialogCloseIcon" - }, - - // Map widget attributes to DOMNode attributes. - _setTitleAttr: [ - { node: "titleNode", type: "innerHTML" }, - { node: "titleBar", type: "attribute" } - ], - - // open: [readonly] Boolean - // True if Dialog is currently displayed on screen. - open: false, - - // duration: Integer - // The time in milliseconds it takes the dialog to fade in and out - duration: manager.defaultDuration, - - // refocus: Boolean - // A Toggle to modify the default focus behavior of a Dialog, which - // is to re-focus the element which had focus before being opened. - // False will disable refocusing. Default: true - refocus: true, - - // autofocus: Boolean - // A Toggle to modify the default focus behavior of a Dialog, which - // is to focus on the first dialog element after opening the dialog. - // False will disable autofocusing. Default: true - autofocus: true, - - // _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 - // The pointer to which node has focus prior to our dialog. - // Set by `dijit._DialogMixin._getFocusItems`. - _lastFocusItem: null, - - // doLayout: [protected] Boolean - // Don't change this parameter from the default value. - // This ContentPane parameter doesn't make sense for Dialog, since Dialog - // is never a child of a layout container, nor can you specify the size of - // Dialog in order to control the size of an inner widget. - doLayout: false, - - // draggable: Boolean - // Toggles the moveable aspect of the Dialog. If true, Dialog - // can be dragged by it's title. If false it will remain centered - // in the viewport. - draggable: true, - - //aria-describedby: String - // Allows the user to add an aria-describedby attribute onto the dialog. The value should - // be the id of the container element of text that describes the dialog purpose (usually - // the first text in the dialog). - // <div data-dojo-type="dijit.Dialog" aria-describedby="intro" .....> - // <div id="intro">Introductory text</div> - // <div>rest of dialog contents</div> - // </div> - "aria-describedby":"", - - postMixInProperties: function(){ - var _nlsResources = i18n.getLocalization("dijit", "common"); - lang.mixin(this, _nlsResources); - this.inherited(arguments); - }, - - postCreate: function(){ - domStyle.set(this.domNode, { - display: "none", - position:"absolute" - }); - win.body().appendChild(this.domNode); - - this.inherited(arguments); - - this.connect(this, "onExecute", "hide"); - this.connect(this, "onCancel", "hide"); - this._modalconnects = []; - }, - - onLoad: function(){ - // 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 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 && DialogLevelManager.isTop(this)){ - this._getFocusItems(this.domNode); - focus.focus(this._firstFocusItem); - } - this.inherited(arguments); - }, - - _endDrag: function(){ - // summary: - // Called after dragging the Dialog. Saves the position of the dialog in the viewport, - // and also adjust position to be fully within the viewport, so user doesn't lose access to handle - var nodePosition = domGeometry.position(this.domNode), - viewport = winUtils.getBox(); - nodePosition.y = Math.min(Math.max(nodePosition.y, 0), (viewport.h - nodePosition.h)); - nodePosition.x = Math.min(Math.max(nodePosition.x, 0), (viewport.w - nodePosition.w)); - this._relativePosition = nodePosition; - this._position(); - }, - - _setup: function(){ - // summary: - // Stuff we need to do before showing the Dialog for the first - // time (but we defer it until right beforehand, for - // performance reasons). - // tags: - // private - - var node = this.domNode; - - if(this.titleBar && this.draggable){ - this._moveable = new ((has("ie") == 6) ? TimedMoveable // prevent overload, see #5285 - : Moveable)(node, { handle: this.titleBar }); - this.connect(this._moveable, "onMoveStop", "_endDrag"); - }else{ - domClass.add(node,"dijitDialogFixed"); - } - - this.underlayAttrs = { - dialogId: this.id, - "class": array.map(this["class"].split(/\s/), function(s){ return s+"_underlay"; }).join(" ") - }; - }, - - _size: function(){ - // summary: - // If necessary, shrink dialog contents so dialog fits in viewport - // tags: - // private - - this._checkIfSingleChild(); - - // If we resized the dialog contents earlier, reset them back to original size, so - // that if the user later increases the viewport size, the dialog can display w/out a scrollbar. - // Need to do this before the domGeometry.position(this.domNode) call below. - if(this._singleChild){ - if(this._singleChildOriginalStyle){ - this._singleChild.domNode.style.cssText = this._singleChildOriginalStyle; - } - delete this._singleChildOriginalStyle; - }else{ - domStyle.set(this.containerNode, { - width:"auto", - height:"auto" - }); - } - - var bb = domGeometry.position(this.domNode); - var viewport = winUtils.getBox(); - if(bb.w >= viewport.w || bb.h >= viewport.h){ - // Reduce size of dialog contents so that dialog fits in viewport - - var w = Math.min(bb.w, Math.floor(viewport.w * 0.75)), - h = Math.min(bb.h, Math.floor(viewport.h * 0.75)); - - if(this._singleChild && this._singleChild.resize){ - this._singleChildOriginalStyle = this._singleChild.domNode.style.cssText; - this._singleChild.resize({w: w, h: h}); - }else{ - domStyle.set(this.containerNode, { - width: w + "px", - height: h + "px", - overflow: "auto", - position: "relative" // workaround IE bug moving scrollbar or dragging dialog - }); - } - }else{ - if(this._singleChild && this._singleChild.resize){ - this._singleChild.resize(); - } - } - }, - - _position: function(){ - // summary: - // Position modal dialog in the viewport. If no relative offset - // in the viewport has been determined (by dragging, for instance), - // center the node. Otherwise, use the Dialog's stored relative offset, - // and position the node to top: left: values based on the viewport. - if(!domClass.contains(win.body(), "dojoMove")){ // don't do anything if called during auto-scroll - var node = this.domNode, - viewport = winUtils.getBox(), - p = this._relativePosition, - bb = p ? null : domGeometry.position(node), - l = Math.floor(viewport.l + (p ? p.x : (viewport.w - bb.w) / 2)), - t = Math.floor(viewport.t + (p ? p.y : (viewport.h - bb.h) / 2)) - ; - domStyle.set(node,{ - left: l + "px", - top: t + "px" - }); - } - }, - - _onKey: function(/*Event*/ evt){ - // summary: - // Handles the keyboard events for accessibility reasons - // tags: - // private - - if(evt.charOrCode){ - var node = evt.target; - if(evt.charOrCode === keys.TAB){ - this._getFocusItems(this.domNode); - } - var singleFocusItem = (this._firstFocusItem == this._lastFocusItem); - // see if we are shift-tabbing from first focusable item on dialog - if(node == this._firstFocusItem && evt.shiftKey && evt.charOrCode === keys.TAB){ - if(!singleFocusItem){ - focus.focus(this._lastFocusItem); // send focus to last item in dialog - } - event.stop(evt); - }else if(node == this._lastFocusItem && evt.charOrCode === keys.TAB && !evt.shiftKey){ - if(!singleFocusItem){ - focus.focus(this._firstFocusItem); // send focus to first item in dialog - } - event.stop(evt); - }else{ - // see if the key is for the dialog - while(node){ - if(node == this.domNode || domClass.contains(node, "dijitPopup")){ - if(evt.charOrCode == keys.ESCAPE){ - this.onCancel(); - }else{ - return; // just let it go - } - } - node = node.parentNode; - } - // this key is for the disabled document window - if(evt.charOrCode !== keys.TAB){ // allow tabbing into the dialog for a11y - event.stop(evt); - // opera won't tab to a div - }else if(!has("opera")){ - try{ - this._firstFocusItem.focus(); - }catch(e){ /*squelch*/ } - } - } - } - }, - - 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._fadeOutDeferred){ - this._fadeOutDeferred.cancel(); - } - - this._modalconnects.push(on(window, "scroll", lang.hitch(this, "layout"))); - this._modalconnects.push(on(window, "resize", lang.hitch(this, function(){ - // IE gives spurious resize events and can actually get stuck - // in an infinite loop if we don't ignore them - var viewport = winUtils.getBox(); - if(!this._oldViewport || - viewport.h != this._oldViewport.h || - viewport.w != this._oldViewport.w){ - this.layout(); - this._oldViewport = viewport; - } - }))); - this._modalconnects.push(on(this.domNode, connect._keypress, lang.hitch(this, "_onKey"))); - - domStyle.set(this.domNode, { - opacity:0, - display:"" - }); - - this._set("open", true); - this._onShow(); // lazy load trigger - - this._size(); - this._position(); - - // fade-in Animation object, setup below - var fadeIn; - - this._fadeInDeferred = new Deferred(lang.hitch(this, function(){ - fadeIn.stop(); - delete this._fadeInDeferred; - })); - - fadeIn = fx.fadeIn({ - node: this.domNode, - duration: this.duration, - beforeBegin: lang.hitch(this, function(){ - DialogLevelManager.show(this, this.underlayAttrs); - }), - onEnd: lang.hitch(this, function(){ - if(this.autofocus && 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); - focus.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 - if(!this._alreadyInitialized){ - return; - } - if(this._fadeInDeferred){ - this._fadeInDeferred.cancel(); - } - - // fade-in Animation object, setup below - var fadeOut; - - this._fadeOutDeferred = new Deferred(lang.hitch(this, function(){ - fadeOut.stop(); - delete this._fadeOutDeferred; - })); - // fire onHide when the promise resolves. - this._fadeOutDeferred.then(lang.hitch(this, 'onHide')); - - fadeOut = fx.fadeOut({ - node: this.domNode, - duration: this.duration, - onEnd: lang.hitch(this, function(){ - this.domNode.style.display = "none"; - DialogLevelManager.hide(this); - this._fadeOutDeferred.callback(true); - delete this._fadeOutDeferred; - }) - }).play(); - - if(this._scrollConnected){ - this._scrollConnected = false; - } - var h; - while(h = this._modalconnects.pop()){ - h.remove(); - } - - if(this._relativePosition){ - delete this._relativePosition; - } - this._set("open", false); - - return this._fadeOutDeferred; - }, - - layout: function(){ - // summary: - // Position the Dialog and the underlay - // tags: - // private - if(this.domNode.style.display != "none"){ - if(dijit._underlay){ // avoid race condition during show() - 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(); - } - var h; - while(h = this._modalconnects.pop()){ - h.remove(); - } - - DialogLevelManager.hide(this); - - this.inherited(arguments); - } - }); - - var Dialog = declare("dijit.Dialog", [ContentPane, _DialogBase], {}); - Dialog._DialogBase = _DialogBase; // for monkey patching - - var DialogLevelManager = Dialog._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. - - _beginZIndex: 950, - - 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. - - // Save current focus - ds[ds.length-1].focus = focus.curNode; - - // 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 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 : Dialog._DialogLevelManager._beginZIndex; - if(ds.length == 1){ // first dialog - underlay.show(); - } - domStyle.set(dijit._underlay.domNode, 'zIndex', zIndex - 1); - - // Dialog - domStyle.set(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. - - 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 - domStyle.set(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(pd.dialog && (!focus || !dom.isDescendant(focus, pd.dialog.domNode))){ - pd.dialog._getFocusItems(pd.dialog.domNode); - focus = pd.dialog._firstFocusItem; - } - - if(focus){ - // Refocus the button that spawned the Dialog. This will fail in corner cases including - // page unload on IE, because the dijit/form/Button that launched the Dialog may get destroyed - // before this code runs. (#15058) - try{ - focus.focus(); - }catch(e){} - } - } - }else{ - // Removing a dialog out of order (#9944, #10705). - // Don't need to mess with underlay or z-index or anything. - var idx = array.indexOf(array.map(ds, function(elem){return elem.dialog}), dialog); - if(idx != -1){ - ds.splice(idx, 1); - } - } - }, - - isTop: function(/*dijit._Widget*/ dialog){ - // summary: - // Returns true if specified Dialog is the top in the task - 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) - // } - var ds = Dialog._dialogStack = [ - {dialog: null, focus: null, underlayAttrs: null} // entry for stuff at z-index: 0 - ]; - - // Back compat w/1.6, remove for 2.0 - if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/TooltipDialog"]; - require(requires); // use indirection so modules not rolled into a build - }); - } - - return Dialog; -}); - -}, -'dijit/_base/focus':function(){ -define("dijit/_base/focus", [ - "dojo/_base/array", // array.forEach - "dojo/dom", // dom.isDescendant - "dojo/_base/lang", // lang.isArray - "dojo/topic", // publish - "dojo/_base/window", // win.doc win.doc.selection win.global win.global.getSelection win.withGlobal - "../focus", - ".." // for exporting symbols to dijit -], function(array, dom, lang, topic, win, focus, dijit){ - - // module: - // dijit/_base/focus - // summary: - // Deprecated module to monitor currently focused node and stack of currently focused widgets. - // New code should access dijit/focus directly. - - lang.mixin(dijit, { - // _curFocus: DomNode - // Currently focused item on screen - _curFocus: null, - - // _prevFocus: DomNode - // Previously focused item on screen - _prevFocus: null, - - isCollapsed: function(){ - // summary: - // Returns true if there is no text selected - return dijit.getBookmark().isCollapsed; - }, - - getBookmark: function(){ - // summary: - // Retrieves a bookmark that can be used with moveToBookmark to return to the same range - var bm, rg, tg, sel = win.doc.selection, cf = focus.curNode; - - if(win.global.getSelection){ - //W3C Range API for selections. - sel = win.global.getSelection(); - if(sel){ - if(sel.isCollapsed){ - tg = cf? cf.tagName : ""; - if(tg){ - //Create a fake rangelike item to restore selections. - 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}; //Object. - } - } - 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){ - // If the current focus was a input of some sort and no selection, don't bother saving - // a native bookmark. This is because it causes issues with dialog/page selection restore. - // So, we need to create psuedo bookmarks to work with. - 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 = {}; - - //'IE' way for selections. - try{ - // createRange() throws exception when dojo in iframe - //and nothing selected, see #9632 - 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; // Object - }, - - moveToBookmark: function(/*Object*/ bookmark){ - // summary: - // Moves current selection to a bookmark - // bookmark: - // This should be a returned object from dijit.getBookmark() - - var _doc = win.doc, - mark = bookmark.mark; - if(mark){ - if(win.global.getSelection){ - //W3C Rangi API (FF, WebKit, Opera, etc) - var sel = win.global.getSelection(); - if(sel && sel.removeAllRanges){ - if(mark.pRange){ - var n = mark.node; - n.selectionStart = mark.start; - n.selectionEnd = mark.end; - }else{ - sel.removeAllRanges(); - sel.addRange(mark); - } - }else{ - console.warn("No idea how to restore selection for this browser!"); - } - }else if(_doc.selection && mark){ - //'IE' way. - var rg; - if(mark.pRange){ - rg = mark.range; - }else if(lang.isArray(mark)){ - rg = _doc.body.createControlRange(); - //rg.addElement does not have call/apply method, so can not call it directly - //rg is not available in "range.addElement(item)", so can't use that either - array.forEach(mark, function(n){ - rg.addElement(n); - }); - }else{ - rg = _doc.body.createTextRange(); - rg.moveToBookmark(mark); - } - rg.select(); - } - } - }, - - getFocus: function(/*Widget?*/ menu, /*Window?*/ openedForWindow){ - // summary: - // Called as getFocus(), this returns an Object showing the current focus - // and selected text. - // - // Called as getFocus(widget), where widget is a (widget representing) a button - // that was just pressed, it returns where focus was before that button - // was pressed. (Pressing the button may have either shifted focus to the button, - // or removed focus altogether.) In this case the selected text is not returned, - // since it can't be accurately determined. - // - // menu: dijit._Widget or {domNode: DomNode} structure - // The button that was just pressed. If focus has disappeared or moved - // to this button, returns the previous focus. In this case the bookmark - // information is already lost, and null is returned. - // - // openedForWindow: - // iframe in which menu was opened - // - // returns: - // A handle to restore focus/selection, to be passed to `dijit.focus` - var node = !focus.curNode || (menu && dom.isDescendant(focus.curNode, menu.domNode)) ? dijit._prevFocus : focus.curNode; - return { - node: node, - bookmark: node && (node == focus.curNode) && win.withGlobal(openedForWindow || win.global, dijit.getBookmark), - openedForWindow: openedForWindow - }; // Object - }, - - // _activeStack: dijit._Widget[] - // List of currently active widgets (focused widget and it's ancestors) - _activeStack: [], - - registerIframe: function(/*DomNode*/ iframe){ - // summary: - // Registers listeners on the specified iframe so that any click - // or focus event on that iframe (or anything in it) is reported - // as a focus/click event on the <iframe> itself. - // description: - // Currently only used by editor. - // returns: - // Handle to pass to unregisterIframe() - return focus.registerIframe(iframe); - }, - - unregisterIframe: function(/*Object*/ handle){ - // summary: - // Unregisters listeners on the specified iframe created by registerIframe. - // After calling be sure to delete or null out the handle itself. - // handle: - // Handle returned by registerIframe() - - handle && handle.remove(); - }, - - registerWin: function(/*Window?*/targetWindow, /*DomNode?*/ effectiveNode){ - // summary: - // Registers listeners on the specified window (either the main - // window or an iframe's window) to detect when the user has clicked somewhere - // or focused somewhere. - // description: - // Users should call registerIframe() instead of this method. - // targetWindow: - // If specified this is the window associated with the iframe, - // i.e. iframe.contentWindow. - // effectiveNode: - // If specified, report any focus events inside targetWindow as - // an event on effectiveNode, rather than on evt.target. - // returns: - // Handle to pass to unregisterWin() - - return focus.registerWin(targetWindow, effectiveNode); - }, - - unregisterWin: function(/*Handle*/ handle){ - // summary: - // Unregisters listeners on the specified window (either the main - // window or an iframe's window) according to handle returned from registerWin(). - // After calling be sure to delete or null out the handle itself. - - handle && handle.remove(); - } - }); - - // Override focus singleton's focus function so that dijit.focus() - // has backwards compatible behavior of restoring selection (although - // probably no one is using that). - focus.focus = function(/*Object || DomNode */ handle){ - // summary: - // Sets the focused node and the selection according to argument. - // To set focus to an iframe's content, pass in the iframe itself. - // handle: - // object returned by get(), or a DomNode - - if(!handle){ return; } - - var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object - bookmark = handle.bookmark, - openedForWindow = handle.openedForWindow, - collapsed = bookmark ? bookmark.isCollapsed : false; - - // Set the focus - // Note that for iframe's we need to use the <iframe> to follow the parentNode chain, - // but we need to set focus to iframe.contentWindow - if(node){ - var focusNode = (node.tagName.toLowerCase() == "iframe") ? node.contentWindow : node; - if(focusNode && focusNode.focus){ - try{ - // Gecko throws sometimes if setting focus is impossible, - // node not displayed or something like that - focusNode.focus(); - }catch(e){/*quiet*/} - } - focus._onFocusNode(node); - } - - // set the selection - // do not need to restore if current selection is not empty - // (use keyboard to select a menu item) or if previous selection was collapsed - // as it may cause focus shift (Esp in IE). - if(bookmark && win.withGlobal(openedForWindow || win.global, dijit.isCollapsed) && !collapsed){ - if(openedForWindow){ - openedForWindow.focus(); - } - try{ - win.withGlobal(openedForWindow || win.global, dijit.moveToBookmark, null, [bookmark]); - }catch(e2){ - /*squelch IE internal error, see http://trac.dojotoolkit.org/ticket/1984 */ - } - } - }; - - // For back compatibility, monitor changes to focused node and active widget stack, - // publishing events and copying changes from focus manager variables into dijit (top level) variables - focus.watch("curNode", function(name, oldVal, newVal){ - dijit._curFocus = newVal; - dijit._prevFocus = oldVal; - if(newVal){ - topic.publish("focusNode", newVal); // publish - } - }); - focus.watch("activeStack", function(name, oldVal, newVal){ - dijit._activeStack = newVal; - }); - - focus.on("widget-blur", function(widget, by){ - topic.publish("widgetBlur", widget, by); // publish - }); - focus.on("widget-focus", function(widget, by){ - topic.publish("widgetFocus", widget, by); // publish - }); - - return dijit; -}); - -}, -'dijit/tree/dndSource':function(){ -define("dijit/tree/dndSource", [ - "dojo/_base/array", // array.forEach array.indexOf array.map - "dojo/_base/connect", // isCopyKey - "dojo/_base/declare", // declare - "dojo/dom-class", // domClass.add - "dojo/dom-geometry", // domGeometry.position - "dojo/_base/lang", // lang.mixin lang.hitch - "dojo/on", // subscribe - "dojo/touch", - "dojo/topic", - "dojo/dnd/Manager", // DNDManager.manager - "./_dndSelector" -], function(array, connect, declare, domClass, domGeometry, lang, on, touch, topic, DNDManager, _dndSelector){ - -// module: -// dijit/tree/dndSource -// summary: -// Handles drag and drop operations (as a source or a target) for `dijit.Tree` - -/*===== -dijit.tree.__SourceArgs = function(){ - // summary: - // A dict of parameters for Tree source configuration. - // isSource: Boolean? - // Can be used as a DnD source. Defaults to true. - // accept: String[] - // List of accepted types (text strings) for a target; defaults to - // ["text", "treeNode"] - // copyOnly: Boolean? - // Copy items, if true, use a state of Ctrl key otherwise, - // dragThreshold: Number - // The move delay in pixels before detecting a drag; 0 by default - // betweenThreshold: Integer - // Distance from upper/lower edge of node to allow drop to reorder nodes - this.isSource = isSource; - this.accept = accept; - this.autoSync = autoSync; - this.copyOnly = copyOnly; - this.dragThreshold = dragThreshold; - this.betweenThreshold = betweenThreshold; -} -=====*/ - -return declare("dijit.tree.dndSource", _dndSelector, { - // summary: - // Handles drag and drop operations (as a source or a target) for `dijit.Tree` - - // isSource: [private] Boolean - // Can be used as a DnD source. - isSource: true, - - // accept: String[] - // List of accepted types (text strings) for the Tree; defaults to - // ["text"] - accept: ["text", "treeNode"], - - // copyOnly: [private] Boolean - // Copy items, if true, use a state of Ctrl key otherwise - copyOnly: false, - - // dragThreshold: Number - // The move delay in pixels before detecting a drag; 5 by default - dragThreshold: 5, - - // betweenThreshold: Integer - // Distance from upper/lower edge of node to allow drop to reorder nodes - betweenThreshold: 0, - - constructor: function(/*dijit.Tree*/ tree, /*dijit.tree.__SourceArgs*/ params){ - // summary: - // a constructor of the Tree DnD Source - // tags: - // private - if(!params){ params = {}; } - lang.mixin(this, params); - this.isSource = typeof params.isSource == "undefined" ? true : params.isSource; - var type = params.accept instanceof Array ? params.accept : ["text", "treeNode"]; - this.accept = null; - if(type.length){ - this.accept = {}; - for(var i = 0; i < type.length; ++i){ - this.accept[type[i]] = 1; - } - } - - // class-specific variables - this.isDragging = false; - this.mouseDown = false; - this.targetAnchor = null; // DOMNode corresponding to the currently moused over TreeNode - this.targetBox = null; // coordinates of this.targetAnchor - this.dropPosition = ""; // whether mouse is over/after/before this.targetAnchor - this._lastX = 0; - this._lastY = 0; - - // states - this.sourceState = ""; - if(this.isSource){ - domClass.add(this.node, "dojoDndSource"); - } - this.targetState = ""; - if(this.accept){ - domClass.add(this.node, "dojoDndTarget"); - } - - // set up events - this.topics = [ - topic.subscribe("/dnd/source/over", lang.hitch(this, "onDndSourceOver")), - topic.subscribe("/dnd/start", lang.hitch(this, "onDndStart")), - topic.subscribe("/dnd/drop", lang.hitch(this, "onDndDrop")), - topic.subscribe("/dnd/cancel", lang.hitch(this, "onDndCancel")) - ]; - }, - - // methods - checkAcceptance: function(/*===== source, nodes =====*/){ - // summary: - // Checks if the target 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 - }, - - copyState: function(keyPressed){ - // summary: - // Returns true, if we need to copy items, false to move. - // It is separated to be overwritten dynamically, if needed. - // keyPressed: Boolean - // The "copy" control key was pressed - // tags: - // protected - return this.copyOnly || keyPressed; // Boolean - }, - destroy: function(){ - // summary: - // Prepares the object to be garbage-collected. - this.inherited(arguments); - var h; - while(h = this.topics.pop()){ h.remove(); } - this.targetAnchor = null; - }, - - _onDragMouse: function(e){ - // summary: - // Helper method for processing onmousemove/onmouseover events while drag is in progress. - // Keeps track of current drop target. - - var m = DNDManager.manager(), - 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 - // (i.e., to become a child of) the target node - var newDropPosition = "Over"; - 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 = domGeometry.position(newTarget.rowNode, true); - } - if((e.pageY - this.targetBox.y) <= this.betweenThreshold){ - newDropPosition = "Before"; - }else if((e.pageY - this.targetBox.y) >= (this.targetBox.h - this.betweenThreshold)){ - newDropPosition = "After"; - } - } - - if(newTarget != oldTarget || newDropPosition != oldDropPosition){ - if(oldTarget){ - this._removeItemClass(oldTarget.rowNode, oldDropPosition); - } - if(newTarget){ - 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(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{ - // Guard against dropping onto yourself (TODO: guard against dropping onto your descendant, #7140) - var model = this.tree.model, - sameId = false; - if(m.source == this){ - for(var dragId in this.selection){ - var dragNode = this.selection[dragId]; - if(dragNode.item === newTarget.item){ - sameId = true; - break; - } - } - } - if(sameId){ - m.canDrop(false); - }else if(this.checkItemAcceptance(newTarget.rowNode, m.source, newDropPosition.toLowerCase()) - && !this._isParentChildDrop(m.source, newTarget.rowNode)){ - m.canDrop(true); - }else{ - m.canDrop(false); - } - } - - this.targetAnchor = newTarget; - this.dropPosition = newDropPosition; - } - }, - - onMouseMove: function(e){ - // summary: - // Called for any onmousemove/ontouchmove events over the Tree - // e: Event - // onmousemouse/ontouchmove event - // tags: - // private - if(this.isDragging && this.targetState == "Disabled"){ return; } - this.inherited(arguments); - var m = DNDManager.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 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 = array.map(nodes, function(n){return n.domNode}); - m.startDrag(this, nodes, this.copyState(connect.isCopyKey(e))); - } - } - } - }, - - onMouseDown: function(e){ - // summary: - // Event processor for onmousedown/ontouchstart - // e: Event - // onmousedown/ontouchend event - // tags: - // private - this.mouseDown = true; - this.mouseButton = e.button; - this._lastX = e.pageX; - this._lastY = e.pageY; - this.inherited(arguments); - }, - - onMouseUp: function(e){ - // summary: - // Event processor for onmouseup/ontouchend - // e: Event - // onmouseup/ontouchend event - // tags: - // private - if(this.mouseDown){ - this.mouseDown = false; - this.inherited(arguments); - } - }, - - onMouseOut: function(){ - // summary: - // Event processor for when mouse is moved away from a TreeNode - // tags: - // private - this.inherited(arguments); - this._unmarkTargetAnchor(); - }, - - 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; - }, - - // topic event processors - onDndSourceOver: function(source){ - // summary: - // Topic event processor for /dnd/source/over, called when detected a current source. - // source: Object - // The dijit.tree.dndSource / dojo.dnd.Source which has the mouse over it - // tags: - // private - if(this != source){ - this.mouseDown = false; - this._unmarkTargetAnchor(); - }else if(this.isDragging){ - var m = DNDManager.manager(); - m.canDrop(false); - } - }, - onDndStart: function(source, nodes, copy){ - // summary: - // Topic event processor for /dnd/start, called to initiate the DnD operation - // source: Object - // The dijit.tree.dndSource / dojo.dnd.Source which is providing the items - // nodes: DomNode[] - // The list of transferred items, dndTreeNode nodes if dragging from a Tree - // copy: Boolean - // Copy items, if true, move items otherwise - // tags: - // private - - if(this.isSource){ - this._changeState("Source", this == source ? (copy ? "Copied" : "Moved") : ""); - } - var accepted = this.checkAcceptance(source, nodes); - - this._changeState("Target", accepted ? "" : "Disabled"); - - if(this == source){ - DNDManager.manager().overSource(this); - } - - this.isDragging = true; - }, - - 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[] - // target: DomNode - // source: 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 - - // TODO: for 2.0 refactor so itemCreator() is called once per drag node, and - // make signature itemCreator(sourceItem, node, target) (or similar). - - return array.map(nodes, function(node){ - return { - "id": node.id, - "name": node.textContent || node.innerText || "" - }; - }); // Object[] - }, - - onDndDrop: function(source, nodes, copy){ - // summary: - // Topic event processor for /dnd/drop, called to finish the DnD operation. - // description: - // Updates data store items according to where node was dragged from and dropped - // to. The tree will then respond to those data store updates and redraw itself. - // source: Object - // The dijit.tree.dndSource / dojo.dnd.Source which is providing the items - // nodes: DomNode[] - // The list of transferred items, dndTreeNode nodes if dragging from a Tree - // copy: Boolean - // Copy items, if true, move items otherwise - // tags: - // protected - if(this.containerState == "Over"){ - var tree = this.tree, - model = tree.model, - target = this.targetAnchor; - - this.isDragging = false; - - // Compute the new parent item - var newParentItem; - var insertIndex; - newParentItem = (target && target.item) || tree.item; - if(this.dropPosition == "Before" || this.dropPosition == "After"){ - // TODO: if there is no parent item then disallow the drop. - // Actually this should be checked during onMouseMove too, to make the drag icon red. - newParentItem = (target.getParent() && target.getParent().item) || tree.item; - // Compute the insert index for reordering - insertIndex = target.getIndexInParent(); - if(this.dropPosition == "After"){ - insertIndex = target.getIndexInParent() + 1; - } - }else{ - newParentItem = (target && target.item) || tree.item; - } - - // If necessary, use this variable to hold array of hashes to pass to model.newItem() - // (one entry in the array for each dragged node). - var newItemsParams; - - array.forEach(nodes, function(node, idx){ - // dojo.dnd.Item representing the thing being dropped. - // Don't confuse the use of item here (meaning a DnD item) with the - // uses below where item means dojo.data item. - var sourceItem = source.getItem(node.id); - - // Information that's available if the source is another Tree - // (possibly but not necessarily this tree, possibly but not - // necessarily the same model as this Tree) - if(array.indexOf(sourceItem.type, "treeNode") != -1){ - var childTreeNode = sourceItem.data, - childItem = childTreeNode.item, - oldParentItem = childTreeNode.getParent().item; - } - - if(source == this){ - // This is a node from my own tree, and we are moving it, not copying. - // Remove item from old parent's children attribute. - // TODO: dijit.tree.dndSelector should implement deleteSelectedNodes() - // and this code should go there. - - if(typeof insertIndex == "number"){ - if(newParentItem == oldParentItem && childTreeNode.getIndexInParent() < insertIndex){ - insertIndex -= 1; - } - } - model.pasteItem(childItem, oldParentItem, newParentItem, copy, insertIndex); - }else if(model.isItem(childItem)){ - // Item from same model - // (maybe we should only do this branch if the source is a tree?) - model.pasteItem(childItem, oldParentItem, newParentItem, copy, insertIndex); - }else{ - // 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.rowNode, source); - } - - // Create new item in the tree, based on the drag source. - model.newItem(newItemsParams[idx], newParentItem, insertIndex); - } - }, this); - - // Expand the target node (if it's currently collapsed) so the user can see - // where their node was dropped. In particular since that node is still selected. - this.tree._expandNode(target); - } - this.onDndCancel(); - }, - - onDndCancel: function(){ - // summary: - // Topic event processor for /dnd/cancel, called to cancel the DnD operation - // tags: - // private - this._unmarkTargetAnchor(); - this.isDragging = false; - this.mouseDown = false; - delete this.mouseButton; - this._changeState("Source", ""); - this._changeState("Target", ""); - }, - - // When focus moves in/out of the entire Tree - onOverEvent: function(){ - // summary: - // This method is called when mouse is moved over our container (like onmouseenter) - // tags: - // private - this.inherited(arguments); - DNDManager.manager().overSource(this); - }, - onOutEvent: function(){ - // summary: - // This method is called when mouse is moved out of our container (like onmouseleave) - // tags: - // private - this._unmarkTargetAnchor(); - var m = DNDManager.manager(); - if(this.isDragging){ - m.canDrop(false); - } - m.outSource(this); - - this.inherited(arguments); - }, - - _isParentChildDrop: function(source, targetRow){ - // summary: - // Checks whether the dragged items are parent rows in the tree which are being - // dragged into their own children. - // - // source: - // The DragSource object. - // - // targetRow: - // The tree row onto which the dragged nodes are being dropped. - // - // tags: - // private - - // If the dragged object is not coming from the tree this widget belongs to, - // it cannot be invalid. - if(!source.tree || source.tree != this.tree){ - return false; - } - - - var root = source.tree.domNode; - 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 && !ids[node.id]){ - node = node.parentNode; - } - - return node.id && ids[node.id]; - }, - - _unmarkTargetAnchor: function(){ - // summary: - // Removes hover class of the current target anchor - // tags: - // private - if(!this.targetAnchor){ return; } - this._removeItemClass(this.targetAnchor.rowNode, this.dropPosition); - this.targetAnchor = null; - this.targetBox = null; - this.dropPosition = null; - }, - - _markDndStatus: function(copy){ - // summary: - // Changes source's state based on "copy" status - this._changeState("Source", copy ? "Copied" : "Moved"); - } -}); - -}); - -}, -'dijit/a11y':function(){ -define("dijit/a11y", [ - "dojo/_base/array", // array.forEach array.map - "dojo/_base/config", // defaultDuration - "dojo/_base/declare", // declare - "dojo/dom", // dom.byId - "dojo/dom-attr", // domAttr.attr domAttr.has - "dojo/dom-style", // style.style - "dojo/_base/sniff", // has("ie") - "./_base/manager", // manager._isElementShown - "." // for exporting methods to dijit namespace -], function(array, config, declare, dom, domAttr, domStyle, has, manager, dijit){ - - // module: - // dijit/a11y - // summary: - // Accessibility utility functions (keyboard, tab stops, etc.) - - var shown = (dijit._isElementShown = function(/*Element*/ elem){ - var s = domStyle.get(elem); - return (s.visibility != "hidden") - && (s.visibility != "collapsed") - && (s.display != "none") - && (domAttr.get(elem, "type") != "hidden"); - }); - - dijit.hasDefaultTabStop = function(/*Element*/ elem){ - // summary: - // Tests if element is tab-navigable even without an explicit tabIndex setting - - // No explicit tabIndex setting, need to investigate node type - switch(elem.nodeName.toLowerCase()){ - case "a": - // An <a> w/out a tabindex is only navigable if it has an href - return domAttr.has(elem, "href"); - case "area": - case "button": - case "input": - case "object": - case "select": - case "textarea": - // These are navigable by default - return true; - case "iframe": - // If it's an editor <iframe> then it's tab navigable. - var body; - try{ - // non-IE - var contentDocument = elem.contentDocument; - if("designMode" in contentDocument && contentDocument.designMode == "on"){ - return true; - } - 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{ - body = elem.contentWindow.document.body; - }catch(e2){ - return false; - } - } - return body && (body.contentEditable == 'true' || - (body.firstChild && body.firstChild.contentEditable == 'true')); - default: - return elem.contentEditable == 'true'; - } - }; - - var isTabNavigable = (dijit.isTabNavigable = function(/*Element*/ elem){ - // summary: - // Tests if an element is tab-navigable - - // TODO: convert (and rename method) to return effective tabIndex; will save time in _getTabNavigable() - if(domAttr.get(elem, "disabled")){ - return false; - }else if(domAttr.has(elem, "tabIndex")){ - // Explicit tab index setting - return domAttr.get(elem, "tabIndex") >= 0; // boolean - }else{ - // No explicit tabIndex setting, so depends on node type - return dijit.hasDefaultTabStop(elem); - } - }); - - dijit._getTabNavigable = function(/*DOMNode*/ root){ - // summary: - // Finds descendants of the specified root node. - // - // description: - // Finds the following descendants of the specified root node: - // * the first tab-navigable element in document order - // without a tabIndex or with tabIndex="0" - // * the last tab-navigable element in document order - // without a tabIndex or with tabIndex="0" - // * the first element in document order with the lowest - // positive tabIndex value - // * the last element in document order with the highest - // positive tabIndex value - 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){ - for(var child = parent.firstChild; child; child = child.nextSibling){ - // Skip text elements, hidden elements, and also non-HTML elements (those in custom namespaces) in IE, - // since show() invokes getAttribute("type"), which crash on VML nodes in IE. - if(child.nodeType != 1 || (has("ie") && child.scopeName !== "HTML") || !shown(child)){ - continue; - } - - if(isTabNavigable(child)){ - var tabindex = domAttr.get(child, "tabIndex"); - if(!domAttr.has(child, "tabIndex") || tabindex == 0){ - if(!first){ - first = child; - } - last = child; - }else if(tabindex > 0){ - if(!lowest || tabindex < lowestTabindex){ - lowestTabindex = tabindex; - lowest = child; - } - if(!highest || tabindex >= highestTabindex){ - highestTabindex = tabindex; - highest = child; - } - } - var rn = radioName(child); - if(domAttr.get(child, "checked") && rn){ - radioSelected[rn] = child; - } - } - if(child.nodeName.toUpperCase() != 'SELECT'){ - walkTree(child); - } - } - }; - if(shown(root)){ - walkTree(root); - } - 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: - // Finds the descendant of the specified root node - // that is first in the tabbing order - var elems = dijit._getTabNavigable(dom.byId(root)); - return elems.lowest ? elems.lowest : elems.first; // DomNode - }; - - dijit.getLastInTabbingOrder = function(/*String|DOMNode*/ root){ - // summary: - // Finds the descendant of the specified root node - // that is last in the tabbing order - var elems = dijit._getTabNavigable(dom.byId(root)); - return elems.last ? elems.last : elems.highest; // DomNode - }; - - return { - hasDefaultTabStop: dijit.hasDefaultTabStop, - isTabNavigable: dijit.isTabNavigable, - _getTabNavigable: dijit._getTabNavigable, - getFirstInTabbingOrder: dijit.getFirstInTabbingOrder, - getLastInTabbingOrder: dijit.getLastInTabbingOrder - }; -}); - -}, -'dijit/form/_ToggleButtonMixin':function(){ -define("dijit/form/_ToggleButtonMixin", [ - "dojo/_base/declare", // declare - "dojo/dom-attr" // domAttr.set -], function(declare, domAttr){ - -// module: -// dijit/form/_ToggleButtonMixin -// summary: -// A mixin to provide functionality to allow a button that can be in two states (checked or not). - -return declare("dijit.form._ToggleButtonMixin", null, { - // summary: - // A mixin to provide functionality to allow a button that can be in two states (checked or not). - - // checked: Boolean - // Corresponds to the native HTML <input> element's attribute. - // In markup, specified as "checked='checked'" or just "checked". - // True if the button is depressed, or the checkbox is checked, - // or the radio button is selected, etc. - checked: false, - - // aria-pressed for toggle buttons, and aria-checked for checkboxes - _aria_attr: "aria-pressed", - - _onClick: function(/*Event*/ evt){ - var original = this.checked; - this._set('checked', !original); // partially set the toggled value, assuming the toggle will work, so it can be overridden in the onclick handler - var ret = this.inherited(arguments); // the user could reset the value here - this.set('checked', ret ? this.checked : original); // officially set the toggled or user value, or reset it back - return ret; - }, - - _setCheckedAttr: function(/*Boolean*/ value, /*Boolean?*/ priorityChange){ - this._set("checked", value); - domAttr.set(this.focusNode || this.domNode, "checked", value); - (this.focusNode || this.domNode).setAttribute(this._aria_attr, value ? "true" : "false"); // aria values should be strings - this._handleOnChange(value, priorityChange); - }, - - reset: function(){ - // summary: - // Reset the widget's value to what it was at initialization time - - this._hasBeenBlurred = false; - - // set checked state to original setting - this.set('checked', this.params.checked || false); - } -}); - -}); - -}, -'dijit/_Widget':function(){ -define("dijit/_Widget", [ - "dojo/aspect", // aspect.around - "dojo/_base/config", // config.isDebug - "dojo/_base/connect", // connect.connect - "dojo/_base/declare", // declare - "dojo/_base/kernel", // kernel.deprecated - "dojo/_base/lang", // lang.hitch - "dojo/query", - "dojo/ready", - "./registry", // registry.byNode - "./_WidgetBase", - "./_OnDijitClickMixin", - "./_FocusMixin", - "dojo/uacss", // browser sniffing (included for back-compat; subclasses may be using) - "./hccss" // high contrast mode sniffing (included to set CSS classes on <body>, module ret value unused) -], function(aspect, config, connect, declare, kernel, lang, query, ready, - registry, _WidgetBase, _OnDijitClickMixin, _FocusMixin){ - -/*===== - var _WidgetBase = dijit._WidgetBase; - var _OnDijitClickMixin = dijit._OnDijitClickMixin; - var _FocusMixin = dijit._FocusMixin; -=====*/ - - -// module: -// dijit/_Widget -// summary: -// Old base for widgets. New widgets should extend _WidgetBase instead - - -function connectToDomNode(){ - // summary: - // If user connects to a widget method === this function, then they will - // instead actually be connecting the equivalent event on this.domNode -} - -// Trap dojo.connect() calls to connectToDomNode methods, and redirect to _Widget.on() -function aroundAdvice(originalConnect){ - return function(obj, event, scope, method){ - if(obj && typeof event == "string" && obj[event] == connectToDomNode){ - return obj.on(event.substring(2).toLowerCase(), lang.hitch(scope, method)); - } - return originalConnect.apply(connect, arguments); - }; -} -aspect.around(connect, "connect", aroundAdvice); -if(kernel.connect){ - aspect.around(kernel, "connect", aroundAdvice); -} - -var _Widget = declare("dijit._Widget", [_WidgetBase, _OnDijitClickMixin, _FocusMixin], { - // summary: - // Base class for all Dijit widgets. - // - // Extends _WidgetBase, adding support for: - // - declaratively/programatically specifying widget initialization parameters like - // onMouseMove="foo" that call foo when this.domNode gets a mousemove event - // - ondijitclick - // Support new data-dojo-attach-event="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 /////////////////// - - onClick: connectToDomNode, - /*===== - onClick: function(event){ - // summary: - // Connect to this function to receive notifications of mouse click events. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onDblClick: connectToDomNode, - /*===== - onDblClick: function(event){ - // summary: - // Connect to this function to receive notifications of mouse double click events. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - onKeyDown: connectToDomNode, - /*===== - onKeyDown: function(event){ - // summary: - // Connect to this function to receive notifications of keys being pressed down. - // event: - // key Event - // tags: - // callback - }, - =====*/ - onKeyPress: connectToDomNode, - /*===== - onKeyPress: function(event){ - // summary: - // Connect to this function to receive notifications of printable keys being typed. - // event: - // key Event - // tags: - // callback - }, - =====*/ - onKeyUp: connectToDomNode, - /*===== - onKeyUp: function(event){ - // summary: - // Connect to this function to receive notifications of keys being released. - // event: - // key Event - // tags: - // callback - }, - =====*/ - onMouseDown: connectToDomNode, - /*===== - 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: connectToDomNode, - /*===== - 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: connectToDomNode, - /*===== - 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: connectToDomNode, - /*===== - 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: connectToDomNode, - /*===== - 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: connectToDomNode, - /*===== - 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: connectToDomNode, - /*===== - onMouseUp: function(event){ - // summary: - // Connect to this function to receive notifications of when the mouse button is released. - // event: - // mouse Event - // tags: - // callback - }, - =====*/ - - constructor: function(params){ - // extract parameters like onMouseMove that should connect directly to this.domNode - this._toConnect = {}; - for(var name in params){ - if(this[name] === connectToDomNode){ - this._toConnect[name.replace(/^on/, "").toLowerCase()] = params[name]; - delete params[name]; - } - } - }, - - postCreate: function(){ - this.inherited(arguments); - - // perform connection from this.domNode to user specified handlers (ex: onMouseMove) - for(var name in this._toConnect){ - this.on(name, this._toConnect[name]); - } - delete this._toConnect; - }, - - on: function(/*String*/ type, /*Function*/ func){ - if(this[this._onMap(type)] === connectToDomNode){ - // Use connect.connect() rather than on() to get handling for "onmouseenter" on non-IE, etc. - // Also, need to specify context as "this" rather than the default context of the DOMNode - return connect.connect(this.domNode, type.toLowerCase(), this, func); - } - return this.inherited(arguments); - }, - - _setFocusedAttr: function(val){ - // Remove this method in 2.0 (or sooner), just here to set _focused == focused, for back compat - // (but since it's a private variable we aren't required to keep supporting it). - this._focused = val; - this._set("focused", val); - }, - - ////////////////// DEPRECATED METHODS /////////////////// - - setAttribute: function(/*String*/ attr, /*anything*/ value){ - // summary: - // Deprecated. Use set() instead. - // tags: - // deprecated - kernel.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(config.isDebug){ - var alreadyCalledHash = arguments.callee._ach || (arguments.callee._ach = {}), - caller = (arguments.callee.caller || "unknown caller").toString(); - if(!alreadyCalledHash[caller]){ - kernel.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); - } - }, - - getDescendants: function(){ - // summary: - // Returns all the widgets contained by this, i.e., all widgets underneath this.containerNode. - // This method should generally be avoided as it returns widgets declared in templates, which are - // supposed to be internal/hidden, but it's left here for back-compat reasons. - - kernel.deprecated(this.declaredClass+"::getDescendants() is deprecated. Use getChildren() instead.", "", "2.0"); - return this.containerNode ? query('[widgetId]', this.containerNode).map(registry.byNode) : []; // dijit._Widget[] - }, - - ////////////////// 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 - } -}); - -// For back-compat, remove in 2.0. -if(!kernel.isAsync){ - ready(0, function(){ - var requires = ["dijit/_base"]; - require(requires); // use indirection so modules not rolled into a build - }); -} -return _Widget; -}); - -}, -'dojo/touch':function(){ -define("dojo/touch", ["./_base/kernel", "./on", "./has", "./mouse"], function(dojo, on, has, mouse){ -// module: -// dojo/touch - -/*===== - dojo.touch = { - // summary: - // This module provides unified touch event handlers by exporting - // press, move, release and cancel which can also run well on desktop. - // Based on http://dvcs.w3.org/hg/webevents/raw-file/tip/touchevents.html - // - // example: - // 1. Used with dojo.connect() - // | dojo.connect(node, dojo.touch.press, function(e){}); - // | dojo.connect(node, dojo.touch.move, function(e){}); - // | dojo.connect(node, dojo.touch.release, function(e){}); - // | dojo.connect(node, dojo.touch.cancel, function(e){}); - // - // 2. Used with dojo.on - // | define(["dojo/on", "dojo/touch"], function(on, touch){ - // | on(node, touch.press, function(e){}); - // | on(node, touch.move, function(e){}); - // | on(node, touch.release, function(e){}); - // | on(node, touch.cancel, function(e){}); - // - // 3. Used with dojo.touch.* directly - // | dojo.touch.press(node, function(e){}); - // | dojo.touch.move(node, function(e){}); - // | dojo.touch.release(node, function(e){}); - // | dojo.touch.cancel(node, function(e){}); - - press: function(node, listener){ - // summary: - // Register a listener to 'touchstart'|'mousedown' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - }, - move: function(node, listener){ - // summary: - // Register a listener to 'touchmove'|'mousemove' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - }, - release: function(node, listener){ - // summary: - // Register a listener to 'touchend'|'mouseup' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - }, - cancel: function(node, listener){ - // summary: - // Register a listener to 'touchcancel'|'mouseleave' for the given node - // node: Dom - // Target node to listen to - // listener: Function - // Callback function - // returns: - // A handle which will be used to remove the listener by handle.remove() - } - }; -=====*/ - - function _handle(/*String - press | move | release | cancel*/type){ - return function(node, listener){//called by on(), see dojo.on - return on(node, type, listener); - }; - } - var touch = has("touch"); - //device neutral events - dojo.touch.press|move|release|cancel - dojo.touch = { - press: _handle(touch ? "touchstart": "mousedown"), - move: _handle(touch ? "touchmove": "mousemove"), - release: _handle(touch ? "touchend": "mouseup"), - cancel: touch ? _handle("touchcancel") : mouse.leave - }; - return dojo.touch; -}); -}, -'url:dijit/form/templates/Select.html':"<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdata-dojo-attach-point=\"_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\" data-dojo-attach-point=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} data-dojo-attach-point=\"valueNode\" value=\"${value}\" aria-hidden=\"true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdata-dojo-attach-point=\"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", -'dojo/fx':function(){ -define("dojo/fx", [ - "./_base/lang", - "./Evented", - "./_base/kernel", - "./_base/array", - "./_base/connect", - "./_base/fx", - "./dom", - "./dom-style", - "./dom-geometry", - "./ready", - "require" // for context sensitive loading of Toggler -], function(lang, Evented, dojo, arrayUtil, connect, baseFx, dom, domStyle, geom, ready, require) { - - // module: - // dojo/fx - // summary: - // TODOC - - - /*===== - dojo.fx = { - // summary: Effects library on top of Base animations - }; - var coreFx = dojo.fx; - =====*/ - -// For back-compat, remove in 2.0. -if(!dojo.isAsync){ - ready(0, function(){ - var requires = ["./fx/Toggler"]; - require(requires); // use indirection so modules not rolled into a build - }); -} - - var coreFx = dojo.fx = {}; - - var _baseObj = { - _fire: function(evt, args){ - if(this[evt]){ - this[evt].apply(this, args||[]); - } - return this; - } - }; - - var _chain = function(animations){ - this._index = -1; - this._animations = animations||[]; - this._current = this._onAnimateCtx = this._onEndCtx = null; - - this.duration = 0; - arrayUtil.forEach(this._animations, function(a){ - this.duration += a.duration; - if(a.delay){ this.duration += a.delay; } - }, this); - }; - _chain.prototype = new Evented(); - lang.extend(_chain, { - _onAnimate: function(){ - this._fire("onAnimate", arguments); - }, - _onEnd: function(){ - connect.disconnect(this._onAnimateCtx); - connect.disconnect(this._onEndCtx); - this._onAnimateCtx = this._onEndCtx = null; - if(this._index + 1 == this._animations.length){ - this._fire("onEnd"); - }else{ - // switch animations - this._current = this._animations[++this._index]; - this._onAnimateCtx = connect.connect(this._current, "onAnimate", this, "_onAnimate"); - this._onEndCtx = connect.connect(this._current, "onEnd", this, "_onEnd"); - this._current.play(0, true); - } - }, - play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ - if(!this._current){ this._current = this._animations[this._index = 0]; } - if(!gotoStart && this._current.status() == "playing"){ return this; } - var beforeBegin = connect.connect(this._current, "beforeBegin", this, function(){ - this._fire("beforeBegin"); - }), - onBegin = connect.connect(this._current, "onBegin", this, function(arg){ - this._fire("onBegin", arguments); - }), - onPlay = connect.connect(this._current, "onPlay", this, function(arg){ - this._fire("onPlay", arguments); - connect.disconnect(beforeBegin); - connect.disconnect(onBegin); - connect.disconnect(onPlay); - }); - if(this._onAnimateCtx){ - connect.disconnect(this._onAnimateCtx); - } - this._onAnimateCtx = connect.connect(this._current, "onAnimate", this, "_onAnimate"); - if(this._onEndCtx){ - connect.disconnect(this._onEndCtx); - } - this._onEndCtx = connect.connect(this._current, "onEnd", this, "_onEnd"); - this._current.play.apply(this._current, arguments); - return this; - }, - pause: function(){ - if(this._current){ - var e = connect.connect(this._current, "onPause", this, function(arg){ - this._fire("onPause", arguments); - connect.disconnect(e); - }); - this._current.pause(); - } - return this; - }, - gotoPercent: function(/*Decimal*/percent, /*Boolean?*/ andPlay){ - this.pause(); - var offset = this.duration * percent; - this._current = null; - arrayUtil.some(this._animations, function(a){ - if(a.duration <= offset){ - this._current = a; - return true; - } - offset -= a.duration; - return false; - }); - if(this._current){ - this._current.gotoPercent(offset / this._current.duration, andPlay); - } - return this; - }, - stop: function(/*boolean?*/ gotoEnd){ - if(this._current){ - if(gotoEnd){ - for(; this._index + 1 < this._animations.length; ++this._index){ - this._animations[this._index].stop(true); - } - this._current = this._animations[this._index]; - } - var e = connect.connect(this._current, "onStop", this, function(arg){ - this._fire("onStop", arguments); - connect.disconnect(e); - }); - this._current.stop(); - } - return this; - }, - status: function(){ - return this._current ? this._current.status() : "stopped"; - }, - destroy: function(){ - if(this._onAnimateCtx){ connect.disconnect(this._onAnimateCtx); } - if(this._onEndCtx){ connect.disconnect(this._onEndCtx); } - } - }); - lang.extend(_chain, _baseObj); - - coreFx.chain = /*===== dojo.fx.chain = =====*/ function(/*dojo.Animation[]*/ animations){ - // 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, - // not the individual animations within) - // - // example: - // Once `node` is faded out, fade in `otherNode` - // | dojo.fx.chain([ - // | dojo.fadeIn({ node:node }), - // | dojo.fadeOut({ node:otherNode }) - // | ]).play(); - // - return new _chain(animations); // dojo.Animation - }; - - var _combine = function(animations){ - this._animations = animations||[]; - this._connects = []; - this._finished = 0; - - this.duration = 0; - arrayUtil.forEach(animations, function(a){ - var duration = a.duration; - if(a.delay){ duration += a.delay; } - if(this.duration < duration){ this.duration = duration; } - this._connects.push(connect.connect(a, "onEnd", this, "_onEnd")); - }, this); - - this._pseudoAnimation = new baseFx.Animation({curve: [0, 1], duration: this.duration}); - var self = this; - arrayUtil.forEach(["beforeBegin", "onBegin", "onPlay", "onAnimate", "onPause", "onStop", "onEnd"], - function(evt){ - self._connects.push(connect.connect(self._pseudoAnimation, evt, - function(){ self._fire(evt, arguments); } - )); - } - ); - }; - lang.extend(_combine, { - _doAction: function(action, args){ - arrayUtil.forEach(this._animations, function(a){ - a[action].apply(a, args); - }); - return this; - }, - _onEnd: function(){ - if(++this._finished > this._animations.length){ - this._fire("onEnd"); - } - }, - _call: function(action, args){ - var t = this._pseudoAnimation; - t[action].apply(t, args); - }, - play: function(/*int?*/ delay, /*Boolean?*/ gotoStart){ - 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(/*Decimal*/percent, /*Boolean?*/ andPlay){ - var ms = this.duration * percent; - arrayUtil.forEach(this._animations, function(a){ - a.gotoPercent(a.duration < ms ? 1 : (ms / a.duration), andPlay); - }); - this._call("gotoPercent", arguments); - return this; - }, - stop: function(/*boolean?*/ gotoEnd){ - this._doAction("stop", arguments); - this._call("stop", arguments); - return this; - }, - status: function(){ - return this._pseudoAnimation.status(); - }, - destroy: function(){ - arrayUtil.forEach(this._connects, connect.disconnect); - } - }); - lang.extend(_combine, _baseObj); - - coreFx.combine = /*===== dojo.fx.combine = =====*/ function(/*dojo.Animation[]*/ animations){ - // summary: - // Combine a list of `dojo.Animation`s to run in parallel - // - // description: - // Combine an array of `dojo.Animation`s to run in parallel, - // providing a new `dojo.Animation` instance encompasing each - // animation, firing standard animation events. - // - // example: - // Fade out `node` while fading in `otherNode` simultaneously - // | dojo.fx.combine([ - // | dojo.fadeIn({ node:node }), - // | dojo.fadeOut({ node:otherNode }) - // | ]).play(); - // - // example: - // When the longest animation ends, execute a function: - // | var anim = dojo.fx.combine([ - // | dojo.fadeIn({ node: n, duration:700 }), - // | dojo.fadeOut({ node: otherNode, duration: 300 }) - // | ]); - // | dojo.connect(anim, "onEnd", function(){ - // | // overall animation is done. - // | }); - // | anim.play(); // play the animation - // - return new _combine(animations); // dojo.Animation - }; - - coreFx.wipeIn = /*===== dojo.fx.wipeIn = =====*/ function(/*Object*/ args){ - // summary: - // Expand a node to it's natural height. - // - // description: - // Returns an animation that will expand the - // node defined in 'args' object from it's current height to - // it's natural height (with no scrollbar). - // Node must have no margin/border/padding. - // - // args: Object - // A hash-map of standard `dojo.Animation` constructor properties - // (such as easing: node: duration: and so on) - // - // example: - // | dojo.fx.wipeIn({ - // | node:"someId" - // | }).play() - var node = args.node = dom.byId(args.node), s = node.style, o; - - var anim = baseFx.animateProperty(lang.mixin({ - properties: { - height: { - // wrapped in functions so we wait till the last second to query (in case value has changed) - start: function(){ - // start at current [computed] height, but use 1px rather than 0 - // because 0 causes IE to display the whole panel - o = s.overflow; - s.overflow = "hidden"; - if(s.visibility == "hidden" || s.display == "none"){ - s.height = "1px"; - s.display = ""; - s.visibility = ""; - return 1; - }else{ - var height = domStyle.get(node, "height"); - return Math.max(height, 1); - } - }, - end: function(){ - return node.scrollHeight; - } - } - } - }, args)); - - var fini = function(){ - s.height = "auto"; - s.overflow = o; - }; - connect.connect(anim, "onStop", fini); - connect.connect(anim, "onEnd", fini); - - return anim; // dojo.Animation - }; - - coreFx.wipeOut = /*===== dojo.fx.wipeOut = =====*/ function(/*Object*/ args){ - // summary: - // Shrink a node to nothing and hide it. - // - // description: - // Returns an animation that will shrink node defined in "args" - // from it's current height to 1px, and then hide it. - // - // 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() - - var node = args.node = dom.byId(args.node), s = node.style, o; - - var anim = baseFx.animateProperty(lang.mixin({ - properties: { - height: { - end: 1 // 0 causes IE to display the whole panel - } - } - }, args)); - - connect.connect(anim, "beforeBegin", function(){ - o = s.overflow; - s.overflow = "hidden"; - s.display = ""; - }); - var fini = function(){ - s.overflow = o; - s.height = "auto"; - s.display = "none"; - }; - connect.connect(anim, "onStop", fini); - connect.connect(anim, "onEnd", fini); - - return anim; // dojo.Animation - }; - - coreFx.slideTo = /*===== dojo.fx.slideTo = =====*/ function(/*Object*/ args){ - // summary: - // Slide a node to a new top/left position - // - // description: - // Returns an animation that will slide "node" - // defined in args Object from its current position to - // the position defined by (args.left, args.top). - // - // args: Object - // A hash-map of standard `dojo.Animation` constructor properties - // (such as easing: node: duration: and so on). Special args members - // are `top` and `left`, which indicate the new position to slide to. - // - // example: - // | .slideTo({ node: node, left:"40", top:"50", units:"px" }).play() - - var node = args.node = dom.byId(args.node), - top = null, left = null; - - var init = (function(n){ - return function(){ - var cs = domStyle.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 = geom.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 = baseFx.animateProperty(lang.mixin({ - properties: { - top: args.top || 0, - left: args.left || 0 - } - }, args)); - connect.connect(anim, "beforeBegin", anim, init); - - return anim; // dojo.Animation - }; - - return coreFx; -}); - -}, -'dijit/_DialogMixin':function(){ -define("dijit/_DialogMixin", [ - "dojo/_base/declare", // declare - "./a11y" // _getTabNavigable -], function(declare, a11y){ - - // module: - // dijit/_DialogMixin - // summary: - // _DialogMixin provides functions useful to Dialog and TooltipDialog - - return declare("dijit._DialogMixin", null, { - // summary: - // This provides functions useful to Dialog and TooltipDialog - - execute: function(/*Object*/ /*===== formContents =====*/){ - // summary: - // Callback when the user hits the submit button. - // Override this method to handle Dialog execution. - // description: - // After the user has pressed the submit button, the Dialog - // first calls onExecute() to notify the container to hide the - // dialog and restore focus to wherever it used to be. - // - // *Then* this method is called. - // type: - // callback - }, - - onCancel: function(){ - // summary: - // Called when user has pressed the Dialog's cancel button, to notify container. - // description: - // Developer shouldn't override or connect to this method; - // it's a private communication device between the TooltipDialog - // and the thing that opened it (ex: `dijit.form.DropDownButton`) - // type: - // protected - }, - - onExecute: function(){ - // summary: - // Called when user has pressed the dialog's OK button, to notify container. - // description: - // Developer shouldn't override or connect to this method; - // it's a private communication device between the TooltipDialog - // and the thing that opened it (ex: `dijit.form.DropDownButton`) - // type: - // protected - }, - - _onSubmit: function(){ - // summary: - // Callback when user hits submit button - // type: - // protected - this.onExecute(); // notify container that we are about to execute - this.execute(this.get('value')); - }, - - _getFocusItems: function(){ - // summary: - // Finds focusable items in dialog, - // and sets this._firstFocusItem and this._lastFocusItem - // tags: - // protected - - var elems = a11y._getTabNavigable(this.containerNode); - this._firstFocusItem = elems.lowest || elems.first || this.closeButtonNode || this.domNode; - this._lastFocusItem = elems.last || elems.highest || this._firstFocusItem; - } - }); -}); - -}, -'dijit/Tree':function(){ -require({cache:{ -'url:dijit/templates/TreeNode.html':"<div class=\"dijitTreeNode\" role=\"presentation\"\n\t><div data-dojo-attach-point=\"rowNode\" class=\"dijitTreeRow\" role=\"presentation\" data-dojo-attach-event=\"onmouseenter:_onMouseEnter, onmouseleave:_onMouseLeave, onclick:_onClick, ondblclick:_onDblClick\"\n\t\t><img src=\"${_blankGif}\" alt=\"\" data-dojo-attach-point=\"expandoNode\" class=\"dijitTreeExpando\" role=\"presentation\"\n\t\t/><span data-dojo-attach-point=\"expandoNodeText\" class=\"dijitExpandoText\" role=\"presentation\"\n\t\t></span\n\t\t><span data-dojo-attach-point=\"contentNode\"\n\t\t\tclass=\"dijitTreeContent\" role=\"presentation\">\n\t\t\t<img src=\"${_blankGif}\" alt=\"\" data-dojo-attach-point=\"iconNode\" class=\"dijitIcon dijitTreeIcon\" role=\"presentation\"\n\t\t\t/><span data-dojo-attach-point=\"labelNode\" class=\"dijitTreeLabel\" role=\"treeitem\" tabindex=\"-1\" aria-selected=\"false\" data-dojo-attach-event=\"onfocus:_onLabelFocus\"></span>\n\t\t</span\n\t></div>\n\t<div data-dojo-attach-point=\"containerNode\" class=\"dijitTreeContainer\" role=\"presentation\" style=\"display: none;\"></div>\n</div>\n", -'url:dijit/templates/Tree.html':"<div class=\"dijitTree dijitTreeContainer\" role=\"tree\"\n\tdata-dojo-attach-event=\"onkeypress:_onKeyPress\">\n\t<div class=\"dijitInline dijitTreeIndent\" style=\"position: absolute; top: -9999px\" data-dojo-attach-point=\"indentDetector\"></div>\n</div>\n"}}); -define("dijit/Tree", [ - "dojo/_base/array", // array.filter array.forEach array.map - "dojo/_base/connect", // connect.isCopyKey() - "dojo/cookie", // cookie - "dojo/_base/declare", // declare - "dojo/_base/Deferred", // Deferred - "dojo/DeferredList", // DeferredList - "dojo/dom", // dom.isDescendant - "dojo/dom-class", // domClass.add domClass.remove domClass.replace domClass.toggle - "dojo/dom-geometry", // domGeometry.setMarginBox domGeometry.position - "dojo/dom-style",// domStyle.set - "dojo/_base/event", // event.stop - "dojo/fx", // fxUtils.wipeIn fxUtils.wipeOut - "dojo/_base/kernel", // kernel.deprecated - "dojo/keys", // arrows etc. - "dojo/_base/lang", // lang.getObject lang.mixin lang.hitch - "dojo/topic", - "./focus", - "./registry", // registry.getEnclosingWidget(), manager.defaultDuration - "./_base/manager", // manager.getEnclosingWidget(), manager.defaultDuration - "./_Widget", - "./_TemplatedMixin", - "./_Container", - "./_Contained", - "./_CssStateMixin", - "dojo/text!./templates/TreeNode.html", - "dojo/text!./templates/Tree.html", - "./tree/TreeStoreModel", - "./tree/ForestStoreModel", - "./tree/_dndSelector" -], function(array, connect, cookie, declare, Deferred, DeferredList, - dom, domClass, domGeometry, domStyle, event, fxUtils, kernel, keys, lang, topic, - focus, registry, manager, _Widget, _TemplatedMixin, _Container, _Contained, _CssStateMixin, - treeNodeTemplate, treeTemplate, TreeStoreModel, ForestStoreModel, _dndSelector){ - -/*===== - var _Widget = dijit._Widget; - var _TemplatedMixin = dijit._TemplatedMixin; - var _CssStateMixin = dijit._CssStateMixin; - var _Container = dijit._Container; - var _Contained = dijit._Contained; -=====*/ - -// module: -// dijit/Tree -// summary: -// dijit.Tree widget, and internal dijit._TreeNode widget - - -var TreeNode = declare( - "dijit._TreeNode", - [_Widget, _TemplatedMixin, _Container, _Contained, _CssStateMixin], -{ - // summary: - // Single node within a tree. This class is used internally - // by Tree and should not be accessed directly. - // tags: - // private - - // item: [const] 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: "", - _setLabelAttr: {node: "labelNode", type: "innerText"}, - - // 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: treeNodeTemplate, - - baseClass: "dijitTreeNode", - - // For hover effect for tree node, and focus effect for label - cssStateNodes: { - rowNode: "dijitTreeRow", - labelNode: "dijitTreeLabel" - }, - - // Tooltip is defined in _WidgetBase but we need to handle the mapping to DOM here - _setTooltipAttr: {node: "rowNode", type: "attribute", attribute: "title"}, - - buildRendering: 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){ - this.labelNode.setAttribute("aria-expanded", this.isExpanded); - } - - //aria-selected should be false on all selectable elements. - this.setSelected(false); - }, - - _setIndentAttr: function(indent){ - // 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. - - // Math.max() is to prevent negative padding on hidden root node (when indent == -1) - var pixels = (Math.max(indent, 0) * this.tree._nodePixelIndent) + "px"; - - domStyle.set(this.domNode, "backgroundPosition", pixels + " 0px"); - domStyle.set(this.rowNode, this.isLeftToRight() ? "paddingLeft" : "paddingRight", pixels); - - array.forEach(this.getChildren(), function(child){ - child.set("indent", indent+1); - }); - - this._set("indent", indent); - }, - - markProcessing: function(){ - // summary: - // Visually denote that tree is loading data, etc. - // tags: - // private - this.state = "LOADING"; - this._setExpando(true); - }, - - unmarkProcessing: function(){ - // summary: - // Clear markup from markProcessing() call - // tags: - // private - this._setExpando(false); - }, - - _updateItemClasses: function(item){ - // 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"); - }, - - _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"; - var oldCls = this[clsName]; - - this[clsName] = this.tree["get" + upper + "Class"](item, this.isExpanded); - domClass.replace(this[nodeName], this[clsName] || "", oldCls || ""); - - domStyle.set(this[nodeName], this.tree["get" + upper + "Style"](item, this.isExpanded) || {}); - }, - - _updateLayout: function(){ - // summary: - // Set appropriate CSS classes for this.domNode - // tags: - // private - var parent = this.getParent(); - if(!parent || !parent.rowNode || parent.rowNode.style.display == "none"){ - /* if we are hiding the root node then make every first level child look like a root node */ - domClass.add(this.domNode, "dijitTreeIsRoot"); - }else{ - domClass.toggle(this.domNode, "dijitTreeIsLast", !this.getNextSibling()); - } - }, - - _setExpando: function(/*Boolean*/ processing){ - // 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 - domClass.replace(this.expandoNode, styles[idx], styles); - - // provide a non-image based indicator for images-off mode - this.expandoNodeText.innerHTML = _a11yStates[idx]; - - }, - - expand: function(){ - // 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; - this.labelNode.setAttribute("aria-expanded", "true"); - if(this.tree.showRoot || this !== this.tree.rootNode){ - this.containerNode.setAttribute("role", "group"); - } - domClass.add(this.contentNode,'dijitTreeContentExpanded'); - this._setExpando(); - this._updateItemClasses(this.item); - if(this == this.tree.rootNode){ - this.tree.domNode.setAttribute("aria-expanded", "true"); - } - - var def, - wipeIn = fxUtils.wipeIn({ - node: this.containerNode, duration: manager.defaultDuration, - onEnd: function(){ - def.callback(true); - } - }); - - // Deferred that fires when expand is complete - def = (this._expandDeferred = new Deferred(function(){ - // Canceller - wipeIn.stop(); - })); - - wipeIn.play(); - - return def; // dojo.Deferred - }, - - collapse: function(){ - // 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; - this.labelNode.setAttribute("aria-expanded", "false"); - if(this == this.tree.rootNode){ - this.tree.domNode.setAttribute("aria-expanded", "false"); - } - domClass.remove(this.contentNode,'dijitTreeContentExpanded'); - this._setExpando(); - this._updateItemClasses(this.item); - - if(!this._wipeOut){ - this._wipeOut = fxUtils.wipeOut({ - node: this.containerNode, duration: manager.defaultDuration - }); - } - this._wipeOut.play(); - }, - - // 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 - - - // 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. - array.forEach(this.getChildren(), function(child){ - _Container.prototype.removeChild.call(this, child); - }, this); - - this.state = "LOADED"; - - if(items && items.length > 0){ - this.isExpandable = true; - - // 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 - array.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, - textDir: tree.textDir, - indent: this.indent + 1 - }); - if(existingNodes){ - existingNodes.push(node); - }else{ - tree._itemNodesMap[id] = [node]; - } - } - this.addChild(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(node)){ - defs.push(tree._expandNode(node)); - } - }, this); - - // note that updateLayout() needs to be called on each child after - // _all_ the children exist - array.forEach(this.getChildren(), function(child){ - child._updateLayout(); - }); - }else{ - this.isExpandable=false; - } - - if(this._setExpando){ - // change expando to/from dot or + icon, as appropriate - this._setExpando(false); - } - - // 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 DeferredList(defs); // dojo.Deferred - }, - - 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(/* treeNode */ node){ - this.inherited(arguments); - - var children = this.getChildren(); - if(children.length == 0){ - this.isExpandable = false; - this.collapse(); - } - - array.forEach(children, function(child){ - child._updateLayout(); - }); - }, - - makeExpandable: function(){ - // summary: - // if this node wasn't already showing the expando node, - // turn it into one and call _setExpando() - - // TODO: hmm this isn't called from anywhere, maybe should remove it for 2.0 - - this.isExpandable = true; - this._setExpando(false); - }, - - _onLabelFocus: function(){ - // 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); - }, - - 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). - this.labelNode.setAttribute("aria-selected", selected); - domClass.toggle(this.rowNode, "dijitTreeRowSelected", selected); - }, - - 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). - - 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); - }, - - _onMouseEnter: function(evt){ - // summary: - // Handler for onmouseenter event on a node - // tags: - // private - this.tree._onNodeMouseEnter(this, evt); - }, - - _onMouseLeave: function(evt){ - // summary: - // Handler for onmouseenter event on a node - // tags: - // private - this.tree._onNodeMouseLeave(this, evt); - }, - - _setTextDirAttr: function(textDir){ - if(textDir &&((this.textDir != textDir) || !this._created)){ - this._set("textDir", textDir); - this.applyTextDir(this.labelNode, this.labelNode.innerText || this.labelNode.textContent || ""); - array.forEach(this.getChildren(), function(childNode){ - childNode.set("textDir", textDir); - }, this); - } - } -}); - -var Tree = declare("dijit.Tree", [_Widget, _TemplatedMixin], { - // summary: - // This widget displays hierarchical data from a store. - - // store: [deprecated] String||dojo.data.Store - // Deprecated. Use "model" parameter instead. - // The store to get data to display in the tree. - store: null, - - // 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, - - // 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, - - // 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: "", - - // showRoot: [const] Boolean - // Should the root node be displayed, or hidden? - showRoot: true, - - // 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"], - - // 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: [], - - // 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, - - // selectedItem: [readonly] Item - // Backward compatible singular variant of selectedItems. - selectedItem: null, - - // 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, - - templateString: treeTemplate, - - // 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] Function|String - // Class to use as as the dnd controller. Specifying this class enables DnD. - // Generally you should specify this as dijit.tree.dndSource. - // Setting of dijit.tree._dndSelector handles selection only (no actual DnD). - dndController: _dndSelector, - - // 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, - - // onDndCancel: [protected] Function - // Parameter to dndController, see `dijit.tree.dndSource.onDndCancel`. - // Generally this doesn't need to be set. - onDndCancel: null, - -/*===== - 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, - -/*===== - 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, - - _publish: function(/*String*/ topicName, /*Object*/ message){ - // summary: - // Publish a message for this widget/topic - topic.publish(this.id, lang.mixin({tree: this, event: topicName}, message || {})); // publish - }, - - postMixInProperties: function(){ - this.tree = this; - - 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._itemNodesMap={}; - - if(!this.cookieName && this.id){ - this.cookieName = this.id + "SaveStateCookie"; - } - - this._loadDeferred = new Deferred(); - - this.inherited(arguments); - }, - - postCreate: function(){ - this._initState(); - - // Create glue between store and Tree, if not specified directly by user - if(!this.model){ - this._store2model(); - } - - // monitor changes to items - 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(lang.isString(this.dndController)){ - this.dndController = lang.getObject(this.dndController); - } - var params={}; - for(var i=0; i<this.dndParams.length;i++){ - if(this[this.dndParams[i]]){ - params[this.dndParams[i]] = this[this.dndParams[i]]; - } - } - this.dndController = new this.dndController(this, params); - } - }, - - _store2model: function(){ - // summary: - // User specified a store&query rather than model, so create model from store/query - this._v10Compat = true; - kernel.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 - }; - - // Only override the model's mayHaveChildren() method if the user has specified an override - if(this.params.mayHaveChildren){ - modelParams.mayHaveChildren = lang.hitch(this, "mayHaveChildren"); - } - - if(this.params.getItemChildren){ - modelParams.getChildren = lang.hitch(this, function(item, onComplete, onError){ - this.getItemChildren((this._v10Compat && item === this.model.root) ? null : item, onComplete, onError); - }); - } - this.model = new 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( - lang.hitch(this, function(item){ - var rn = (this.rootNode = this.tree._createTreeNode({ - item: item, - tree: this, - isExpandable: true, - label: this.label || this.getLabel(item), - textDir: this.textDir, - 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 - this.domNode.setAttribute("role", "presentation"); - - rn.labelNode.setAttribute("role", "presentation"); - rn.containerNode.setAttribute("role", "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]; - } - - rn._updateLayout(); // sets "dijitTreeIsRoot" CSS classname - - // load top level children and then fire onLoad() event - this._expandNode(rn).addCallback(lang.hitch(this, function(){ - this._loadDeferred.callback(true); - this.onLoad(); - })); - }), - function(err){ - console.error(this, ": error loading root: ", err); - } - ); - }, - - getNodesByItem: function(/*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 = lang.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(/*Item or id*/ item){ - this.set('selectedItems', [item]); - }, - - _setSelectedItemsAttr: function(/*Items or ids*/ items){ - // summary: - // 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( lang.hitch(this, function(){ - var identities = array.map(items, function(item){ - return (!item || lang.isString(item)) ? item : tree.model.getIdentity(item); - }); - var nodes = []; - array.forEach(identities, function(id){ - nodes = nodes.concat(tree._itemNodesMap[id] || []); - }); - this.set('selectedNodes', nodes); - })); - }, - - _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", []); - } - }, - - _setPathsAttr: function(/*Item[][] || String[][]*/ paths){ - // summary: - // 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; - - // 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 DeferredList(array.map(paths, function(path){ - var d = new Deferred(); - - // normalize path to use identity - path = array.map(path, function(item){ - return lang.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 = array.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); - } - } - - function setNodes(newNodes){ - //After all expansion is finished, set the selection to - //the set of nodes successfully found. - tree.set("selectedNodes", array.map( - array.filter(newNodes,function(x){return x[0];}), - function(x){return x[1];})); - } - }, - - _setSelectedNodeAttr: function(node){ - this.set('selectedNodes', [node]); - }, - _setSelectedNodesAttr: function(nodes){ - this._loadDeferred.addCallback( lang.hitch(this, function(){ - this.dndController.setSelection(nodes); - })); - }, - - - ////////////// Data store related functions ////////////////////// - // These just get passed to the model; they are here for back-compat - - 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 - }, - - getItemChildren: function(/*===== parentItem, 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 - }, - - /////////////////////////////////////////////////////// - // 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 - }, - - 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" - }, - - getLabelClass: function(/*===== item, opened =====*/){ - // summary: - // Overridable function to return CSS class name to display label - // item: dojo.data.Item - // opened: Boolean - // returns: String - // CSS class name - // tags: - // extension - }, - - getRowClass: function(/*===== item, opened =====*/){ - // summary: - // Overridable function to return CSS class name to display row - // item: dojo.data.Item - // opened: Boolean - // returns: String - // CSS class name - // tags: - // extension - }, - - getIconStyle: function(/*===== item, opened =====*/){ - // summary: - // Overridable function to return CSS styles to display icon - // item: dojo.data.Item - // opened: Boolean - // returns: Object - // Object suitable for input to dojo.style() like {backgroundImage: "url(...)"} - // tags: - // extension - }, - - getLabelStyle: function(/*===== item, opened =====*/){ - // summary: - // Overridable function to return CSS styles to display label - // item: dojo.data.Item - // opened: Boolean - // returns: - // Object suitable for input to dojo.style() like {color: "red", background: "green"} - // tags: - // extension - }, - - getRowStyle: function(/*===== item, opened =====*/){ - // summary: - // Overridable function to return CSS styles to display row - // item: dojo.data.Item - // opened: Boolean - // 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 treeNode = registry.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() } ); - event.stop(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; - } - - var map = this._keyHandlerMap; - if(!map){ - // setup table mapping keys to events - map = {}; - map[keys.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[keys.SPACE]= map[" "] = "_onEnterKey"; - map[this.isLeftToRight() ? keys.LEFT_ARROW : keys.RIGHT_ARROW]="_onLeftArrow"; - map[this.isLeftToRight() ? keys.RIGHT_ARROW : keys.LEFT_ARROW]="_onRightArrow"; - map[keys.UP_ARROW]="_onUpArrow"; - map[keys.DOWN_ARROW]="_onDownArrow"; - map[keys.HOME]="_onHomeKey"; - map[keys.END]="_onEndKey"; - this._keyHandlerMap = map; - } - if(this._keyHandlerMap[key]){ - this[this._keyHandlerMap[key]]( { node: treeNode, item: treeNode.item, evt: e } ); - event.stop(e); - } - } - }, - - _onEnterKey: function(/*Object*/ message){ - this._publish("execute", { item: message.item, node: message.node } ); - this.dndController.userSelect(message.node, connect.isCopyKey( message.evt ), message.evt.shiftKey); - this.onClick(message.item, message.node, message.evt); - }, - - _onDownArrow: function(/*Object*/ message){ - // summary: - // down arrow pressed; get next visible node, set focus there - var node = this._getNextNode(message.node); - if(node && node.isTreeNode){ - this.focusNode(node); - } - }, - - _onUpArrow: function(/*Object*/ message){ - // summary: - // 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(node && node.isTreeNode){ - this.focusNode(node); - } - }, - - _onRightArrow: function(/*Object*/ message){ - // summary: - // 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); - } - } - }, - - _onLeftArrow: function(/*Object*/ message){ - // summary: - // 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); - } - } - }, - - _onHomeKey: function(){ - // summary: - // Home key pressed; get first visible node, and set focus there - var node = this._getRootOrFirstNode(); - if(node){ - this.focusNode(node); - } - }, - - _onEndKey: function(){ - // summary: - // End key pressed; go to last visible node. - - var node = this.rootNode; - while(node.isExpanded){ - var c = node.getChildren(); - node = c[c.length - 1]; - } - - if(node && node.isTreeNode){ - this.focusNode(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, - - _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. - - // 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{ - // We are starting a new search - cs = this._curSearch = { - pattern: message.key, - startNode: message.node - }; - } - - // 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); - } - } - }, - - isExpandoNode: function(node, widget){ - // summary: - // check whether a dom node is the expandoNode for a particular TreeNode widget - return dom.isDescendant(node, widget.expandoNode); - }, - _onClick: function(/*TreeNode*/ nodeWidget, /*Event*/ e){ - // summary: - // Translates click events into commands for the controller to process - - 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); - } - event.stop(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); - - 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); - } - event.stop(e); - }, - - _onExpandoClick: function(/*Object*/ message){ - // summary: - // User clicked the +/- icon; expand or collapse my children. - var node = message.node; - - // 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); - - if(node.isExpanded){ - this._collapseNode(node); - }else{ - this._expandNode(node); - } - }, - - onClick: function(/*===== item, node, evt =====*/){ - // summary: - // Callback when a tree node is clicked - // item: dojo.data.Item - // node: TreeNode - // evt: Event - // tags: - // callback - }, - onDblClick: function(/*===== item, node, evt =====*/){ - // summary: - // Callback when a tree node is double-clicked - // item: dojo.data.Item - // node: TreeNode - // evt: Event - // tags: - // callback - }, - onOpen: function(/*===== item, node =====*/){ - // summary: - // Callback when a node is opened - // item: dojo.data.Item - // node: TreeNode - // tags: - // callback - }, - onClose: function(/*===== item, node =====*/){ - // summary: - // Callback when a node is closed - // item: dojo.data.Item - // node: TreeNode - // 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; - } - }, - - _getRootOrFirstNode: function(){ - // summary: - // Get first visible node - return this.showRoot ? this.rootNode : this.rootNode.getChildren()[0]; - }, - - _collapseNode: function(/*_TreeNode*/ node){ - // summary: - // Called when the user has requested to collapse the node - - if(node._expandNodeDeferred){ - delete node._expandNodeDeferred; - } - - if(node.isExpandable){ - if(node.state == "LOADING"){ - // ignore clicks while we are in the process of loading data - return; - } - - node.collapse(); - this.onClose(node.item, node); - - this._state(node, false); - } - }, - - _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 - - if(node._expandNodeDeferred && !recursive){ - // there's already an expand in progress (or completed), so just return - return node._expandNodeDeferred; // dojo.Deferred - } - - var model = this.model, - item = node.item, - _this = this; - - switch(node.state){ - case "UNCHECKED": - // need to load all the children, and then expand - node.markProcessing(); - - // 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 Deferred()); - - // Get the children - model.getChildren( - item, - function(items){ - node.unmarkProcessing(); - - // 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); - - // 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); - - // 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; - - default: // "LOADED" - // data is already loaded; just expand node - def = (node._expandNodeDeferred = node.expand()); - - this.onOpen(node.item, node); - - this._state(node, true); - } - - return def; // dojo.Deferred - }, - - ////////////////// Miscellaneous functions //////////////// - - focusNode: function(/* _tree.Node */ node){ - // summary: - // Focus on the specified node (which must be visible) - // tags: - // protected - - // set focus so that the label will be voiced using screen readers - focus.focus(node.labelNode); - }, - - _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); - } - - // mark that the new node is the currently selected one - node.setFocusable(true); - this.lastFocused = node; - } - }, - - _onNodeMouseEnter: function(/*dijit._Widget*/ /*===== node =====*/){ - // summary: - // Called when mouse is over a node (onmouseenter event), - // this is monitored by the DND code - }, - - _onNodeMouseLeave: function(/*dijit._Widget*/ /*===== node =====*/){ - // summary: - // Called when mouse leaves a node (onmouseleave event), - // this is monitored by the DND code - }, - - //////////////// 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]; - - if(nodes){ - var label = this.getLabel(item), - tooltip = this.getTooltip(item); - array.forEach(nodes, function(node){ - node.set({ - item: item, // theoretically could be new JS Object representing same item - label: label, - tooltip: tooltip - }); - node._updateItemClasses(item); - }); - } - }, - - _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]; - - if(parentNodes){ - array.forEach(parentNodes,function(parentNode){ - parentNode.setChildItems(newChildrenList); - }); - } - }, - - _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(nodes){ - array.forEach(nodes,function(node){ - // Remove node from set of selected nodes (if it's selected) - this.dndController.removeTreeNode(node); - - 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]; - } - }, - - /////////////// Miscellaneous funcs - - _initState: function(){ - // summary: - // Load in which nodes should be opened automatically - this._openedNodes = {}; - if(this.persist && this.cookieName){ - var oreo = cookie(this.cookieName); - if(oreo){ - array.forEach(oreo.split(','), function(item){ - this._openedNodes[item] = true; - }, this); - } - } - }, - _state: function(node, expanded){ - // summary: - // Query or set expanded state for an node - if(!this.persist){ - return false; - } - var path = array.map(node.getTreePath(), function(item){ - return this.model.getIdentity(item); - }, this).join("/"); - if(arguments.length === 1){ - return this._openedNodes[path]; - }else{ - if(expanded){ - this._openedNodes[path] = true; - }else{ - delete this._openedNodes[path]; - } - var ary = []; - for(var id in this._openedNodes){ - ary.push(id); - } - 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 && !lang.isString(this.dndController)){ - this.dndController.destroy(); - } - this.rootNode = null; - this.inherited(arguments); - }, - - 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(); - }, - - resize: function(changeSize){ - if(changeSize){ - domGeometry.setMarginBox(this.domNode, changeSize); - } - - // 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 = domGeometry.position(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); - } - }, - - _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 TreeNode(args); - }, - - _setTextDirAttr: function(textDir){ - if(textDir && this.textDir!= textDir){ - this._set("textDir",textDir); - this.rootNode.set("textDir", textDir); - } - } -}); - -Tree._TreeNode = TreeNode; // for monkey patching - -return Tree; -}); - -}, -'dijit/form/_FormValueWidget':function(){ -define("dijit/form/_FormValueWidget", [ - "dojo/_base/declare", // declare - "dojo/_base/sniff", // has("ie") - "./_FormWidget", - "./_FormValueMixin" -], function(declare, has, _FormWidget, _FormValueMixin){ - -/*===== -var _FormWidget = dijit.form._FormWidget; -var _FormValueMixin = dijit.form._FormValueMixin; -=====*/ - -// module: -// dijit/form/_FormValueWidget -// summary: -// FormValueWidget - - -return declare("dijit.form._FormValueWidget", [_FormWidget, _FormValueMixin], -{ - // summary: - // Base class for widgets corresponding to native HTML elements such as <input> or <select> that have user changeable values. - // description: - // Each _FormValueWidget represents a single input value, and has a (possibly hidden) <input> element, - // to which it serializes it's input value, so that form submission (either normal submission or via FormBind?) - // works as expected. - - // 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. - - _layoutHackIE7: function(){ - // summary: - // Work around table sizing bugs on IE7 by forcing redraw - - if(has("ie") == 7){ // fix IE7 layout bug when the widget is scrolled out of sight - var domNode = this.domNode; - var parent = domNode.parentNode; - var pingNode = domNode.firstChild || domNode; // target node most unlikely to have a custom filter - var origFilter = pingNode.style.filter; // save custom filter, most likely nothing - var _this = this; - while(parent && parent.clientHeight == 0){ // search for parents that haven't rendered yet - (function ping(){ - var disconnectHandle = _this.connect(parent, "onscroll", - function(){ - _this.disconnect(disconnectHandle); // only call once - pingNode.style.filter = (new Date()).getMilliseconds(); // set to anything that's unique - setTimeout(function(){ pingNode.style.filter = origFilter }, 0); // restore custom filter, if any - } - ); - })(); - parent = parent.parentNode; - } - } - } -}); - -}); - -}, -'*now':function(r){r(['dojo/i18n!*preload*dojo/nls/tt-rss-layer*["ar","ca","cs","da","de-de","el","en-gb","en-us","es-es","fi-fi","fr-fr","he-il","hu","it-it","ja-jp","ko-kr","nl-nl","nb","pl","pt-br","pt-pt","ru","sk","sl","sv","th","tr","zh-tw","zh-cn","ROOT"]']);} -}}); -define("dojo/tt-rss-layer", [], 1); diff --git a/lib/dojo/uacss.js.uncompressed.js b/lib/dojo/uacss.js.uncompressed.js deleted file mode 100644 index ccef8672a..000000000 --- a/lib/dojo/uacss.js.uncompressed.js +++ /dev/null @@ -1,66 +0,0 @@ -define("dojo/uacss", ["./dom-geometry", "./_base/lang", "./ready", "./_base/sniff", "./_base/window"], - function(geometry, lang, ready, has, baseWindow){ - // module: - // dojo/uacss - // summary: - // Applies pre-set CSS classes to the top-level HTML node, based on: - // - browser (ex: dj_ie) - // - browser version (ex: dj_ie6) - // - box model (ex: dj_contentBox) - // - text direction (ex: dijitRtl) - // - // In addition, browser, browser version, and box model are - // combined with an RTL flag when browser text is RTL. ex: dj_ie-rtl. - - var - html = baseWindow.doc.documentElement, - ie = has("ie"), - opera = has("opera"), - maj = Math.floor, - ff = has("ff"), - boxModel = geometry.boxModel.replace(/-/,''), - - classes = { - "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": has("quirks"), - "dj_iequirks": ie && has("quirks"), - - // NOTE: Opera not supported by dijit - "dj_opera": opera, - - "dj_khtml": has("khtml"), - - "dj_webkit": has("webkit"), - "dj_safari": has("safari"), - "dj_chrome": has("chrome"), - - "dj_gecko": has("mozilla"), - "dj_ff3": maj(ff) == 3 - }; // no dojo unsupported browsers - - classes["dj_" + boxModel] = true; - - // apply browser, browser version, and box model class names - var classStr = ""; - for(var clz in classes){ - if(classes[clz]){ - classStr += clz + " "; - } - } - html.className = lang.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). - // priority is 90 to run ahead of parser priority of 100 - ready(90, function(){ - if(!geometry.isBodyLtr()){ - var rtlClassStr = "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl "); - html.className = lang.trim(html.className + " " + rtlClassStr + "dj_rtl dijitRtl " + classStr.replace(/ /g, "-rtl ")); - } - }); - return has; -}); diff --git a/lib/dojo/window.js.uncompressed.js b/lib/dojo/window.js.uncompressed.js deleted file mode 100644 index 6b343adf9..000000000 --- a/lib/dojo/window.js.uncompressed.js +++ /dev/null @@ -1,169 +0,0 @@ -define("dojo/window", ["./_base/lang", "./_base/sniff", "./_base/window", "./dom", "./dom-geometry", "./dom-style"], - function(lang, has, baseWindow, dom, geom, style) { - -// module: -// dojo/window -// summary: -// TODOC - -var window = lang.getObject("dojo.window", true); - -/*===== -dojo.window = { - // summary: - // TODO -}; -window = dojo.window; -=====*/ - -window.getBox = function(){ - // summary: - // Returns the dimensions and scroll position of the viewable area of a browser window - - var - scrollRoot = (baseWindow.doc.compatMode == 'BackCompat') ? baseWindow.body() : baseWindow.doc.documentElement, - // get scroll position - scroll = geom.docScroll(), // scrollRoot.scrollTop/Left should work - w, h; - - if(has("touch")){ // if(scrollbars not supported) - var uiWindow = baseWindow.doc.parentWindow || baseWindow.doc.defaultView; // use UI window, not dojo.global window. baseWindow.doc.parentWindow probably not needed since it's not defined for webkit - // on mobile, scrollRoot.clientHeight <= uiWindow.innerHeight <= scrollRoot.offsetHeight, return uiWindow.innerHeight - w = uiWindow.innerWidth || scrollRoot.clientWidth; // || scrollRoot.clientXXX probably never evaluated - h = uiWindow.innerHeight || scrollRoot.clientHeight; - }else{ - // on desktops, scrollRoot.clientHeight <= scrollRoot.offsetHeight <= uiWindow.innerHeight, return scrollRoot.clientHeight - // uiWindow.innerWidth/Height includes the scrollbar and cannot be used - w = scrollRoot.clientWidth; - h = scrollRoot.clientHeight; - } - return { - l: scroll.x, - t: scroll.y, - w: w, - h: h - }; -}; - -window.get = function(doc){ - // summary: - // Get window object associated with document doc - - // In some IE versions (at least 6.0), document.parentWindow does not return a - // reference to the real window object (maybe a copy), so we must fix it as well - // We use IE specific execScript to attach the real window reference to - // document._parentWindow for later use - if(has("ie") && window !== document.parentWindow){ - /* - In IE 6, only the variable "window" can be used to connect events (others - may be only copies). - */ - doc.parentWindow.execScript("document._parentWindow = window;", "Javascript"); - //to prevent memory leak, unset it after use - //another possibility is to add an onUnload handler which seems overkill to me (liucougar) - var win = doc._parentWindow; - doc._parentWindow = null; - return win; // Window - } - - return doc.parentWindow || doc.defaultView; // Window -}; - -window.scrollIntoView = function(/*DomNode*/ node, /*Object?*/ pos){ - // summary: - // Scroll the passed node into view, if it is not already. - - // don't rely on node.scrollIntoView working just because the function is there - - try{ // catch unexpected/unrecreatable errors (#7808) since we can recover using a semi-acceptable native method - node = dom.byId(node); - var doc = node.ownerDocument || baseWindow.doc, - body = doc.body || baseWindow.body(), - html = doc.documentElement || body.parentNode, - isIE = has("ie"), isWK = has("webkit"); - // if an untested browser, then use the native method - if((!(has("mozilla") || isIE || isWK || has("opera")) || node == body || node == html) && (typeof node.scrollIntoView != "undefined")){ - node.scrollIntoView(false); // short-circuit to native if possible - return; - } - var backCompat = doc.compatMode == 'BackCompat', - 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, - rtl = !geom.isBodyLtr(), - nodePos = pos || geom.position(node), - el = node.parentNode, - isFixed = function(el){ - return ((isIE <= 6 || (isIE && backCompat))? false : (style.get(el, 'position').toLowerCase() == "fixed")); - }; - if(isFixed(node)){ return; } // nothing to do - - while(el){ - if(el == body){ el = scrollRoot; } - var elPos = geom.position(el), - fixedPos = isFixed(el); - - if(el == scrollRoot){ - elPos.w = rootWidth; elPos.h = rootHeight; - if(scrollRoot == html && isIE && rtl){ elPos.x += scrollRoot.offsetWidth-elPos.w; } // IE workaround where scrollbar causes negative x - if(elPos.x < 0 || !isIE){ elPos.x = 0; } // IE can have values > 0 - if(elPos.y < 0 || !isIE){ elPos.y = 0; } - }else{ - var pb = geom.getPadBorderExtents(el); - elPos.w -= pb.w; elPos.h -= pb.h; elPos.x += pb.l; elPos.y += pb.t; - var clientSize = el.clientWidth, - scrollBarSize = elPos.w - clientSize; - if(clientSize > 0 && scrollBarSize > 0){ - elPos.w = clientSize; - elPos.x += (rtl && (isIE || el.clientLeft > pb.l/*Chrome*/)) ? scrollBarSize : 0; - } - clientSize = el.clientHeight; - scrollBarSize = elPos.h - clientSize; - if(clientSize > 0 && scrollBarSize > 0){ - elPos.h = clientSize; - } - } - if(fixedPos){ // bounded by viewport, not parents - if(elPos.y < 0){ - elPos.h += elPos.y; elPos.y = 0; - } - if(elPos.x < 0){ - elPos.w += elPos.x; elPos.x = 0; - } - if(elPos.y + elPos.h > rootHeight){ - elPos.h = rootHeight - elPos.y; - } - if(elPos.x + elPos.w > rootWidth){ - elPos.w = rootWidth - elPos.x; - } - } - // calculate overflow in all 4 directions - var l = nodePos.x - elPos.x, // beyond left: < 0 - t = nodePos.y - Math.max(elPos.y, 0), // beyond top: < 0 - r = l + nodePos.w - elPos.w, // beyond right: > 0 - 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 += s; - nodePos.x -= el.scrollLeft; - } - if(bot * t > 0){ - nodePos.y += el.scrollTop; - el.scrollTop += Math[t < 0? "max" : "min"](t, bot); - nodePos.y -= el.scrollTop; - } - el = (el != scrollRoot) && !fixedPos && el.parentNode; - } - }catch(error){ - console.error('scrollIntoView: ' + error); - node.scrollIntoView(false); - } -}; - -return window; -}); -- cgit v1.2.3