dojo_src 1.4.102 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ });