dojo_src 1.4.102 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1591) hide show
  1. data/Rakefile +2 -3
  2. data/bin/dojofy +1 -1
  3. data/dojo/dijit/Calendar.js +62 -24
  4. data/dojo/dijit/CheckedMenuItem.js +1 -1
  5. data/dojo/dijit/ColorPalette.js +43 -288
  6. data/dojo/dijit/Dialog.js +25 -24
  7. data/dojo/dijit/DialogUnderlay.js +3 -1
  8. data/dojo/dijit/Editor.js +229 -68
  9. data/dojo/dijit/InlineEditBox.js +72 -35
  10. data/dojo/dijit/LICENSE +1 -1
  11. data/dojo/dijit/Menu.js +75 -76
  12. data/dojo/dijit/MenuBar.js +5 -10
  13. data/dojo/dijit/MenuItem.js +18 -11
  14. data/dojo/dijit/PopupMenuItem.js +1 -0
  15. data/dojo/dijit/ProgressBar.js +1 -1
  16. data/dojo/dijit/TitlePane.js +18 -38
  17. data/dojo/dijit/Toolbar.js +4 -1
  18. data/dojo/dijit/ToolbarSeparator.js +1 -1
  19. data/dojo/dijit/Tooltip.js +7 -14
  20. data/dojo/dijit/Tree.js +116 -64
  21. data/dojo/dijit/_Container.js +5 -11
  22. data/dojo/dijit/_CssStateMixin.js +252 -0
  23. data/dojo/dijit/_DialogMixin.js +3 -1
  24. data/dojo/dijit/_HasDropDown.js +48 -58
  25. data/dojo/dijit/_KeyNavContainer.js +4 -4
  26. data/dojo/dijit/_PaletteMixin.js +313 -0
  27. data/dojo/dijit/_Templated.js +2 -1
  28. data/dojo/dijit/_TimePicker.js +11 -6
  29. data/dojo/dijit/_Widget.js +125 -63
  30. data/dojo/dijit/_base/focus.js +15 -9
  31. data/dojo/dijit/_base/manager.js +210 -183
  32. data/dojo/dijit/_base/place.js +3 -52
  33. data/dojo/dijit/_base/popup.js +101 -89
  34. data/dojo/dijit/_base/scroll.js +4 -91
  35. data/dojo/dijit/_base/sniff.js +3 -66
  36. data/dojo/dijit/_base/typematic.js +31 -27
  37. data/dojo/dijit/_base/window.js +3 -23
  38. data/dojo/dijit/_editor/RichText.js +180 -74
  39. data/dojo/dijit/_editor/_Plugin.js +17 -16
  40. data/dojo/dijit/_editor/html.js +1 -1
  41. data/dojo/dijit/_editor/nls/FontChoice.js +2 -1
  42. data/dojo/dijit/_editor/nls/ar/LinkDialog.js +7 -1
  43. data/dojo/dijit/_editor/nls/ar/commands.js +12 -6
  44. data/dojo/dijit/_editor/nls/ca/LinkDialog.js +8 -3
  45. data/dojo/dijit/_editor/nls/ca/commands.js +4 -0
  46. data/dojo/dijit/_editor/nls/da/LinkDialog.js +7 -1
  47. data/dojo/dijit/_editor/nls/da/commands.js +6 -1
  48. data/dojo/dijit/_editor/nls/el/LinkDialog.js +8 -2
  49. data/dojo/dijit/_editor/nls/el/commands.js +7 -2
  50. data/dojo/dijit/_editor/nls/fi/LinkDialog.js +7 -1
  51. data/dojo/dijit/_editor/nls/fi/commands.js +7 -2
  52. data/dojo/dijit/_editor/nls/he/LinkDialog.js +7 -1
  53. data/dojo/dijit/_editor/nls/he/commands.js +9 -2
  54. data/dojo/dijit/_editor/nls/ja/commands.js +9 -10
  55. data/dojo/dijit/_editor/nls/nb/LinkDialog.js +7 -1
  56. data/dojo/dijit/_editor/nls/nb/commands.js +5 -0
  57. data/dojo/dijit/_editor/nls/nl/LinkDialog.js +7 -1
  58. data/dojo/dijit/_editor/nls/nl/commands.js +5 -0
  59. data/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js +8 -2
  60. data/dojo/dijit/_editor/nls/pt-pt/commands.js +5 -0
  61. data/dojo/dijit/_editor/nls/ro/FontChoice.js +27 -0
  62. data/dojo/dijit/_editor/nls/ro/LinkDialog.js +13 -0
  63. data/dojo/dijit/_editor/nls/ro/commands.js +48 -0
  64. data/dojo/dijit/_editor/nls/sk/LinkDialog.js +9 -4
  65. data/dojo/dijit/_editor/nls/sk/commands.js +4 -0
  66. data/dojo/dijit/_editor/nls/sl/LinkDialog.js +6 -1
  67. data/dojo/dijit/_editor/nls/sl/commands.js +12 -8
  68. data/dojo/dijit/_editor/nls/sv/LinkDialog.js +7 -1
  69. data/dojo/dijit/_editor/nls/sv/commands.js +8 -2
  70. data/dojo/dijit/_editor/nls/th/LinkDialog.js +6 -1
  71. data/dojo/dijit/_editor/nls/th/commands.js +6 -2
  72. data/dojo/dijit/_editor/nls/tr/LinkDialog.js +7 -1
  73. data/dojo/dijit/_editor/nls/tr/commands.js +5 -0
  74. data/dojo/dijit/_editor/nls/zh-tw/LinkDialog.js +1 -1
  75. data/dojo/dijit/_editor/nls/zh/commands.js +3 -3
  76. data/dojo/dijit/_editor/plugins/AlwaysShowToolbar.js +2 -2
  77. data/dojo/dijit/_editor/plugins/EnterKeyHandling.js +85 -4
  78. data/dojo/dijit/_editor/plugins/FontChoice.js +194 -32
  79. data/dojo/dijit/_editor/plugins/FullScreen.js +76 -32
  80. data/dojo/dijit/_editor/plugins/LinkDialog.js +79 -22
  81. data/dojo/dijit/_editor/plugins/NewPage.js +7 -2
  82. data/dojo/dijit/_editor/plugins/Print.js +6 -3
  83. data/dojo/dijit/_editor/plugins/TabIndent.js +2 -2
  84. data/dojo/dijit/_editor/plugins/TextColor.js +75 -23
  85. data/dojo/dijit/_editor/plugins/ToggleDir.js +1 -1
  86. data/dojo/dijit/_editor/plugins/ViewSource.js +53 -28
  87. data/dojo/dijit/_editor/range.js +22 -19
  88. data/dojo/dijit/_editor/selection.js +56 -4
  89. data/dojo/dijit/dijit-all.js +5 -1
  90. data/dojo/dijit/form/Button.js +24 -58
  91. data/dojo/dijit/form/CheckBox.js +27 -19
  92. data/dojo/dijit/form/ComboBox.js +73 -54
  93. data/dojo/dijit/form/CurrencyTextBox.js +8 -5
  94. data/dojo/dijit/form/FilteringSelect.js +14 -6
  95. data/dojo/dijit/form/Form.js +26 -16
  96. data/dojo/dijit/form/HorizontalRuleLabels.js +2 -2
  97. data/dojo/dijit/form/HorizontalSlider.js +12 -1
  98. data/dojo/dijit/form/MultiSelect.js +3 -3
  99. data/dojo/dijit/form/NumberSpinner.js +4 -5
  100. data/dojo/dijit/form/NumberTextBox.js +25 -17
  101. data/dojo/dijit/form/Select.js +24 -18
  102. data/dojo/dijit/form/SimpleTextarea.js +2 -2
  103. data/dojo/dijit/form/TextBox.js +72 -12
  104. data/dojo/dijit/form/Textarea.js +8 -1
  105. data/dojo/dijit/form/TimeTextBox.js +3 -2
  106. data/dojo/dijit/form/ValidationTextBox.js +56 -42
  107. data/dojo/dijit/form/VerticalRuleLabels.js +4 -1
  108. data/dojo/dijit/form/VerticalSlider.js +0 -30
  109. data/dojo/dijit/form/_DateTimeTextBox.js +23 -17
  110. data/dojo/dijit/form/_FormMixin.js +23 -19
  111. data/dojo/dijit/form/_FormSelectWidget.js +3 -3
  112. data/dojo/dijit/form/_FormWidget.js +66 -164
  113. data/dojo/dijit/form/_Spinner.js +18 -37
  114. data/dojo/dijit/form/nls/ro/ComboBox.js +5 -0
  115. data/dojo/dijit/form/nls/ro/Textarea.js +8 -0
  116. data/dojo/dijit/form/nls/ro/validate.js +6 -0
  117. data/dojo/dijit/form/templates/Button.html +15 -16
  118. data/dojo/dijit/form/templates/CheckBox.html +3 -3
  119. data/dojo/dijit/form/templates/ComboBox.html +13 -14
  120. data/dojo/dijit/form/templates/ComboButton.html +13 -10
  121. data/dojo/dijit/form/templates/DropDownButton.html +18 -20
  122. data/dojo/dijit/form/templates/HorizontalSlider.html +7 -7
  123. data/dojo/dijit/form/templates/Select.html +7 -8
  124. data/dojo/dijit/form/templates/Spinner.html +23 -24
  125. data/dojo/dijit/form/templates/TextBox.html +6 -4
  126. data/dojo/dijit/form/templates/ValidationTextBox.html +8 -10
  127. data/dojo/dijit/form/templates/VerticalSlider.html +8 -9
  128. data/dojo/dijit/icons/commonIcons.css +164 -0
  129. data/dojo/dijit/icons/commonIcons_rtl.css +127 -0
  130. data/dojo/dijit/icons/editorIcons.css +78 -0
  131. data/dojo/dijit/icons/editorIcons_rtl.css +23 -0
  132. data/dojo/dijit/icons/images/commonIconsObjActDisabled.png +0 -0
  133. data/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png +0 -0
  134. data/dojo/dijit/icons/images/commonIconsObjActEnabled.png +0 -0
  135. data/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png +0 -0
  136. data/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png +0 -0
  137. data/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png +0 -0
  138. data/dojo/dijit/icons/images/editorIconsDisabled.png +0 -0
  139. data/dojo/dijit/icons/images/editorIconsDisabled_rtl.png +0 -0
  140. data/dojo/dijit/icons/images/editorIconsEnabled.png +0 -0
  141. data/dojo/dijit/icons/images/editorIconsEnabled_rtl.png +0 -0
  142. data/dojo/dijit/icons/images/loadingAnimation_rtl.gif +0 -0
  143. data/dojo/dijit/layout/AccordionContainer.js +214 -104
  144. data/dojo/dijit/layout/BorderContainer.js +50 -38
  145. data/dojo/dijit/layout/ContentPane.js +13 -11
  146. data/dojo/dijit/layout/ScrollingTabController.js +29 -28
  147. data/dojo/dijit/layout/SplitContainer.js +0 -1
  148. data/dojo/dijit/layout/StackContainer.js +15 -22
  149. data/dojo/dijit/layout/StackController.js +15 -18
  150. data/dojo/dijit/layout/TabContainer.js +2 -0
  151. data/dojo/dijit/layout/TabController.js +21 -17
  152. data/dojo/dijit/layout/_LayoutWidget.js +0 -1
  153. data/dojo/dijit/layout/templates/AccordionButton.html +5 -3
  154. data/dojo/dijit/layout/templates/ScrollingTabController.html +13 -8
  155. data/dojo/dijit/layout/templates/_ScrollingTabControllerButton.html +4 -5
  156. data/dojo/dijit/layout/templates/_TabButton.html +10 -9
  157. data/dojo/dijit/nls/ro/common.js +7 -0
  158. data/dojo/dijit/nls/ro/loading.js +5 -0
  159. data/dojo/dijit/robot.js +0 -97
  160. data/dojo/dijit/robotx.js +1 -1
  161. data/dojo/dijit/templates/Calendar.html +6 -6
  162. data/dojo/dijit/templates/CheckedMenuItem.html +3 -4
  163. data/dojo/dijit/templates/ColorPalette.html +4 -3
  164. data/dojo/dijit/templates/Dialog.html +1 -1
  165. data/dojo/dijit/templates/Menu.html +1 -1
  166. data/dojo/dijit/templates/MenuBarItem.html +1 -1
  167. data/dojo/dijit/templates/MenuItem.html +3 -3
  168. data/dojo/dijit/templates/MenuSeparator.html +6 -2
  169. data/dojo/dijit/templates/ProgressBar.html +1 -2
  170. data/dojo/dijit/templates/TimePicker.html +1 -1
  171. data/dojo/dijit/templates/TitlePane.html +8 -6
  172. data/dojo/dijit/templates/TreeNode.html +3 -3
  173. data/dojo/dijit/tests/Tree.html +16 -30
  174. data/dojo/dijit/tests/Tree_with_JRS.html +33 -27
  175. data/dojo/dijit/tests/Widget-placeAt.html +6 -6
  176. data/dojo/dijit/tests/_Container.html +1 -1
  177. data/dojo/dijit/tests/_Templated-widgetsInTemplate.html +2 -2
  178. data/dojo/dijit/tests/_Widget-attr.html +26 -7
  179. data/dojo/dijit/tests/_Widget-connect-performance.html +1 -1
  180. data/dojo/dijit/tests/_Widget-deferredConnect.html +1 -1
  181. data/dojo/dijit/tests/_Widget-lifecycle.html +1 -1
  182. data/dojo/dijit/tests/_Widget-ondijitclick.html +1 -1
  183. data/dojo/dijit/tests/_Widget-subscribe.html +1 -1
  184. data/dojo/dijit/tests/_altCalendar.html +12 -11
  185. data/dojo/dijit/tests/_base/module.js +5 -9
  186. data/dojo/dijit/tests/_base/place.html +2 -1
  187. data/dojo/dijit/tests/_base/robot/FocusManager.html +0 -2
  188. data/dojo/dijit/tests/_base/robot/focus_mouse.html +0 -1
  189. data/dojo/dijit/tests/_base/robot/popup.html +0 -1
  190. data/dojo/dijit/tests/_base/robot/typematic.html +72 -0
  191. data/dojo/dijit/tests/_base/tabindex.html +1 -1
  192. data/dojo/dijit/tests/_base/test_FocusManager.html +3 -2
  193. data/dojo/dijit/tests/_base/test_focusWidget.html +1 -1
  194. data/dojo/dijit/tests/_base/test_typematic.html +10 -3
  195. data/dojo/dijit/tests/_testCommon.js +28 -12
  196. data/dojo/dijit/tests/bidi.html +188 -0
  197. data/dojo/dijit/tests/editor/BackForwardState.html +2 -2
  198. data/dojo/dijit/tests/editor/EnterKeyHandling.html +31 -11
  199. data/dojo/dijit/tests/editor/_Editor.html +5 -4
  200. data/dojo/dijit/tests/editor/nls_8859-2.html +4 -4
  201. data/dojo/dijit/tests/editor/nls_sjis.html +5 -5
  202. data/dojo/dijit/tests/editor/nls_utf8.html +2 -2
  203. data/dojo/dijit/tests/editor/robot/BackForwardState.html +8 -9
  204. data/dojo/dijit/tests/editor/robot/Editor_FontChoice.html +282 -757
  205. data/dojo/dijit/tests/editor/robot/Editor_FullScreen.html +55 -55
  206. data/dojo/dijit/tests/editor/robot/Editor_LinkDialog.html +502 -123
  207. data/dojo/dijit/tests/editor/robot/Editor_NewPage.html +11 -11
  208. data/dojo/dijit/tests/editor/robot/Editor_ViewSource.html +56 -56
  209. data/dojo/dijit/tests/editor/robot/Editor_a11y.html +14 -14
  210. data/dojo/dijit/tests/editor/robot/Editor_misc.html +120 -4
  211. data/dojo/dijit/tests/editor/robot/Editor_mouse.html +4 -4
  212. data/dojo/dijit/tests/editor/robot/EnterKeyHandling.html +128 -16
  213. data/dojo/dijit/tests/editor/test_CustomPlugin.html +4 -4
  214. data/dojo/dijit/tests/editor/test_Editor.html +103 -70
  215. data/dojo/dijit/tests/editor/test_FontChoice.html +19 -5
  216. data/dojo/dijit/tests/editor/test_FullScreen.html +2 -2
  217. data/dojo/dijit/tests/editor/test_LinkDialog.html +2 -2
  218. data/dojo/dijit/tests/editor/test_NewPage.html +2 -2
  219. data/dojo/dijit/tests/editor/test_Print.html +2 -2
  220. data/dojo/dijit/tests/editor/test_TabIndent.html +2 -2
  221. data/dojo/dijit/tests/editor/test_ToggleDir.html +2 -2
  222. data/dojo/dijit/tests/editor/test_ToggleDir_rtl.html +2 -2
  223. data/dojo/dijit/tests/editor/test_ViewSource.html +2 -2
  224. data/dojo/dijit/tests/editor/test_resize.html +1 -1
  225. data/dojo/dijit/tests/form/Form.html +30 -16
  226. data/dojo/dijit/tests/form/FormInvalid.html +4 -4
  227. data/dojo/dijit/tests/form/TextBox_sizes.html +532 -0
  228. data/dojo/dijit/tests/form/TextBox_sizes.js +456 -0
  229. data/dojo/dijit/tests/form/_autoComplete.html +35 -15
  230. data/dojo/dijit/tests/form/module.js +25 -1
  231. data/dojo/dijit/tests/form/robot/Button_a11y.html +27 -14
  232. data/dojo/dijit/tests/form/robot/Button_mouse.html +429 -18
  233. data/dojo/dijit/tests/form/robot/DateTextBox.html +31 -34
  234. data/dojo/dijit/tests/form/robot/Form.html +3 -4
  235. data/dojo/dijit/tests/form/robot/Select.html +410 -0
  236. data/dojo/dijit/tests/form/robot/Slider_a11y.html +27 -28
  237. data/dojo/dijit/tests/form/robot/Slider_mouse.html +29 -29
  238. data/dojo/dijit/tests/form/robot/Spinner_a11y.html +88 -51
  239. data/dojo/dijit/tests/form/robot/Spinner_mouse.html +36 -37
  240. data/dojo/dijit/tests/form/robot/Textarea.html +178 -0
  241. data/dojo/dijit/tests/form/robot/TimeTextBox.html +81 -0
  242. data/dojo/dijit/tests/form/robot/_autoComplete_a11y.html +128 -47
  243. data/dojo/dijit/tests/form/robot/_autoComplete_mouse.html +171 -24
  244. data/dojo/dijit/tests/form/robot/test_validate.html +362 -102
  245. data/dojo/dijit/tests/form/robot/validationMessages.html +470 -0
  246. data/dojo/dijit/tests/form/runTests.html +9 -0
  247. data/dojo/dijit/tests/form/test_Button.html +56 -10
  248. data/dojo/dijit/tests/form/test_CheckBox.html +212 -61
  249. data/dojo/dijit/tests/form/test_ComboBox_destroy.html +2 -2
  250. data/dojo/dijit/tests/form/test_DateTextBox.html +17 -12
  251. data/dojo/dijit/tests/form/test_Form_onsubmit.html +2 -2
  252. data/dojo/dijit/tests/form/test_MultiSelect.html +7 -7
  253. data/dojo/dijit/tests/form/test_Select.html +180 -97
  254. data/dojo/dijit/tests/form/test_SimpleTextarea.html +16 -11
  255. data/dojo/dijit/tests/form/test_Slider.html +4 -4
  256. data/dojo/dijit/tests/form/test_Spinner.html +10 -11
  257. data/dojo/dijit/tests/form/test_Textarea.html +80 -76
  258. data/dojo/dijit/tests/form/test_TimeTextBox.html +2 -2
  259. data/dojo/dijit/tests/form/test_validStatePerformance.html +6 -6
  260. data/dojo/dijit/tests/form/test_validate.html +34 -23
  261. data/dojo/dijit/tests/form/test_validationState.html +8 -8
  262. data/dojo/dijit/tests/general-module.js +1 -0
  263. data/dojo/dijit/tests/helpers.js +2 -2
  264. data/dojo/dijit/tests/i18n/calendar.html +2 -2
  265. data/dojo/dijit/tests/i18n/currency.html +1 -1
  266. data/dojo/dijit/tests/i18n/date.html +1 -1
  267. data/dojo/dijit/tests/i18n/digit.html +1 -1
  268. data/dojo/dijit/tests/i18n/module.js +6 -6
  269. data/dojo/dijit/tests/i18n/number.html +1 -1
  270. data/dojo/dijit/tests/i18n/textbox.html +1 -1
  271. data/dojo/dijit/tests/i18n/time.html +1 -1
  272. data/dojo/dijit/tests/images/copy.gif +0 -0
  273. data/dojo/dijit/tests/images/cut.gif +0 -0
  274. data/dojo/dijit/tests/images/note.gif +0 -0
  275. data/dojo/dijit/tests/images/paste.gif +0 -0
  276. data/dojo/dijit/tests/infrastructure-module.js +7 -7
  277. data/dojo/dijit/tests/layout/AccordionContainer.html +81 -23
  278. data/dojo/dijit/tests/layout/ContentPane.html +40 -40
  279. data/dojo/dijit/tests/layout/ContentPaneLayout.html +6 -6
  280. data/dojo/dijit/tests/layout/TabContainer.html +20 -20
  281. data/dojo/dijit/tests/layout/getResponse.php +1 -1
  282. data/dojo/dijit/tests/layout/module.js +9 -2
  283. data/dojo/dijit/tests/layout/nestedStack.html +1 -1
  284. data/dojo/dijit/tests/layout/robot/AccordionContainer_a11y.html +68 -0
  285. data/dojo/dijit/tests/layout/robot/AccordionContainer_mouse.html +53 -0
  286. data/dojo/dijit/tests/layout/robot/BorderContainer.html +358 -0
  287. data/dojo/dijit/tests/layout/robot/TabContainer_a11y.html +29 -12
  288. data/dojo/dijit/tests/layout/robot/TabContainer_mouse.html +19 -13
  289. data/dojo/dijit/tests/layout/test_AccordionContainer.html +12 -8
  290. data/dojo/dijit/tests/layout/test_AccordionContainerDestroy.html +3 -3
  291. data/dojo/dijit/tests/layout/test_BorderContainer.html +21 -19
  292. data/dojo/dijit/tests/layout/test_BorderContainer_complex.html +2 -2
  293. data/dojo/dijit/tests/layout/test_BorderContainer_experimental.html +2 -2
  294. data/dojo/dijit/tests/layout/test_BorderContainer_full.html +2 -2
  295. data/dojo/dijit/tests/layout/test_BorderContainer_nested.html +2 -2
  296. data/dojo/dijit/tests/layout/test_BorderContainer_prog.html +2 -2
  297. data/dojo/dijit/tests/layout/test_ContentPane.html +7 -7
  298. data/dojo/dijit/tests/layout/test_ContentPane_prog.html +4 -4
  299. data/dojo/dijit/tests/layout/test_Gui.html +2 -2
  300. data/dojo/dijit/tests/layout/test_LayoutContainer.html +2 -2
  301. data/dojo/dijit/tests/layout/test_SplitContainer.html +1 -1
  302. data/dojo/dijit/tests/layout/test_StackContainer.html +6 -6
  303. data/dojo/dijit/tests/layout/test_StackContainer_code.html +2 -2
  304. data/dojo/dijit/tests/layout/test_TabContainer.html +10 -10
  305. data/dojo/dijit/tests/layout/test_TabContainerTitlePane.html +2 -2
  306. data/dojo/dijit/tests/layout/test_TabContainer_noLayout.html +2 -2
  307. data/dojo/dijit/tests/layout/test_TabContainer_prog.html +2 -2
  308. data/dojo/dijit/tests/layout/test_TabContainer_remote.html +2 -2
  309. data/dojo/dijit/tests/layout/test_refreshOnShow.html +2 -2
  310. data/dojo/dijit/tests/robot/Calendar_a11y.html +6 -7
  311. data/dojo/dijit/tests/robot/ColorPalette.html +38 -21
  312. data/dojo/dijit/tests/robot/Dialog_a11y.html +58 -17
  313. data/dojo/dijit/tests/robot/Dialog_mouse.html +0 -1
  314. data/dojo/dijit/tests/robot/InlineEditBox.html +135 -24
  315. data/dojo/dijit/tests/robot/Menu_a11y.html +7 -7
  316. data/dojo/dijit/tests/robot/Menu_mouse.html +2 -11
  317. data/dojo/dijit/tests/robot/TitlePane.html +20 -20
  318. data/dojo/dijit/tests/robot/Toolbar.html +3 -4
  319. data/dojo/dijit/tests/robot/TooltipDialog_a11y.html +233 -110
  320. data/dojo/dijit/tests/robot/TooltipDialog_mouse.html +121 -0
  321. data/dojo/dijit/tests/robot/Tooltip_a11y.html +15 -15
  322. data/dojo/dijit/tests/robot/Tooltip_mouse.html +0 -1
  323. data/dojo/dijit/tests/robot/Tree_a11y.html +74 -1
  324. data/dojo/dijit/tests/robot/Tree_dnd.html +5 -5
  325. data/dojo/dijit/tests/robot/Tree_dnd_multiParent.html +4 -4
  326. data/dojo/dijit/tests/robot/_Widget-deferredConnect.html +0 -1
  327. data/dojo/dijit/tests/robot/_Widget-ondijitclick_a11y.html +0 -1
  328. data/dojo/dijit/tests/robot/_Widget-ondijitclick_mouse.html +0 -1
  329. data/dojo/dijit/tests/test.html +1 -1
  330. data/dojo/dijit/tests/test_Calendar.html +4 -4
  331. data/dojo/dijit/tests/test_ColorPalette.html +3 -3
  332. data/dojo/dijit/tests/test_ColorPalette_quirks.html +5 -0
  333. data/dojo/dijit/tests/test_Declaration.html +2 -2
  334. data/dojo/dijit/tests/test_Dialog.html +65 -4
  335. data/dojo/dijit/tests/test_Dialog_focusDestroy.html +2 -2
  336. data/dojo/dijit/tests/test_InlineEditBox.html +14 -5
  337. data/dojo/dijit/tests/test_Menu.html +10 -8
  338. data/dojo/dijit/tests/test_Menu_iframe.html +1 -1
  339. data/dojo/dijit/tests/test_ProgressBar.html +2 -2
  340. data/dojo/dijit/tests/test_TitlePane.html +18 -18
  341. data/dojo/dijit/tests/test_Toolbar.html +2 -2
  342. data/dojo/dijit/tests/test_Tooltip.html +3 -3
  343. data/dojo/dijit/tests/test_TooltipDialog.html +20 -10
  344. data/dojo/dijit/tests/test_Tree.html +26 -20
  345. data/dojo/dijit/tests/test_Tree_Notification_API_Support.html +2 -2
  346. data/dojo/dijit/tests/test_bgIframe.html +2 -2
  347. data/dojo/dijit/tests/test_instantiate.html +2 -2
  348. data/dojo/dijit/tests/tree/module.js +2 -2
  349. data/dojo/dijit/tests/tree/test_CustomLabel.html +2 -2
  350. data/dojo/dijit/tests/tree/test_Tree_DnD.html +2 -2
  351. data/dojo/dijit/tests/tree/test_Tree_Programmatic.html +2 -2
  352. data/dojo/dijit/tests/tree/test_Tree_v1.html +3 -3
  353. data/dojo/dijit/themes/a11y/colors3x4-rtl.png +0 -0
  354. data/dojo/dijit/themes/a11y/colors3x4.png +0 -0
  355. data/dojo/dijit/themes/a11y/colors7x10-rtl.png +0 -0
  356. data/dojo/dijit/themes/a11y/colors7x10.png +0 -0
  357. data/dojo/dijit/themes/claro/Calendar.css +257 -0
  358. data/dojo/dijit/themes/claro/Calendar_rtl.css +19 -0
  359. data/dojo/dijit/themes/claro/ColorPalette.css +44 -0
  360. data/dojo/dijit/themes/claro/Common.css +79 -0
  361. data/dojo/dijit/themes/claro/Dialog.css +212 -0
  362. data/dojo/dijit/themes/claro/Dialog_rtl.css +10 -0
  363. data/dojo/dijit/themes/claro/Editor.css +56 -0
  364. data/dojo/dijit/themes/claro/Editor_rtl.css +7 -0
  365. data/dojo/dijit/themes/claro/InlineEditBox.css +23 -0
  366. data/dojo/dijit/themes/claro/Menu.css +182 -0
  367. data/dojo/dijit/themes/claro/Menu_rtl.css +9 -0
  368. data/dojo/dijit/themes/claro/ProgressBar.css +53 -0
  369. data/dojo/dijit/themes/claro/TimePicker.css +125 -0
  370. data/dojo/dijit/themes/claro/TimePicker_rtl.css +10 -0
  371. data/dojo/dijit/themes/claro/TitlePane.css +73 -0
  372. data/dojo/dijit/themes/claro/TitlePane_rtl.css +4 -0
  373. data/dojo/dijit/themes/claro/Toolbar.css +170 -0
  374. data/dojo/dijit/themes/claro/Tree.css +122 -0
  375. data/dojo/dijit/themes/claro/claro.css +29 -0
  376. data/dojo/dijit/themes/claro/claro_rtl.css +15 -0
  377. data/dojo/dijit/themes/claro/document.css +109 -0
  378. data/dojo/dijit/themes/claro/form/Button.css +168 -0
  379. data/dojo/dijit/themes/claro/form/Button_rtl.css +22 -0
  380. data/dojo/dijit/themes/claro/form/Checkbox.css +77 -0
  381. data/dojo/dijit/themes/claro/form/Common.css +176 -0
  382. data/dojo/dijit/themes/claro/form/Common_rtl.css +10 -0
  383. data/dojo/dijit/themes/claro/form/NumberSpinner.css +143 -0
  384. data/dojo/dijit/themes/claro/form/RadioButton.css +82 -0
  385. data/dojo/dijit/themes/claro/form/Select.css +124 -0
  386. data/dojo/dijit/themes/claro/form/Select_rtl.css +4 -0
  387. data/dojo/dijit/themes/claro/form/Slider.css +359 -0
  388. data/dojo/dijit/themes/claro/form/Slider_rtl.css +31 -0
  389. data/dojo/dijit/themes/claro/form/images/button.png +0 -0
  390. data/dojo/dijit/themes/claro/form/images/buttonArrows.png +0 -0
  391. data/dojo/dijit/themes/claro/form/images/button_grad_d.png +0 -0
  392. data/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png +0 -0
  393. data/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png +0 -0
  394. data/dojo/dijit/themes/claro/form/images/commonFormArrows.png +0 -0
  395. data/dojo/dijit/themes/claro/form/images/error.png +0 -0
  396. data/dojo/dijit/themes/claro/form/images/formHighlight.png +0 -0
  397. data/dojo/dijit/themes/claro/form/images/shadow.png +0 -0
  398. data/dojo/dijit/themes/claro/form/images/sliderHorizontal.png +0 -0
  399. data/dojo/dijit/themes/claro/form/images/sliderThumbs.png +0 -0
  400. data/dojo/dijit/themes/claro/form/images/sliderVertical.png +0 -0
  401. data/dojo/dijit/themes/claro/form/images/textBox_back.png +0 -0
  402. data/dojo/dijit/themes/claro/images/calendarArrows.png +0 -0
  403. data/dojo/dijit/themes/claro/images/calendarArrows8bit.png +0 -0
  404. data/dojo/dijit/themes/claro/images/calendarContainerImages.png +0 -0
  405. data/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif +0 -0
  406. data/dojo/dijit/themes/claro/images/checkmarkNoBorder.png +0 -0
  407. data/dojo/dijit/themes/claro/images/commonHighlight.png +0 -0
  408. data/dojo/dijit/themes/claro/images/dialogCloseIcon.png +0 -0
  409. data/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png +0 -0
  410. data/dojo/dijit/themes/claro/images/dnd.png +0 -0
  411. data/dojo/dijit/themes/claro/images/loading.gif +0 -0
  412. data/dojo/dijit/themes/claro/images/loadingAnimation.gif +0 -0
  413. data/dojo/dijit/themes/claro/images/menuHighlight.png +0 -0
  414. data/dojo/dijit/themes/claro/images/progressBarAnim.gif +0 -0
  415. data/dojo/dijit/themes/claro/images/progressBarEmpty.png +0 -0
  416. data/dojo/dijit/themes/claro/images/progressBarFull.png +0 -0
  417. data/dojo/dijit/themes/claro/images/spriteArrows.png +0 -0
  418. data/dojo/dijit/themes/claro/images/titlebar.png +0 -0
  419. data/dojo/dijit/themes/claro/images/tooltip.png +0 -0
  420. data/dojo/dijit/themes/claro/images/tooltip8bit.png +0 -0
  421. data/dojo/dijit/themes/claro/images/treeExpandImages.png +0 -0
  422. data/dojo/dijit/themes/claro/images/treeExpandImages8bit.png +0 -0
  423. data/dojo/dijit/themes/claro/images/treeExpand_loading.gif +0 -0
  424. data/dojo/dijit/themes/claro/layout/AccordionContainer.css +108 -0
  425. data/dojo/dijit/themes/claro/layout/BorderContainer.css +134 -0
  426. data/dojo/dijit/themes/claro/layout/ContentPane.css +40 -0
  427. data/dojo/dijit/themes/claro/layout/TabContainer.css +439 -0
  428. data/dojo/dijit/themes/claro/layout/TabContainer_rtl.css +77 -0
  429. data/dojo/dijit/themes/claro/layout/images/accordion.png +0 -0
  430. data/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png +0 -0
  431. data/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png +0 -0
  432. data/dojo/dijit/themes/claro/layout/images/tabBottom.png +0 -0
  433. data/dojo/dijit/themes/claro/layout/images/tabClose.png +0 -0
  434. data/dojo/dijit/themes/claro/layout/images/tabLeft.png +0 -0
  435. data/dojo/dijit/themes/claro/layout/images/tabNested.png +0 -0
  436. data/dojo/dijit/themes/claro/layout/images/tabRight.png +0 -0
  437. data/dojo/dijit/themes/claro/layout/images/tabTop.png +0 -0
  438. data/dojo/dijit/themes/dijit.css +633 -452
  439. data/dojo/dijit/themes/dijit_rtl.css +70 -59
  440. data/dojo/dijit/themes/nihilo/Calendar.css +0 -14
  441. data/dojo/dijit/themes/nihilo/Dialog.css +2 -5
  442. data/dojo/dijit/themes/nihilo/Editor.css +3 -58
  443. data/dojo/dijit/themes/nihilo/Editor_rtl.css +2 -6
  444. data/dojo/dijit/themes/nihilo/TimePicker.css +1 -11
  445. data/dojo/dijit/themes/nihilo/TimePicker_rtl.css +4 -0
  446. data/dojo/dijit/themes/nihilo/TitlePane.css +3 -32
  447. data/dojo/dijit/themes/nihilo/Toolbar.css +2 -2
  448. data/dojo/dijit/themes/nihilo/Tree.css +2 -20
  449. data/dojo/dijit/themes/nihilo/Tree_rtl.css +10 -16
  450. data/dojo/dijit/themes/nihilo/form/Button.css +36 -20
  451. data/dojo/dijit/themes/nihilo/form/Common.css +11 -37
  452. data/dojo/dijit/themes/nihilo/form/Select.css +4 -11
  453. data/dojo/dijit/themes/nihilo/form/Slider.css +0 -8
  454. data/dojo/dijit/themes/nihilo/layout/AccordionContainer.css +2 -4
  455. data/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css +1 -1
  456. data/dojo/dijit/themes/nihilo/layout/TabContainer.css +12 -23
  457. data/dojo/dijit/themes/nihilo/nihilo.css +2 -1
  458. data/dojo/dijit/themes/nihilo/nihilo_rtl.css +3 -2
  459. data/dojo/dijit/themes/soria/Calendar.css +0 -14
  460. data/dojo/dijit/themes/soria/Dialog.css +2 -5
  461. data/dojo/dijit/themes/soria/Editor.css +3 -57
  462. data/dojo/dijit/themes/soria/Editor_rtl.css +2 -7
  463. data/dojo/dijit/themes/soria/TimePicker.css +0 -10
  464. data/dojo/dijit/themes/soria/TimePicker_rtl.css +4 -0
  465. data/dojo/dijit/themes/soria/TitlePane.css +4 -30
  466. data/dojo/dijit/themes/soria/Toolbar.css +2 -2
  467. data/dojo/dijit/themes/soria/Tree.css +3 -20
  468. data/dojo/dijit/themes/soria/Tree_rtl.css +11 -12
  469. data/dojo/dijit/themes/soria/form/Button.css +38 -29
  470. data/dojo/dijit/themes/soria/form/Common.css +10 -36
  471. data/dojo/dijit/themes/soria/form/Select.css +4 -11
  472. data/dojo/dijit/themes/soria/form/Slider.css +0 -8
  473. data/dojo/dijit/themes/soria/layout/AccordionContainer.css +2 -4
  474. data/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css +1 -1
  475. data/dojo/dijit/themes/soria/layout/TabContainer.css +17 -34
  476. data/dojo/dijit/themes/soria/soria.css +2 -2
  477. data/dojo/dijit/themes/soria/soria_rtl.css +3 -2
  478. data/dojo/dijit/themes/themeTester.html +215 -100
  479. data/dojo/dijit/themes/tundra/Calendar.css +9 -20
  480. data/dojo/dijit/themes/tundra/Calendar_rtl.css +2 -2
  481. data/dojo/dijit/themes/tundra/Dialog.css +6 -25
  482. data/dojo/dijit/themes/tundra/Dialog_rtl.css +1 -1
  483. data/dojo/dijit/themes/tundra/Editor.css +5 -58
  484. data/dojo/dijit/themes/tundra/Editor_rtl.css +4 -9
  485. data/dojo/dijit/themes/tundra/Menu.css +2 -2
  486. data/dojo/dijit/themes/tundra/Menu_rtl.css +1 -6
  487. data/dojo/dijit/themes/tundra/TimePicker.css +0 -10
  488. data/dojo/dijit/themes/tundra/TimePicker_rtl.css +4 -0
  489. data/dojo/dijit/themes/tundra/TitlePane.css +4 -38
  490. data/dojo/dijit/themes/tundra/TitlePane_rtl.css +1 -1
  491. data/dojo/dijit/themes/tundra/Toolbar.css +12 -2
  492. data/dojo/dijit/themes/tundra/Tree.css +3 -22
  493. data/dojo/dijit/themes/tundra/Tree_rtl.css +9 -9
  494. data/dojo/dijit/themes/tundra/form/Button.css +35 -59
  495. data/dojo/dijit/themes/tundra/form/Common.css +12 -84
  496. data/dojo/dijit/themes/tundra/form/RadioButton.css +11 -13
  497. data/dojo/dijit/themes/tundra/form/Select.css +15 -22
  498. data/dojo/dijit/themes/tundra/form/Slider.css +0 -7
  499. data/dojo/dijit/themes/tundra/form/Slider_rtl.css +12 -12
  500. data/dojo/dijit/themes/tundra/layout/AccordionContainer.css +2 -4
  501. data/dojo/dijit/themes/tundra/layout/SplitContainer.css +0 -4
  502. data/dojo/dijit/themes/tundra/layout/TabContainer.css +19 -44
  503. data/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css +21 -9
  504. data/dojo/dijit/themes/tundra/tundra.css +2 -1
  505. data/dojo/dijit/themes/tundra/tundra_rtl.css +2 -1
  506. data/dojo/dijit/tree/TreeStoreModel.js +13 -12
  507. data/dojo/dojo/DeferredList.js +66 -78
  508. data/dojo/dojo/LICENSE +1 -1
  509. data/dojo/dojo/NodeList-fx.js +92 -18
  510. data/dojo/dojo/Stateful.js +123 -0
  511. data/dojo/dojo/_base.js +1 -1
  512. data/dojo/dojo/_base/Deferred.js +211 -301
  513. data/dojo/dojo/_base/NodeList.js +28 -5
  514. data/dojo/dojo/_base/_loader/bootstrap.js +5 -16
  515. data/dojo/dojo/_base/_loader/hostenv_browser.js +42 -24
  516. data/dojo/dojo/_base/connect.js +13 -13
  517. data/dojo/dojo/_base/declare.js +81 -17
  518. data/dojo/dojo/_base/fx.js +75 -77
  519. data/dojo/dojo/_base/html.js +20 -10
  520. data/dojo/dojo/_base/json.js +2 -1
  521. data/dojo/dojo/back.js +7 -0
  522. data/dojo/dojo/cache.js +7 -8
  523. data/dojo/dojo/cldr/monetary.js +7 -4
  524. data/dojo/dojo/cldr/nls/ar/gregorian.js +7 -3
  525. data/dojo/dojo/cldr/nls/ar/hebrew.js +12 -16
  526. data/dojo/dojo/cldr/nls/ar/islamic-civil.js +124 -49
  527. data/dojo/dojo/cldr/nls/ar/islamic.js +61 -70
  528. data/dojo/dojo/cldr/nls/buddhist.js +236 -0
  529. data/dojo/dojo/cldr/nls/ca/gregorian.js +152 -148
  530. data/dojo/dojo/cldr/nls/cs/gregorian.js +110 -100
  531. data/dojo/dojo/cldr/nls/cs/number.js +1 -1
  532. data/dojo/dojo/cldr/nls/currency.js +0 -1
  533. data/dojo/dojo/cldr/nls/da/gregorian.js +144 -145
  534. data/dojo/dojo/cldr/nls/de/gregorian.js +22 -24
  535. data/dojo/dojo/cldr/nls/el/gregorian.js +15 -14
  536. data/dojo/dojo/cldr/nls/en-au/gregorian.js +3 -0
  537. data/dojo/dojo/cldr/nls/en-ca/gregorian.js +10 -0
  538. data/dojo/dojo/cldr/nls/en/gregorian.js +12 -10
  539. data/dojo/dojo/cldr/nls/es/gregorian.js +19 -20
  540. data/dojo/dojo/cldr/nls/fi/gregorian.js +15 -14
  541. data/dojo/dojo/cldr/nls/fr/gregorian.js +15 -17
  542. data/dojo/dojo/cldr/nls/gregorian.js +14 -8
  543. data/dojo/dojo/cldr/nls/he/gregorian.js +48 -49
  544. data/dojo/dojo/cldr/nls/he/hebrew.js +23 -56
  545. data/dojo/dojo/cldr/nls/he/islamic.js +17 -19
  546. data/dojo/dojo/cldr/nls/hebrew.js +133 -124
  547. data/dojo/dojo/cldr/nls/hu/gregorian.js +20 -17
  548. data/dojo/dojo/cldr/nls/islamic.js +132 -129
  549. data/dojo/dojo/cldr/nls/it/gregorian.js +143 -145
  550. data/dojo/dojo/cldr/nls/ja/gregorian.js +17 -17
  551. data/dojo/dojo/cldr/nls/ko/gregorian.js +19 -19
  552. data/dojo/dojo/cldr/nls/nb/gregorian.js +141 -143
  553. data/dojo/dojo/cldr/nls/nl/gregorian.js +12 -14
  554. data/dojo/dojo/cldr/nls/pl/gregorian.js +149 -143
  555. data/dojo/dojo/cldr/nls/pt-pt/gregorian.js +83 -39
  556. data/dojo/dojo/cldr/nls/pt/gregorian.js +14 -16
  557. data/dojo/dojo/cldr/nls/ru/gregorian.js +138 -146
  558. data/dojo/dojo/cldr/nls/sk/gregorian.js +15 -6
  559. data/dojo/dojo/cldr/nls/sl/gregorian.js +12 -11
  560. data/dojo/dojo/cldr/nls/sv/gregorian.js +23 -17
  561. data/dojo/dojo/cldr/nls/th/buddhist.js +10 -13
  562. data/dojo/dojo/cldr/nls/th/gregorian.js +140 -136
  563. data/dojo/dojo/cldr/nls/tr/gregorian.js +13 -13
  564. data/dojo/dojo/cldr/nls/zh-tw/gregorian.js +15 -2
  565. data/dojo/dojo/cldr/nls/zh/gregorian.js +17 -14
  566. data/dojo/dojo/cldr/supplemental.js +10 -10
  567. data/dojo/dojo/currency.js +27 -14
  568. data/dojo/dojo/data/ItemFileReadStore.js +22 -21
  569. data/dojo/dojo/date/locale.js +9 -9
  570. data/dojo/dojo/date/stamp.js +3 -5
  571. data/dojo/dojo/dnd/Container.js +3 -1
  572. data/dojo/dojo/dnd/Manager.js +1 -1
  573. data/dojo/dojo/dnd/Moveable.js +2 -2
  574. data/dojo/dojo/dnd/Mover.js +5 -5
  575. data/dojo/dojo/dnd/Source.js +9 -8
  576. data/dojo/dojo/dnd/common.js +1 -1
  577. data/dojo/dojo/dojo.js +6 -18
  578. data/dojo/dojo/hash.js +20 -15
  579. data/dojo/dojo/html.js +7 -6
  580. data/dojo/dojo/nls/ro/colors.js +155 -0
  581. data/dojo/dojo/number.js +67 -56
  582. data/dojo/dojo/parser.js +167 -47
  583. data/dojo/dojo/resources/dojo.css +5 -6
  584. data/dojo/dojo/robot.js +85 -11
  585. data/dojo/dojo/tests/NodeList-fx.html +58 -38
  586. data/dojo/dojo/tests/Stateful.js +36 -0
  587. data/dojo/dojo/tests/_base/Deferred.js +95 -0
  588. data/dojo/dojo/tests/_base/NodeList.html +9 -1
  589. data/dojo/dojo/tests/_base/declare.js +65 -3
  590. data/dojo/dojo/tests/_base/fx.html +55 -49
  591. data/dojo/dojo/tests/_base/html.html +7 -0
  592. data/dojo/dojo/tests/_base/html_rtl.html +1 -0
  593. data/dojo/dojo/tests/cache.js +7 -0
  594. data/dojo/dojo/tests/currency.js +3 -2
  595. data/dojo/dojo/tests/date/locale.js +7 -3
  596. data/dojo/dojo/tests/date/stamp.js +4 -0
  597. data/dojo/dojo/tests/dnd/robot/test_dnd.html +1 -1
  598. data/dojo/dojo/tests/hash.js +26 -1
  599. data/dojo/dojo/tests/module.js +3 -0
  600. data/dojo/dojo/tests/number.js +7 -0
  601. data/dojo/dojo/tests/parser.html +90 -10
  602. data/dojo/dojo/tests/uacss.js +10 -0
  603. data/dojo/{dijit/tests/_base → dojo/tests/uacss}/sniffQuirks.html +5 -4
  604. data/dojo/{dijit/tests/_base → dojo/tests/uacss}/sniffStandards.html +4 -4
  605. data/dojo/dojo/tests/window.js +11 -0
  606. data/dojo/{dijit/tests/_base → dojo/tests/window}/test_scroll.html +155 -229
  607. data/dojo/{dijit/tests/_base/test_scrollStrictDTD.html → dojo/tests/window/test_scrollNoDTD.html} +30 -35
  608. data/dojo/{dijit/tests/_base/test_scrollNoDTD.html → dojo/tests/window/test_scrollStrictDTD.html} +30 -31
  609. data/dojo/{dijit/tests/_base → dojo/tests/window}/viewport.html +8 -10
  610. data/dojo/dojo/tests/window/viewportQuirks.html +5 -0
  611. data/dojo/dojo/uacss.js +63 -0
  612. data/dojo/dojo/window.js +132 -0
  613. data/dojo/dojox/LICENSE +1 -1
  614. data/dojo/dojox/atom/io/model.js +1 -1
  615. data/dojo/dojox/atom/widget/nls/ro/FeedEntryEditor.js +7 -0
  616. data/dojo/dojox/atom/widget/nls/ro/FeedEntryViewer.js +12 -0
  617. data/dojo/dojox/atom/widget/nls/ro/FeedViewerEntry.js +4 -0
  618. data/dojo/dojox/atom/widget/nls/ro/PeopleEditor.js +6 -0
  619. data/dojo/dojox/av/FLAudio.js +62 -49
  620. data/dojo/dojox/av/resources/audio.swf +0 -0
  621. data/dojo/dojox/av/tests/test_FLAudio.html +15 -9
  622. data/dojo/dojox/charting/Chart2D.js +609 -51
  623. data/dojo/dojox/charting/DataChart.js +72 -63
  624. data/dojo/dojox/charting/DataSeries.js +183 -0
  625. data/dojo/dojox/charting/Element.js +201 -3
  626. data/dojo/dojox/charting/Series.js +47 -4
  627. data/dojo/dojox/charting/Theme.js +590 -189
  628. data/dojo/dojox/charting/action2d/Base.js +31 -5
  629. data/dojo/dojox/charting/action2d/Highlight.js +37 -12
  630. data/dojo/dojox/charting/action2d/Magnify.js +39 -13
  631. data/dojo/dojox/charting/action2d/MoveSlice.js +42 -13
  632. data/dojo/dojox/charting/action2d/Shake.js +36 -12
  633. data/dojo/dojox/charting/action2d/Tooltip.js +205 -7
  634. data/dojo/dojox/charting/axis2d/Base.js +46 -7
  635. data/dojo/dojox/charting/axis2d/Default.js +414 -238
  636. data/dojo/dojox/charting/axis2d/Invisible.js +290 -0
  637. data/dojo/dojox/charting/axis2d/common.js +53 -7
  638. data/dojo/dojox/charting/plot2d/Areas.js +2 -0
  639. data/dojo/dojox/charting/plot2d/Bars.js +94 -63
  640. data/dojo/dojox/charting/plot2d/Base.js +143 -53
  641. data/dojo/dojox/charting/plot2d/Bubble.js +139 -65
  642. data/dojo/dojox/charting/plot2d/Candlesticks.js +143 -80
  643. data/dojo/dojox/charting/plot2d/ClusteredBars.js +60 -58
  644. data/dojo/dojox/charting/plot2d/ClusteredColumns.js +59 -57
  645. data/dojo/dojox/charting/plot2d/Columns.js +78 -60
  646. data/dojo/dojox/charting/plot2d/Default.js +280 -121
  647. data/dojo/dojox/charting/plot2d/Grid.js +181 -19
  648. data/dojo/dojox/charting/plot2d/Lines.js +4 -0
  649. data/dojo/dojox/charting/plot2d/Markers.js +4 -0
  650. data/dojo/dojox/charting/plot2d/MarkersOnly.js +4 -0
  651. data/dojo/dojox/charting/plot2d/OHLC.js +127 -69
  652. data/dojo/dojox/charting/plot2d/Pie.js +200 -105
  653. data/dojo/dojox/charting/plot2d/Scatter.js +194 -8
  654. data/dojo/dojox/charting/plot2d/Stacked.js +71 -46
  655. data/dojo/dojox/charting/plot2d/StackedAreas.js +4 -0
  656. data/dojo/dojox/charting/plot2d/StackedBars.js +75 -64
  657. data/dojo/dojox/charting/plot2d/StackedColumns.js +75 -64
  658. data/dojo/dojox/charting/plot2d/StackedLines.js +4 -0
  659. data/dojo/dojox/charting/plot2d/_PlotEvents.js +123 -0
  660. data/dojo/dojox/charting/plot2d/common.js +44 -35
  661. data/dojo/dojox/charting/scaler/primitive.js +6 -0
  662. data/dojo/dojox/charting/tests/gradients/test_grad_bars1.html +85 -0
  663. data/dojo/dojox/charting/tests/gradients/test_grad_bars2.html +79 -0
  664. data/dojo/dojox/charting/tests/gradients/test_grad_bars3.html +79 -0
  665. data/dojo/dojox/charting/tests/gradients/test_grad_bars4.html +79 -0
  666. data/dojo/dojox/charting/tests/gradients/test_grad_bars5.html +82 -0
  667. data/dojo/dojox/charting/tests/gradients/test_grad_bubble1.html +71 -0
  668. data/dojo/dojox/charting/tests/gradients/test_grad_bubble2.html +65 -0
  669. data/dojo/dojox/charting/tests/gradients/test_grad_bubble3.html +66 -0
  670. data/dojo/dojox/charting/tests/gradients/test_grad_bubble4.html +65 -0
  671. data/dojo/dojox/charting/tests/gradients/test_grad_bubble6.html +71 -0
  672. data/dojo/dojox/charting/tests/gradients/test_grad_columns1.html +85 -0
  673. data/dojo/dojox/charting/tests/gradients/test_grad_columns2.html +79 -0
  674. data/dojo/dojox/charting/tests/gradients/test_grad_columns3.html +79 -0
  675. data/dojo/dojox/charting/tests/gradients/test_grad_columns4.html +79 -0
  676. data/dojo/dojox/charting/tests/gradients/test_grad_columns5.html +82 -0
  677. data/dojo/dojox/charting/tests/gradients/test_grad_pie1.html +58 -0
  678. data/dojo/dojox/charting/tests/gradients/test_grad_pie2.html +52 -0
  679. data/dojo/dojox/charting/tests/gradients/test_grad_pie3.html +53 -0
  680. data/dojo/dojox/charting/tests/gradients/test_grad_pie4.html +52 -0
  681. data/dojo/dojox/charting/tests/gradients/test_grad_pie7.html +52 -0
  682. data/dojo/dojox/charting/tests/gradients/test_grad_pie8.html +52 -0
  683. data/dojo/dojox/charting/tests/gradients/test_grad_pie9.html +52 -0
  684. data/dojo/dojox/charting/tests/gradients/test_grad_pieA.html +52 -0
  685. data/dojo/dojox/charting/tests/gradients/test_grad_scatter1.html +71 -0
  686. data/dojo/dojox/charting/tests/gradients/test_grad_scatter2.html +65 -0
  687. data/dojo/dojox/charting/tests/gradients/test_grad_scatterB.html +54 -0
  688. data/dojo/dojox/charting/tests/stock.json +0 -1
  689. data/dojo/dojox/charting/tests/test_DataChart.html +3 -1
  690. data/dojo/dojox/charting/tests/test_DataSeries.html +216 -0
  691. data/dojo/dojox/charting/tests/test_anim2d.html +2 -0
  692. data/dojo/dojox/charting/tests/test_axes.html +81 -0
  693. data/dojo/dojox/charting/tests/test_axisZoomControl.html +91 -0
  694. data/dojo/dojox/charting/tests/test_bars.html +4 -2
  695. data/dojo/dojox/charting/tests/test_chart2d.html +14 -8
  696. data/dojo/dojox/charting/tests/test_chart2d_dynamics.html +4 -2
  697. data/dojo/dojox/charting/tests/test_chart2d_updating.html +2 -0
  698. data/dojo/dojox/charting/tests/test_cylinders.html +4 -2
  699. data/dojo/dojox/charting/tests/test_event2d.html +6 -3
  700. data/dojo/dojox/charting/tests/test_fireEvent.html +204 -0
  701. data/dojo/dojox/charting/tests/test_labels2d.html +57 -3
  702. data/dojo/dojox/charting/tests/test_nulls.html +89 -0
  703. data/dojo/dojox/charting/tests/test_pie2d.html +7 -4
  704. data/dojo/dojox/charting/tests/test_plot_order.html +96 -0
  705. data/dojo/dojox/charting/tests/test_rotatedLabels.html +85 -0
  706. data/dojo/dojox/charting/tests/test_scaler.html +4 -2
  707. data/dojo/dojox/charting/tests/test_series_order.html +88 -0
  708. data/dojo/dojox/charting/tests/test_sparklines.html +2 -0
  709. data/dojo/dojox/charting/tests/test_tension.html +55 -0
  710. data/dojo/dojox/charting/tests/test_themes.html +270 -115
  711. data/dojo/dojox/charting/tests/test_widget2d.html +3 -1
  712. data/dojo/dojox/charting/tests/test_win2d.html +6 -4
  713. data/dojo/dojox/charting/tests/theme_preview.html +69 -0
  714. data/dojo/dojox/charting/themes/Charged.js +91 -0
  715. data/dojo/dojox/charting/themes/Chris.js +77 -0
  716. data/dojo/dojox/charting/themes/Electric.js +92 -0
  717. data/dojo/dojox/charting/themes/Ireland.js +2 -2
  718. data/dojo/dojox/charting/themes/Julie.js +70 -0
  719. data/dojo/dojox/charting/themes/PlotKit/base.js +53 -0
  720. data/dojo/dojox/charting/themes/PlotKit/blue.js +6 -35
  721. data/dojo/dojox/charting/themes/PlotKit/cyan.js +6 -35
  722. data/dojo/dojox/charting/themes/PlotKit/green.js +6 -35
  723. data/dojo/dojox/charting/themes/PlotKit/orange.js +6 -35
  724. data/dojo/dojox/charting/themes/PlotKit/purple.js +6 -35
  725. data/dojo/dojox/charting/themes/PlotKit/red.js +6 -35
  726. data/dojo/dojox/charting/themes/PrimaryColors.js +14 -0
  727. data/dojo/dojox/charting/themes/Renkoo.js +85 -0
  728. data/dojo/dojox/charting/themes/ThreeD.js +49 -0
  729. data/dojo/dojox/charting/themes/Tom.js +87 -0
  730. data/dojo/dojox/charting/themes/Tufte.js +45 -50
  731. data/dojo/dojox/charting/themes/gradientGenerator.js +83 -0
  732. data/dojo/dojox/charting/widget/Chart2D.js +21 -1
  733. data/dojo/dojox/charting/widget/Legend.js +10 -1
  734. data/dojo/dojox/color/Palette.js +124 -17
  735. data/dojo/dojox/css3/fx.js +183 -0
  736. data/dojo/dojox/data/AndOrReadStore.js +4 -2
  737. data/dojo/dojox/data/ClientFilter.js +1 -1
  738. data/dojo/dojox/data/FlickrRestStore.js +86 -88
  739. data/dojo/dojox/data/HtmlStore.js +1 -1
  740. data/dojo/dojox/data/ItemExplorer.js +3 -3
  741. data/dojo/dojox/data/PersevereStore.js +1 -1
  742. data/dojo/dojox/data/QueryReadStore.js +6 -9
  743. data/dojo/dojox/data/ServiceStore.js +9 -2
  744. data/dojo/dojox/data/StoreExplorer.js +2 -2
  745. data/dojo/dojox/data/XmlStore.js +1 -1
  746. data/dojo/dojox/data/demos/stores/LazyLoadJSIStore.js +1 -1
  747. data/dojo/dojox/data/s3/proxy.example-php +73 -73
  748. data/dojo/dojox/data/tests/stores/FlickrRestStore.js +1 -1
  749. data/dojo/dojox/data/util/JsonQuery.js +0 -3
  750. data/dojo/dojox/date/README +7 -1
  751. data/dojo/dojox/date/buddhist/locale.js +5 -5
  752. data/dojo/dojox/date/hebrew/locale.js +41 -18
  753. data/dojo/dojox/date/hebrew/numerals.js +17 -13
  754. data/dojo/dojox/date/islamic.js +0 -1
  755. data/dojo/dojox/date/islamic/Date.js +17 -19
  756. data/dojo/dojox/date/islamic/locale.js +37 -16
  757. data/dojo/dojox/date/posix.js +1 -1
  758. data/dojo/dojox/date/tests/hebrew/Date.js +2 -2
  759. data/dojo/dojox/date/tests/islamic/Date.js +200 -17
  760. data/dojo/dojox/date/timezone.js +59 -62
  761. data/dojo/dojox/dnd/BoundingBoxController.js +130 -0
  762. data/dojo/dojox/dnd/README +22 -0
  763. data/dojo/dojox/dnd/Selector.js +159 -0
  764. data/dojo/dojox/dnd/tests/robot/test_selector.html +71 -0
  765. data/dojo/dojox/dnd/tests/test_selector.html +57 -0
  766. data/dojo/dojox/drawing/Drawing.js +24 -17
  767. data/dojo/dojox/drawing/_base.js +0 -1
  768. data/dojo/dojox/drawing/annotations/Angle.js +17 -10
  769. data/dojo/dojox/drawing/annotations/BoxShadow.js +92 -4
  770. data/dojo/dojox/drawing/annotations/Label.js +6 -6
  771. data/dojo/dojox/drawing/defaults.js +44 -27
  772. data/dojo/dojox/drawing/library/icons.js +7 -0
  773. data/dojo/dojox/drawing/manager/Anchors.js +22 -10
  774. data/dojo/dojox/drawing/manager/Canvas.js +6 -5
  775. data/dojo/dojox/drawing/manager/Mouse.js +45 -19
  776. data/dojo/dojox/drawing/manager/Stencil.js +29 -26
  777. data/dojo/dojox/drawing/manager/_registry.js +4 -1
  778. data/dojo/dojox/drawing/manager/keys.js +1 -1
  779. data/dojo/dojox/drawing/plugins/_Plugin.js +1 -1
  780. data/dojo/dojox/drawing/plugins/drawing/Grid.js +15 -4
  781. data/dojo/dojox/drawing/plugins/drawing/Silverlight.js +1 -1
  782. data/dojo/dojox/drawing/plugins/tools/Pan.js +29 -5
  783. data/dojo/dojox/drawing/plugins/tools/Zoom.js +4 -4
  784. data/dojo/dojox/drawing/stencil/Ellipse.js +1 -1
  785. data/dojo/dojox/drawing/stencil/Line.js +0 -17
  786. data/dojo/dojox/drawing/stencil/Path.js +17 -13
  787. data/dojo/dojox/drawing/stencil/Text.js +26 -7
  788. data/dojo/dojox/drawing/stencil/_Base.js +163 -159
  789. data/dojo/dojox/drawing/tests/drawing.html +34 -35
  790. data/dojo/dojox/drawing/tests/test_drawing.html +20 -21
  791. data/dojo/dojox/drawing/tests/test_shadows.html +18 -18
  792. data/dojo/dojox/drawing/tools/Ellipse.js +20 -6
  793. data/dojo/dojox/drawing/tools/Line.js +19 -9
  794. data/dojo/dojox/drawing/tools/Rect.js +21 -7
  795. data/dojo/dojox/drawing/tools/TextBlock.js +37 -29
  796. data/dojo/dojox/drawing/tools/custom/Axes.js +249 -97
  797. data/dojo/dojox/drawing/tools/custom/Vector.js +298 -6
  798. data/dojo/dojox/drawing/ui/Button.js +45 -20
  799. data/dojo/dojox/drawing/ui/Toolbar.js +94 -29
  800. data/dojo/dojox/drawing/ui/Tooltip.js +3 -3
  801. data/dojo/dojox/drawing/ui/dom/Pan.js +2 -2
  802. data/dojo/dojox/drawing/ui/dom/Toolbar.js +4 -4
  803. data/dojo/dojox/drawing/util/common.js +20 -14
  804. data/dojo/dojox/drawing/util/oo.js +1 -1
  805. data/dojo/dojox/dtl/Context.js +8 -7
  806. data/dojo/dojox/dtl/_DomTemplated.js +5 -1
  807. data/dojo/dojox/dtl/_Templated.js +38 -3
  808. data/dojo/dojox/dtl/_base.js +17 -8
  809. data/dojo/dojox/dtl/tests/context.js +11 -2
  810. data/dojo/dojox/editor/README +95 -2
  811. data/dojo/dojox/editor/plugins/Blockquote.js +506 -0
  812. data/dojo/dojox/editor/plugins/Breadcrumb.js +31 -25
  813. data/dojo/dojox/editor/plugins/CollapsibleToolbar.js +174 -0
  814. data/dojo/dojox/editor/plugins/EntityPalette.js +112 -290
  815. data/dojo/dojox/editor/plugins/FindReplace.js +490 -163
  816. data/dojo/dojox/editor/plugins/InsertAnchor.js +430 -0
  817. data/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js +3 -51
  818. data/dojo/dojox/editor/plugins/NormalizeStyle.js +551 -0
  819. data/dojo/dojox/editor/plugins/PasteFromWord.js +206 -0
  820. data/dojo/dojox/editor/plugins/Preview.js +1 -1
  821. data/dojo/dojox/editor/plugins/Save.js +4 -4
  822. data/dojo/dojox/editor/plugins/ShowBlockNodes.js +1 -1
  823. data/dojo/dojox/editor/plugins/Smiley.js +48 -22
  824. data/dojo/dojox/editor/plugins/StatusBar.js +172 -0
  825. data/dojo/dojox/editor/plugins/TablePlugins.js +454 -394
  826. data/dojo/dojox/editor/plugins/TextColor.js +191 -0
  827. data/dojo/dojox/editor/plugins/ToolbarLineBreak.js +6 -1
  828. data/dojo/dojox/editor/plugins/_SmileyPalette.js +113 -333
  829. data/dojo/dojox/editor/plugins/nls/Blockquote.js +3 -0
  830. data/dojo/dojox/editor/plugins/nls/CollapsibleToolbar.js +4 -0
  831. data/dojo/dojox/editor/plugins/nls/FindReplace.js +15 -5
  832. data/dojo/dojox/editor/plugins/nls/InsertAnchor.js +8 -0
  833. data/dojo/dojox/editor/plugins/nls/PasteFromWord.js +6 -0
  834. data/dojo/dojox/editor/plugins/nls/TableDialog.js +0 -1
  835. data/dojo/dojox/editor/plugins/nls/TextColor.js +4 -0
  836. data/dojo/dojox/editor/plugins/nls/ar/TableDialog.js +0 -1
  837. data/dojo/dojox/editor/plugins/nls/ca/TableDialog.js +0 -1
  838. data/dojo/dojox/editor/plugins/nls/cs/TableDialog.js +0 -1
  839. data/dojo/dojox/editor/plugins/nls/da/TableDialog.js +0 -1
  840. data/dojo/dojox/editor/plugins/nls/de/TableDialog.js +0 -1
  841. data/dojo/dojox/editor/plugins/nls/el/TableDialog.js +0 -1
  842. data/dojo/dojox/editor/plugins/nls/es/TableDialog.js +0 -1
  843. data/dojo/dojox/editor/plugins/nls/fi/TableDialog.js +0 -1
  844. data/dojo/dojox/editor/plugins/nls/fr/TableDialog.js +0 -1
  845. data/dojo/dojox/editor/plugins/nls/he/TableDialog.js +0 -1
  846. data/dojo/dojox/editor/plugins/nls/hu/TableDialog.js +0 -1
  847. data/dojo/dojox/editor/plugins/nls/it/TableDialog.js +0 -1
  848. data/dojo/dojox/editor/plugins/nls/ja/TableDialog.js +0 -1
  849. data/dojo/dojox/editor/plugins/nls/ko/TableDialog.js +0 -1
  850. data/dojo/dojox/editor/plugins/nls/nb/TableDialog.js +0 -1
  851. data/dojo/dojox/editor/plugins/nls/nl/TableDialog.js +0 -1
  852. data/dojo/dojox/editor/plugins/nls/pl/TableDialog.js +0 -1
  853. data/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js +0 -1
  854. data/dojo/dojox/editor/plugins/nls/pt/TableDialog.js +0 -1
  855. data/dojo/dojox/editor/plugins/nls/ro/Blockquote.js +4 -0
  856. data/dojo/dojox/editor/plugins/nls/ro/Breadcrumb.js +10 -0
  857. data/dojo/dojox/editor/plugins/nls/ro/CollapsibleToolbar.js +5 -0
  858. data/dojo/dojox/editor/plugins/nls/ro/FindReplace.js +22 -0
  859. data/dojo/dojox/editor/plugins/nls/ro/InsertAnchor.js +9 -0
  860. data/dojo/dojox/editor/plugins/nls/ro/InsertEntity.js +4 -0
  861. data/dojo/dojox/editor/plugins/nls/ro/PageBreak.js +4 -0
  862. data/dojo/dojox/editor/plugins/nls/ro/PasteFromWord.js +7 -0
  863. data/dojo/dojox/editor/plugins/nls/ro/Preview.js +4 -0
  864. data/dojo/dojox/editor/plugins/nls/ro/Save.js +4 -0
  865. data/dojo/dojox/editor/plugins/nls/ro/ShowBlockNodes.js +4 -0
  866. data/dojo/dojox/editor/plugins/nls/ro/Smiley.js +22 -0
  867. data/dojo/dojox/editor/plugins/nls/ro/TableDialog.js +30 -0
  868. data/dojo/dojox/editor/plugins/nls/ro/TextColor.js +5 -0
  869. data/dojo/dojox/editor/plugins/nls/ro/latinEntities.js +257 -0
  870. data/dojo/dojox/editor/plugins/nls/ru/TableDialog.js +0 -1
  871. data/dojo/dojox/editor/plugins/nls/sk/TableDialog.js +0 -1
  872. data/dojo/dojox/editor/plugins/nls/sl/TableDialog.js +0 -1
  873. data/dojo/dojox/editor/plugins/nls/sv/TableDialog.js +0 -1
  874. data/dojo/dojox/editor/plugins/nls/th/TableDialog.js +0 -1
  875. data/dojo/dojox/editor/plugins/nls/tr/TableDialog.js +0 -1
  876. data/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js +0 -1
  877. data/dojo/dojox/editor/plugins/nls/zh/FindReplace.js +14 -4
  878. data/dojo/dojox/editor/plugins/nls/zh/TableDialog.js +0 -1
  879. data/dojo/dojox/editor/plugins/resources/css/Blockquote.css +17 -0
  880. data/dojo/dojox/editor/plugins/resources/css/CollapsibleToolbar.css +173 -0
  881. data/dojo/dojox/editor/plugins/resources/css/FindReplace.css +56 -51
  882. data/dojo/dojox/editor/plugins/resources/css/InsertAnchor.css +17 -0
  883. data/dojo/dojox/editor/plugins/resources/css/InsertEntity.css +15 -37
  884. data/dojo/dojox/editor/plugins/resources/css/PasteFromWord.css +30 -0
  885. data/dojo/dojox/editor/plugins/resources/css/Smiley.css +20 -59
  886. data/dojo/dojox/editor/plugins/resources/css/StatusBar.css +75 -0
  887. data/dojo/dojox/editor/plugins/resources/css/TextColor.css +7 -0
  888. data/dojo/dojox/editor/plugins/resources/editorPlugins.css +1 -1
  889. data/dojo/dojox/editor/plugins/resources/icons/anchor.gif +0 -0
  890. data/dojo/dojox/editor/plugins/resources/icons/{findIconDisabled.gif → anchorDisabled.gif} +0 -0
  891. data/dojo/dojox/editor/plugins/resources/icons/blockquote.gif +0 -0
  892. data/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif +0 -0
  893. data/dojo/dojox/editor/plugins/resources/icons/{replaceIconDisabled.gif → claro/close.gif} +0 -0
  894. data/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png +0 -0
  895. data/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png +0 -0
  896. data/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif +0 -0
  897. data/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif +0 -0
  898. data/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif +0 -0
  899. data/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif +0 -0
  900. data/dojo/dojox/editor/plugins/resources/icons/soria/close.gif +0 -0
  901. data/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif +0 -0
  902. data/dojo/dojox/editor/plugins/resources/images/anchor.gif +0 -0
  903. data/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif +0 -0
  904. data/dojo/dojox/editor/plugins/resources/images/claro/expand.gif +0 -0
  905. data/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif +0 -0
  906. data/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif +0 -0
  907. data/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif +0 -0
  908. data/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif +0 -0
  909. data/dojo/dojox/editor/plugins/resources/images/soria/expand.gif +0 -0
  910. data/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif +0 -0
  911. data/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif +0 -0
  912. data/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif +0 -0
  913. data/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif +0 -0
  914. data/dojo/dojox/editor/tests/editorBlockquote.html +118 -0
  915. data/dojo/dojox/editor/tests/editorCollapsibleToolbar.html +131 -0
  916. data/dojo/dojox/editor/tests/editorFindReplace.html +7 -3
  917. data/dojo/dojox/editor/tests/editorInsertAnchor.html +119 -0
  918. data/dojo/dojox/editor/tests/editorNormalizeStyle.html +163 -0
  919. data/dojo/dojox/editor/tests/editorPasteFromWord.html +98 -0
  920. data/dojo/dojox/editor/tests/editorSmileyPlugin.html +66 -8
  921. data/dojo/dojox/editor/tests/editorStatusBar.html +232 -0
  922. data/dojo/dojox/editor/tests/editorTablePlugs.html +80 -74
  923. data/dojo/dojox/editor/tests/editorTextColor.html +97 -0
  924. data/dojo/dojox/editor/tests/module.js +15 -0
  925. data/dojo/dojox/editor/tests/robot/Editor_Smiley.html +60 -0
  926. data/dojo/dojox/editor/tests/runTests.html +9 -0
  927. data/dojo/dojox/editor/tests/testPluginsAll.html +206 -0
  928. data/dojo/dojox/embed/Flash.js +94 -77
  929. data/dojo/dojox/flash/_base.js +3 -3
  930. data/dojo/dojox/form/BusyButton.js +2 -2
  931. data/dojo/dojox/form/CheckedMultiSelect.js +3 -16
  932. data/dojo/dojox/form/FileInput.js +4 -0
  933. data/dojo/dojox/form/FileInputAuto.js +12 -4
  934. data/dojo/dojox/form/FilePickerTextBox.js +5 -8
  935. data/dojo/dojox/form/FileUploader.js +1378 -1331
  936. data/dojo/dojox/form/ListInput.js +5 -5
  937. data/dojo/dojox/form/PasswordValidator.js +3 -3
  938. data/dojo/dojox/form/RangeSlider.js +3 -2
  939. data/dojo/dojox/form/Rating.js +0 -1
  940. data/dojo/dojox/form/TimeSpinner.js +1 -2
  941. data/dojo/dojox/form/manager/_Mixin.js +21 -11
  942. data/dojo/dojox/form/nls/ro/PasswordValidator.js +5 -0
  943. data/dojo/dojox/form/resources/CheckedMultiSelect.css +30 -0
  944. data/dojo/dojox/form/resources/CheckedMultiSelect.html +1 -1
  945. data/dojo/dojox/form/resources/FileInput.css +30 -0
  946. data/dojo/dojox/form/resources/FilePickerTextBox.html +2 -2
  947. data/dojo/dojox/form/resources/FileUploader.css +0 -24
  948. data/dojo/dojox/form/resources/HorizontalRangeSlider.html +38 -38
  949. data/dojo/dojox/form/resources/RangeSlider.css +9 -1
  950. data/dojo/dojox/form/resources/VerticalRangeSlider.html +49 -50
  951. data/dojo/dojox/form/resources/_CheckedMultiSelectItem.html +1 -1
  952. data/dojo/dojox/form/resources/uploader.swf +0 -0
  953. data/dojo/dojox/form/tests/UploadFile.php.disabled +25 -19
  954. data/dojo/dojox/form/tests/test_FileUploader.html +38 -38
  955. data/dojo/dojox/form/tests/test_FileUploaderDialog.html +0 -1
  956. data/dojo/dojox/form/tests/test_FileUploaderForm.html +5 -3
  957. data/dojo/dojox/form/tests/test_FileUploaderTabs.html +147 -0
  958. data/dojo/dojox/form/tests/test_MultiComboBox.html +1 -1
  959. data/dojo/dojox/form/tests/test_RangeSlider.html +1 -2
  960. data/dojo/dojox/form/tests/test_TimeSpinner.html +3 -30
  961. data/dojo/dojox/fx/Timeline.js +210 -0
  962. data/dojo/dojox/fx/ext-dojo/complex.js +169 -0
  963. data/dojo/dojox/fx/ext-dojo/reverse.js +98 -0
  964. data/dojo/dojox/fx/scroll.js +13 -6
  965. data/dojo/dojox/fx/tests/test_Timeline.html +173 -0
  966. data/dojo/dojox/fx/tests/test_complex.html +87 -0
  967. data/dojo/dojox/fx/tests/test_reverse.html +100 -0
  968. data/dojo/dojox/fx/tests/test_transform.html +210 -0
  969. data/dojo/dojox/fx/text.js +3 -3
  970. data/dojo/dojox/geo/README +37 -0
  971. data/dojo/dojox/geo/charting/Map.js +140 -0
  972. data/dojo/dojox/geo/charting/_Feature.js +169 -0
  973. data/dojo/dojox/geo/charting/_Marker.js +52 -0
  974. data/dojo/dojox/geo/charting/_base.js +53 -0
  975. data/dojo/dojox/geo/charting/resources/Map.css +30 -0
  976. data/dojo/dojox/geo/charting/resources/data/NOTICES +63 -0
  977. data/dojo/dojox/geo/charting/resources/data/USStates.json +261 -0
  978. data/dojo/dojox/geo/charting/resources/img/zoomin.gif +0 -0
  979. data/dojo/dojox/geo/charting/resources/img/zoomin.png +0 -0
  980. data/dojo/dojox/geo/charting/resources/img/zoomout.gif +0 -0
  981. data/dojo/dojox/geo/charting/resources/img/zoomout.png +0 -0
  982. data/dojo/dojox/geo/charting/resources/markers/USStates.json +1 -0
  983. data/dojo/dojox/geo/charting/tests/datastore/dataStore.json +1 -0
  984. data/dojo/dojox/geo/charting/tests/test_mapWithCharting.html +72 -0
  985. data/dojo/dojox/geo/charting/tests/test_mapWithLegend.html +63 -0
  986. data/dojo/dojox/geo/charting/tests/test_maps.html +37 -0
  987. data/dojo/dojox/geo/charting/widget/Legend.js +62 -0
  988. data/dojo/dojox/gfx/README +9 -2
  989. data/dojo/dojox/gfx/README-svgweb +98 -0
  990. data/dojo/dojox/gfx/VectorText.js +3 -3
  991. data/dojo/dojox/gfx/_base.js +2 -2
  992. data/dojo/dojox/gfx/arc.js +1 -1
  993. data/dojo/dojox/gfx/gradient.js +160 -0
  994. data/dojo/dojox/gfx/gradutils.js +91 -0
  995. data/dojo/dojox/gfx/path.js +89 -24
  996. data/dojo/dojox/gfx/resources/svg2gfx.xsl +53 -14
  997. data/dojo/dojox/gfx/shape.js +14 -7
  998. data/dojo/dojox/gfx/svg.js +135 -16
  999. data/dojo/dojox/gfx/tests/svgweb/README +15 -0
  1000. data/dojo/dojox/gfx/tests/svgweb/sample.html +171 -0
  1001. data/dojo/dojox/gfx/tests/svgweb/svgweb/COPYING.txt +65 -0
  1002. data/dojo/dojox/gfx/tests/svgweb/svgweb/src/svg.htc +1 -0
  1003. data/dojo/dojox/gfx/tests/svgweb/svgweb/src/svg.js +1 -0
  1004. data/dojo/dojox/gfx/tests/svgweb/svgweb/src/svg.swf +0 -0
  1005. data/dojo/dojox/gfx/tests/svgweb/test.roundrect.html +39 -0
  1006. data/dojo/dojox/gfx/tests/svgweb/test_arc.html +66 -0
  1007. data/dojo/dojox/gfx/tests/svgweb/test_bezier.html +81 -0
  1008. data/dojo/dojox/gfx/tests/svgweb/test_destroy.html +58 -0
  1009. data/dojo/dojox/gfx/tests/svgweb/test_fill.html +45 -0
  1010. data/dojo/dojox/gfx/tests/svgweb/test_fx.html +104 -0
  1011. data/dojo/dojox/gfx/tests/svgweb/test_fx_shapes.html +123 -0
  1012. data/dojo/dojox/gfx/tests/svgweb/test_gfx.html +565 -0
  1013. data/dojo/dojox/gfx/tests/svgweb/test_gradient.html +77 -0
  1014. data/dojo/dojox/gfx/tests/svgweb/test_group1.html +70 -0
  1015. data/dojo/dojox/gfx/tests/svgweb/test_group2.html +54 -0
  1016. data/dojo/dojox/gfx/tests/svgweb/test_image1.html +80 -0
  1017. data/dojo/dojox/gfx/tests/svgweb/test_image2.html +52 -0
  1018. data/dojo/dojox/gfx/tests/svgweb/test_image3.html +77 -0
  1019. data/dojo/dojox/gfx/tests/svgweb/test_image4.html +58 -0
  1020. data/dojo/dojox/gfx/tests/svgweb/test_image5.html +67 -0
  1021. data/dojo/dojox/gfx/tests/svgweb/test_linearGradient.html +75 -0
  1022. data/dojo/dojox/gfx/tests/svgweb/test_linestyle.html +43 -0
  1023. data/dojo/dojox/gfx/tests/svgweb/test_pattern.html +43 -0
  1024. data/dojo/dojox/gfx/tests/svgweb/test_poly.html +49 -0
  1025. data/dojo/dojox/gfx/tests/svgweb/test_resize.html +57 -0
  1026. data/dojo/dojox/gfx/tests/svgweb/test_setPath.html +86 -0
  1027. data/dojo/dojox/gfx/tests/svgweb/test_tbbox.html +113 -0
  1028. data/dojo/dojox/gfx/tests/svgweb/test_text.html +80 -0
  1029. data/dojo/dojox/gfx/tests/svgweb/test_textpath.html +77 -0
  1030. data/dojo/dojox/gfx/tests/svgweb/test_transform.html +99 -0
  1031. data/dojo/dojox/gfx/tests/svgweb/test_utils.html +234 -0
  1032. data/dojo/dojox/gfx/tests/svgweb/test_vectortext_draw.html +64 -0
  1033. data/dojo/dojox/gfx/tests/svgweb/test_vectortext_load.html +97 -0
  1034. data/dojo/dojox/gfx/tests/test_image1.html +1 -4
  1035. data/dojo/dojox/gfx/tests/test_image2.html +5 -5
  1036. data/dojo/dojox/gfx/tests/test_image3.html +2 -2
  1037. data/dojo/dojox/gfx/tests/test_image4.html +2 -2
  1038. data/dojo/dojox/gfx/tests/test_linearGradient.html +2 -1
  1039. data/dojo/dojox/gfx/tests/test_pattern.html +4 -3
  1040. data/dojo/dojox/gfx/tests/test_refproj.html +109 -0
  1041. data/dojo/dojox/gfx/vml.js +52 -57
  1042. data/dojo/dojox/grid/DataGrid.js +17 -6
  1043. data/dojo/dojox/grid/EnhancedGrid.js +24 -6
  1044. data/dojo/dojox/grid/README +57 -0
  1045. data/dojo/dojox/grid/_Builder.js +18 -8
  1046. data/dojo/dojox/grid/_Grid.js +10 -20
  1047. data/dojo/dojox/grid/_View.js +5 -2
  1048. data/dojo/dojox/grid/cells/dijit.js +11 -4
  1049. data/dojo/dojox/grid/enhanced/_Events.js +16 -6
  1050. data/dojo/dojox/grid/enhanced/_Plugin.js +15 -20
  1051. data/dojo/dojox/grid/enhanced/dnd/_DndEvents.js +6 -0
  1052. data/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js +3 -1
  1053. data/dojo/dojox/grid/enhanced/nls/ar/EnhancedGrid.js +8 -0
  1054. data/dojo/dojox/grid/enhanced/nls/ca/EnhancedGrid.js +8 -0
  1055. data/dojo/dojox/grid/enhanced/nls/da/EnhancedGrid.js +8 -0
  1056. data/dojo/dojox/grid/enhanced/nls/el/EnhancedGrid.js +8 -0
  1057. data/dojo/dojox/grid/enhanced/nls/fi/EnhancedGrid.js +8 -0
  1058. data/dojo/dojox/grid/enhanced/nls/he/EnhancedGrid.js +8 -0
  1059. data/dojo/dojox/grid/enhanced/nls/nb/EnhancedGrid.js +8 -0
  1060. data/dojo/dojox/grid/enhanced/nls/nl/EnhancedGrid.js +8 -0
  1061. data/dojo/dojox/grid/enhanced/nls/pt-pt/EnhancedGrid.js +8 -0
  1062. data/dojo/dojox/grid/enhanced/nls/ro/EnhancedGrid.js +9 -0
  1063. data/dojo/dojox/grid/enhanced/nls/sk/EnhancedGrid.js +8 -0
  1064. data/dojo/dojox/grid/enhanced/nls/sl/EnhancedGrid.js +8 -0
  1065. data/dojo/dojox/grid/enhanced/nls/sv/EnhancedGrid.js +8 -0
  1066. data/dojo/dojox/grid/enhanced/nls/th/EnhancedGrid.js +8 -0
  1067. data/dojo/dojox/grid/enhanced/nls/tr/EnhancedGrid.js +8 -0
  1068. data/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js +5 -5
  1069. data/dojo/dojox/grid/enhanced/plugins/Menu.js +22 -6
  1070. data/dojo/dojox/grid/enhanced/plugins/NestedSorting.js +26 -42
  1071. data/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css +31 -32
  1072. data/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css +16 -7
  1073. data/dojo/dojox/grid/enhanced/resources/claroEnhancedGrid.css +104 -0
  1074. data/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css +8 -17
  1075. data/dojo/dojox/grid/resources/Grid.css +6 -0
  1076. data/dojo/dojox/grid/resources/Grid_rtl.css +10 -2
  1077. data/dojo/dojox/grid/resources/_Grid.html +1 -1
  1078. data/dojo/dojox/grid/resources/claroGrid.css +216 -0
  1079. data/dojo/dojox/grid/resources/images/header.png +0 -0
  1080. data/dojo/dojox/grid/resources/images/header_shadow.png +0 -0
  1081. data/dojo/dojox/grid/resources/images/row_back.png +0 -0
  1082. data/dojo/dojox/grid/resources/images/td_button_down.png +0 -0
  1083. data/dojo/dojox/grid/tests/enhanced/test_enhanced_grid_claro.html +70 -0
  1084. data/dojo/dojox/grid/tests/robot/7815.html +0 -1
  1085. data/dojo/dojox/grid/tests/robot/DataGrid_a11y.html +6 -1
  1086. data/dojo/dojox/grid/tests/robot/DataGrid_mouse.html +50 -18
  1087. data/dojo/dojox/grid/tests/robot/_DataGrid.html +0 -1
  1088. data/dojo/dojox/grid/tests/robot/stores.js +3 -1
  1089. data/dojo/dojox/grid/tests/test_grid_themes.html +27 -2
  1090. data/dojo/dojox/grid/tests/test_treegrid_model.html +6 -6
  1091. data/dojo/dojox/highlight/languages/_dynamic.js +2 -0
  1092. data/dojo/dojox/highlight/languages/_static.js +1 -1
  1093. data/dojo/dojox/highlight/languages/groovy.js +67 -0
  1094. data/dojo/dojox/highlight/languages/java.js +58 -0
  1095. data/dojo/dojox/highlight/languages/xquery.js +56 -0
  1096. data/dojo/dojox/highlight/tests/test_highlight.html +147 -0
  1097. data/dojo/dojox/html/entities.js +7 -7
  1098. data/dojo/dojox/html/ext-dojo/style.js +460 -0
  1099. data/dojo/dojox/html/format.js +5 -0
  1100. data/dojo/dojox/html/metrics.js +31 -12
  1101. data/dojo/dojox/html/tests/test_style-html.html +310 -0
  1102. data/dojo/dojox/html/tests/test_themes.html +2 -2
  1103. data/dojo/dojox/image/Lightbox.js +70 -28
  1104. data/dojo/dojox/image/resources/Lightbox.css +11 -4
  1105. data/dojo/dojox/image/resources/Lightbox.html +3 -3
  1106. data/dojo/dojox/image/tests/Lightbox.html +2 -2
  1107. data/dojo/dojox/image/tests/test_Lightbox.html +36 -2
  1108. data/dojo/dojox/io/proxy/xip_client.html +1 -1
  1109. data/dojo/dojox/io/proxy/xip_server.html +1 -1
  1110. data/dojo/dojox/jq.js +1 -1
  1111. data/dojo/dojox/json/query.js +7 -7
  1112. data/dojo/dojox/json/ref.js +4 -2
  1113. data/dojo/dojox/lang/README +13 -2
  1114. data/dojo/dojox/lang/async.js +199 -0
  1115. data/dojo/dojox/lang/async/event.js +41 -0
  1116. data/dojo/dojox/lang/async/timeout.js +41 -0
  1117. data/dojo/dojox/lang/async/topic.js +41 -0
  1118. data/dojo/dojox/lang/oo/rearrange.js +1 -1
  1119. data/dojo/dojox/lang/tests/async.js +216 -0
  1120. data/dojo/dojox/lang/tests/docs.js +2 -2
  1121. data/dojo/dojox/lang/tests/main.js +1 -1
  1122. data/dojo/dojox/lang/tests/test_oo_decl.html +52 -3
  1123. data/dojo/dojox/lang/utils.js +52 -9
  1124. data/dojo/dojox/layout/ExpandoPane.js +71 -21
  1125. data/dojo/dojox/layout/FloatingPane.js +7 -4
  1126. data/dojo/dojox/layout/GridContainer.js +453 -920
  1127. data/dojo/dojox/layout/GridContainerLite.js +811 -0
  1128. data/dojo/dojox/layout/README +1 -1
  1129. data/dojo/dojox/layout/ResizeHandle.js +6 -3
  1130. data/dojo/dojox/layout/RotatorContainer.js +1 -1
  1131. data/dojo/dojox/layout/TableContainer.js +7 -0
  1132. data/dojo/dojox/layout/ToggleSplitter.js +2 -2
  1133. data/dojo/dojox/layout/resources/ExpandoPane.css +52 -0
  1134. data/dojo/dojox/layout/resources/ExpandoPane.html +2 -2
  1135. data/dojo/dojox/layout/resources/GridContainer.css +49 -69
  1136. data/dojo/dojox/layout/resources/GridContainer.html +9 -5
  1137. data/dojo/dojox/layout/resources/ResizeHandle.css +18 -0
  1138. data/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif +0 -0
  1139. data/dojo/dojox/layout/resources/icons/resizeRtl.png +0 -0
  1140. data/dojo/dojox/layout/tests/resources/script_dnd.js +158 -0
  1141. data/dojo/dojox/layout/tests/resources/set_complete_dnd.css +61 -0
  1142. data/dojo/dojox/layout/tests/test_ExpandoPane.html +7 -1
  1143. data/dojo/dojox/layout/tests/test_ExpandoPane_prog.html +1 -1
  1144. data/dojo/dojox/layout/tests/test_GridContainer.html +24 -76
  1145. data/dojo/dojox/layout/tests/test_GridContainerColWidths.html +31 -19
  1146. data/dojo/dojox/layout/tests/test_GridContainerLite.html +122 -0
  1147. data/dojo/dojox/layout/tests/test_GridContainerLite_doLayout.html +112 -0
  1148. data/dojo/dojox/layout/tests/test_GridContainerLite_dragRestriction.html +148 -0
  1149. data/dojo/dojox/layout/tests/test_GridContainer_ResizableCol.html +93 -0
  1150. data/dojo/dojox/layout/tests/test_GridContainer_TitlePanes.html +85 -0
  1151. data/dojo/dojox/layout/tests/test_GridContainer_complete_solution.html +103 -0
  1152. data/dojo/dojox/layout/tests/test_GridContainer_dragHandle.html +107 -0
  1153. data/dojo/dojox/layout/tests/{test_GridContainerBC.html → test_GridContainer_in_BorderContainer.html} +27 -61
  1154. data/dojo/dojox/layout/tests/{test_GridContainerBC_prog.html → test_GridContainer_in_BorderContainer_prog.html} +142 -50
  1155. data/dojo/dojox/layout/tests/test_TableContainer.html +2 -2
  1156. data/dojo/dojox/math/BigInteger-ext.js +1 -3
  1157. data/dojo/dojox/math/BigInteger.js +3 -3
  1158. data/dojo/dojox/math/README +0 -3
  1159. data/dojo/dojox/math/_base.js +48 -11
  1160. data/dojo/dojox/math/tests/math.js +19 -1
  1161. data/dojo/dojox/mdnd/AreaManager.js +707 -0
  1162. data/dojo/dojox/mdnd/AutoScroll.js +195 -0
  1163. data/dojo/dojox/mdnd/DropIndicator.js +86 -0
  1164. data/dojo/dojox/mdnd/LazyManager.js +68 -0
  1165. data/dojo/dojox/mdnd/Moveable.js +251 -0
  1166. data/dojo/dojox/mdnd/PureSource.js +208 -0
  1167. data/dojo/dojox/mdnd/README +94 -0
  1168. data/dojo/dojox/mdnd/adapter/DndFromDojo.js +366 -0
  1169. data/dojo/dojox/mdnd/adapter/DndToDojo.js +484 -0
  1170. data/dojo/dojox/mdnd/dropMode/DefaultDropMode.js +333 -0
  1171. data/dojo/dojox/mdnd/dropMode/OverDropMode.js +308 -0
  1172. data/dojo/dojox/mdnd/dropMode/VerticalDropMode.js +343 -0
  1173. data/dojo/dojox/mdnd/resources/dnd.css +93 -0
  1174. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_acceptance.html +71 -0
  1175. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_autoScroll.html +52 -0
  1176. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_defaultDropMode.html +55 -0
  1177. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_dndFromDojo.html +73 -0
  1178. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_dndToDojo.html +93 -0
  1179. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_dndToDojo_dndFromDojo.html +70 -0
  1180. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_overDropMode.html +57 -0
  1181. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_stress.html +83 -0
  1182. data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_verticalDropMode.html +55 -0
  1183. data/dojo/dojox/mdnd/tests/module.js +16 -0
  1184. data/dojo/dojox/mdnd/tests/resources/test_dnd.css +68 -0
  1185. data/dojo/dojox/mdnd/tests/robot/module.js +16 -0
  1186. data/dojo/dojox/mdnd/tests/robot/test_dnd_acceptance.html +284 -0
  1187. data/dojo/dojox/mdnd/tests/robot/test_dnd_defaultDropMode.html +101 -0
  1188. data/dojo/dojox/mdnd/tests/robot/test_dnd_dndFromDojo.html +322 -0
  1189. data/dojo/dojox/mdnd/tests/robot/test_dnd_dndToDojo.html +198 -0
  1190. data/dojo/dojox/mdnd/tests/robot/test_dnd_overDropMode.html +272 -0
  1191. data/dojo/dojox/mdnd/tests/robot/test_dnd_verticalDropMode.html +101 -0
  1192. data/dojo/dojox/mdnd/tests/runTests.html +9 -0
  1193. data/dojo/dojox/mdnd/tests/unitTests/areaManager/AreaManagerCoverPresence.html +110 -0
  1194. data/dojo/dojox/mdnd/tests/unitTests/areaManager/AreaManagerManagingDragItems.html +149 -0
  1195. data/dojo/dojox/mdnd/tests/unitTests/areaManager/AreaManagerRegistering.html +124 -0
  1196. data/dojo/dojox/mdnd/tests/unitTests/areaManager/module.js +12 -0
  1197. data/dojo/dojox/mdnd/tests/unitTests/dropIndicator/DropIndicatorTest.html +187 -0
  1198. data/dojo/dojox/mdnd/tests/unitTests/dropIndicator/module.js +8 -0
  1199. data/dojo/dojox/mdnd/tests/unitTests/dropMode/DefaultDropModeTest.html +241 -0
  1200. data/dojo/dojox/mdnd/tests/unitTests/dropMode/FixtureLib.js +87 -0
  1201. data/dojo/dojox/mdnd/tests/unitTests/dropMode/OverDropModeTest.html +195 -0
  1202. data/dojo/dojox/mdnd/tests/unitTests/dropMode/VerticalDropModeTest.html +241 -0
  1203. data/dojo/dojox/mdnd/tests/unitTests/dropMode/module.js +10 -0
  1204. data/dojo/dojox/mdnd/tests/unitTests/dropMode/resources/domElement.html +130 -0
  1205. data/dojo/dojox/mdnd/tests/unitTests/module.js +9 -0
  1206. data/dojo/dojox/mobile.js +4 -0
  1207. data/dojo/dojox/mobile/README +55 -0
  1208. data/dojo/dojox/mobile/_base.js +1451 -0
  1209. data/dojo/dojox/mobile/app.js +3 -0
  1210. data/dojo/dojox/mobile/app/AlertDialog.js +182 -0
  1211. data/dojo/dojox/mobile/app/ImageThumbView.js +254 -0
  1212. data/dojo/dojox/mobile/app/ImageView.js +716 -0
  1213. data/dojo/dojox/mobile/app/List.js +577 -0
  1214. data/dojo/dojox/mobile/app/ListSelector.js +218 -0
  1215. data/dojo/dojox/mobile/app/SceneAssistant.js +56 -0
  1216. data/dojo/dojox/mobile/app/SceneController.js +157 -0
  1217. data/dojo/dojox/mobile/app/StageController.js +137 -0
  1218. data/dojo/dojox/mobile/app/TextBox.js +321 -0
  1219. data/dojo/dojox/mobile/app/_FormWidget.js +294 -0
  1220. data/dojo/dojox/mobile/app/_Widget.js +30 -0
  1221. data/dojo/dojox/mobile/app/_base.js +226 -0
  1222. data/dojo/dojox/mobile/app/_event.js +119 -0
  1223. data/dojo/dojox/mobile/app/compat.js +109 -0
  1224. data/dojo/dojox/mobile/build/build.bat +47 -0
  1225. data/dojo/dojox/mobile/build/build.sh +50 -0
  1226. data/dojo/dojox/mobile/build/profiles/mobile-all.profile.js +36 -0
  1227. data/dojo/dojox/mobile/build/profiles/mobile.profile.js +40 -0
  1228. data/dojo/dojox/mobile/compat.js +399 -0
  1229. data/dojo/dojox/mobile/parser.js +80 -0
  1230. data/dojo/dojox/mobile/tests/complexListApp/app/assistants/main-assistant.js +123 -0
  1231. data/dojo/dojox/mobile/tests/complexListApp/app/views/main/emptyTemplate.html +3 -0
  1232. data/dojo/dojox/mobile/tests/complexListApp/app/views/main/main-scene.html +23 -0
  1233. data/dojo/dojox/mobile/tests/complexListApp/app/views/main/rowTemplate.html +15 -0
  1234. data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-1.png +0 -0
  1235. data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-2.png +0 -0
  1236. data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-3.png +0 -0
  1237. data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-4.png +0 -0
  1238. data/dojo/dojox/mobile/tests/complexListApp/index.html +37 -0
  1239. data/dojo/dojox/mobile/tests/complexListApp/styles/style.css +38 -0
  1240. data/dojo/dojox/mobile/tests/dialogApp/app/assistants/main-assistant.js +75 -0
  1241. data/dojo/dojox/mobile/tests/dialogApp/app/views/main/main-scene.html +10 -0
  1242. data/dojo/dojox/mobile/tests/dialogApp/index.html +37 -0
  1243. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-image-thumb-view-assistant.js +198 -0
  1244. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-image-view-assistant.js +170 -0
  1245. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-search-group-assistant.js +123 -0
  1246. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-search-selection-assistant.js +54 -0
  1247. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-search-text-assistant.js +119 -0
  1248. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/image-view-assistant.js +92 -0
  1249. data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/main-assistant.js +40 -0
  1250. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-image-thumb-view/flickr-image-thumb-view-scene.html +17 -0
  1251. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-image-view/flickr-image-view-scene.html +10 -0
  1252. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-group/emptyTemplate.html +3 -0
  1253. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-group/flickr-search-group-scene.html +19 -0
  1254. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-group/rowTemplate.html +8 -0
  1255. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-selection/flickr-search-selection-scene.html +7 -0
  1256. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-selection/rowTemplate.html +8 -0
  1257. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-text/emptyTemplate.html +3 -0
  1258. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-text/flickr-search-group-scene.html +19 -0
  1259. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-text/rowTemplate.html +15 -0
  1260. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/image-view/image-view-scene.html +23 -0
  1261. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/main/main-scene.html +6 -0
  1262. data/dojo/dojox/mobile/tests/imageControlsApp/app/views/main/rowTemplate.html +8 -0
  1263. data/dojo/dojox/mobile/tests/imageControlsApp/images/chris1_lg.jpg +0 -0
  1264. data/dojo/dojox/mobile/tests/imageControlsApp/images/chris2_lg.jpg +0 -0
  1265. data/dojo/dojox/mobile/tests/imageControlsApp/images/imageHoriz.jpg +0 -0
  1266. data/dojo/dojox/mobile/tests/imageControlsApp/images/imageVert.jpg +0 -0
  1267. data/dojo/dojox/mobile/tests/imageControlsApp/images/square.jpg +0 -0
  1268. data/dojo/dojox/mobile/tests/imageControlsApp/index.html +39 -0
  1269. data/dojo/dojox/mobile/tests/imageControlsApp/styles/styles.css +13 -0
  1270. data/dojo/dojox/mobile/tests/imageControlsApp/view-resources.json +14 -0
  1271. data/dojo/dojox/mobile/tests/images/a-icon-1-41x41.png +0 -0
  1272. data/dojo/dojox/mobile/tests/images/a-icon-1.png +0 -0
  1273. data/dojo/dojox/mobile/tests/images/a-icon-10.png +0 -0
  1274. data/dojo/dojox/mobile/tests/images/a-icon-11.png +0 -0
  1275. data/dojo/dojox/mobile/tests/images/a-icon-12.png +0 -0
  1276. data/dojo/dojox/mobile/tests/images/a-icon-13.png +0 -0
  1277. data/dojo/dojox/mobile/tests/images/a-icon-14.png +0 -0
  1278. data/dojo/dojox/mobile/tests/images/a-icon-15.png +0 -0
  1279. data/dojo/dojox/mobile/tests/images/a-icon-16.png +0 -0
  1280. data/dojo/dojox/mobile/tests/images/a-icon-17.png +0 -0
  1281. data/dojo/dojox/mobile/tests/images/a-icon-18.png +0 -0
  1282. data/dojo/dojox/mobile/tests/images/a-icon-2-41x41.png +0 -0
  1283. data/dojo/dojox/mobile/tests/images/a-icon-2.png +0 -0
  1284. data/dojo/dojox/mobile/tests/images/a-icon-3.png +0 -0
  1285. data/dojo/dojox/mobile/tests/images/a-icon-4.png +0 -0
  1286. data/dojo/dojox/mobile/tests/images/i-icon-1.png +0 -0
  1287. data/dojo/dojox/mobile/tests/images/i-icon-10.png +0 -0
  1288. data/dojo/dojox/mobile/tests/images/i-icon-2.png +0 -0
  1289. data/dojo/dojox/mobile/tests/images/i-icon-3.png +0 -0
  1290. data/dojo/dojox/mobile/tests/images/i-icon-4.png +0 -0
  1291. data/dojo/dojox/mobile/tests/images/i-icon-5.png +0 -0
  1292. data/dojo/dojox/mobile/tests/images/i-icon-6.png +0 -0
  1293. data/dojo/dojox/mobile/tests/images/i-icon-7.png +0 -0
  1294. data/dojo/dojox/mobile/tests/images/i-icon-8.png +0 -0
  1295. data/dojo/dojox/mobile/tests/images/i-icon-9.png +0 -0
  1296. data/dojo/dojox/mobile/tests/images/i-icon-all.png +0 -0
  1297. data/dojo/dojox/mobile/tests/images/icon-1.png +0 -0
  1298. data/dojo/dojox/mobile/tests/images/not-images.png +0 -0
  1299. data/dojo/dojox/mobile/tests/images/red-button-bg.png +0 -0
  1300. data/dojo/dojox/mobile/tests/images/red-button-sel-bg.png +0 -0
  1301. data/dojo/dojox/mobile/tests/images/widget-bg.png +0 -0
  1302. data/dojo/dojox/mobile/tests/index.html +55 -0
  1303. data/dojo/dojox/mobile/tests/inputApp/app/assistants/text-input-assistant.js +21 -0
  1304. data/dojo/dojox/mobile/tests/inputApp/app/views/text-input/text-input-scene.html +50 -0
  1305. data/dojo/dojox/mobile/tests/inputApp/index.html +37 -0
  1306. data/dojo/dojox/mobile/tests/multiSceneApp/app/assistants/main-assistant.js +41 -0
  1307. data/dojo/dojox/mobile/tests/multiSceneApp/app/assistants/second-assistant.js +32 -0
  1308. data/dojo/dojox/mobile/tests/multiSceneApp/app/assistants/third-assistant.js +33 -0
  1309. data/dojo/dojox/mobile/tests/multiSceneApp/app/views/main/main-scene.html +16 -0
  1310. data/dojo/dojox/mobile/tests/multiSceneApp/app/views/second/second-scene.html +12 -0
  1311. data/dojo/dojox/mobile/tests/multiSceneApp/app/views/third/third-scene.html +13 -0
  1312. data/dojo/dojox/mobile/tests/multiSceneApp/index.html +37 -0
  1313. data/dojo/dojox/mobile/tests/simpleApp/app/assistants/main-assistant.js +23 -0
  1314. data/dojo/dojox/mobile/tests/simpleApp/app/views/main/main-scene.html +3 -0
  1315. data/dojo/dojox/mobile/tests/simpleApp/index.html +36 -0
  1316. data/dojo/dojox/mobile/tests/simpleListApp/app/assistants/main-assistant.js +66 -0
  1317. data/dojo/dojox/mobile/tests/simpleListApp/app/views/main/main-scene.html +14 -0
  1318. data/dojo/dojox/mobile/tests/simpleListApp/app/views/main/rowTemplate.html +3 -0
  1319. data/dojo/dojox/mobile/tests/simpleListApp/index.html +36 -0
  1320. data/dojo/dojox/mobile/tests/test_Android-ButtonList.html +68 -0
  1321. data/dojo/dojox/mobile/tests/test_Android-EdgeToEdge.html +50 -0
  1322. data/dojo/dojox/mobile/tests/test_Android-EdgeToEdgeCategory.html +46 -0
  1323. data/dojo/dojox/mobile/tests/test_Android-Icon.html +58 -0
  1324. data/dojo/dojox/mobile/tests/test_Android-RoundRectList.html +60 -0
  1325. data/dojo/dojox/mobile/tests/test_Android-Settings.html +104 -0
  1326. data/dojo/dojox/mobile/tests/test_Android-Switch.html +23 -0
  1327. data/dojo/dojox/mobile/tests/test_Android-TabContainer.html +139 -0
  1328. data/dojo/dojox/mobile/tests/test_Android-VariableHeightList.html +100 -0
  1329. data/dojo/dojox/mobile/tests/test_ajax-html.html +34 -0
  1330. data/dojo/dojox/mobile/tests/test_ajax-json.html +34 -0
  1331. data/dojo/dojox/mobile/tests/test_anchor-label.html +74 -0
  1332. data/dojo/dojox/mobile/tests/test_bookmarkable.html +112 -0
  1333. data/dojo/dojox/mobile/tests/test_buttons.html +21 -0
  1334. data/dojo/dojox/mobile/tests/test_dynamic-icons.html +53 -0
  1335. data/dojo/dojox/mobile/tests/test_dynamic-items.html +98 -0
  1336. data/dojo/dojox/mobile/tests/test_dynamic-view.html +58 -0
  1337. data/dojo/dojox/mobile/tests/test_hash-parameter.html +71 -0
  1338. data/dojo/dojox/mobile/tests/test_iPhone-Animation.html +81 -0
  1339. data/dojo/dojox/mobile/tests/test_iPhone-Button.html +41 -0
  1340. data/dojo/dojox/mobile/tests/test_iPhone-ButtonList.html +50 -0
  1341. data/dojo/dojox/mobile/tests/test_iPhone-EdgeToEdge.html +47 -0
  1342. data/dojo/dojox/mobile/tests/test_iPhone-EdgeToEdgeCategory.html +46 -0
  1343. data/dojo/dojox/mobile/tests/test_iPhone-Heading.html +24 -0
  1344. data/dojo/dojox/mobile/tests/test_iPhone-Icon.html +58 -0
  1345. data/dojo/dojox/mobile/tests/test_iPhone-IconMulti.html +36 -0
  1346. data/dojo/dojox/mobile/tests/test_iPhone-IconSingle.html +35 -0
  1347. data/dojo/dojox/mobile/tests/test_iPhone-IconSingleBelow.html +35 -0
  1348. data/dojo/dojox/mobile/tests/test_iPhone-ResultList.html +65 -0
  1349. data/dojo/dojox/mobile/tests/test_iPhone-RoundRect.html +27 -0
  1350. data/dojo/dojox/mobile/tests/test_iPhone-RoundRectList.html +54 -0
  1351. data/dojo/dojox/mobile/tests/test_iPhone-Settings.html +168 -0
  1352. data/dojo/dojox/mobile/tests/test_iPhone-Switch.html +23 -0
  1353. data/dojo/dojox/mobile/tests/test_iPhone-TabContainer.html +169 -0
  1354. data/dojo/dojox/mobile/tests/test_iPhone-VariableHeightList.html +99 -0
  1355. data/dojo/dojox/mobile/tests/test_progress-indicator.html +83 -0
  1356. data/dojo/dojox/mobile/tests/view-sample.html +38 -0
  1357. data/dojo/dojox/mobile/tests/view1.html +14 -0
  1358. data/dojo/dojox/mobile/tests/view1.json +18 -0
  1359. data/dojo/dojox/mobile/tests/view2.html +9 -0
  1360. data/dojo/dojox/mobile/tests/view2.json +31 -0
  1361. data/dojo/dojox/mobile/tests/view3.html +16 -0
  1362. data/dojo/dojox/mobile/tests/view3.json +44 -0
  1363. data/dojo/dojox/mobile/themes/android/android-compat.css +284 -0
  1364. data/dojo/dojox/mobile/themes/android/android.css +738 -0
  1365. data/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png +0 -0
  1366. data/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png +0 -0
  1367. data/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png +0 -0
  1368. data/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png +0 -0
  1369. data/dojo/dojox/{editor/plugins/resources/icons/findReplaceDisabled.gif → mobile/themes/android/compat/gray-arrow.png} +0 -0
  1370. data/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png +0 -0
  1371. data/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png +0 -0
  1372. data/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png +0 -0
  1373. data/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png +0 -0
  1374. data/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png +0 -0
  1375. data/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png +0 -0
  1376. data/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png +0 -0
  1377. data/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png +0 -0
  1378. data/dojo/dojox/mobile/themes/buttons-compat.css +30 -0
  1379. data/dojo/dojox/mobile/themes/buttons.css +191 -0
  1380. data/dojo/dojox/mobile/themes/compat/check-off-button.png +0 -0
  1381. data/dojo/dojox/mobile/themes/compat/check-on-button.png +0 -0
  1382. data/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png +0 -0
  1383. data/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png +0 -0
  1384. data/dojo/dojox/mobile/themes/compat/small-red-button-bg.png +0 -0
  1385. data/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png +0 -0
  1386. data/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png +0 -0
  1387. data/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png +0 -0
  1388. data/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png +0 -0
  1389. data/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png +0 -0
  1390. data/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png +0 -0
  1391. data/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png +0 -0
  1392. data/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png +0 -0
  1393. data/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png +0 -0
  1394. data/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png +0 -0
  1395. data/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png +0 -0
  1396. data/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png +0 -0
  1397. data/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png +0 -0
  1398. data/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png +0 -0
  1399. data/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png +0 -0
  1400. data/dojo/dojox/mobile/themes/iphone/iphone-app-compat.css +24 -0
  1401. data/dojo/dojox/mobile/themes/iphone/iphone-app.css +281 -0
  1402. data/dojo/dojox/mobile/themes/iphone/iphone-compat.css +290 -0
  1403. data/dojo/dojox/mobile/themes/iphone/iphone.css +751 -0
  1404. data/dojo/dojox/rails.js +143 -0
  1405. data/dojo/dojox/rails/README +41 -0
  1406. data/dojo/dojox/rails/tests/module.js +7 -0
  1407. data/dojo/dojox/rails/tests/plugd/trigger.js +187 -0
  1408. data/dojo/dojox/rails/tests/runTests.html +9 -0
  1409. data/dojo/dojox/rails/tests/success_response.html +1 -0
  1410. data/dojo/dojox/rails/tests/test_rails.html +320 -0
  1411. data/dojo/dojox/robot/recorder.js +3 -3
  1412. data/dojo/dojox/rpc/SMDLibrary/wikipedia.smd +49 -49
  1413. data/dojo/dojox/rpc/tests/resources/query +5 -5
  1414. data/dojo/dojox/sketch/Figure.js +2 -2
  1415. data/dojo/dojox/sketch/UndoStack.js +2 -2
  1416. data/dojo/dojox/validate/creditCard.js +1 -1
  1417. data/dojo/dojox/widget/Calendar.js +18 -18
  1418. data/dojo/dojox/widget/CalendarViews.js +2 -2
  1419. data/dojo/dojox/widget/ColorPicker.js +248 -73
  1420. data/dojo/dojox/widget/ColorPicker/ColorPicker.css +32 -19
  1421. data/dojo/dojox/widget/ColorPicker/ColorPicker.html +71 -30
  1422. data/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png +0 -0
  1423. data/dojo/dojox/widget/DataPresentation.js +126 -60
  1424. data/dojo/dojox/widget/Dialog.js +2 -1
  1425. data/dojo/dojox/widget/Dialog/Dialog.css +7 -0
  1426. data/dojo/dojox/widget/DynamicTooltip.js +3 -3
  1427. data/dojo/dojox/widget/FeedPortlet.js +9 -9
  1428. data/dojo/dojox/widget/FilePicker.js +2 -2
  1429. data/dojo/dojox/widget/Portlet.js +8 -0
  1430. data/dojo/dojox/widget/Portlet/Portlet.css +2 -2
  1431. data/dojo/dojox/widget/RollingList.js +11 -8
  1432. data/dojo/dojox/widget/Rotator.js +7 -1
  1433. data/dojo/dojox/widget/Standby.js +32 -5
  1434. data/dojo/dojox/widget/Toaster.js +3 -1
  1435. data/dojo/dojox/widget/UpgradeBar.js +20 -20
  1436. data/dojo/dojox/widget/Wizard.js +2 -2
  1437. data/dojo/dojox/widget/Wizard/Wizard.css +5 -0
  1438. data/dojo/dojox/widget/gauge/_Gauge.js +2 -2
  1439. data/dojo/dojox/widget/nls/ColorPicker.js +4 -2
  1440. data/dojo/dojox/widget/nls/ar/ColorPicker.js +3 -0
  1441. data/dojo/dojox/widget/nls/ca/ColorPicker.js +6 -0
  1442. data/dojo/dojox/widget/nls/da/ColorPicker.js +3 -0
  1443. data/dojo/dojox/widget/nls/el/ColorPicker.js +10 -0
  1444. data/dojo/dojox/widget/nls/fi/ColorPicker.js +3 -0
  1445. data/dojo/dojox/widget/nls/he/ColorPicker.js +10 -0
  1446. data/dojo/dojox/widget/nls/ko/ColorPicker.js +7 -1
  1447. data/dojo/dojox/widget/nls/nb/ColorPicker.js +3 -0
  1448. data/dojo/dojox/widget/nls/nl/ColorPicker.js +6 -0
  1449. data/dojo/dojox/widget/nls/pt-pt/ColorPicker.js +8 -0
  1450. data/dojo/dojox/widget/nls/ro/ColorPicker.js +5 -0
  1451. data/dojo/dojox/widget/nls/ro/FilePicker.js +6 -0
  1452. data/dojo/dojox/widget/nls/ro/Wizard.js +6 -0
  1453. data/dojo/dojox/widget/nls/sk/ColorPicker.js +3 -0
  1454. data/dojo/dojox/widget/nls/sl/ColorPicker.js +3 -0
  1455. data/dojo/dojox/widget/nls/sv/ColorPicker.js +6 -0
  1456. data/dojo/dojox/widget/nls/tr/ColorPicker.js +10 -0
  1457. data/dojo/dojox/widget/rotator/ThumbnailController.js +96 -0
  1458. data/dojo/dojox/widget/tests/test_ColorPicker.html +10 -1
  1459. data/dojo/dojox/widget/tests/test_DataPresentation.html +7 -3
  1460. data/dojo/dojox/widget/tests/test_PortletInGridContainer.html +27 -37
  1461. data/dojo/dojox/widget/tests/test_PortletInGridContainer.js +2 -1
  1462. data/dojo/dojox/widget/tests/test_PortletInGridContainerColumns.html +10 -8
  1463. data/dojo/dojox/widget/tests/test_Rotator.html +2 -0
  1464. data/dojo/dojox/widget/tests/test_Rotator_ThumbnailController.html +63 -0
  1465. data/dojo/dojox/widget/tests/test_Standby.html +4 -4
  1466. data/dojo/dojox/wire/Wire.js +32 -4
  1467. data/dojo/dojox/wire/demos/markup/demo_ActionChaining.html +1 -1
  1468. data/dojo/dojox/wire/demos/markup/demo_ConditionalActions.html +6 -6
  1469. data/dojo/dojox/wire/demos/markup/demo_TopicWiring.html +1 -1
  1470. data/dojo/dojox/xml/parser.js +2 -2
  1471. data/dojo/util/LICENSE +1 -1
  1472. data/dojo/util/buildscripts/build.bat +3 -3
  1473. data/dojo/util/buildscripts/build.js +4 -2
  1474. data/dojo/util/buildscripts/build_notice.txt +2 -4
  1475. data/dojo/util/buildscripts/build_release.sh +6 -6
  1476. data/dojo/util/buildscripts/cdnBuild.sh +39 -0
  1477. data/dojo/util/buildscripts/cdnBuild.txt +13 -13
  1478. data/dojo/util/buildscripts/cldr/README +1 -1
  1479. data/dojo/util/buildscripts/cldr/build.xml +1 -1
  1480. data/dojo/util/buildscripts/cldr/calendar.xsl +98 -74
  1481. data/dojo/util/buildscripts/cldr/ldml/CatalogManager.properties +16 -16
  1482. data/dojo/util/buildscripts/cldr/ldml/catalog +1 -1
  1483. data/dojo/util/buildscripts/cldr/ldml/core.zip +0 -0
  1484. data/dojo/util/buildscripts/copyright.txt +1 -1
  1485. data/dojo/util/buildscripts/jslib/buildUtil.js +9 -0
  1486. data/dojo/util/buildscripts/jslib/dojoGuardEnd.jsfrag +8 -7
  1487. data/dojo/util/buildscripts/profiles/baseplus.profile.js +21 -0
  1488. data/dojo/util/buildscripts/profiles/demos-all.profile.js +7 -0
  1489. data/dojo/util/buildscripts/tests/conditionalTest.js +1 -1
  1490. data/dojo/util/checkstyle/checkstyle.bat +3 -3
  1491. data/dojo/util/checkstyle/checkstyleUtil.js +68 -4
  1492. data/dojo/util/checkstyle/runCheckstyle.js +24 -2
  1493. data/dojo/util/docscripts/LICENSE +1 -1
  1494. data/dojo/util/docscripts/cheat/lib.js +1 -1
  1495. data/dojo/util/docscripts/lib/parser2/JavaScriptArray.php +2 -2
  1496. data/dojo/util/docscripts/makeCix.php +1 -1
  1497. data/dojo/util/doh/_browserRunner.js +25 -4
  1498. data/dojo/util/doh/_rhinoRunner.js +1 -0
  1499. data/dojo/util/doh/robot/DOHRobot.jar +0 -0
  1500. data/dojo/util/doh/robot/DOHRobot.java +32 -7
  1501. data/dojo/util/doh/runner.html +2 -2
  1502. data/dojo/util/doh/runner.js +14 -5
  1503. data/dojo/util/jsdoc/LICENSE +1 -1
  1504. data/dojo/util/migration/dijitCss14to15.sed +67 -0
  1505. data/dojo/util/shrinksafe/shrinksafe.jar +0 -0
  1506. data/dojo/util/shrinksafe/src/org/dojotoolkit/shrinksafe/resources/Messages.properties +1 -1
  1507. data/dojo/util/shrinksafe/tests/escapeunicode.js +1 -0
  1508. data/dojo/util/shrinksafe/tests/module.js +14 -5
  1509. data/lib/dojo_src.rb +2 -5
  1510. metadata +4940 -4373
  1511. data/dojo/dijit/tests/_base/viewportQuirks.html +0 -5
  1512. data/dojo/dijit/themes/nihilo/form/ComboBox.css +0 -12
  1513. data/dojo/dijit/themes/nihilo/form/Common_rtl.css +0 -7
  1514. data/dojo/dijit/themes/nihilo/images/editor.gif +0 -0
  1515. data/dojo/dijit/themes/nihilo/images/editorDisabled.gif +0 -0
  1516. data/dojo/dijit/themes/nihilo/images/editorDisabled_rtl.gif +0 -0
  1517. data/dojo/dijit/themes/nihilo/images/editor_rtl.gif +0 -0
  1518. data/dojo/dijit/themes/soria/form/ComboBox.css +0 -12
  1519. data/dojo/dijit/themes/soria/form/Common_rtl.css +0 -7
  1520. data/dojo/dijit/themes/soria/images/editor.gif +0 -0
  1521. data/dojo/dijit/themes/soria/images/editorDisabled.gif +0 -0
  1522. data/dojo/dijit/themes/soria/images/editorDisabled_rtl.gif +0 -0
  1523. data/dojo/dijit/themes/soria/images/editor_rtl.gif +0 -0
  1524. data/dojo/dijit/themes/templateThemeTest.html +0 -178
  1525. data/dojo/dijit/themes/tundra/form/Common_rtl.css +0 -6
  1526. data/dojo/dijit/themes/tundra/images/editor.gif +0 -0
  1527. data/dojo/dijit/themes/tundra/images/editorDisabled.gif +0 -0
  1528. data/dojo/dijit/themes/tundra/images/editorDisabled_rtl.gif +0 -0
  1529. data/dojo/dijit/themes/tundra/images/editorMaster.png +0 -0
  1530. data/dojo/dijit/themes/tundra/images/editor_rtl.gif +0 -0
  1531. data/dojo/dojo/cldr/nls/de-de/number.js +0 -4
  1532. data/dojo/dojo/cldr/nls/en-us/currency.js +0 -5
  1533. data/dojo/dojo/cldr/nls/en-us/number.js +0 -4
  1534. data/dojo/dojo/cldr/nls/es-es/gregorian.js +0 -7
  1535. data/dojo/dojo/cldr/nls/es-es/number.js +0 -4
  1536. data/dojo/dojo/cldr/nls/islamic-civil.js +0 -96
  1537. data/dojo/dojo/cldr/nls/it-it/gregorian.js +0 -5
  1538. data/dojo/dojo/cldr/nls/ja-jp/number.js +0 -4
  1539. data/dojo/dojo/cldr/nls/ko-kr/gregorian.js +0 -6
  1540. data/dojo/dojo/cldr/nls/ko-kr/number.js +0 -4
  1541. data/dojo/dojo/cldr/nls/pt-br/gregorian.js +0 -18
  1542. data/dojo/dojo/cldr/nls/zh-cn/gregorian.js +0 -12
  1543. data/dojo/dojo/cldr/nls/zh-cn/number.js +0 -4
  1544. data/dojo/dojo/cldr/nls/zh-tw/number.js +0 -6
  1545. data/dojo/dojox/editor/plugins/resources/icons/findIcon.gif +0 -0
  1546. data/dojo/dojox/editor/plugins/resources/icons/findReplace.gif +0 -0
  1547. data/dojo/dojox/editor/plugins/resources/icons/replaceIcon.gif +0 -0
  1548. data/dojo/dojox/math/LICENSE-BigInteger +0 -40
  1549. data/dojo/util/buildscripts/cldr/ldml/ldml.dtd +0 -1166
  1550. data/dojo/util/docscripts/api.json +0 -202488
  1551. data/dojo/util/docscripts/api.xml +0 -54976
  1552. data/dojo/util/resources/LICENSE +0 -195
  1553. data/dojo/util/resources/api/api.xml +0 -0
  1554. data/dojo/util/resources/api/dojo.cix +0 -0
  1555. data/dojo/util/resources/dojotoolkit.org/mini-dtk/dojo-styles.css +0 -114
  1556. data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/bg-content-left.png +0 -0
  1557. data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/bg-content-right.png +0 -0
  1558. data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/body.png +0 -0
  1559. data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/logo.png +0 -0
  1560. data/dojo/util/resources/dojotoolkit.org/mini-dtk/mini-dtk.css +0 -34
  1561. data/dojo/util/resources/dojotoolkit.org/mini-dtk/mini-dtk.psd +0 -0
  1562. data/dojo/util/resources/dojotoolkit.org/mini-dtk/style.css +0 -1092
  1563. data/dojo/util/resources/dojotoolkit.org/mini-dtk/template.html +0 -115
  1564. data/dojo/util/resources/logo/negative/dijit.logo.neg.ai +15 -4118
  1565. data/dojo/util/resources/logo/negative/dijit.logo.neg.eps +0 -5557
  1566. data/dojo/util/resources/logo/negative/dijit.logo.neg.png +0 -0
  1567. data/dojo/util/resources/logo/negative/dijit.logo.neg.svg +0 -987
  1568. data/dojo/util/resources/logo/negative/dojo.logo.neg.ai +0 -0
  1569. data/dojo/util/resources/logo/negative/dojo.logo.neg.big.png +0 -0
  1570. data/dojo/util/resources/logo/negative/dojo.logo.neg.eps +0 -64
  1571. data/dojo/util/resources/logo/negative/dojo.logo.neg.png +0 -0
  1572. data/dojo/util/resources/logo/negative/dojo.logo.neg.svg +0 -36
  1573. data/dojo/util/resources/logo/negative/dojox.logo.neg.ai +8 -4003
  1574. data/dojo/util/resources/logo/negative/dojox.logo.neg.eps +0 -5357
  1575. data/dojo/util/resources/logo/negative/dojox.logo.neg.png +0 -0
  1576. data/dojo/util/resources/logo/negative/dojox.logo.neg.svg +0 -41
  1577. data/dojo/util/resources/logo/positive/dijit.logo.ai +10 -4169
  1578. data/dojo/util/resources/logo/positive/dijit.logo.eps +0 -5562
  1579. data/dojo/util/resources/logo/positive/dijit.logo.png +0 -0
  1580. data/dojo/util/resources/logo/positive/dijit.logo.svg +0 -987
  1581. data/dojo/util/resources/logo/positive/dojo.logo.ai +15 -3719
  1582. data/dojo/util/resources/logo/positive/dojo.logo.big.png +0 -0
  1583. data/dojo/util/resources/logo/positive/dojo.logo.eps +0 -64
  1584. data/dojo/util/resources/logo/positive/dojo.logo.png +0 -0
  1585. data/dojo/util/resources/logo/positive/dojo.logo.svg +0 -36
  1586. data/dojo/util/resources/logo/positive/dojox.logo.ai +13 -4068
  1587. data/dojo/util/resources/logo/positive/dojox.logo.eps +0 -5362
  1588. data/dojo/util/resources/logo/positive/dojox.logo.png +0 -0
  1589. data/dojo/util/resources/logo/positive/dojox.logo.svg +0 -41
  1590. data/dojo/util/resources/themes/nihilo/nihilo.psd +0 -0
  1591. data/dojo/util/resources/themes/soria/soria.psd +0 -0
@@ -1,8 +1,8 @@
1
1
  dojo.provide("dojox.flash._base");
2
2
  dojo.experimental("dojox.flash");
3
3
 
4
- // for dijit.getViewport(), needed by dojox.flash.Embed.center()
5
- dojo.require("dijit._base.place");
4
+ // for dojo.window.getBox(), needed by dojox.flash.Embed.center()
5
+ dojo.require("dojo.window");
6
6
 
7
7
  dojox.flash = function(){
8
8
  // summary:
@@ -538,7 +538,7 @@ dojox.flash.Embed.prototype = {
538
538
  var elementWidth = this.width;
539
539
  var elementHeight = this.height;
540
540
 
541
- var viewport = dijit.getViewport();
541
+ var viewport = dojo.window.getBox();
542
542
 
543
543
  // compute the centered position
544
544
  var x = viewport.l + (viewport.w - elementWidth) / 2;
@@ -37,7 +37,7 @@ dojo.declare("dojox.form._BusyButtonMixin",
37
37
  // summary:
38
38
  // sets state from idle to busy
39
39
  this.isBusy = true;
40
- this.attr("disabled", true);
40
+ this.set("disabled", true);
41
41
 
42
42
  this.setLabel(this.busyLabel, this.timeout);
43
43
  },
@@ -46,7 +46,7 @@ dojo.declare("dojox.form._BusyButtonMixin",
46
46
  // summary:
47
47
  // if no timeout is set or for other reason the user can put the button back
48
48
  // to being idle
49
- this.attr("disabled", false);
49
+ this.set("disabled", false);
50
50
  this.isBusy = false;
51
51
  this.setLabel(this._label);
52
52
  if(this._timeout){ clearTimeout(this._timeout); }
@@ -53,7 +53,7 @@ dojo.declare("dojox.form._CheckedMultiSelectItem",
53
53
  // Called to force the select to match the state of the check box
54
54
  // (only on click of the checkbox) Radio-based calls _setValueAttr
55
55
  // instead.
56
- if(this.attr("disabled") || this.attr("readOnly")){ return; }
56
+ if(this.get("disabled") || this.get("readOnly")){ return; }
57
57
  if(this.parent.multiple){
58
58
  this.option.selected = this.checkBox.attr('value') && true;
59
59
  }else{
@@ -65,22 +65,11 @@ dojo.declare("dojox.form._CheckedMultiSelectItem",
65
65
  // refocus the parent
66
66
  this.parent.focus();
67
67
  },
68
-
69
- _onMouse: function(e){
70
- // summary:
71
- // Sets the hover state depending on mouse state (passes through
72
- // to the check box)
73
- if(this.attr("disabled") || this.attr("readOnly")){
74
- dojo.stopEvent(e);
75
- }else{
76
- this.checkBox._onMouse(e);
77
- }
78
- },
79
68
 
80
69
  _onClick: function(e){
81
70
  // summary:
82
71
  // Sets the click state (passes through to the check box)
83
- if(this.attr("disabled") || this.attr("readOnly")){
72
+ if(this.get("disabled") || this.get("readOnly")){
84
73
  dojo.stopEvent(e);
85
74
  }else{
86
75
  this.checkBox._onClick(e);
@@ -105,7 +94,6 @@ dojo.declare("dojox.form._CheckedMultiSelectItem",
105
94
  // summary:
106
95
  // Sets read only (or unsets) all the children as well
107
96
  this.checkBox.attr("readOnly", value);
108
- this.checkBox._setStateClass();
109
97
  this.readOnly = value;
110
98
  }
111
99
  });
@@ -118,7 +106,7 @@ dojo.declare("dojox.form.CheckedMultiSelect", dijit.form._FormSelectWidget, {
118
106
 
119
107
  baseClass: "dojoxMultiSelect",
120
108
 
121
- _mouseDown: function(e){
109
+ _onMouseDown: function(e){
122
110
  // summary:
123
111
  // Cancels the mousedown event to prevent others from stealing
124
112
  // focus
@@ -176,7 +164,6 @@ dojo.declare("dojox.form.CheckedMultiSelect", dijit.form._FormSelectWidget, {
176
164
  node.attr("readOnly", value);
177
165
  }
178
166
  });
179
- this._setStateClass();
180
167
  },
181
168
 
182
169
  uninitialize: function(){
@@ -33,6 +33,10 @@ dojo.declare("dojox.form.FileInput",
33
33
  this._keyListener = this.connect(this.fileInput,"onkeyup","_matchValue");
34
34
  },
35
35
 
36
+ //get rid of the this.connect in _FormWidget.postCreate to allow IE to show
37
+ //the file picker dialog properly
38
+ postCreate: function(){},
39
+
36
40
  _matchValue: function(){
37
41
  // summary: set the content of the upper input based on the semi-hidden file input
38
42
  this.inputNode.value = this.fileInput.value;
@@ -45,10 +45,17 @@ dojo.declare("dojox.form.FileInputAuto",
45
45
  triggerEvent: "onblur",
46
46
 
47
47
  _sent: false,
48
-
48
+
49
49
  // small template changes, new attachpoint: overlay
50
50
  templateString: dojo.cache("dojox.form","resources/FileInputAuto.html"),
51
-
51
+
52
+ onBeforeSend: function(){
53
+ // summary: Called immediately before a FileInput sends it's file via io.iframe.send.
54
+ // The return of this function is passed as the `content` member in the io.iframe IOArgs
55
+ // object.
56
+ return {};
57
+ },
58
+
52
59
  startup: function(){
53
60
  // summary: add our extra blur listeners
54
61
  this._blurListener = this.connect(this.fileInput, this.triggerEvent, "_onBlur");
@@ -112,10 +119,11 @@ dojo.declare("dojox.form.FileInputAuto",
112
119
  url: this.url,
113
120
  form: _newForm,
114
121
  handleAs: "json",
115
- handle: dojo.hitch(this,"_handleSend")
122
+ handle: dojo.hitch(this,"_handleSend"),
123
+ content: this.onBeforeSend()
116
124
  });
117
125
  },
118
-
126
+
119
127
  _handleSend: function(data,ioArgs){
120
128
  // summary: The callback to toggle the progressbar, and fire the user-defined callback
121
129
 
@@ -1,8 +1,9 @@
1
1
  dojo.provide("dojox.form.FilePickerTextBox");
2
2
 
3
- dojo.require("dojox.widget.FilePicker");
3
+ dojo.require("dojo.window");
4
4
  dojo.require("dijit.form.ValidationTextBox");
5
5
  dojo.require("dijit._HasDropDown");
6
+ dojo.require("dojox.widget.FilePicker");
6
7
 
7
8
  dojo.declare(
8
9
  "dojox.form.FilePickerTextBox",
@@ -20,10 +21,6 @@ dojo.declare(
20
21
  // searching based on that value
21
22
  searchDelay: 500,
22
23
 
23
- // _stopClickEvent: boolean
24
- // Set to false since we want to handle our own click events
25
- _stopClickEvents: false,
26
-
27
24
  // valueItem: item
28
25
  // The item, in our store, of the directory relating to our value
29
26
  valueItem: null,
@@ -103,7 +100,7 @@ dojo.declare(
103
100
  this.inherited(arguments);
104
101
  // Make sure our display is up-to-date with our value
105
102
  if(this._opened){
106
- this.dropDown.attr("pathValue", this.attr("value"));
103
+ this.dropDown.attr("pathValue", this.get("value"));
107
104
  }
108
105
  },
109
106
 
@@ -151,7 +148,7 @@ dojo.declare(
151
148
  // summary: sets the value of the widget once focus has left
152
149
  if(this.dropDown && !this._settingBlurValue){
153
150
  this._settingBlurValue = true;
154
- this.attr("value", this.focusNode.value);
151
+ this.set("value", this.focusNode.value);
155
152
  }else{
156
153
  delete this._settingBlurValue;
157
154
  this.inherited(arguments);
@@ -244,7 +241,7 @@ dojo.declare(
244
241
  }
245
242
  targetString = targetString.substring(dir.length);
246
243
  window.setTimeout(function(){
247
- dijit.scrollIntoView(first.domNode);
244
+ dojo.window.scrollIntoView(first.domNode);
248
245
  }, 1);
249
246
  fn.value = oVal + targetString;
250
247
  dijit.selectInputText(fn, oVal.length);
@@ -9,32 +9,1376 @@ dojo.require("dijit._Contained");
9
9
 
10
10
  dojo.experimental("dojox.form.FileUploader");
11
11
 
12
-
12
+
13
13
  // Usage Notes:
14
14
  // To center text vertically, use vertical-align:middle;
15
15
  // which emulates a boxModel button. Using line-height to center text
16
16
  // can cause height problems in IE6
17
-
18
-
19
- (function(){
20
-
21
- var swfPath = dojo.config.uploaderPath || dojo.moduleUrl("dojox.form", "resources/uploader.swf");
22
-
23
- var urlencode = function(url){
17
+
18
+
19
+ dojo.declare("dojox.form.FileUploader", [dijit._Widget, dijit._Templated, dijit._Contained], {
20
+ // version:
21
+ // 1.4
22
+ // summary:
23
+ // Handles File Uploading to a server (PHP script included for testing)
24
+ //
25
+ // ***NEW: FileUploader is now a WIDGET. You do not have to pass a button
26
+ // in. Passing a button is still supported until version 1.5 to maintain
27
+ // backwards compatibility, but it is not reccomended. Just create your
28
+ // uploader like any other widget.
29
+ //
30
+ // description:
31
+ // If the correct version of Flash Player is available (> 9.0) , a SWF
32
+ // is used. If Flash Player is not installed or is outdated, a typical
33
+ // html fileInput is used. This process can be overridden with
34
+ // force:"flash" or force:"html".
35
+ //
36
+ // FileUploader works with Flash 10.
37
+ //
38
+ // ***NEW: The button styles are now recreated in Flash, so there is no longer
39
+ // using an invisible Flash movie with wmode=transparent. This way the Flash button
40
+ // is actually placed inline with the DOM, not floating above it and constantly
41
+ // resetting its position. The "Windows Firefox clickable bug" should be fixed (and
42
+ // hopefully some Linux problems).
43
+ //
44
+ // ***NEW: The HTML button is created in a new way and it is now inline as is the
45
+ // FLash button. Styling is much easier and more versatile.
46
+ //
47
+ // Dependencies:
48
+ // FileUploader no longer uses FileInput.css. It now uses FileUploader.css
49
+ // See requires for JavaScript dependencies.
50
+ //
51
+ // NEW FEATURES -
52
+ // There are a ton of features and fixes in this version.
53
+ // Disabled: Can be toggled with widget.attr("disable", true|false)
54
+ // Submit: A convenience method has been added for if the uploader is in a form.
55
+ // Instead of submitting the form, call uploader.submit(theForm), and the
56
+ // Uploader will handle all of the form values and post the data.
57
+ // Selected List: If passing the ID of a container, the Uploaders will populate it
58
+ // with the selected files.
59
+ // Deleting Files: You can now delete pending files.
60
+ // Progress Built in: showProgress:true will change the button to a progress
61
+ // bar on upload.
62
+ // Progress Attach: Passing progressWidgetId will tell the Uploader of a progress
63
+ // widget. If the Progress widget is initially hidden, it will change to
64
+ // visible and then restored after upload.
65
+ // A11Y: The Flash button can be accessed with the TAB key. (The HTML cannot due
66
+ // to browser limtations)
67
+ // Deferred Uploading: (Flash only) throttles the upload to one file at a time
68
+ //
69
+ //
70
+ // CDN USERS -
71
+ // FileUpload now works with the CDN but with limitations. The SWF must
72
+ // be from the same domain as the HTML page. 'swfPath' has been exposed
73
+ // so that you may link to that file (could of course be the same SWF in
74
+ // dojox resource folder). The SWF will *NOT* work from the
75
+ // CDN server. This would require a special XML file that would allow
76
+ // access to your server, and the logistics to that is impossible.
77
+ //
78
+ // LIMITATIONS
79
+ // - This is not designed to be a part of a form, it contains its own. (See submit())
80
+ // - Currently does not in a Dialog box or a Tab where it is not initially visible,
81
+ // - The default style inherits font sizes - but a parent container should have a font size
82
+ // set somewhere of the results could be inconsistent.
83
+ //
84
+ // OPERA USERS -
85
+ // It works better than the 1.3 version. fileInputs apperantly can't have opacity
86
+ // set to zero. The Flash uploader works but files are auto-uploaded. Must be a
87
+ // flashVar problem.
88
+ //
89
+ // Safari Bug note:
90
+ // The bug is in the way Safari handles the connection:
91
+ // https://bugs.webkit.org/show_bug.cgi?id=5760
92
+ // I added this to the virtual host in the Apache conf file, and now it
93
+ // works like a charm:
94
+ // BrowserMatch Safari nokeepalive
95
+ //
96
+ swfPath: dojo.config.uploaderPath || dojo.moduleUrl("dojox.form", "resources/uploader.swf"),
97
+
98
+
99
+ templateString:'<div><div dojoAttachPoint="progNode"><div dojoAttachPoint="progTextNode"></div></div><div dojoAttachPoint="insideNode" class="uploaderInsideNode"></div></div>',
100
+
101
+ // uploadUrl: String
102
+ // The url targeted for upload. An absolute URL is preferred. Relative URLs are
103
+ // changed to absolute.
104
+ uploadUrl: "",
105
+ //
106
+ // button: dijit.form.Button or a domNode
107
+ // DEPRECATED: The "fake" button that when clicked, launches the upload dialog
108
+ // button:"",
109
+ //
110
+ // isDebug: Boolean
111
+ // If true, outputs traces from the SWF to console. What exactly gets passed
112
+ // is very relative, and depends upon what traces have been left in the DEFT SWF.
113
+ isDebug:false,
114
+ //
115
+ // devMode: Boolean.
116
+ // Re-implemented. devMode increases the logging, adding style tracing from the SWF.
117
+ devMode:false,
118
+ //
119
+ // id: String
120
+ // The object id, just like any other widget in Dojo. However, this id
121
+ // is also used as a reference for the SWF
122
+ // id: "",
123
+ //
124
+ // baseClass: String
125
+ // The name of the class that will style the button in a "normal" state.
126
+ // If baseClass is not defined, 'class' will be used.
127
+ // NOTE: By default the uploader will be styled like a dijit buttons and
128
+ // adhere to the the themes. Tundra, Soria, and Nihilo are supported.
129
+ // You can cascade the existing style by using 'class' or 'style'. If you
130
+ // overwrite baseClass, you should overwrite the remaing state classes
131
+ // that follow) as well.
132
+ baseClass:"dojoxUploaderNorm",
133
+ //
134
+ // hoverClass: String
135
+ // The name of the class that will style the button in a "hover" state. A specific
136
+ // class should be made to do this. Do not rely on a target like button:hover{...}
137
+ hoverClass:"dojoxUploaderHover",
138
+ //
139
+ // activeClass: String
140
+ // The name of the class that will style the button in a "press" state. A specific
141
+ // class should be made to do this. Do not rely on a target like button:active{...}
142
+ activeClass:"dojoxUploaderActive",
143
+ //
144
+ // disabledClass: String
145
+ // The name of the class that will style the button when its disabled.
146
+ disabledClass:"dojoxUploaderDisabled",
147
+ //
148
+ // force: String
149
+ // Use "flash" to always use Flash (and hopefully force the user to download the plugin
150
+ // if they don't have it). Use "html" to always use the HTML uploader. An empty string
151
+ // (default) will check for the right version of Flash and use HTML if not available.
152
+ force:"",
153
+ //
154
+ // uploaderType: [readonly] String
155
+ // Internal. What type of uploader is being used: "flash" or "html"
156
+ uploaderType:"",
157
+ //
158
+ // flashObject: [readonly] dojox.embed.Flash
159
+ // The object that creates the SWF embed object. Mostly Internal.
160
+ flashObject: null,
161
+ //
162
+ // flashMovie: [readonly] Function
163
+ // The SWF. Mostly Internal.
164
+ flashMovie: null,
165
+ //
166
+ // flashDiv: [readonly] HTMLNode
167
+ // DEPRECATED for insideNode
168
+ // The div that holds the SWF and form/fileInput
169
+ flashDiv: null,
170
+ //
171
+ // insideNode: [readonly] HTMLNode
172
+ // The div that holds the SWF and form/fileInput
173
+ insideNode: null,
174
+ //
175
+ // deferredUploading: Number (1 - X)
176
+ // (Flash only) throttles the upload to a certain amount of files at a time.
177
+ // By default, Flash uploads file one at a time to the server, but in parallel.
178
+ // Firefox will try to queue all files at once, leading to problems. Set this
179
+ // to the amount to upload in parallel at a time.
180
+ // Generally, 1 should work fine, but you can experiment with queuing more than
181
+ // one at a time.
182
+ // This is of course ignored if selectMultipleFiles equals false.
183
+ deferredUploading:1,
184
+ //
185
+ // fileListId: String
186
+ // The id of a dom node to be used as a container for the pending file list.
187
+ fileListId:"",
188
+ //
189
+ // uploadOnChange: Boolean
190
+ // If true, uploads imediately after a file has been selected. If false,
191
+ // waits for upload() to be called.
192
+ uploadOnChange: false,
193
+ //
194
+ // selectMultipleFiles: Boolean
195
+ // If true and flash mode, multiple files may be selected from the dialog.
196
+ // If html mode, files are not uploaded until upload() is called. The references
197
+ // to each file is incremented:uploadedfile0, uploadedfile1, uploadedfile2... etc.
198
+ selectMultipleFiles: true,
199
+ //
200
+ // htmlFieldName: String
201
+ // The name of the field of the fileInput that the server is expecting
202
+ htmlFieldName:"uploadedfile",
203
+ //
204
+ // flashFieldName: String
205
+ // The name of the field of the flash uploaded files that the server is expecting
206
+ flashFieldName:"flashUploadFiles",
207
+ //
208
+ // fileMask: Array[ Array[Description, FileTypes], Array[...]...]
209
+ // (an array, or an array of arrays)
210
+ // Restrict file selection to certain file types
211
+ // Empty array defaults to "All Files"
212
+ // example:
213
+ // fileMask = ["Images", "*.jpg;*.jpeg;*.gif;*.png"]
214
+ // or
215
+ // fileMask = [
216
+ // ["Jpeg File", "*.jpg;*.jpeg"],
217
+ // ["GIF File", "*.gif"],
218
+ // ["PNG File", "*.png"],
219
+ // ["All Images", "*.jpg;*.jpeg;*.gif;*.png"],
220
+ // ]
221
+ // NOTE: MacType is not supported, as it does not work very well.
222
+ // fileMask will work on a Mac, but differently than
223
+ // Windows.
224
+ fileMask: null,
225
+ //
226
+ // minFlashVersion: Number
227
+ // The minimum of version of Flash player to target. 0 would always install Flash, 100
228
+ // would never install it. The Flash Player has supported multiple uploads since
229
+ // version 8, so it could go as low as that safely.
230
+ minFlashVersion:9,
231
+ //
232
+ // tabIndex: Number|String
233
+ // The tab order in the DOM. Only supported by Flash. HTML Uploaders have security
234
+ // protection to prevent you from tabbing to the uploader. Stupid.
235
+ tabIndex:-1,
236
+ //
237
+ // showProgress: Boolean
238
+ // If true, the button changes to a progress bar during upload.
239
+ showProgress:false,
240
+ //
241
+ // progressMessage: String
242
+ // The message shown while the button is changed to a progress bar
243
+ progressMessage:"Loading",
244
+ //
245
+ // progressBackgroundUrl: String|Uri
246
+ // The background image to use for the button-progress
247
+ progressBackgroundUrl:dojo.moduleUrl("dijit", "themes/tundra/images/buttonActive.png"),
248
+ //
249
+ // progressBackgroundColor: String|Number
250
+ // The background color to use for the button-progress
251
+ progressBackgroundColor:"#ededed",
252
+ //
253
+ // progressWidgetId:String
254
+ // The widget id of a Dijit Progress bar. The Uploader will bind to it and update it
255
+ // automatically.
256
+ progressWidgetId:"",
257
+ //
258
+ // skipServerCheck: Boolean
259
+ // If true, will not verify that the server was sent the correct format.
260
+ // This can be safely set to true. The purpose of the server side check
261
+ // is mainly to show the dev if they've implemented the different returns
262
+ // correctly.
263
+ skipServerCheck:false,
264
+ //
265
+ // serverTimeout:Number (milliseconds)
266
+ // The amount of time given to the uploaded file
267
+ // to wait for a server response. After this amount
268
+ // of time, the onComplete is fired but with a 'server timeout'
269
+ // error in the returned item.
270
+ serverTimeout: 5000,
271
+
272
+
273
+ log: function(){
274
+ // summary:
275
+ // Due to the excessive logging necessary to make this code happen,
276
+ // It's easier to turn it on and off here in one place.
277
+ // Also helpful if there are multiple uploaders on one page.
278
+ if(this.isDebug){
279
+ console["log"](Array.prototype.slice.call(arguments).join(" "));
280
+ }
281
+ },
282
+
283
+ constructor: function(){
284
+ this._subs = [];
285
+ },
286
+
287
+ postMixInProperties: function(){
288
+ // internal stuff:
289
+ this.fileList = [];
290
+ this._cons = [];
291
+ this.fileMask = this.fileMask || [];
292
+ this.fileInputs = [];
293
+ this.fileCount = 0;
294
+ this.flashReady = false;
295
+ this._disabled = false;
296
+ this.force = this.force.toLowerCase(); // Pete FTW.
297
+ this.uploaderType = ((dojox.embed.Flash.available >= this.minFlashVersion || this.force=="flash") && this.force != "html") ? "flash" : "html";
298
+ this.deferredUploading = this.deferredUploading===true ? 1 : this.deferredUploading;
299
+
300
+ this._refNode = this.srcNodeRef;
301
+
302
+ this.getButtonStyle();
303
+
304
+
305
+ },
306
+
307
+ startup: function(){
308
+
309
+ },
310
+
311
+ postCreate: function(){
312
+ this.inherited(arguments);
313
+
314
+ // internal stuff:
315
+ this.setButtonStyle();
316
+ var createMethod;
317
+ if(this.uploaderType == "flash"){
318
+ createMethod = "createFlashUploader";
319
+ }else{
320
+ this.uploaderType = "html";
321
+ createMethod = "createHtmlUploader";
322
+
323
+ }
324
+
325
+ var w = this.getHiddenWidget();
326
+ if(w){
327
+ var __c = dojo.connect(w, "onShow", this, function(){
328
+ dojo.disconnect(__c);
329
+ this[createMethod]();
330
+ });
331
+ }else{
332
+ this[createMethod]();
333
+ }
334
+
335
+ if(this.fileListId){
336
+ this.connect(dojo.byId(this.fileListId), "click", function(evt){
337
+ var p = evt.target.parentNode.parentNode.parentNode; // in a table
338
+ if(p.id && p.id.indexOf("file_")>-1){
339
+ this.removeFile(p.id.split("file_")[1]);
340
+ }
341
+ });
342
+ }
343
+
344
+ // cleaning up solves memory leak issues in the HTML version
345
+ dojo.addOnUnload(this, this.destroy);
346
+ },
347
+
348
+ getHiddenWidget: function(){
349
+ // summary:
350
+ // Internal.
351
+ // If a parent widget has an onShow event, it is assumed
352
+ // that it is hidden and the parsing of the uploader is
353
+ // delayed until onShow fires. Note that the widget must
354
+ // fire onShow even if it is defaulted to showing/selected.
355
+ // this seems to work for Tabs (the primary fix).
356
+ //
357
+ var node = this.domNode.parentNode;
358
+ while(node){
359
+ var id = node.getAttribute && node.getAttribute("widgetId");
360
+ if(id && dijit.byId(id).onShow){
361
+ return dijit.byId(id);
362
+ }
363
+ node = node.parentNode;
364
+ }
365
+ return null;
366
+ },
367
+
368
+ getHiddenNode: function(/*DomNode*/ node){
369
+ // summary:
370
+ // Internal.
371
+ // If a parent node is styled as display:none,
372
+ // returns that node. This node will be temporarilly
373
+ // changed to display:block. Note if the node is in
374
+ // a widget that has an onShow event, this is
375
+ // overridden.
376
+ //
377
+ if(!node){ return null; }
378
+ var hidden = null;
379
+ var p = node.parentNode;
380
+ while(p.tagName.toLowerCase() != "body"){
381
+ var d = dojo.style(p, "display");
382
+ if(d == "none"){
383
+ hidden = p;
384
+ break;
385
+ }
386
+ p = p.parentNode
387
+ }
388
+ return hidden;
389
+ },
390
+
391
+ getButtonStyle: function(){
392
+ // summary:
393
+ // Internal.
394
+ // Get necessary style information from srcRefNode and
395
+ // assigned styles
396
+ //
397
+
398
+
399
+ // TODO:
400
+ // To call this from postCreate....
401
+ // could do the style stuff initially, but if hidden they will be bad sizes
402
+ // could then redo the sizes
403
+ // alt is to create a genuine button and copy THAT instead of how doing now
404
+
405
+ var refNode = this.srcNodeRef;
406
+ this._hiddenNode = this.getHiddenNode(refNode);
407
+ if(this._hiddenNode){
408
+ console.info("Turning on hidden node")
409
+ dojo.style(this._hiddenNode, "display", "block");
410
+ }
411
+
412
+
413
+ if(this.button){
414
+ console.warn("DEPRECATED: FileUploader.button - will be removed in 1.5. FileUploader should be created as widget.");
415
+ }
416
+ if(!refNode && this.button && this.button.domNode){
417
+ // backwards compat for a Dijit button
418
+ var isDijitButton = true;
419
+ var cls = this.button.domNode.className + " dijitButtonNode";
420
+ var txt = this.getText(dojo.query(".dijitButtonText", this.button.domNode)[0]);
421
+ var domTxt = '<button id="'+this.button.id+'" class="'+cls+'">'+txt+'</button>';
422
+ refNode = dojo.place(domTxt, this.button.domNode, "after"); /// Pete doesn't like this?
423
+ this.srcNodeRef = refNode;
424
+ this.button.destroy();
425
+
426
+ this.baseClass = "dijitButton";
427
+ this.hoverClass = "dijitButtonHover";
428
+ this.pressClass = "dijitButtonActive";
429
+ this.disabledClass = "dijitButtonDisabled";
430
+
431
+ }else if(!this.srcNodeRef && this.button){
432
+ refNode = this.button;
433
+ }
434
+
435
+ if(dojo.attr(refNode, "class")){
436
+ this.baseClass += " " + dojo.attr(refNode, "class");
437
+ }
438
+ dojo.attr(refNode, "class", this.baseClass);
439
+
440
+
441
+ this.norm = this.getStyle(refNode);
442
+ this.width = this.norm.w;
443
+ this.height = this.norm.h;
444
+
445
+ if(this.uploaderType == "flash"){
446
+
447
+ this.over = this.getTempNodeStyle(refNode, this.baseClass+" "+this.hoverClass, isDijitButton);
448
+ this.down = this.getTempNodeStyle(refNode, this.baseClass+" "+this.activeClass, isDijitButton);
449
+ this.dsbl = this.getTempNodeStyle(refNode, this.baseClass+" "+this.disabledClass, isDijitButton);
450
+
451
+ this.fhtml = {
452
+ cn:this.getText(refNode),
453
+ nr:this.norm,
454
+ ov:this.over,
455
+ dn:this.down,
456
+ ds:this.dsbl
457
+ };
458
+ }else{
459
+ this.fhtml = {
460
+ cn:this.getText(refNode),
461
+ nr:this.norm
462
+ }
463
+ if(this.norm.va == "middle"){
464
+ this.norm.lh = this.norm.h;
465
+ }
466
+ }
467
+
468
+ if(this.devMode){
469
+ this.log("classes - base:", this.baseClass, " hover:", this.hoverClass, "active:", this.activeClass);
470
+ this.log("fhtml:", this.fhtml)
471
+ this.log("norm:", this.norm)
472
+ this.log("over:", this.over)
473
+ this.log("down:", this.down)
474
+
475
+ }
476
+ },
477
+
478
+ setButtonStyle: function(){
479
+ // summary:
480
+ // Internal.
481
+ // Set up internal dom nodes for button construction.
482
+ //
483
+ dojo.style(this.domNode, {
484
+ width:this.fhtml.nr.w+"px",
485
+ height:(this.fhtml.nr.h)+"px",
486
+ padding:"0px",
487
+ lineHeight: "normal",
488
+ position:"relative"
489
+ });
490
+ if(this.uploaderType == "html" && this.norm.va == "middle"){
491
+ dojo.style(this.domNode, "lineHeight", this.norm.lh + "px");
492
+ }
493
+ if(this.showProgress){
494
+ this.progTextNode.innerHTML = this.progressMessage;
495
+ dojo.style(this.progTextNode, {
496
+ width:this.fhtml.nr.w+"px",
497
+ height:(this.fhtml.nr.h+0)+"px",
498
+ padding:"0px",
499
+ margin:"0px",
500
+ left:"0px",
501
+ lineHeight:(this.fhtml.nr.h+0)+"px",
502
+ position:"absolute"
503
+ });
504
+ dojo.style(this.progNode, {
505
+ width:this.fhtml.nr.w+"px",
506
+ height:(this.fhtml.nr.h+0)+"px",
507
+ padding:"0px",
508
+ margin:"0px",
509
+ left:"0px",
510
+ position:"absolute",
511
+ display:"none",
512
+ backgroundImage:"url("+this.progressBackgroundUrl+")",
513
+ backgroundPosition:"bottom",
514
+ backgroundRepeat:"repeat-x",
515
+ backgroundColor:this.progressBackgroundColor
516
+ });
517
+ }else{
518
+ dojo.destroy(this.progNode);
519
+ }
520
+ dojo.style(this.insideNode,{
521
+ position:"absolute",
522
+ top:"0px",
523
+ left:"0px",
524
+ display:""
525
+ });
526
+ dojo.addClass(this.domNode, this.srcNodeRef.className);
527
+ if(this.fhtml.nr.d.indexOf("inline")>-1){
528
+ dojo.addClass(this.domNode, "dijitInline");
529
+ }
530
+
531
+ try{
532
+ this.insideNode.innerHTML = this.fhtml.cn;
533
+ }catch(e){
534
+ // You have got to be kidding me. IE does us he favor of checking that
535
+ // we aren't inserting the improper type of content with innerHTML into
536
+ // an inline element. Alert us with an "Unknown Runtime Error". You can't
537
+ // MAKE this stuff up.
538
+ //
539
+ if(this.uploaderType == "flash"){
540
+ this.insideNode = this.insideNode.parentNode.removeChild(this.insideNode);
541
+ dojo.body().appendChild(this.insideNode);
542
+ this.insideNode.innerHTML = this.fhtml.cn;
543
+ var c = dojo.connect(this, "onReady", this, function(){ dojo.disconnect(c);
544
+ this.insideNode = this.insideNode.parentNode.removeChild(this.insideNode);
545
+ this.domNode.appendChild(this.insideNode);
546
+ });
547
+ }else{
548
+ this.insideNode.appendChild(document.createTextNode(this.fhtml.cn));
549
+ }
550
+ }
551
+ this.flashDiv = this.insideNode; //backwards compat - rem in 1.5
552
+ if(this._hiddenNode){
553
+ dojo.style(this._hiddenNode, "display", "none");
554
+ }
555
+ },
556
+
557
+
558
+ /*************************
559
+ * Public Events *
560
+ *************************/
561
+
562
+ // The following events are inherited from _Widget and still may be connected:
563
+ // onClick
564
+ // onMouseUp
565
+ // onMouseDown
566
+ // onMouseOver
567
+ // onMouseOut
568
+
569
+ onChange: function(dataArray){
570
+ // summary:
571
+ // stub to connect
572
+ // Fires when files are selected
573
+ // Event is an array of last files selected
574
+ },
575
+
576
+ onProgress: function(dataArray){
577
+ // summary:
578
+ // Stub to connect
579
+ // Fires as progress returns from SWF
580
+ // Event is an array of all files uploading
581
+ // Can be connected to for HTML uploader,
582
+ // but will not return anything.
583
+ },
584
+
585
+ onComplete: function(dataArray){
586
+ // summary:
587
+ // stub to connect
588
+ // Fires when all files have uploaded
589
+ // Event is an array of all files
590
+ },
591
+
592
+ onCancel: function(){
593
+ // summary:
594
+ // Stub to connect
595
+ // Fires when dialog box has been closed
596
+ // without a file selection
597
+ },
598
+
599
+ onError: function(/* Object or String */evtObject){
600
+ // summary:
601
+ // Fires on errors
602
+ //
603
+ //FIXME: Unsure of a standard form for receiving errors
604
+ },
605
+
606
+ onReady: function(/* dojox.form.FileUploader */ uploader){
607
+ // summary:
608
+ // Stub - Fired when dojox.embed.Flash has created the
609
+ // Flash object, but it has not necessarilly finished
610
+ // downloading, and is ready to be communicated with.
611
+ },
612
+
613
+ onLoad: function(/* dojox.form.FileUploader */ uploader){
614
+ // summary:
615
+ // Stub - SWF has been downloaded 100%.
616
+ },
617
+
618
+ /*************************
619
+ * Public Methods *
620
+ *************************/
621
+ submit: function(/* form node ? */form){
622
+ // summary:
623
+ // If FileUploader is in a form, and other data should be sent
624
+ // along with the files, use this instead of form submit.
625
+ //
626
+ var data = form ? dojo.formToObject(form) : null;
627
+ this.upload(data);
628
+ return false; // Boolean
629
+ },
630
+ upload: function(/*Object ? */data){
631
+ // summary:
632
+ // When called, begins file upload
633
+ // data: Object
634
+ // postData to be sent to server
635
+ //
636
+ if(!this.fileList.length){
637
+ return false;
638
+ }
639
+ if(!this.uploadUrl){
640
+ console.warn("uploadUrl not provided. Aborting.");
641
+ return false;
642
+ }
643
+ if(!this.showProgress){
644
+ this.set("disabled", true);
645
+ }
646
+
647
+ if(this.progressWidgetId){
648
+
649
+ var node = dijit.byId(this.progressWidgetId).domNode;
650
+ if(dojo.style(node, "display") == "none"){
651
+ this.restoreProgDisplay = "none";
652
+ dojo.style(node, "display", "block");
653
+ }
654
+ if(dojo.style(node, "visibility") == "hidden"){
655
+ this.restoreProgDisplay = "hidden";
656
+ dojo.style(node, "visibility", "visible");
657
+ }
658
+ }
659
+
660
+ if(data && !data.target){
661
+ this.postData = data;
662
+ }
663
+ this.log("upload type:", this.uploaderType, " - postData:", this.postData);
664
+
665
+ for (var i = 0; i < this.fileList.length; i++){
666
+ var f = this.fileList[i];
667
+ f.bytesLoaded = 0;
668
+ f.bytesTotal = f.size || 100000;
669
+ f.percent = 0;
670
+ }
671
+ if(this.uploaderType == "flash"){
672
+ this.uploadFlash();
673
+ }else{
674
+ this.uploadHTML();
675
+ }
676
+ // prevent form submit
677
+ return false;
678
+ },
679
+ removeFile: function(/*String*/name, /*Boolean*/noListEdit){
680
+ // summary:
681
+ // Removes a file from the pending file list.
682
+ // Removes pending data from the Flash movie
683
+ // and fileInputes from the HTML uploader.
684
+ // If a file container node is bound, the file
685
+ // will also be removed.
686
+ // name:String
687
+ // The name of the file to be removed. Typically the file name,
688
+ // such as: picture01.png
689
+ // noListEdit:Boolean
690
+ // Internal. If true don't remove files from list.
691
+ //
692
+ var i;
693
+ for(i = 0; i < this.fileList.length; i++){
694
+ if(this.fileList[i].name == name){
695
+ if(!noListEdit){ // if onComplete, don't do this
696
+ this.fileList.splice(i,1);
697
+ }
698
+ break;
699
+ }
700
+ }
701
+ if(this.uploaderType == "flash"){
702
+ this.flashMovie.removeFile(name);
703
+ }else if(!noListEdit){
704
+ dojo.destroy(this.fileInputs[i]);
705
+ this.fileInputs.splice(i,1);
706
+ this._renumberInputs();
707
+ }
708
+ if(this.fileListId){
709
+ dojo.destroy("file_"+name);
710
+ }
711
+ },
712
+ destroyAll: function(){
713
+ // summary:
714
+ // Destroys button
715
+ console.warn("DEPRECATED for 1.5 - use destroy() instead");
716
+ this.destroy();
717
+ },
718
+
719
+ destroy: function(){
720
+ // summary:
721
+ // Destroys uploader button
722
+ if(this.uploaderType == "flash" && !this.flashMovie){
723
+ this._cons.push(dojo.connect(this, "onLoad", this, "destroy"));
724
+ return;
725
+ }
726
+ dojo.forEach(this._subs, dojo.unsubscribe, dojo);
727
+ dojo.forEach(this._cons, dojo.disconnect, dojo);
728
+ if(this.scrollConnect){
729
+ dojo.disconnect(this.scrollConnect);
730
+ }
731
+ if(this.uploaderType == "flash"){
732
+ this.flashObject.destroy();
733
+ dojo.destroy(this.flashDiv);
734
+ }else{
735
+ dojo.destroy("dojoIoIframe");
736
+ dojo.destroy(this._fileInput);
737
+ dojo.destroy(this._formNode);
738
+ }
739
+ this.inherited(arguments);
740
+ },
741
+ hide: function(){
742
+ // summary:
743
+ // Hides the upload button.
744
+ console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', 'none' instead");
745
+ dojo.style(this.domNode, 'display', 'none');
746
+ },
747
+
748
+ show: function(){
749
+ // summary:
750
+ // Shows the upload button. This is called
751
+ // when within a dialog.
752
+ console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', '') instead");
753
+ dojo.style(this.domNode, 'display', '');
754
+ },
755
+ disable: function(/*Boolean*/disabled){
756
+ console.warn("DEPRECATED: FileUploader.disable() - will be removed in 1.5. Use set('disable', true) instead.")
757
+ this.set("disable", disabled);
758
+ },
759
+ /*************************
760
+ * Private Events *
761
+ *************************/
762
+ _displayProgress: function(/*Boolean or Number */display){
763
+ // summary:
764
+ // Shows and updates the built-in progress bar.
765
+ //
766
+ if(display === true){
767
+ if(this.uploaderType == "flash"){
768
+ dojo.style(this.insideNode,"left", "-2500px");
769
+ }else{
770
+ dojo.style(this.insideNode,"display", "none");
771
+ }
772
+ dojo.style(this.progNode,"display","");
773
+ }else if(display === false){
774
+ dojo.style(this.insideNode,{
775
+ display: "",
776
+ left: "0px"
777
+ });
778
+ dojo.style(this.progNode,"display","none");
779
+ }else{
780
+ var w = display * this.fhtml.nr.w;
781
+ dojo.style(this.progNode, "width", w + "px");
782
+ }
783
+ },
784
+ _animateProgress: function(){
785
+ // summary:
786
+ // Internal. Animated the built-in progress bar
787
+ this._displayProgress(true);
788
+ var _uploadDone = false;
789
+ var c = dojo.connect(this, "_complete", function(){
790
+ dojo.disconnect(c);
791
+ _uploadDone = true;
792
+ });
793
+ var w = 0;
794
+ var interval = setInterval(dojo.hitch(this, function(){
795
+ w+=5;
796
+ if(w>this.fhtml.nr.w){
797
+ w = 0;
798
+ _uploadDone = true;
799
+ }
800
+ this._displayProgress(w/this.fhtml.nr.w);
801
+
802
+ if(_uploadDone){
803
+ clearInterval(interval);
804
+ setTimeout(dojo.hitch(this, function(){
805
+ this._displayProgress(false);
806
+ }), 500);
807
+ }
808
+
809
+ }),50);
810
+ },
811
+
812
+ _error: function(evt){
813
+ //var type = evtObject.type ? evtObject.type.toUpperCase() : "ERROR";
814
+ //var msg = evtObject.msg ? evtObject.msg : evtObject;
815
+ if(typeof(evt)=="string"){
816
+ evt = new Error(evt);
817
+ }
818
+ this.onError(evt);
819
+ },
820
+
821
+ _addToFileList: function(){
822
+ // summary:
823
+ // Internal only. If there is a file list, adds a file to it.
824
+ // If you need to use a function such as this, connect to
825
+ // onChange and update outside of this widget.
826
+ //
827
+ if(this.fileListId){
828
+ var str = '';
829
+ dojo.forEach(this.fileList, function(d){
830
+ // have to use tables because of IE. Grumble.
831
+ str += '<table id="file_'+d.name+'" class="fileToUpload"><tr><td class="fileToUploadClose"></td><td class="fileToUploadName">'+d.name+'</td><td class="fileToUploadSize">'+(d.size ? Math.ceil(d.size*.001) +"kb" : "")+'</td></tr></table>'
832
+ }, this);
833
+ dojo.byId(this.fileListId).innerHTML = str;
834
+ }
835
+ },
836
+
837
+ _change: function(dataArray){
838
+ // summary:
839
+ // Internal. Updates uploader selection
840
+ if(dojo.isIE){
841
+ //IE6 uses the entire path in the name, which isn't terrible, but much different
842
+ // than everything else
843
+ dojo.forEach(dataArray, function(f){
844
+ f.name = f.name.split("\\")[f.name.split("\\").length-1];
845
+ });
846
+ }
847
+ if(this.selectMultipleFiles){
848
+ this.fileList = this.fileList.concat(dataArray);
849
+ }else{
850
+ if(this.fileList[0]){
851
+ this.removeFile(this.fileList[0].name, true);
852
+ }
853
+ this.fileList = dataArray;
854
+ }
855
+ this._addToFileList();
856
+ this.onChange(dataArray);
857
+ if(this.uploadOnChange){
858
+ if(this.uploaderType == "html"){
859
+ this._buildFileInput();
860
+ }
861
+ this.upload();
862
+ }else if(this.uploaderType == "html" && this.selectMultipleFiles){
863
+ this._buildFileInput();
864
+ this._connectInput();
865
+ }
866
+ },
867
+
868
+ _complete: function(dataArray){
869
+ // summary:
870
+ // Internal. Handles tasks after files have finished uploading
871
+ //
872
+ dataArray = dojo.isArray(dataArray) ? dataArray : [dataArray];
873
+
874
+ // Yes. Yes I do have to do three loops here. ugh.
875
+ //
876
+ // Check if one of the files had an error
877
+ dojo.forEach(dataArray, function(f){
878
+ if(f.ERROR){ this._error(f.ERROR); }
879
+ }, this);
880
+
881
+ // Have to be set them all too 100%, because
882
+ // onProgress does not always fire
883
+ dojo.forEach(this.fileList, function(f){
884
+ f.bytesLoaded = 1;
885
+ f.bytesTotal = 1;
886
+ f.percent = 100;
887
+ this._progress(f);
888
+ }, this);
889
+ // we're done. remove files.
890
+ dojo.forEach(this.fileList, function(f){
891
+ this.removeFile(f.name, true);
892
+ }, this);
893
+
894
+ this.onComplete(dataArray);
895
+
896
+ this.fileList = [];
897
+ this._resetHTML();
898
+ this.set("disabled", false);
899
+
900
+
901
+ if(this.restoreProgDisplay){
902
+ // using timeout so prog shows on screen for at least a short time
903
+ setTimeout(dojo.hitch(this, function(){
904
+ dojo.style(dijit.byId(this.progressWidgetId).domNode,
905
+ this.restoreProgDisplay == "none" ? "display" : "visibility",
906
+ this.restoreProgDisplay
907
+ );
908
+ }), 500);
909
+ }
910
+
911
+ },
912
+
913
+ _progress: function(dataObject){
914
+ // summary:
915
+ // Internal. Calculate progress
916
+ var total = 0;
917
+ var loaded = 0;
918
+ for (var i = 0; i < this.fileList.length; i++){
919
+ var f = this.fileList[i];
920
+ if(f.name == dataObject.name){
921
+ f.bytesLoaded = dataObject.bytesLoaded;
922
+ f.bytesTotal = dataObject.bytesTotal;
923
+ f.percent = Math.ceil(f.bytesLoaded / f.bytesTotal * 100);
924
+ this.log(f.name, "percent:", f.percent)
925
+ }
926
+ loaded += Math.ceil(.001 * f.bytesLoaded);
927
+ total += Math.ceil(.001 * f.bytesTotal);
928
+ }
929
+ var percent = Math.ceil(loaded / total * 100);
930
+ if(this.progressWidgetId){
931
+ dijit.byId(this.progressWidgetId).update({progress:percent+"%"});
932
+ }
933
+ if(this.showProgress){
934
+ this._displayProgress(percent * .01);
935
+ }
936
+ this.onProgress(this.fileList);
937
+
938
+ },
939
+ _getDisabledAttr: function(){
940
+ // summary:
941
+ // Internal. To get disabled use: widget.attr("disabled");
942
+ return this._disabled;
943
+ },
944
+
945
+ _setDisabledAttr: function(disabled){
946
+ // summary:
947
+ // Internal. To set disabled use: widget.attr("disabled", true | false);
948
+ if(this._disabled == disabled){ return; }
949
+
950
+ if(this.uploaderType == "flash"){
951
+ if(!this.flashReady){
952
+ var _fc = dojo.connect(this, "onLoad", this, function(){
953
+ dojo.disconnect(_fc);
954
+ this._setDisabledAttr(disabled);
955
+ });
956
+ return;
957
+ }
958
+ this._disabled = disabled;
959
+ this.flashMovie.doDisable(disabled);
960
+ }else{
961
+ this._disabled = disabled;
962
+ dojo.style(this._fileInput, "display", this._disabled ? "none" : "");
963
+ }
964
+ dojo.toggleClass(this.domNode, this.disabledClass, disabled);
965
+ },
966
+
967
+ _onFlashBlur: function(){
968
+ // summary:
969
+ // Internal. Detects when Flash movies reliquishes focus.
970
+ // We have to find all the tabIndexes in the doc and figure
971
+ // out whom to give focus to next.
972
+ this.flashMovie.blur();
973
+ if(!this.nextFocusObject && this.tabIndex){
974
+ var nodes = dojo.query("[tabIndex]");
975
+ for(var i = 0; i<nodes.length; i++){
976
+ if(nodes[i].tabIndex >= Number(this.tabIndex)+1){
977
+ this.nextFocusObject = nodes[i];
978
+ break;
979
+ }
980
+ }
981
+ }
982
+ this.nextFocusObject.focus();
983
+ },
984
+ _disconnect: function(){
985
+ // summary:
986
+ // Internal. Disconnects fileInput in favor of new one.
987
+ dojo.forEach(this._cons, dojo.disconnect, dojo);
988
+ },
989
+
990
+ /*************************
991
+ * HTML *
992
+ *************************/
993
+ uploadHTML: function(){
994
+ // summary:
995
+ // Internal. You could use this, but you should use upload() or submit();
996
+ // which can also handle the post data.
997
+ //
998
+ // NOTE on deferredUploading:
999
+ // This is not enabled for HTML. Workaround would be to force
1000
+ // singleFile uploads.
1001
+ // TODO:
1002
+ // Investigate removing fileInputs and resending form
1003
+ // multiple times adding each fileInput
1004
+ //
1005
+ if(this.selectMultipleFiles){
1006
+ dojo.destroy(this._fileInput);
1007
+ }
1008
+ this._setHtmlPostData();
1009
+ if(this.showProgress){
1010
+ this._animateProgress();
1011
+ }
1012
+ var dfd = dojo.io.iframe.send({
1013
+ url: this.uploadUrl,
1014
+ form: this._formNode,
1015
+ handleAs: "json",
1016
+ error: dojo.hitch(this, function(err){
1017
+ this._error("HTML Upload Error:" + err.message);
1018
+ }),
1019
+ load: dojo.hitch(this, function(data, ioArgs, widgetRef){
1020
+ this._complete(data);
1021
+ })
1022
+ });
1023
+ },
1024
+
1025
+ createHtmlUploader: function(){
1026
+ // summary:
1027
+ // Internal. Fires of methods to build HTML Uploader.
1028
+ this._buildForm();
1029
+ this._setFormStyle();
1030
+ this._buildFileInput();
1031
+ this._connectInput();
1032
+ this._styleContent();
1033
+ dojo.style(this.insideNode, "visibility", "visible");
1034
+ this.onReady();
1035
+ },
1036
+
1037
+ _connectInput: function(){
1038
+ // summary:
1039
+ // Internal. HTML Uploader connections. These get disconnected
1040
+ // after upload or if multi upload.
1041
+ this._disconnect();
1042
+ this._cons.push(dojo.connect(this._fileInput, "mouseover", this, function(evt){
1043
+ dojo.addClass(this.domNode, this.hoverClass);
1044
+ this.onMouseOver(evt);
1045
+ }));
1046
+ this._cons.push(dojo.connect(this._fileInput, "mouseout", this, function(evt){
1047
+ dojo.removeClass(this.domNode, this.activeClass);
1048
+ dojo.removeClass(this.domNode, this.hoverClass);
1049
+ this.onMouseOut(evt);
1050
+ this._checkHtmlCancel("off");
1051
+ }));
1052
+ this._cons.push(dojo.connect(this._fileInput, "mousedown", this, function(evt){
1053
+ dojo.addClass(this.domNode, this.activeClass);
1054
+ dojo.removeClass(this.domNode, this.hoverClass);
1055
+ this.onMouseDown(evt);
1056
+ }));
1057
+ this._cons.push(dojo.connect(this._fileInput, "mouseup", this, function(evt){
1058
+ dojo.removeClass(this.domNode, this.activeClass);
1059
+ this.onMouseUp(evt);
1060
+ this.onClick(evt);
1061
+ this._checkHtmlCancel("up");
1062
+ }));
1063
+ this._cons.push(dojo.connect(this._fileInput, "change", this, function(){
1064
+ this._checkHtmlCancel("change");
1065
+ this._change([{
1066
+ name: this._fileInput.value,
1067
+ type: "",
1068
+ size: 0
1069
+ }]);
1070
+ }));
1071
+ if(this.tabIndex>=0){
1072
+ dojo.attr(this.domNode, "tabIndex", this.tabIndex);
1073
+ }
1074
+ },
1075
+
1076
+ _checkHtmlCancel: function(mouseType){
1077
+ // summary:
1078
+ // Internal. Check if the dialog was opened and canceled without file selection.
1079
+ if(mouseType == "change"){
1080
+ this.dialogIsOpen = false;
1081
+ }
1082
+ if(mouseType == "up"){
1083
+ this.dialogIsOpen = true;
1084
+ }
1085
+ if(mouseType == "off"){
1086
+ if(this.dialogIsOpen){
1087
+ this.onCancel();
1088
+ }
1089
+ this.dialogIsOpen = false;
1090
+ }
1091
+ },
1092
+
1093
+ _styleContent: function(){
1094
+ // summary:
1095
+ // Internal.Apply style to node
1096
+ var o = this.fhtml.nr;
1097
+
1098
+ dojo.style(this.insideNode, {
1099
+ width:o.w+"px",
1100
+ height:o.va == "middle"?o.h+"px":"auto",
1101
+ textAlign:o.ta,
1102
+ paddingTop:o.p[0]+"px",
1103
+ paddingRight:o.p[1]+"px",
1104
+ paddingBottom:o.p[2]+"px",
1105
+ paddingLeft:o.p[3]+"px"
1106
+ });
1107
+
1108
+ try{
1109
+ dojo.style(this.insideNode, "lineHeight", "inherit");
1110
+ }catch(e){
1111
+ // There are certain cases where IE refuses to set lineHeight.
1112
+ // For the life of me I cannot figure out the combination of
1113
+ // styles that IE doesn't like. Steaming... Pile...
1114
+ }
1115
+
1116
+ },
1117
+ _resetHTML: function(){
1118
+ // summary:
1119
+ // Internal. After upload, this is called to clear the form and build a new
1120
+ // fileInput.
1121
+ if(this.uploaderType == "html" && this._formNode){
1122
+ this.fileInputs = [];
1123
+ dojo.query("*", this._formNode).forEach(function(n){
1124
+ dojo.destroy(n);
1125
+ });
1126
+ this.fileCount = 0;
1127
+ this._buildFileInput();
1128
+ this._connectInput();
1129
+ }
1130
+ },
1131
+ _buildForm: function(){
1132
+ // summary:
1133
+ // Build the form that holds the fileInput
1134
+ //
1135
+ if(this._formNode){ return; }
1136
+
1137
+ if(dojo.isIE){
1138
+ this._formNode = document.createElement('<form enctype="multipart/form-data" method="post">');
1139
+ this._formNode.encoding = "multipart/form-data";
1140
+ }else{
1141
+ this._formNode = document.createElement('form');
1142
+ this._formNode.setAttribute("enctype", "multipart/form-data");
1143
+ }
1144
+ this._formNode.id = dijit.getUniqueId("FileUploaderForm"); // needed for dynamic style
1145
+ this.domNode.appendChild(this._formNode);
1146
+ },
1147
+
1148
+ _buildFileInput: function(){
1149
+ // summary:
1150
+ // Build the fileInput field
1151
+ //
1152
+ if(this._fileInput){
1153
+ this._disconnect();
1154
+ // FIXME:
1155
+ // Just hiding it which works, but we lose
1156
+ // reference to it and can't remove it from
1157
+ // the upload list.
1158
+ this._fileInput.id = this._fileInput.id + this.fileCount;
1159
+ dojo.style(this._fileInput, "display", "none");
1160
+ }
1161
+ this._fileInput = document.createElement('input');
1162
+ this.fileInputs.push(this._fileInput);
1163
+ // server will need to know this variable:
1164
+ var nm = this.htmlFieldName;
1165
+ var _id = this.id;
1166
+ if(this.selectMultipleFiles){
1167
+ nm += this.fileCount;
1168
+ _id += this.fileCount;
1169
+ this.fileCount++;
1170
+ }
1171
+
1172
+ dojo.attr(this._fileInput, {
1173
+ id:this.id,
1174
+ name:nm,
1175
+ type:"file"
1176
+ });
1177
+
1178
+ dojo.addClass(this._fileInput, "dijitFileInputReal");
1179
+ console.warn("BUILD FI")
1180
+ this._formNode.appendChild(this._fileInput);
1181
+ var real = dojo.marginBox(this._fileInput);
1182
+ dojo.style(this._fileInput, {
1183
+ position:"relative",
1184
+ left:(this.fhtml.nr.w - real.w) + "px",
1185
+ opacity:0
1186
+ });
1187
+ },
1188
+
1189
+ _renumberInputs: function(){
1190
+ if(!this.selectMultipleFiles){ return; }
1191
+ var nm;
1192
+ this.fileCount = 0;
1193
+ dojo.forEach(this.fileInputs, function(inp){
1194
+ nm = this.htmlFieldName + this.fileCount;
1195
+ this.fileCount++;
1196
+ dojo.attr(inp, "name", nm);
1197
+ }, this);
1198
+ },
1199
+
1200
+ _setFormStyle: function(){
1201
+ // summary:
1202
+ // Apply a dynamic style to the form and input
1203
+ var size = Math.max(2, Math.max(Math.ceil(this.fhtml.nr.w / 60), Math.ceil(this.fhtml.nr.h / 15)));
1204
+ // Now create a style associated with the form ID
1205
+ dojox.html.insertCssRule("#" + this._formNode.id + " input", "font-size:" + size + "em");
1206
+ dojo.style(this.domNode, {
1207
+ overflow:"hidden",
1208
+ position:"relative"
1209
+ });
1210
+ dojo.style(this.insideNode, "position", "absolute");
1211
+ },
1212
+
1213
+ _setHtmlPostData: function(){
1214
+ // summary:
1215
+ // Internal.Apply postData to hidden fields in form
1216
+ if(this.postData){
1217
+ for (var nm in this.postData){
1218
+ dojo.create("input", {
1219
+ type: "hidden",
1220
+ name: nm,
1221
+ value: this.postData[nm]
1222
+ }, this._formNode);
1223
+ }
1224
+ }
1225
+ },
1226
+
1227
+ /*************************
1228
+ * FLASH *
1229
+ *************************/
1230
+ uploadFlash: function(){
1231
+ // summary:
1232
+ // Internal. You should use upload() or submit();
1233
+ try{
1234
+ if(this.showProgress){
1235
+ this._displayProgress(true);
1236
+ var c = dojo.connect(this, "_complete", this, function(){
1237
+ dojo.disconnect(c);
1238
+ this._displayProgress(false);
1239
+ });
1240
+ }
1241
+
1242
+ var o = {};
1243
+ for(var nm in this.postData){
1244
+ o[nm] = this.postData[nm];
1245
+ }
1246
+ console.warn("this.postData:", o)
1247
+ this.flashMovie.doUpload(o);
1248
+
1249
+ }catch(err){
1250
+ this._error("FileUploader - Sorry, the SWF failed to initialize." + err);
1251
+ }
1252
+ },
1253
+
1254
+ createFlashUploader: function(){
1255
+ // summary:
1256
+ // Internal. Creates Flash Uploader
1257
+ this.uploadUrl = this.uploadUrl.toString();
1258
+ if(this.uploadUrl){
1259
+ if(this.uploadUrl.toLowerCase().indexOf("http")<0 && this.uploadUrl.indexOf("/")!=0){
1260
+ // Appears to be a relative path. Attempt to
1261
+ // convert it to absolute, so it will better
1262
+ //target the SWF.
1263
+ //
1264
+ var loc = window.location.href.split("/");
1265
+ loc.pop();
1266
+ loc = loc.join("/")+"/";
1267
+ this.uploadUrl = loc+this.uploadUrl;
1268
+ this.log("SWF Fixed - Relative loc:", loc, " abs loc:", this.uploadUrl);
1269
+ }else{
1270
+ this.log("SWF URL unmodified:", this.uploadUrl)
1271
+ }
1272
+ }else{
1273
+ console.warn("Warning: no uploadUrl provided.");
1274
+ }
1275
+
1276
+ var w = this.fhtml.nr.w;
1277
+ var h = this.fhtml.nr.h;
1278
+
1279
+ var args = {
1280
+ expressInstall:true,
1281
+ path: this.swfPath.uri || this.swfPath,
1282
+ width: w,
1283
+ height: h,
1284
+ allowScriptAccess:"always",
1285
+ allowNetworking:"all",
1286
+ vars: {
1287
+ uploadDataFieldName: this.flashFieldName,
1288
+ uploadUrl: this.uploadUrl,
1289
+ uploadOnSelect: this.uploadOnChange,
1290
+ deferredUploading:this.deferredUploading || 0,
1291
+ selectMultipleFiles: this.selectMultipleFiles,
1292
+ id: this.id,
1293
+ isDebug: this.isDebug,
1294
+ devMode:this.devMode,
1295
+ flashButton:dojox.embed.flashVars.serialize("fh", this.fhtml),
1296
+ fileMask:dojox.embed.flashVars.serialize("fm", this.fileMask),
1297
+ noReturnCheck: this.skipServerCheck,
1298
+ serverTimeout:this.serverTimeout
1299
+ },
1300
+ params: {
1301
+ scale:"noscale",
1302
+ wmode:"opaque"
1303
+ }
1304
+
1305
+ };
1306
+
1307
+ this.flashObject = new dojox.embed.Flash(args, this.insideNode);
1308
+ this.flashObject.onError = dojo.hitch(function(msg){
1309
+ this._error("Flash Error: " + msg);
1310
+ });
1311
+ this.flashObject.onReady = dojo.hitch(this, function(){
1312
+ dojo.style(this.insideNode, "visibility", "visible");
1313
+ this.log("FileUploader flash object ready");
1314
+ this.onReady(this);
1315
+ });
1316
+ this.flashObject.onLoad = dojo.hitch(this, function(mov){
1317
+ this.flashMovie = mov;
1318
+ this.flashReady = true;
1319
+
1320
+ this.onLoad(this);
1321
+ });
1322
+ this._connectFlash();
1323
+
1324
+ },
1325
+
1326
+ _connectFlash: function(){
1327
+ // summary:
1328
+ // Subscribing to published topics coming from the
1329
+ // Flash uploader.
1330
+ // description:
1331
+ // Sacrificing some readbilty for compactness. this.id
1332
+ // will be on the beginning of the topic, so more than
1333
+ // one uploader can be on a page and can have unique calls.
1334
+ //
1335
+ this._doSub("/filesSelected", "_change");
1336
+ this._doSub("/filesUploaded", "_complete");
1337
+ this._doSub("/filesProgress", "_progress");
1338
+ this._doSub("/filesError", "_error");
1339
+ this._doSub("/filesCanceled", "onCancel");
1340
+ this._doSub("/stageBlur", "_onFlashBlur");
1341
+ this._doSub("/up", "onMouseUp");
1342
+ this._doSub("/down", "onMouseDown");
1343
+ this._doSub("/over", "onMouseOver");
1344
+ this._doSub("/out", "onMouseOut");
1345
+
1346
+ this.connect(this.domNode, "focus", function(){
1347
+ // TODO: some kind of indicator that the Flash button
1348
+ // is in focus
1349
+ this.flashMovie.focus();
1350
+ this.flashMovie.doFocus();
1351
+ });
1352
+ if(this.tabIndex>=0){
1353
+ dojo.attr(this.domNode, "tabIndex", this.tabIndex);
1354
+ }
1355
+ },
1356
+
1357
+ _doSub: function(subStr, funcStr){
1358
+ // summary:
1359
+ // Internal. Shortcut for subscribes to Flash movie
1360
+ this._subs.push(dojo.subscribe(this.id + subStr, this, funcStr));
1361
+ },
1362
+
1363
+ /*************************************
1364
+ * DOM INSPECTION METHODS *
1365
+ *************************************/
1366
+
1367
+ urlencode: function(url){
24
1368
  // Using symbols in place of URL chars that will break in Flash serialization.
25
1369
  if(!url || url == "none"){
26
1370
  return false;
27
1371
  }
28
1372
  return url.replace(/:/g,"||").replace(/\./g,"^^").replace("url(", "").replace(")","").replace(/'/g,"").replace(/"/g,"");
29
- };
30
-
31
- var isButton = function(node){
1373
+ },
1374
+
1375
+ isButton: function(node){
32
1376
  // testing if button for styling purposes
33
1377
  var tn = node.tagName.toLowerCase();
34
1378
  return tn == "button" || tn == "input";
35
- };
36
-
37
- var getTextStyle = function(node){
1379
+ },
1380
+
1381
+ getTextStyle: function(node){
38
1382
  // getting font info
39
1383
  var o = {};
40
1384
  o.ff = dojo.style(node, "fontFamily");
@@ -44,7 +1388,7 @@ dojo.experimental("dojox.form.FileUploader");
44
1388
  o.ff = o.ff == "sans-serif" ? "Arial" : o.ff; // Flash doesn't know what sans-serif is
45
1389
  o.fw = dojo.style(node, "fontWeight");
46
1390
  o.fi = dojo.style(node, "fontStyle");
47
- o.fs = parseInt(dojo.style(node, "fontSize"), 10);
1391
+ o.fs = parseInt(dojo.style(node, "fontSize"), 10);
48
1392
  if(dojo.style(node, "fontSize").indexOf("%") > -1){
49
1393
  // IE doesn't convert % to px. For god sakes.
50
1394
  var n = node;
@@ -67,11 +1411,11 @@ dojo.experimental("dojox.form.FileUploader");
67
1411
  o.lh = dojo.style(node, "lineHeight");
68
1412
  o.ta = dojo.style(node, "textAlign");
69
1413
  o.ta = o.ta == "start" || !o.ta ? "left" : o.ta;
70
- o.va = isButton(node) ? "middle" : o.lh == o.h ? "middle" : dojo.style(node, "verticalAlign");
1414
+ o.va = this.isButton(node) ? "middle" : o.lh == o.h ? "middle" : dojo.style(node, "verticalAlign");
71
1415
  return o;
72
- };
73
-
74
- var getText = function(node){
1416
+ },
1417
+
1418
+ getText: function(node){
75
1419
  // Get the text of the button. It's possible to use HTML in the Flash Button,
76
1420
  // but the results are not spectacular.
77
1421
  var cn = dojo.trim(node.innerHTML);
@@ -79,9 +1423,9 @@ dojo.experimental("dojox.form.FileUploader");
79
1423
  cn = escape(cn);
80
1424
  }
81
1425
  return cn;
82
- };
83
-
84
- var getStyle = function(node){
1426
+ },
1427
+
1428
+ getStyle: function(node){
85
1429
  // getting the style of a node. Using very abbreviated characters which the
86
1430
  // Flash movie understands.
87
1431
  var o = {};
@@ -96,7 +1440,7 @@ dojo.experimental("dojox.form.FileUploader");
96
1440
  // it makes black - make it white
97
1441
  o.bc = clr.a == 0 ? "#ffffff" : clr.toHex();
98
1442
  o.bc = parseInt(o.bc.substring(1,Infinity),16);
99
- var url = urlencode(dojo.style(node, "backgroundImage"));
1443
+ var url = this.urlencode(dojo.style(node, "backgroundImage"));
100
1444
  if(url){
101
1445
  o.bi = {
102
1446
  url:url,
@@ -112,9 +1456,10 @@ dojo.experimental("dojox.form.FileUploader");
112
1456
  o.bi.pos = escape(rx+" "+ry);
113
1457
  }
114
1458
  }
115
- return dojo.mixin(o, getTextStyle(node));
116
- };
117
- var getTempNodeStyle = function(node, _class, isDijitButton){
1459
+ return dojo.mixin(o, this.getTextStyle(node));
1460
+ },
1461
+
1462
+ getTempNodeStyle: function(node, _class, isDijitButton){
118
1463
  // This sets up a temp node to get the style of the hover, active, and disabled states
119
1464
  var temp, style;
120
1465
  if(isDijitButton){
@@ -123,1315 +1468,17 @@ dojo.experimental("dojox.form.FileUploader");
123
1468
  var first = temp.firstChild;
124
1469
  dojo.addClass(first, node.className);
125
1470
  dojo.addClass(temp, _class);
126
- style = getStyle(first);
1471
+ style = this.getStyle(first);
127
1472
  }else{
128
1473
  temp = dojo.place("<"+node.tagName+">"+node.innerHTML+"</"+node.tagName+">", node.parentNode);
129
1474
  dojo.addClass(temp, node.className);
130
1475
  dojo.addClass(temp, _class);
131
1476
  temp.id = node.id;
132
- style = getStyle(temp);
1477
+ style = this.getStyle(temp);
133
1478
  }
134
- dojo.destroy(temp);
1479
+ // dev note: comment out this line to see what the
1480
+ // button states look like to the FileUploader
1481
+ dojo.destroy(temp);
135
1482
  return style;
136
- };
137
-
138
- var isUpperCase = function(ltr){
139
- // returns true if character is upper case
140
- return ltr.charCodeAt(0) < 91;
141
- };
142
-
143
- dojo.declare("dojox.form.FileUploader", [dijit._Widget, dijit._Templated, dijit._Contained], {
144
- // version:
145
- // 1.4
146
- // summary:
147
- // Handles File Uploading to a server (PHP script included for testing)
148
- //
149
- // ***NEW: FileUploader is now a WIDGET. You do not have to pass a button
150
- // in. Passing a button is still supported until version 1.5 to maintain
151
- // backwards compatibility, but it is not reccomended. Just create your
152
- // uploader like any other widget.
153
- //
154
- // description:
155
- // If the correct version of Flash Player is available (> 9.0) , a SWF
156
- // is used. If Flash Player is not installed or is outdated, a typical
157
- // html fileInput is used. This process can be overridden with
158
- // force:"flash" or force:"html".
159
- //
160
- // FileUploader works with Flash 10.
161
- //
162
- // ***NEW: The button styles are now recreated in Flash, so there is no longer
163
- // using an invisible Flash movie with wmode=transparent. This way the Flash button
164
- // is actually placed inline with the DOM, not floating above it and constantly
165
- // resetting its position. The "Windows Firefox clickable bug" should be fixed (and
166
- // hopefully some Linux problems).
167
- //
168
- // ***NEW: The HTML button is created in a new way and it is now inline as is the
169
- // FLash button. Styling is much easier and more versatile.
170
- //
171
- // Dependencies:
172
- // FileUploader no longer uses FileInput.css. It now uses FileUploader.css
173
- // See requires for JavaScript dependencies.
174
- //
175
- // NEW FEATURES -
176
- // There are a ton of features and fixes in this version.
177
- // Disabled: Can be toggled with widget.attr("disable", true|false)
178
- // Submit: A convenience method has been added for if the uploader is in a form.
179
- // Instead of submitting the form, call uploader.submit(theForm), and the
180
- // Uploader will handle all of the form values and post the data.
181
- // Selected List: If passing the ID of a container, the Uploaders will populate it
182
- // with the selected files.
183
- // Deleting Files: You can now delete pending files.
184
- // Progress Built in: showProgress:true will change the button to a progress
185
- // bar on upload.
186
- // Progress Attach: Passing progressWidgetId will tell the Uploader of a progress
187
- // widget. If the Progress widget is initially hidden, it will change to
188
- // visible and then restored after upload.
189
- // A11Y: The Flash button can be accessed with the TAB key. (The HTML cannot due
190
- // to browser limtations)
191
- // Deferred Uploading: (Flash only) throttles the upload to one file at a time
192
- //
193
- //
194
- // CDN USERS -
195
- // FileUpload now works with the CDN but with limitations. The SWF must
196
- // be from the same domain as the HTML page. 'swfPath' has been exposed
197
- // so that you may link to that file (could of course be the same SWF in
198
- // dojox resource folder). The SWF will *NOT* work from the
199
- // CDN server. This would require a special XML file that would allow
200
- // access to your server, and the logistics to that is impossible.
201
- //
202
- // LIMITATIONS
203
- // - This is not designed to be a part of a form, it contains its own. (See submit())
204
- // - Currently does not in a Dialog box or a Tab where it is not initially visible,
205
- // - The default style inherits font sizes - but a parent container should have a font size
206
- // set somewhere of the results could be inconsistent.
207
- //
208
- // OPERA USERS -
209
- // It works better than the 1.3 version. fileInputs apperantly can't have opacity
210
- // set to zero. The Flash uploader works but files are auto-uploaded. Must be a
211
- // flashVar problem.
212
- //
213
- // Safari Bug note:
214
- // The bug is in the way Safari handles the connection:
215
- // https://bugs.webkit.org/show_bug.cgi?id=5760
216
- // I added this to the virtual host in the Apache conf file, and now it
217
- // works like a charm:
218
- // BrowserMatch Safari nokeepalive
219
- //
220
- templateString:'<div><div dojoAttachPoint="progNode"><div dojoAttachPoint="progTextNode"></div></div><div dojoAttachPoint="insideNode" class="uploaderInsideNode"></div></div>',
221
-
222
- // uploadUrl: String
223
- // The url targeted for upload. An absolute URL is preferred. Relative URLs are
224
- // changed to absolute.
225
- uploadUrl: "",
226
- //
227
- // button: dijit.form.Button or a domNode
228
- // DEPRECATED: The "fake" button that when clicked, launches the upload dialog
229
- // button:"",
230
- //
231
- // isDebug: Boolean
232
- // If true, outputs traces from the SWF to console. What exactly gets passed
233
- // is very relative, and depends upon what traces have been left in the DEFT SWF.
234
- isDebug:false,
235
- //
236
- // devMode: Boolean.
237
- // Re-implemented. devMode increases the logging, adding style tracing from the SWF.
238
- devMode:false,
239
- //
240
- // id: String
241
- // The object id, just like any other widget in Dojo. However, this id
242
- // is also used as a reference for the SWF
243
- // id: "",
244
- //
245
- // baseClass: String
246
- // The name of the class that will style the button in a "normal" state.
247
- // If baseClass is not defined, 'class' will be used.
248
- // NOTE: By default the uploader will be styled like a dijit buttons and
249
- // adhere to the the themes. Tundra, Soria, and Nihilo are supported.
250
- // You can cascade the existing style by using 'class' or 'style'. If you
251
- // overwrite baseClass, you should overwrite the remaing state classes
252
- // that follow) as well.
253
- baseClass:"dojoxUploaderNorm",
254
- //
255
- // hoverClass: String
256
- // The name of the class that will style the button in a "hover" state. A specific
257
- // class should be made to do this. Do not rely on a target like button:hover{...}
258
- hoverClass:"dojoxUploaderHover",
259
- //
260
- // activeClass: String
261
- // The name of the class that will style the button in a "press" state. A specific
262
- // class should be made to do this. Do not rely on a target like button:active{...}
263
- activeClass:"dojoxUploaderActive",
264
- //
265
- // disabledClass: String
266
- // The name of the class that will style the button when its disabled.
267
- disabledClass:"dojoxUploaderDisabled",
268
- //
269
- // force: String
270
- // Use "flash" to always use Flash (and hopefully force the user to download the plugin
271
- // if they don't have it). Use "html" to always use the HTML uploader. An empty string
272
- // (default) will check for the right version of Flash and use HTML if not available.
273
- force:"",
274
- //
275
- // uploaderType: [readonly] String
276
- // Internal. What type of uploader is being used: "flash" or "html"
277
- uploaderType:"",
278
- //
279
- // flashObject: [readonly] dojox.embed.Flash
280
- // The object that creates the SWF embed object. Mostly Internal.
281
- flashObject: null,
282
- //
283
- // flashMovie: [readonly] Function
284
- // The SWF. Mostly Internal.
285
- flashMovie: null,
286
- //
287
- // flashDiv: [readonly] HTMLNode
288
- // DEPRECATED for insideNode
289
- // The div that holds the SWF and form/fileInput
290
- flashDiv: null,
291
- //
292
- // insideNode: [readonly] HTMLNode
293
- // The div that holds the SWF and form/fileInput
294
- insideNode: null,
295
- //
296
- // deferredUploading: Number (1 - X)
297
- // (Flash only) throttles the upload to a certain amount of files at a time.
298
- // By default, Flash uploads file one at a time to the server, but in parallel.
299
- // Firefox will try to queue all files at once, leading to problems. Set this
300
- // to the amount to upload in parallel at a time.
301
- // Generally, 1 should work fine, but you can experiment with queuing more than
302
- // one at a time.
303
- // This is of course ignored if selectMultipleFiles equals false.
304
- deferredUploading:1,
305
- //
306
- // fileListId: String
307
- // The id of a dom node to be used as a container for the pending file list.
308
- fileListId:"",
309
- //
310
- // uploadOnChange: Boolean
311
- // If true, uploads imediately after a file has been selected. If false,
312
- // waits for upload() to be called.
313
- uploadOnChange: false,
314
- //
315
- // selectMultipleFiles: Boolean
316
- // If true and flash mode, multiple files may be selected from the dialog.
317
- // If html mode, files are not uploaded until upload() is called. The references
318
- // to each file is incremented:uploadedfile0, uploadedfile1, uploadedfile2... etc.
319
- selectMultipleFiles: true,
320
- //
321
- // htmlFieldName: String
322
- // The name of the field of the fileInput that the server is expecting
323
- htmlFieldName:"uploadedfile",
324
- //
325
- // flashFieldName: String
326
- // The name of the field of the flash uploaded files that the server is expecting
327
- flashFieldName:"flashUploadFiles",
328
- //
329
- // fileMask: Array[ Array[Description, FileTypes], Array[...]...]
330
- // (an array, or an array of arrays)
331
- // Restrict file selection to certain file types
332
- // Empty array defaults to "All Files"
333
- // example:
334
- // fileMask = ["Images", "*.jpg;*.jpeg;*.gif;*.png"]
335
- // or
336
- // fileMask = [
337
- // ["Jpeg File", "*.jpg;*.jpeg"],
338
- // ["GIF File", "*.gif"],
339
- // ["PNG File", "*.png"],
340
- // ["All Images", "*.jpg;*.jpeg;*.gif;*.png"],
341
- // ]
342
- // NOTE: MacType is not supported, as it does not work very well.
343
- // fileMask will work on a Mac, but differently than
344
- // Windows.
345
- fileMask: null,
346
- //
347
- // minFlashVersion: Number
348
- // The minimum of version of Flash player to target. 0 would always install Flash, 100
349
- // would never install it. The Flash Player has supported multiple uploads since
350
- // version 8, so it could go as low as that safely.
351
- minFlashVersion:9,
352
- //
353
- // tabIndex: Number|String
354
- // The tab order in the DOM. Only supported by Flash. HTML Uploaders have security
355
- // protection to prevent you from tabbing to the uploader. Stupid.
356
- tabIndex:-1,
357
- //
358
- // showProgress: Boolean
359
- // If true, the button changes to a progress bar during upload.
360
- showProgress:false,
361
- //
362
- // progressMessage: String
363
- // The message shown while the button is changed to a progress bar
364
- progressMessage:"Loading",
365
- //
366
- // progressBackgroundUrl: String|Uri
367
- // The background image to use for the button-progress
368
- progressBackgroundUrl:dojo.moduleUrl("dijit", "themes/tundra/images/buttonActive.png"),
369
- //
370
- // progressBackgroundColor: String|Number
371
- // The background color to use for the button-progress
372
- progressBackgroundColor:"#ededed",
373
- //
374
- // progressWidgetId:String
375
- // The widget id of a Dijit Progress bar. The Uploader will bind to it and update it
376
- // automatically.
377
- progressWidgetId:"",
378
- //
379
- // skipServerCheck: Boolean
380
- // If true, will not verify that the server was sent the correct format.
381
- // This can be safely set to true. The purpose of the server side check
382
- // is mainly to show the dev if they've implemented the different returns
383
- // correctly.
384
- skipServerCheck:false,
385
- //
386
- // serverTimeout:Number (milliseconds)
387
- // The amount of time given to the uploaded file
388
- // to wait for a server response. After this amount
389
- // of time, the onComplete is fired but with a 'server timeout'
390
- // error in the returned item.
391
- serverTimeout: 5000,
392
-
393
-
394
- log: function(){
395
- // summary:
396
- // Due to the excessive logging necessary to make this code happen,
397
- // It's easier to turn it on and off here in one place.
398
- // Also helpful if there are multiple uploaders on one page.
399
- if(this.isDebug){
400
- console.log.apply(console, arguments);
401
- }
402
- },
403
-
404
- constructor: function(){
405
- this._subs = [];
406
- },
407
-
408
- postMixInProperties: function(){
409
- // internal stuff:
410
- this.fileList = [];
411
- this._cons = [];
412
- this.fileMask = [];
413
- this.fileInputs = [];
414
- this.fileCount = 0;
415
- this.flashReady = false;
416
- this._disabled = false;
417
- this.force = this.force.toLowerCase(); // Pete FTW.
418
- this.uploaderType = ((dojox.embed.Flash.available >= this.minFlashVersion || this.force=="flash") && this.force != "html") ? "flash" : "html";
419
- this.deferredUploading = this.deferredUploading===true ? 1 : this.deferredUploading;
420
- if(!this.swfPath){
421
- this.swfPath = swfPath;
422
- }
423
-
424
- this._refNode = this.srcNodeRef;
425
- this.getButtonStyle();
426
- },
427
-
428
- startup: function(){
429
-
430
- },
431
-
432
- postCreate: function(){
433
- this.inherited(arguments);
434
- //this.getButtonStyle();
435
-
436
- // internal stuff:
437
- this.setButtonStyle();
438
- var createMethod;
439
- if(this.uploaderType == "flash"){
440
- createMethod = "createFlashUploader";
441
- }else{
442
- this.uploaderType = "html";
443
- createMethod = "createHtmlUploader";
444
-
445
- }
446
-
447
- if(this._hiddenNode){
448
- var w = dijit.byNode(this._hiddenNode)
449
- this.connect(w, "onShow", createMethod);
450
- }else{
451
- this[createMethod]();
452
- }
453
-
454
- if(this.fileListId){
455
- this.connect(dojo.byId(this.fileListId), "click", function(evt){
456
- var p = evt.target.parentNode.parentNode.parentNode; // in a table
457
- if(p.id && p.id.indexOf("file_")>-1){
458
- this.removeFile(p.id.split("file_")[1]);
459
- }
460
- });
461
- }
462
-
463
- // cleaning up solves memory leak issues in the HTML version
464
- dojo.addOnUnload(this, this.destroy);
465
- },
466
-
467
- getButtonStyle: function(){
468
- // summary:
469
- // Internal.
470
- // Get necessary style information from srcRefNode and
471
- // assigned styles
472
- //
473
-
474
-
475
- // TODO:
476
- // To call this from postCreate....
477
- // could do the style stuff initially, but if hidden they will be bad sizes
478
- // could then redo the sizes
479
- // alt is to create a genuine button and copy THAT instead of how now
480
-
481
- var refNode = this.srcNodeRef//this.domNode;
482
- var p = refNode.parentNode;
483
- while(p.tagName.toLowerCase() != "body"){
484
- var d = dojo.style(p, "display");
485
- if(d == "none"){
486
- this._hiddenNode = p;
487
- break;
488
- }
489
- p = p.parentNode
490
- }
491
- if(this._hiddenNode){
492
- dojo.style(this._hiddenNode, "display", "block");
493
- }
494
-
495
-
496
- if(this.button){
497
- console.warn("DEPRECATED: FileUploader.button - will be removed in 1.5. FileUploader should be created as widget.");
498
- }
499
- if(!refNode && this.button && this.button.domNode){
500
- // backwards compat for a Dijit button
501
- var isDijitButton = true;
502
- var cls = this.button.domNode.className + " dijitButtonNode";
503
- var txt = getText(dojo.query(".dijitButtonText", this.button.domNode)[0]);
504
- var domTxt = '<button id="'+this.button.id+'" class="'+cls+'">'+txt+'</button>';
505
- refNode = dojo.place(domTxt, this.button.domNode, "after"); /// Pete doesn't like this?
506
- this.srcNodeRef = refNode;
507
- this.button.destroy();
508
-
509
- this.baseClass = "dijitButton";
510
- this.hoverClass = "dijitButtonHover";
511
- this.pressClass = "dijitButtonActive";
512
- this.disabledClass = "dijitButtonDisabled";
513
-
514
- }else if(!this.srcNodeRef && this.button){
515
- refNode = this.button;
516
- }
517
-
518
- if(dojo.attr(refNode, "class")){
519
- this.baseClass += " " + dojo.attr(refNode, "class");
520
- }
521
- dojo.attr(refNode, "class", this.baseClass);
522
-
523
-
524
- this.norm = getStyle(refNode);
525
- this.width = this.norm.w;
526
- this.height = this.norm.h;
527
-
528
- if(this.uploaderType == "flash"){
529
-
530
- this.over = getTempNodeStyle(refNode, this.baseClass+" "+this.hoverClass, isDijitButton);
531
- this.down = getTempNodeStyle(refNode, this.baseClass+" "+this.activeClass, isDijitButton);
532
- this.dsbl = getTempNodeStyle(refNode, this.baseClass+" "+this.disabledClass, isDijitButton);
533
-
534
- this.fhtml = {
535
- cn:getText(refNode),
536
- nr:this.norm,
537
- ov:this.over,
538
- dn:this.down,
539
- ds:this.dsbl
540
- };
541
- }else{
542
- this.fhtml = {
543
- cn:getText(refNode),
544
- nr:this.norm
545
- }
546
- if(this.norm.va == "middle"){
547
- this.norm.lh = this.norm.h;
548
- }
549
- }
550
-
551
- if(this.devMode){
552
- this.log("classes - base:", this.baseClass, " hover:", this.hoverClass, "active:", this.activeClass);
553
- this.log("fhtml:", this.fhtml)
554
- this.log("norm:", this.norm)
555
- this.log("over:", this.over)
556
- this.log("down:", this.down)
557
-
558
- }
559
- },
560
-
561
- setButtonStyle: function(){
562
- // summary:
563
- // Internal.
564
- // Set up internal dom nodes for button construction.
565
- //
566
- dojo.style(this.domNode, {
567
- width:this.fhtml.nr.w+"px",
568
- height:(this.fhtml.nr.h)+"px",
569
- padding:"0px",
570
- lineHeight: "normal",
571
- position:"relative"
572
- });
573
- if(this.uploaderType == "html" && this.norm.va == "middle"){
574
- dojo.style(this.domNode, "lineHeight", this.norm.lh + "px");
575
- }
576
- if(this.showProgress){
577
- this.progTextNode.innerHTML = this.progressMessage;
578
- dojo.style(this.progTextNode, {
579
- width:this.fhtml.nr.w+"px",
580
- height:(this.fhtml.nr.h+0)+"px",
581
- padding:"0px",
582
- margin:"0px",
583
- left:"0px",
584
- lineHeight:(this.fhtml.nr.h+0)+"px",
585
- position:"absolute"
586
- });
587
- dojo.style(this.progNode, {
588
- width:this.fhtml.nr.w+"px",
589
- height:(this.fhtml.nr.h+0)+"px",
590
- padding:"0px",
591
- margin:"0px",
592
- left:"0px",
593
- position:"absolute",
594
- display:"none",
595
- backgroundImage:"url("+this.progressBackgroundUrl+")",
596
- backgroundPosition:"bottom",
597
- backgroundRepeat:"repeat-x",
598
- backgroundColor:this.progressBackgroundColor
599
- });
600
- }else{
601
- dojo.destroy(this.progNode);
602
- }
603
- dojo.style(this.insideNode,{
604
- position:"absolute",
605
- top:"0px",
606
- left:"0px",
607
- display:""
608
- });
609
- dojo.addClass(this.domNode, this.srcNodeRef.className);
610
- if(this.fhtml.nr.d.indexOf("inline")>-1){
611
- dojo.addClass(this.domNode, "dijitInline");
612
- }
613
-
614
- try{
615
- this.insideNode.innerHTML = this.fhtml.cn;
616
- }catch(e){
617
- // You have got to be kidding me. IE does us he favor of checking that
618
- // we aren't inserting the improper type of content with innerHTML into
619
- // an inline element. Alert us with an "Unknown Runtime Error". You can't
620
- // MAKE this stuff up.
621
- //
622
- if(this.uploaderType == "flash"){
623
- this.insideNode = this.insideNode.parentNode.removeChild(this.insideNode);
624
- dojo.body().appendChild(this.insideNode);
625
- this.insideNode.innerHTML = this.fhtml.cn;
626
- var c = dojo.connect(this, "onReady", this, function(){ dojo.disconnect(c);
627
- this.insideNode = this.insideNode.parentNode.removeChild(this.insideNode);
628
- this.domNode.appendChild(this.insideNode);
629
- });
630
- }else{
631
- this.insideNode.appendChild(document.createTextNode(this.fhtml.cn));
632
- }
633
- }
634
- this.flashDiv = this.insideNode; //backwards compat - rem in 1.5
635
- if(this._hiddenNode){
636
- dojo.style(this._hiddenNode, "display", "none");
637
- }
638
- },
639
-
640
-
641
- /*************************
642
- * Public Events *
643
- *************************/
644
-
645
- // The following events are inherited from _Widget and still may be connected:
646
- // onClick
647
- // onMouseUp
648
- // onMouseDown
649
- // onMouseOver
650
- // onMouseOut
651
-
652
- onChange: function(dataArray){
653
- // summary:
654
- // stub to connect
655
- // Fires when files are selected
656
- // Event is an array of last files selected
657
- },
658
-
659
- onProgress: function(dataArray){
660
- // summary:
661
- // Stub to connect
662
- // Fires as progress returns from SWF
663
- // Event is an array of all files uploading
664
- // Can be connected to for HTML uploader,
665
- // but will not return anything.
666
- },
667
-
668
- onComplete: function(dataArray){
669
- // summary:
670
- // stub to connect
671
- // Fires when all files have uploaded
672
- // Event is an array of all files
673
- },
674
-
675
- onCancel: function(){
676
- // summary:
677
- // Stub to connect
678
- // Fires when dialog box has been closed
679
- // without a file selection
680
- },
681
-
682
- onError: function(/* Object or String */evtObject){
683
- // summary:
684
- // Fires on errors
685
- //
686
- //FIXME: Unsure of a standard form for receiving errors
687
- },
688
-
689
- onReady: function(/* dojox.form.FileUploader */ uploader){
690
- // summary:
691
- // Stub - Fired when dojox.embed.Flash has created the
692
- // Flash object, but it has not necessarilly finished
693
- // downloading, and is ready to be communicated with.
694
- },
695
-
696
- onLoad: function(/* dojox.form.FileUploader */ uploader){
697
- // summary:
698
- // Stub - SWF has been downloaded 100%.
699
- },
700
-
701
- /*************************
702
- * Public Methods *
703
- *************************/
704
- submit: function(/* form node ? */form){
705
- // summary:
706
- // If FileUploader is in a form, and other data should be sent
707
- // along with the files, use this instead of form submit.
708
- //
709
- var data = form ? dojo.formToObject(form) : null;
710
- this.upload(data);
711
- return false; // Boolean
712
- },
713
- upload: function(/*Object ? */data){
714
- // summary:
715
- // When called, begins file upload
716
- // data: Object
717
- // postData to be sent to server
718
- //
719
- if(!this.fileList.length){
720
- return false;
721
- }
722
- if(!this.uploadUrl){
723
- console.warn("uploadUrl not provided. Aborting.");
724
- return false;
725
- }
726
- if(!this.showProgress){
727
- this.attr("disabled", true);
728
- }
729
-
730
- if(this.progressWidgetId){
731
-
732
- var node = dijit.byId(this.progressWidgetId).domNode;
733
- if(dojo.style(node, "display") == "none"){
734
- this.restoreProgDisplay = "none";
735
- dojo.style(node, "display", "block");
736
- }
737
- if(dojo.style(node, "visibility") == "hidden"){
738
- this.restoreProgDisplay = "hidden";
739
- dojo.style(node, "visibility", "visible");
740
- }
741
- }
742
-
743
- if(data && !data.target){
744
- this.postData = data;
745
- }
746
- this.log("upload type:", this.uploaderType, " - postData:", this.postData);
747
-
748
- for (var i = 0; i < this.fileList.length; i++){
749
- var f = this.fileList[i];
750
- f.bytesLoaded = 0;
751
- f.bytesTotal = f.size || 100000;
752
- f.percent = 0;
753
- }
754
- if(this.uploaderType == "flash"){
755
- this.uploadFlash();
756
- }else{
757
- this.uploadHTML();
758
- }
759
- // prevent form submit
760
- return false;
761
- },
762
- removeFile: function(/*String*/name, /*Boolean*/noListEdit){
763
- // summary:
764
- // Removes a file from the pending file list.
765
- // Removes pending data from the Flash movie
766
- // and fileInputes from the HTML uploader.
767
- // If a file container node is bound, the file
768
- // will also be removed.
769
- // name:String
770
- // The name of the file to be removed. Typically the file name,
771
- // such as: picture01.png
772
- // noListEdit:Boolean
773
- // Internal. If true don't remove files from list.
774
- //
775
- var i;
776
- for(i = 0; i < this.fileList.length; i++){
777
- if(this.fileList[i].name == name){
778
- if(!noListEdit){ // if onComplete, don't do this
779
- this.fileList.splice(i,1);
780
- }
781
- break;
782
- }
783
- }
784
- if(this.uploaderType == "flash"){
785
- this.flashMovie.removeFile(name);
786
- }else if(!noListEdit){
787
- dojo.destroy(this.fileInputs[i]);
788
- this.fileInputs.splice(i,1);
789
- this._renumberInputs();
790
- }
791
- if(this.fileListId){
792
- dojo.destroy("file_"+name);
793
- }
794
- },
795
- destroyAll: function(){
796
- // summary:
797
- // Destroys button
798
- console.warn("DEPRECATED for 1.5 - use destroy() instead");
799
- this.destroy();
800
- },
801
-
802
- destroy: function(){
803
- // summary:
804
- // Destroys uploader button
805
- if(this.uploaderType == "flash" && !this.flashMovie){
806
- this._cons.push(dojo.connect(this, "onLoad", this, "destroy"));
807
- return;
808
- }
809
- dojo.forEach(this._subs, dojo.unsubscribe, dojo);
810
- dojo.forEach(this._cons, dojo.disconnect, dojo);
811
- if(this.scrollConnect){
812
- dojo.disconnect(this.scrollConnect);
813
- }
814
- if(this.uploaderType == "flash"){
815
- this.flashObject.destroy();
816
- dojo.destroy(this.flashDiv);
817
- }else{
818
- dojo.destroy("dojoIoIframe");
819
- dojo.destroy(this._fileInput);
820
- dojo.destroy(this._formNode);
821
- }
822
- this.inherited(arguments);
823
- },
824
- hide: function(){
825
- // summary:
826
- // Hides the upload button.
827
- console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', 'none' instead");
828
- dojo.style(this.domNode, 'display', 'none');
829
- },
830
-
831
- show: function(){
832
- // summary:
833
- // Shows the upload button. This is called
834
- // when within a dialog.
835
- console.warn("DEPRECATED for 1.5 - use dojo.style(domNode, 'display', '') instead");
836
- dojo.style(this.domNode, 'display', '');
837
- },
838
- disable: function(/*Boolean*/disabled){
839
- console.warn("DEPRECATED: FileUploader.disable() - will be removed in 1.5. Use attr('disable', true) instead.")
840
- this.attr("disable", disabled);
841
- },
842
- /*************************
843
- * Private Events *
844
- *************************/
845
- _displayProgress: function(/*Boolean or Number */display){
846
- // summary:
847
- // Shows and updates the built-in progress bar.
848
- //
849
- if(display === true){
850
- if(this.uploaderType == "flash"){
851
- dojo.style(this.insideNode,"left", "-2500px");
852
- }else{
853
- dojo.style(this.insideNode,"display", "none");
854
- }
855
- dojo.style(this.progNode,"display","");
856
- }else if(display === false){
857
- dojo.style(this.insideNode,{
858
- display: "",
859
- left: "0px"
860
- });
861
- dojo.style(this.progNode,"display","none");
862
- }else{
863
- var w = display * this.fhtml.nr.w;
864
- dojo.style(this.progNode, "width", w + "px");
865
- }
866
- },
867
- _animateProgress: function(){
868
- // summary:
869
- // Internal. Animated the built-in progress bar
870
- this._displayProgress(true);
871
- var _uploadDone = false;
872
- var c = dojo.connect(this, "_complete", function(){
873
- dojo.disconnect(c);
874
- _uploadDone = true;
875
- });
876
- var w = 0;
877
- var interval = setInterval(dojo.hitch(this, function(){
878
- w+=5;
879
- if(w>this.fhtml.nr.w){
880
- w = 0;
881
- _uploadDone = true;
882
- }
883
- this._displayProgress(w/this.fhtml.nr.w);
884
-
885
- if(_uploadDone){
886
- clearInterval(interval);
887
- setTimeout(dojo.hitch(this, function(){
888
- this._displayProgress(false);
889
- }), 500);
890
- }
891
-
892
- }),50);
893
- },
894
-
895
- _error: function(evt){
896
- //var type = evtObject.type ? evtObject.type.toUpperCase() : "ERROR";
897
- //var msg = evtObject.msg ? evtObject.msg : evtObject;
898
- if(typeof(evt)=="string"){
899
- evt = new Error(evt);
900
- }
901
- this.onError(evt);
902
- },
903
-
904
- _addToFileList: function(){
905
- // summary:
906
- // Internal only. If there is a file list, adds a file to it.
907
- // If you need to use a function such as this, connect to
908
- // onChange and update outside of this widget.
909
- //
910
- if(this.fileListId){
911
- var str = '';
912
- dojo.forEach(this.fileList, function(d){
913
- // have to use tables because of IE. Grumble.
914
- str += '<table id="file_'+d.name+'" class="fileToUpload"><tr><td class="fileToUploadClose"></td><td class="fileToUploadName">'+d.name+'</td><td class="fileToUploadSize">'+Math.ceil(d.size*.001)+'kb</td></tr></table>'
915
- }, this);
916
- dojo.byId(this.fileListId).innerHTML = str;
917
- }
918
- },
919
-
920
- _change: function(dataArray){
921
- // summary:
922
- // Internal. Updates uploader selection
923
- if(dojo.isIE){
924
- //IE6 uses the entire path in the name, which isn't terrible, but much different
925
- // than everything else
926
- dojo.forEach(dataArray, function(f){
927
- f.name = f.name.split("\\")[f.name.split("\\").length-1];
928
- });
929
- }
930
- if(this.selectMultipleFiles){
931
- this.fileList = this.fileList.concat(dataArray);
932
- }else{
933
- if(this.fileList[0]){
934
- this.removeFile(this.fileList[0].name, true);
935
- }
936
- this.fileList = dataArray;
937
- }
938
- this._addToFileList();
939
- this.onChange(dataArray);
940
- if(this.uploadOnChange){
941
- this._buildFileInput();
942
- this.upload();
943
- }else if(this.uploaderType == "html" && this.selectMultipleFiles){
944
- this._buildFileInput();
945
- this._connectInput();
946
- }
947
- },
948
-
949
- _complete: function(dataArray){
950
- // summary:
951
- // Internal. Handles tasks after files have finished uploading
952
- //
953
- dataArray = dojo.isArray(dataArray) ? dataArray : [dataArray];
954
-
955
- // Yes. Yes I do have to do three loops here. ugh.
956
- //
957
- // Check if one of the files had an error
958
- dojo.forEach(dataArray, function(f){
959
- if(f.ERROR){ this._error(f.ERROR); }
960
- }, this);
961
-
962
- // Have to be set them all too 100%, because
963
- // onProgress does not always fire
964
- dojo.forEach(this.fileList, function(f){
965
- f.bytesLoaded = 1;
966
- f.bytesTotal = 1;
967
- f.percent = 100;
968
- this._progress(f);
969
- }, this);
970
- // we're done. remove files.
971
- dojo.forEach(this.fileList, function(f){
972
- this.removeFile(f.name, true);
973
- }, this);
974
-
975
- this.onComplete(dataArray);
976
-
977
- this.fileList = [];
978
- this._resetHTML();
979
- this.attr("disabled", false);
980
-
981
-
982
- if(this.restoreProgDisplay){
983
- // using timeout so prog shows on screen for at least a short time
984
- setTimeout(dojo.hitch(this, function(){
985
- dojo.style(dijit.byId(this.progressWidgetId).domNode,
986
- this.restoreProgDisplay == "none" ? "display" : "visibility",
987
- this.restoreProgDisplay
988
- );
989
- }), 500);
990
- }
991
-
992
- },
993
-
994
- _progress: function(dataObject){
995
- // summary:
996
- // Internal. Calculate progress
997
- var total = 0;
998
- var loaded = 0;
999
- for (var i = 0; i < this.fileList.length; i++){
1000
- var f = this.fileList[i];
1001
- if(f.name == dataObject.name){
1002
- f.bytesLoaded = dataObject.bytesLoaded;
1003
- f.bytesTotal = dataObject.bytesTotal;
1004
- f.percent = Math.ceil(f.bytesLoaded / f.bytesTotal * 100);
1005
- this.log(f.name, "percent:", f.percent)
1006
- }
1007
- loaded += Math.ceil(.001 * f.bytesLoaded);
1008
- total += Math.ceil(.001 * f.bytesTotal);
1009
- }
1010
- var percent = Math.ceil(loaded / total * 100);
1011
- if(this.progressWidgetId){
1012
- dijit.byId(this.progressWidgetId).update({progress:percent+"%"});
1013
- }
1014
- if(this.showProgress){
1015
- this._displayProgress(percent * .01);
1016
- }
1017
- this.onProgress(this.fileList);
1018
-
1019
- },
1020
- _getDisabledAttr: function(){
1021
- // summary:
1022
- // Internal. To get disabled use: widget.attr("disabled");
1023
- return this._disabled;
1024
- },
1025
-
1026
- _setDisabledAttr: function(disabled){
1027
- // summary:
1028
- // Internal. To set disabled use: widget.attr("disabled", true | false);
1029
- if(this._disabled == disabled){ return; }
1030
-
1031
- if(this.uploaderType == "flash"){
1032
- if(!this.flashReady){
1033
- var _fc = dojo.connect(this, "onLoad", this, function(){
1034
- dojo.disconnect(_fc);
1035
- this._setDisabledAttr(disabled);
1036
- });
1037
- return;
1038
- }
1039
- this._disabled = disabled;
1040
- this.flashMovie.doDisable(disabled);
1041
- }else{
1042
- this._disabled = disabled;
1043
- dojo.style(this._fileInput, "display", this._disabled ? "none" : "");
1044
- }
1045
- dojo.toggleClass(this.domNode, this.disabledClass, disabled);
1046
- },
1047
-
1048
- _onFlashBlur: function(){
1049
- // summary:
1050
- // Internal. Detects when Flash movies reliquishes focus.
1051
- // We have to find all the tabIndexes in the doc and figure
1052
- // out whom to give focus to next.
1053
- this.flashMovie.blur();
1054
- if(!this.nextFocusObject && this.tabIndex){
1055
- var nodes = dojo.query("[tabIndex]");
1056
- for(var i = 0; i<nodes.length; i++){
1057
- if(nodes[i].tabIndex >= Number(this.tabIndex)+1){
1058
- this.nextFocusObject = nodes[i];
1059
- break;
1060
- }
1061
- }
1062
- }
1063
- this.nextFocusObject.focus();
1064
- },
1065
- _disconnect: function(){
1066
- // summary:
1067
- // Internal. Disconnects fileInput in favor of new one.
1068
- dojo.forEach(this._cons, dojo.disconnect, dojo);
1069
- },
1070
-
1071
- /*************************
1072
- * HTML *
1073
- *************************/
1074
- uploadHTML: function(){
1075
- // summary:
1076
- // Internal. You could use this, but you should use upload() or submit();
1077
- // which can also handle the post data.
1078
- //
1079
- // NOTE on deferredUploading:
1080
- // This is not enabled for HTML. Workaround would be to force
1081
- // singleFile uploads.
1082
- // TODO:
1083
- // Investigate removing fileInputs and resending form
1084
- // multiple times adding each fileInput
1085
- //
1086
- if(this.selectMultipleFiles){
1087
- dojo.destroy(this._fileInput);
1088
- }
1089
- this._setHtmlPostData();
1090
- if(this.showProgress){
1091
- this._animateProgress();
1092
- }
1093
- var dfd = dojo.io.iframe.send({
1094
- url: this.uploadUrl,
1095
- form: this._formNode,
1096
- handleAs: "json",
1097
- error: dojo.hitch(this, function(err){
1098
- this._error("HTML Upload Error:" + err.message);
1099
- }),
1100
- load: dojo.hitch(this, function(data, ioArgs, widgetRef){
1101
- this._complete(data);
1102
- })
1103
- });
1104
- },
1105
-
1106
- createHtmlUploader: function(){
1107
- // summary:
1108
- // Internal. Fires of methods to build HTML Uploader.
1109
- this._buildForm();
1110
- this._setFormStyle();
1111
- this._buildFileInput();
1112
- this._connectInput();
1113
- this._styleContent();
1114
- dojo.style(this.insideNode, "visibility", "visible");
1115
- this.onReady();
1116
- },
1117
-
1118
- _connectInput: function(){
1119
- // summary:
1120
- // Internal. HTML Uploader connections. These get disconnected
1121
- // after upload or if multi upload.
1122
- this._disconnect();
1123
- this._cons.push(dojo.connect(this._fileInput, "mouseover", this, function(evt){
1124
- dojo.addClass(this.domNode, this.hoverClass);
1125
- this.onMouseOver(evt);
1126
- }));
1127
- this._cons.push(dojo.connect(this._fileInput, "mouseout", this, function(evt){
1128
- dojo.removeClass(this.domNode, this.activeClass);
1129
- dojo.removeClass(this.domNode, this.hoverClass);
1130
- this.onMouseOut(evt);
1131
- this._checkHtmlCancel("off");
1132
- }));
1133
- this._cons.push(dojo.connect(this._fileInput, "mousedown", this, function(evt){
1134
- dojo.addClass(this.domNode, this.activeClass);
1135
- dojo.removeClass(this.domNode, this.hoverClass);
1136
- this.onMouseDown(evt);
1137
- }));
1138
- this._cons.push(dojo.connect(this._fileInput, "mouseup", this, function(evt){
1139
- dojo.removeClass(this.domNode, this.activeClass);
1140
- this.onMouseUp(evt);
1141
- this.onClick(evt);
1142
- this._checkHtmlCancel("up");
1143
- }));
1144
- this._cons.push(dojo.connect(this._fileInput, "change", this, function(){
1145
- this._checkHtmlCancel("change");
1146
- this._change([{
1147
- name: this._fileInput.value,
1148
- type: "",
1149
- size: 0
1150
- }]);
1151
- }));
1152
- if(this.tabIndex>=0){
1153
- dojo.attr(this.domNode, "tabIndex", this.tabIndex);
1154
- }
1155
- },
1156
-
1157
- _checkHtmlCancel: function(mouseType){
1158
- // summary:
1159
- // Internal. Check if the dialog was opened and canceled without file selection.
1160
- if(mouseType == "change"){
1161
- this.dialogIsOpen = false;
1162
- }
1163
- if(mouseType == "up"){
1164
- this.dialogIsOpen = true;
1165
- }
1166
- if(mouseType == "off"){
1167
- if(this.dialogIsOpen){
1168
- this.onCancel();
1169
- }
1170
- this.dialogIsOpen = false;
1171
- }
1172
- },
1173
-
1174
- _styleContent: function(){
1175
- // summary:
1176
- // Internal.Apply style to node
1177
- var o = this.fhtml.nr;
1178
-
1179
- dojo.style(this.insideNode, {
1180
- width:o.w+"px",
1181
- height:o.va == "middle"?o.h+"px":"auto",
1182
- textAlign:o.ta,
1183
- paddingTop:o.p[0]+"px",
1184
- paddingRight:o.p[1]+"px",
1185
- paddingBottom:o.p[2]+"px",
1186
- paddingLeft:o.p[3]+"px"
1187
- });
1188
-
1189
- try{
1190
- dojo.style(this.insideNode, "lineHeight", "inherit");
1191
- }catch(e){
1192
- // There are certain cases where IE refuses to set lineHeight.
1193
- // For the life of me I cannot figure out the combination of
1194
- // styles that IE doesn't like. Steaming... Pile...
1195
- }
1196
-
1197
- },
1198
- _resetHTML: function(){
1199
- // summary:
1200
- // Internal. After upload, this is called to clear the form and build a new
1201
- // fileInput.
1202
- if(this.uploaderType == "html" && this._formNode){
1203
- this.fileInputs = [];
1204
- dojo.query("*", this._formNode).forEach(function(n){
1205
- dojo.destroy(n);
1206
- });
1207
- this.fileCount = 0;
1208
- this._buildFileInput();
1209
- this._connectInput();
1210
- }
1211
- },
1212
- _buildForm: function(){
1213
- // summary:
1214
- // Build the form that holds the fileInput
1215
- //
1216
- if(this._formNode){ return; }
1217
-
1218
- if(dojo.isIE){
1219
- this._formNode = document.createElement('<form enctype="multipart/form-data" method="post">');
1220
- this._formNode.encoding = "multipart/form-data";
1221
- }else{
1222
- this._formNode = document.createElement('form');
1223
- this._formNode.setAttribute("enctype", "multipart/form-data");
1224
- }
1225
- this._formNode.id = dijit.getUniqueId("FileUploaderForm"); // needed for dynamic style
1226
- this.domNode.appendChild(this._formNode);
1227
- },
1228
-
1229
- _buildFileInput: function(){
1230
- // summary:
1231
- // Build the fileInput field
1232
- //
1233
- if(this._fileInput){
1234
- this._disconnect();
1235
- // FIXME:
1236
- // Just hiding it which works, but we lose
1237
- // reference to it and can't remove it from
1238
- // the upload list.
1239
- this._fileInput.id = this._fileInput.id + this.fileCount;
1240
- dojo.style(this._fileInput, "display", "none");
1241
- }
1242
- this._fileInput = document.createElement('input');
1243
- this.fileInputs.push(this._fileInput);
1244
- // server will need to know this variable:
1245
- var nm = this.htmlFieldName;
1246
- var _id = this.id;
1247
- if(this.selectMultipleFiles){
1248
- nm += this.fileCount;
1249
- _id += this.fileCount;
1250
- this.fileCount++;
1251
- }
1252
-
1253
- dojo.attr(this._fileInput, {
1254
- id:this.id,
1255
- name:nm,
1256
- type:"file"
1257
- });
1258
-
1259
- dojo.addClass(this._fileInput, "dijitFileInputReal");
1260
- this._formNode.appendChild(this._fileInput);
1261
- var real = dojo.marginBox(this._fileInput);
1262
- dojo.style(this._fileInput, {
1263
- position:"relative",
1264
- left:(this.fhtml.nr.w - real.w) + "px",
1265
- opacity:0
1266
- });
1267
- },
1268
-
1269
- _renumberInputs: function(){
1270
- if(!this.selectMultipleFiles){ return; }
1271
- var nm;
1272
- this.fileCount = 0;
1273
- dojo.forEach(this.fileInputs, function(inp){
1274
- nm = this.htmlFieldName + this.fileCount;
1275
- this.fileCount++;
1276
- dojo.attr(inp, "name", nm);
1277
- }, this);
1278
- },
1279
-
1280
- _setFormStyle: function(){
1281
- // summary:
1282
- // Apply a dynamic style to the form and input
1283
- var size = Math.max(2, Math.max(Math.ceil(this.fhtml.nr.w / 60), Math.ceil(this.fhtml.nr.h / 15)));
1284
- // Now create a style associated with the form ID
1285
- dojox.html.insertCssRule("#" + this._formNode.id + " input", "font-size:" + size + "em");
1286
- dojo.style(this.domNode, {
1287
- overflow:"hidden",
1288
- position:"relative"
1289
- });
1290
- dojo.style(this.insideNode, "position", "absolute");
1291
- },
1292
-
1293
- _setHtmlPostData: function(){
1294
- // summary:
1295
- // Internal.Apply postData to hidden fields in form
1296
- if(this.postData){
1297
- for (var nm in this.postData){
1298
- dojo.create("input", {
1299
- type: "hidden",
1300
- name: nm,
1301
- value: this.postData[nm]
1302
- }, this._formNode);
1303
- }
1304
- }
1305
- },
1306
-
1307
- /*************************
1308
- * FLASH *
1309
- *************************/
1310
- uploadFlash: function(){
1311
- // summary:
1312
- // Internal. You should use upload() or submit();
1313
- try{
1314
- if(this.showProgress){
1315
- this._displayProgress(true);
1316
- var c = dojo.connect(this, "_complete", this, function(){
1317
- dojo.disconnect(c);
1318
- this._displayProgress(false);
1319
- });
1320
- }
1321
- this.flashMovie.doUpload(this.postData);
1322
-
1323
- }catch(err){
1324
- this._error("FileUploader - Sorry, the SWF failed to initialize." + err);
1325
- }
1326
- },
1327
-
1328
- createFlashUploader: function(){
1329
- // summary:
1330
- // Internal. Creates Flash Uploader
1331
- this.uploadUrl = this.uploadUrl.toString();
1332
- if(this.uploadUrl){
1333
- if(this.uploadUrl.toLowerCase().indexOf("http")<0 && this.uploadUrl.indexOf("/")!=0){
1334
- // Appears to be a relative path. Attempt to
1335
- // convert it to absolute, so it will better
1336
- //target the SWF.
1337
- //
1338
- var loc = window.location.href.split("/");
1339
- loc.pop();
1340
- loc = loc.join("/")+"/";
1341
- this.uploadUrl = loc+this.uploadUrl;
1342
- this.log("SWF Fixed - Relative loc:", loc, " abs loc:", this.uploadUrl);
1343
- }else{
1344
- this.log("SWF URL unmodified:", this.uploadUrl)
1345
- }
1346
- }else{
1347
- console.warn("Warning: no uploadUrl provided.");
1348
- }
1349
-
1350
- var w = this.fhtml.nr.w;
1351
- var h = this.fhtml.nr.h;
1352
-
1353
- var args = {
1354
- expressInstall:true,
1355
- path: this.swfPath.uri || this.swfPath,
1356
- width: w,
1357
- height: h,
1358
- allowScriptAccess:"always",
1359
- allowNetworking:"all",
1360
- vars: {
1361
- uploadDataFieldName: this.flashFieldName,
1362
- uploadUrl: this.uploadUrl,
1363
- uploadOnSelect: this.uploadOnChange,
1364
- deferredUploading:this.deferredUploading || 0,
1365
- selectMultipleFiles: this.selectMultipleFiles,
1366
- id: this.id,
1367
- isDebug: this.isDebug,
1368
- devMode:this.devMode,
1369
- flashButton:dojox.embed.flashVars.serialize("fh", this.fhtml),
1370
- fileMask:dojox.embed.flashVars.serialize("fm", this.fileMask),
1371
- noReturnCheck: this.skipServerCheck,
1372
- serverTimeout:this.serverTimeout
1373
- },
1374
- params: {
1375
- scale:"noscale",
1376
- wmode:"opaque"
1377
- }
1378
-
1379
- };
1380
-
1381
- this.flashObject = new dojox.embed.Flash(args, this.insideNode);
1382
- this.flashObject.onError = dojo.hitch(function(msg){
1383
- this._error("Flash Error: " + msg);
1384
- });
1385
- this.flashObject.onReady = dojo.hitch(this, function(){
1386
- dojo.style(this.insideNode, "visibility", "visible");
1387
- this.log("FileUploader flash object ready");
1388
- this.onReady(this);
1389
- });
1390
- this.flashObject.onLoad = dojo.hitch(this, function(mov){
1391
- this.flashMovie = mov;
1392
- this.flashReady = true;
1393
-
1394
- this.onLoad(this);
1395
- });
1396
- this._connectFlash();
1397
- },
1398
-
1399
- _connectFlash: function(){
1400
- // summary:
1401
- // Subscribing to published topics coming from the
1402
- // Flash uploader.
1403
- // description:
1404
- // Sacrificing some readbilty for compactness. this.id
1405
- // will be on the beginning of the topic, so more than
1406
- // one uploader can be on a page and can have unique calls.
1407
- //
1408
- this._doSub("/filesSelected", "_change");
1409
- this._doSub("/filesUploaded", "_complete");
1410
- this._doSub("/filesProgress", "_progress");
1411
- this._doSub("/filesError", "_error");
1412
- this._doSub("/filesCanceled", "onCancel");
1413
- this._doSub("/stageBlur", "_onFlashBlur");
1414
- this._doSub("/up", "onMouseUp");
1415
- this._doSub("/down", "onMouseDown");
1416
- this._doSub("/over", "onMouseOver");
1417
- this._doSub("/out", "onMouseOut");
1418
-
1419
- this.connect(this.domNode, "focus", function(){
1420
- // TODO: some kind of indicator that the Flash button
1421
- // is in focus
1422
- this.flashMovie.focus();
1423
- this.flashMovie.doFocus();
1424
- });
1425
- if(this.tabIndex>=0){
1426
- dojo.attr(this.domNode, "tabIndex", this.tabIndex);
1427
- }
1428
- },
1429
-
1430
- _doSub: function(subStr, funcStr){
1431
- // summary:
1432
- // Internal. Shortcut for subscribes to Flash movie
1433
- this._subs.push(dojo.subscribe(this.id + subStr, this, funcStr));
1434
- }
1435
- });
1436
-
1437
- })();
1483
+ }
1484
+ });