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.
- data/Rakefile +2 -3
- data/bin/dojofy +1 -1
- data/dojo/dijit/Calendar.js +62 -24
- data/dojo/dijit/CheckedMenuItem.js +1 -1
- data/dojo/dijit/ColorPalette.js +43 -288
- data/dojo/dijit/Dialog.js +25 -24
- data/dojo/dijit/DialogUnderlay.js +3 -1
- data/dojo/dijit/Editor.js +229 -68
- data/dojo/dijit/InlineEditBox.js +72 -35
- data/dojo/dijit/LICENSE +1 -1
- data/dojo/dijit/Menu.js +75 -76
- data/dojo/dijit/MenuBar.js +5 -10
- data/dojo/dijit/MenuItem.js +18 -11
- data/dojo/dijit/PopupMenuItem.js +1 -0
- data/dojo/dijit/ProgressBar.js +1 -1
- data/dojo/dijit/TitlePane.js +18 -38
- data/dojo/dijit/Toolbar.js +4 -1
- data/dojo/dijit/ToolbarSeparator.js +1 -1
- data/dojo/dijit/Tooltip.js +7 -14
- data/dojo/dijit/Tree.js +116 -64
- data/dojo/dijit/_Container.js +5 -11
- data/dojo/dijit/_CssStateMixin.js +252 -0
- data/dojo/dijit/_DialogMixin.js +3 -1
- data/dojo/dijit/_HasDropDown.js +48 -58
- data/dojo/dijit/_KeyNavContainer.js +4 -4
- data/dojo/dijit/_PaletteMixin.js +313 -0
- data/dojo/dijit/_Templated.js +2 -1
- data/dojo/dijit/_TimePicker.js +11 -6
- data/dojo/dijit/_Widget.js +125 -63
- data/dojo/dijit/_base/focus.js +15 -9
- data/dojo/dijit/_base/manager.js +210 -183
- data/dojo/dijit/_base/place.js +3 -52
- data/dojo/dijit/_base/popup.js +101 -89
- data/dojo/dijit/_base/scroll.js +4 -91
- data/dojo/dijit/_base/sniff.js +3 -66
- data/dojo/dijit/_base/typematic.js +31 -27
- data/dojo/dijit/_base/window.js +3 -23
- data/dojo/dijit/_editor/RichText.js +180 -74
- data/dojo/dijit/_editor/_Plugin.js +17 -16
- data/dojo/dijit/_editor/html.js +1 -1
- data/dojo/dijit/_editor/nls/FontChoice.js +2 -1
- data/dojo/dijit/_editor/nls/ar/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/ar/commands.js +12 -6
- data/dojo/dijit/_editor/nls/ca/LinkDialog.js +8 -3
- data/dojo/dijit/_editor/nls/ca/commands.js +4 -0
- data/dojo/dijit/_editor/nls/da/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/da/commands.js +6 -1
- data/dojo/dijit/_editor/nls/el/LinkDialog.js +8 -2
- data/dojo/dijit/_editor/nls/el/commands.js +7 -2
- data/dojo/dijit/_editor/nls/fi/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/fi/commands.js +7 -2
- data/dojo/dijit/_editor/nls/he/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/he/commands.js +9 -2
- data/dojo/dijit/_editor/nls/ja/commands.js +9 -10
- data/dojo/dijit/_editor/nls/nb/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/nb/commands.js +5 -0
- data/dojo/dijit/_editor/nls/nl/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/nl/commands.js +5 -0
- data/dojo/dijit/_editor/nls/pt-pt/LinkDialog.js +8 -2
- data/dojo/dijit/_editor/nls/pt-pt/commands.js +5 -0
- data/dojo/dijit/_editor/nls/ro/FontChoice.js +27 -0
- data/dojo/dijit/_editor/nls/ro/LinkDialog.js +13 -0
- data/dojo/dijit/_editor/nls/ro/commands.js +48 -0
- data/dojo/dijit/_editor/nls/sk/LinkDialog.js +9 -4
- data/dojo/dijit/_editor/nls/sk/commands.js +4 -0
- data/dojo/dijit/_editor/nls/sl/LinkDialog.js +6 -1
- data/dojo/dijit/_editor/nls/sl/commands.js +12 -8
- data/dojo/dijit/_editor/nls/sv/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/sv/commands.js +8 -2
- data/dojo/dijit/_editor/nls/th/LinkDialog.js +6 -1
- data/dojo/dijit/_editor/nls/th/commands.js +6 -2
- data/dojo/dijit/_editor/nls/tr/LinkDialog.js +7 -1
- data/dojo/dijit/_editor/nls/tr/commands.js +5 -0
- data/dojo/dijit/_editor/nls/zh-tw/LinkDialog.js +1 -1
- data/dojo/dijit/_editor/nls/zh/commands.js +3 -3
- data/dojo/dijit/_editor/plugins/AlwaysShowToolbar.js +2 -2
- data/dojo/dijit/_editor/plugins/EnterKeyHandling.js +85 -4
- data/dojo/dijit/_editor/plugins/FontChoice.js +194 -32
- data/dojo/dijit/_editor/plugins/FullScreen.js +76 -32
- data/dojo/dijit/_editor/plugins/LinkDialog.js +79 -22
- data/dojo/dijit/_editor/plugins/NewPage.js +7 -2
- data/dojo/dijit/_editor/plugins/Print.js +6 -3
- data/dojo/dijit/_editor/plugins/TabIndent.js +2 -2
- data/dojo/dijit/_editor/plugins/TextColor.js +75 -23
- data/dojo/dijit/_editor/plugins/ToggleDir.js +1 -1
- data/dojo/dijit/_editor/plugins/ViewSource.js +53 -28
- data/dojo/dijit/_editor/range.js +22 -19
- data/dojo/dijit/_editor/selection.js +56 -4
- data/dojo/dijit/dijit-all.js +5 -1
- data/dojo/dijit/form/Button.js +24 -58
- data/dojo/dijit/form/CheckBox.js +27 -19
- data/dojo/dijit/form/ComboBox.js +73 -54
- data/dojo/dijit/form/CurrencyTextBox.js +8 -5
- data/dojo/dijit/form/FilteringSelect.js +14 -6
- data/dojo/dijit/form/Form.js +26 -16
- data/dojo/dijit/form/HorizontalRuleLabels.js +2 -2
- data/dojo/dijit/form/HorizontalSlider.js +12 -1
- data/dojo/dijit/form/MultiSelect.js +3 -3
- data/dojo/dijit/form/NumberSpinner.js +4 -5
- data/dojo/dijit/form/NumberTextBox.js +25 -17
- data/dojo/dijit/form/Select.js +24 -18
- data/dojo/dijit/form/SimpleTextarea.js +2 -2
- data/dojo/dijit/form/TextBox.js +72 -12
- data/dojo/dijit/form/Textarea.js +8 -1
- data/dojo/dijit/form/TimeTextBox.js +3 -2
- data/dojo/dijit/form/ValidationTextBox.js +56 -42
- data/dojo/dijit/form/VerticalRuleLabels.js +4 -1
- data/dojo/dijit/form/VerticalSlider.js +0 -30
- data/dojo/dijit/form/_DateTimeTextBox.js +23 -17
- data/dojo/dijit/form/_FormMixin.js +23 -19
- data/dojo/dijit/form/_FormSelectWidget.js +3 -3
- data/dojo/dijit/form/_FormWidget.js +66 -164
- data/dojo/dijit/form/_Spinner.js +18 -37
- data/dojo/dijit/form/nls/ro/ComboBox.js +5 -0
- data/dojo/dijit/form/nls/ro/Textarea.js +8 -0
- data/dojo/dijit/form/nls/ro/validate.js +6 -0
- data/dojo/dijit/form/templates/Button.html +15 -16
- data/dojo/dijit/form/templates/CheckBox.html +3 -3
- data/dojo/dijit/form/templates/ComboBox.html +13 -14
- data/dojo/dijit/form/templates/ComboButton.html +13 -10
- data/dojo/dijit/form/templates/DropDownButton.html +18 -20
- data/dojo/dijit/form/templates/HorizontalSlider.html +7 -7
- data/dojo/dijit/form/templates/Select.html +7 -8
- data/dojo/dijit/form/templates/Spinner.html +23 -24
- data/dojo/dijit/form/templates/TextBox.html +6 -4
- data/dojo/dijit/form/templates/ValidationTextBox.html +8 -10
- data/dojo/dijit/form/templates/VerticalSlider.html +8 -9
- data/dojo/dijit/icons/commonIcons.css +164 -0
- data/dojo/dijit/icons/commonIcons_rtl.css +127 -0
- data/dojo/dijit/icons/editorIcons.css +78 -0
- data/dojo/dijit/icons/editorIcons_rtl.css +23 -0
- data/dojo/dijit/icons/images/commonIconsObjActDisabled.png +0 -0
- data/dojo/dijit/icons/images/commonIconsObjActDisabled_rtl.png +0 -0
- data/dojo/dijit/icons/images/commonIconsObjActEnabled.png +0 -0
- data/dojo/dijit/icons/images/commonIconsObjActEnabled8bit.png +0 -0
- data/dojo/dijit/icons/images/commonIconsObjActEnabled8bit_rtl.png +0 -0
- data/dojo/dijit/icons/images/commonIconsObjActEnabled_rtl.png +0 -0
- data/dojo/dijit/icons/images/editorIconsDisabled.png +0 -0
- data/dojo/dijit/icons/images/editorIconsDisabled_rtl.png +0 -0
- data/dojo/dijit/icons/images/editorIconsEnabled.png +0 -0
- data/dojo/dijit/icons/images/editorIconsEnabled_rtl.png +0 -0
- data/dojo/dijit/icons/images/loadingAnimation_rtl.gif +0 -0
- data/dojo/dijit/layout/AccordionContainer.js +214 -104
- data/dojo/dijit/layout/BorderContainer.js +50 -38
- data/dojo/dijit/layout/ContentPane.js +13 -11
- data/dojo/dijit/layout/ScrollingTabController.js +29 -28
- data/dojo/dijit/layout/SplitContainer.js +0 -1
- data/dojo/dijit/layout/StackContainer.js +15 -22
- data/dojo/dijit/layout/StackController.js +15 -18
- data/dojo/dijit/layout/TabContainer.js +2 -0
- data/dojo/dijit/layout/TabController.js +21 -17
- data/dojo/dijit/layout/_LayoutWidget.js +0 -1
- data/dojo/dijit/layout/templates/AccordionButton.html +5 -3
- data/dojo/dijit/layout/templates/ScrollingTabController.html +13 -8
- data/dojo/dijit/layout/templates/_ScrollingTabControllerButton.html +4 -5
- data/dojo/dijit/layout/templates/_TabButton.html +10 -9
- data/dojo/dijit/nls/ro/common.js +7 -0
- data/dojo/dijit/nls/ro/loading.js +5 -0
- data/dojo/dijit/robot.js +0 -97
- data/dojo/dijit/robotx.js +1 -1
- data/dojo/dijit/templates/Calendar.html +6 -6
- data/dojo/dijit/templates/CheckedMenuItem.html +3 -4
- data/dojo/dijit/templates/ColorPalette.html +4 -3
- data/dojo/dijit/templates/Dialog.html +1 -1
- data/dojo/dijit/templates/Menu.html +1 -1
- data/dojo/dijit/templates/MenuBarItem.html +1 -1
- data/dojo/dijit/templates/MenuItem.html +3 -3
- data/dojo/dijit/templates/MenuSeparator.html +6 -2
- data/dojo/dijit/templates/ProgressBar.html +1 -2
- data/dojo/dijit/templates/TimePicker.html +1 -1
- data/dojo/dijit/templates/TitlePane.html +8 -6
- data/dojo/dijit/templates/TreeNode.html +3 -3
- data/dojo/dijit/tests/Tree.html +16 -30
- data/dojo/dijit/tests/Tree_with_JRS.html +33 -27
- data/dojo/dijit/tests/Widget-placeAt.html +6 -6
- data/dojo/dijit/tests/_Container.html +1 -1
- data/dojo/dijit/tests/_Templated-widgetsInTemplate.html +2 -2
- data/dojo/dijit/tests/_Widget-attr.html +26 -7
- data/dojo/dijit/tests/_Widget-connect-performance.html +1 -1
- data/dojo/dijit/tests/_Widget-deferredConnect.html +1 -1
- data/dojo/dijit/tests/_Widget-lifecycle.html +1 -1
- data/dojo/dijit/tests/_Widget-ondijitclick.html +1 -1
- data/dojo/dijit/tests/_Widget-subscribe.html +1 -1
- data/dojo/dijit/tests/_altCalendar.html +12 -11
- data/dojo/dijit/tests/_base/module.js +5 -9
- data/dojo/dijit/tests/_base/place.html +2 -1
- data/dojo/dijit/tests/_base/robot/FocusManager.html +0 -2
- data/dojo/dijit/tests/_base/robot/focus_mouse.html +0 -1
- data/dojo/dijit/tests/_base/robot/popup.html +0 -1
- data/dojo/dijit/tests/_base/robot/typematic.html +72 -0
- data/dojo/dijit/tests/_base/tabindex.html +1 -1
- data/dojo/dijit/tests/_base/test_FocusManager.html +3 -2
- data/dojo/dijit/tests/_base/test_focusWidget.html +1 -1
- data/dojo/dijit/tests/_base/test_typematic.html +10 -3
- data/dojo/dijit/tests/_testCommon.js +28 -12
- data/dojo/dijit/tests/bidi.html +188 -0
- data/dojo/dijit/tests/editor/BackForwardState.html +2 -2
- data/dojo/dijit/tests/editor/EnterKeyHandling.html +31 -11
- data/dojo/dijit/tests/editor/_Editor.html +5 -4
- data/dojo/dijit/tests/editor/nls_8859-2.html +4 -4
- data/dojo/dijit/tests/editor/nls_sjis.html +5 -5
- data/dojo/dijit/tests/editor/nls_utf8.html +2 -2
- data/dojo/dijit/tests/editor/robot/BackForwardState.html +8 -9
- data/dojo/dijit/tests/editor/robot/Editor_FontChoice.html +282 -757
- data/dojo/dijit/tests/editor/robot/Editor_FullScreen.html +55 -55
- data/dojo/dijit/tests/editor/robot/Editor_LinkDialog.html +502 -123
- data/dojo/dijit/tests/editor/robot/Editor_NewPage.html +11 -11
- data/dojo/dijit/tests/editor/robot/Editor_ViewSource.html +56 -56
- data/dojo/dijit/tests/editor/robot/Editor_a11y.html +14 -14
- data/dojo/dijit/tests/editor/robot/Editor_misc.html +120 -4
- data/dojo/dijit/tests/editor/robot/Editor_mouse.html +4 -4
- data/dojo/dijit/tests/editor/robot/EnterKeyHandling.html +128 -16
- data/dojo/dijit/tests/editor/test_CustomPlugin.html +4 -4
- data/dojo/dijit/tests/editor/test_Editor.html +103 -70
- data/dojo/dijit/tests/editor/test_FontChoice.html +19 -5
- data/dojo/dijit/tests/editor/test_FullScreen.html +2 -2
- data/dojo/dijit/tests/editor/test_LinkDialog.html +2 -2
- data/dojo/dijit/tests/editor/test_NewPage.html +2 -2
- data/dojo/dijit/tests/editor/test_Print.html +2 -2
- data/dojo/dijit/tests/editor/test_TabIndent.html +2 -2
- data/dojo/dijit/tests/editor/test_ToggleDir.html +2 -2
- data/dojo/dijit/tests/editor/test_ToggleDir_rtl.html +2 -2
- data/dojo/dijit/tests/editor/test_ViewSource.html +2 -2
- data/dojo/dijit/tests/editor/test_resize.html +1 -1
- data/dojo/dijit/tests/form/Form.html +30 -16
- data/dojo/dijit/tests/form/FormInvalid.html +4 -4
- data/dojo/dijit/tests/form/TextBox_sizes.html +532 -0
- data/dojo/dijit/tests/form/TextBox_sizes.js +456 -0
- data/dojo/dijit/tests/form/_autoComplete.html +35 -15
- data/dojo/dijit/tests/form/module.js +25 -1
- data/dojo/dijit/tests/form/robot/Button_a11y.html +27 -14
- data/dojo/dijit/tests/form/robot/Button_mouse.html +429 -18
- data/dojo/dijit/tests/form/robot/DateTextBox.html +31 -34
- data/dojo/dijit/tests/form/robot/Form.html +3 -4
- data/dojo/dijit/tests/form/robot/Select.html +410 -0
- data/dojo/dijit/tests/form/robot/Slider_a11y.html +27 -28
- data/dojo/dijit/tests/form/robot/Slider_mouse.html +29 -29
- data/dojo/dijit/tests/form/robot/Spinner_a11y.html +88 -51
- data/dojo/dijit/tests/form/robot/Spinner_mouse.html +36 -37
- data/dojo/dijit/tests/form/robot/Textarea.html +178 -0
- data/dojo/dijit/tests/form/robot/TimeTextBox.html +81 -0
- data/dojo/dijit/tests/form/robot/_autoComplete_a11y.html +128 -47
- data/dojo/dijit/tests/form/robot/_autoComplete_mouse.html +171 -24
- data/dojo/dijit/tests/form/robot/test_validate.html +362 -102
- data/dojo/dijit/tests/form/robot/validationMessages.html +470 -0
- data/dojo/dijit/tests/form/runTests.html +9 -0
- data/dojo/dijit/tests/form/test_Button.html +56 -10
- data/dojo/dijit/tests/form/test_CheckBox.html +212 -61
- data/dojo/dijit/tests/form/test_ComboBox_destroy.html +2 -2
- data/dojo/dijit/tests/form/test_DateTextBox.html +17 -12
- data/dojo/dijit/tests/form/test_Form_onsubmit.html +2 -2
- data/dojo/dijit/tests/form/test_MultiSelect.html +7 -7
- data/dojo/dijit/tests/form/test_Select.html +180 -97
- data/dojo/dijit/tests/form/test_SimpleTextarea.html +16 -11
- data/dojo/dijit/tests/form/test_Slider.html +4 -4
- data/dojo/dijit/tests/form/test_Spinner.html +10 -11
- data/dojo/dijit/tests/form/test_Textarea.html +80 -76
- data/dojo/dijit/tests/form/test_TimeTextBox.html +2 -2
- data/dojo/dijit/tests/form/test_validStatePerformance.html +6 -6
- data/dojo/dijit/tests/form/test_validate.html +34 -23
- data/dojo/dijit/tests/form/test_validationState.html +8 -8
- data/dojo/dijit/tests/general-module.js +1 -0
- data/dojo/dijit/tests/helpers.js +2 -2
- data/dojo/dijit/tests/i18n/calendar.html +2 -2
- data/dojo/dijit/tests/i18n/currency.html +1 -1
- data/dojo/dijit/tests/i18n/date.html +1 -1
- data/dojo/dijit/tests/i18n/digit.html +1 -1
- data/dojo/dijit/tests/i18n/module.js +6 -6
- data/dojo/dijit/tests/i18n/number.html +1 -1
- data/dojo/dijit/tests/i18n/textbox.html +1 -1
- data/dojo/dijit/tests/i18n/time.html +1 -1
- data/dojo/dijit/tests/images/copy.gif +0 -0
- data/dojo/dijit/tests/images/cut.gif +0 -0
- data/dojo/dijit/tests/images/note.gif +0 -0
- data/dojo/dijit/tests/images/paste.gif +0 -0
- data/dojo/dijit/tests/infrastructure-module.js +7 -7
- data/dojo/dijit/tests/layout/AccordionContainer.html +81 -23
- data/dojo/dijit/tests/layout/ContentPane.html +40 -40
- data/dojo/dijit/tests/layout/ContentPaneLayout.html +6 -6
- data/dojo/dijit/tests/layout/TabContainer.html +20 -20
- data/dojo/dijit/tests/layout/getResponse.php +1 -1
- data/dojo/dijit/tests/layout/module.js +9 -2
- data/dojo/dijit/tests/layout/nestedStack.html +1 -1
- data/dojo/dijit/tests/layout/robot/AccordionContainer_a11y.html +68 -0
- data/dojo/dijit/tests/layout/robot/AccordionContainer_mouse.html +53 -0
- data/dojo/dijit/tests/layout/robot/BorderContainer.html +358 -0
- data/dojo/dijit/tests/layout/robot/TabContainer_a11y.html +29 -12
- data/dojo/dijit/tests/layout/robot/TabContainer_mouse.html +19 -13
- data/dojo/dijit/tests/layout/test_AccordionContainer.html +12 -8
- data/dojo/dijit/tests/layout/test_AccordionContainerDestroy.html +3 -3
- data/dojo/dijit/tests/layout/test_BorderContainer.html +21 -19
- data/dojo/dijit/tests/layout/test_BorderContainer_complex.html +2 -2
- data/dojo/dijit/tests/layout/test_BorderContainer_experimental.html +2 -2
- data/dojo/dijit/tests/layout/test_BorderContainer_full.html +2 -2
- data/dojo/dijit/tests/layout/test_BorderContainer_nested.html +2 -2
- data/dojo/dijit/tests/layout/test_BorderContainer_prog.html +2 -2
- data/dojo/dijit/tests/layout/test_ContentPane.html +7 -7
- data/dojo/dijit/tests/layout/test_ContentPane_prog.html +4 -4
- data/dojo/dijit/tests/layout/test_Gui.html +2 -2
- data/dojo/dijit/tests/layout/test_LayoutContainer.html +2 -2
- data/dojo/dijit/tests/layout/test_SplitContainer.html +1 -1
- data/dojo/dijit/tests/layout/test_StackContainer.html +6 -6
- data/dojo/dijit/tests/layout/test_StackContainer_code.html +2 -2
- data/dojo/dijit/tests/layout/test_TabContainer.html +10 -10
- data/dojo/dijit/tests/layout/test_TabContainerTitlePane.html +2 -2
- data/dojo/dijit/tests/layout/test_TabContainer_noLayout.html +2 -2
- data/dojo/dijit/tests/layout/test_TabContainer_prog.html +2 -2
- data/dojo/dijit/tests/layout/test_TabContainer_remote.html +2 -2
- data/dojo/dijit/tests/layout/test_refreshOnShow.html +2 -2
- data/dojo/dijit/tests/robot/Calendar_a11y.html +6 -7
- data/dojo/dijit/tests/robot/ColorPalette.html +38 -21
- data/dojo/dijit/tests/robot/Dialog_a11y.html +58 -17
- data/dojo/dijit/tests/robot/Dialog_mouse.html +0 -1
- data/dojo/dijit/tests/robot/InlineEditBox.html +135 -24
- data/dojo/dijit/tests/robot/Menu_a11y.html +7 -7
- data/dojo/dijit/tests/robot/Menu_mouse.html +2 -11
- data/dojo/dijit/tests/robot/TitlePane.html +20 -20
- data/dojo/dijit/tests/robot/Toolbar.html +3 -4
- data/dojo/dijit/tests/robot/TooltipDialog_a11y.html +233 -110
- data/dojo/dijit/tests/robot/TooltipDialog_mouse.html +121 -0
- data/dojo/dijit/tests/robot/Tooltip_a11y.html +15 -15
- data/dojo/dijit/tests/robot/Tooltip_mouse.html +0 -1
- data/dojo/dijit/tests/robot/Tree_a11y.html +74 -1
- data/dojo/dijit/tests/robot/Tree_dnd.html +5 -5
- data/dojo/dijit/tests/robot/Tree_dnd_multiParent.html +4 -4
- data/dojo/dijit/tests/robot/_Widget-deferredConnect.html +0 -1
- data/dojo/dijit/tests/robot/_Widget-ondijitclick_a11y.html +0 -1
- data/dojo/dijit/tests/robot/_Widget-ondijitclick_mouse.html +0 -1
- data/dojo/dijit/tests/test.html +1 -1
- data/dojo/dijit/tests/test_Calendar.html +4 -4
- data/dojo/dijit/tests/test_ColorPalette.html +3 -3
- data/dojo/dijit/tests/test_ColorPalette_quirks.html +5 -0
- data/dojo/dijit/tests/test_Declaration.html +2 -2
- data/dojo/dijit/tests/test_Dialog.html +65 -4
- data/dojo/dijit/tests/test_Dialog_focusDestroy.html +2 -2
- data/dojo/dijit/tests/test_InlineEditBox.html +14 -5
- data/dojo/dijit/tests/test_Menu.html +10 -8
- data/dojo/dijit/tests/test_Menu_iframe.html +1 -1
- data/dojo/dijit/tests/test_ProgressBar.html +2 -2
- data/dojo/dijit/tests/test_TitlePane.html +18 -18
- data/dojo/dijit/tests/test_Toolbar.html +2 -2
- data/dojo/dijit/tests/test_Tooltip.html +3 -3
- data/dojo/dijit/tests/test_TooltipDialog.html +20 -10
- data/dojo/dijit/tests/test_Tree.html +26 -20
- data/dojo/dijit/tests/test_Tree_Notification_API_Support.html +2 -2
- data/dojo/dijit/tests/test_bgIframe.html +2 -2
- data/dojo/dijit/tests/test_instantiate.html +2 -2
- data/dojo/dijit/tests/tree/module.js +2 -2
- data/dojo/dijit/tests/tree/test_CustomLabel.html +2 -2
- data/dojo/dijit/tests/tree/test_Tree_DnD.html +2 -2
- data/dojo/dijit/tests/tree/test_Tree_Programmatic.html +2 -2
- data/dojo/dijit/tests/tree/test_Tree_v1.html +3 -3
- data/dojo/dijit/themes/a11y/colors3x4-rtl.png +0 -0
- data/dojo/dijit/themes/a11y/colors3x4.png +0 -0
- data/dojo/dijit/themes/a11y/colors7x10-rtl.png +0 -0
- data/dojo/dijit/themes/a11y/colors7x10.png +0 -0
- data/dojo/dijit/themes/claro/Calendar.css +257 -0
- data/dojo/dijit/themes/claro/Calendar_rtl.css +19 -0
- data/dojo/dijit/themes/claro/ColorPalette.css +44 -0
- data/dojo/dijit/themes/claro/Common.css +79 -0
- data/dojo/dijit/themes/claro/Dialog.css +212 -0
- data/dojo/dijit/themes/claro/Dialog_rtl.css +10 -0
- data/dojo/dijit/themes/claro/Editor.css +56 -0
- data/dojo/dijit/themes/claro/Editor_rtl.css +7 -0
- data/dojo/dijit/themes/claro/InlineEditBox.css +23 -0
- data/dojo/dijit/themes/claro/Menu.css +182 -0
- data/dojo/dijit/themes/claro/Menu_rtl.css +9 -0
- data/dojo/dijit/themes/claro/ProgressBar.css +53 -0
- data/dojo/dijit/themes/claro/TimePicker.css +125 -0
- data/dojo/dijit/themes/claro/TimePicker_rtl.css +10 -0
- data/dojo/dijit/themes/claro/TitlePane.css +73 -0
- data/dojo/dijit/themes/claro/TitlePane_rtl.css +4 -0
- data/dojo/dijit/themes/claro/Toolbar.css +170 -0
- data/dojo/dijit/themes/claro/Tree.css +122 -0
- data/dojo/dijit/themes/claro/claro.css +29 -0
- data/dojo/dijit/themes/claro/claro_rtl.css +15 -0
- data/dojo/dijit/themes/claro/document.css +109 -0
- data/dojo/dijit/themes/claro/form/Button.css +168 -0
- data/dojo/dijit/themes/claro/form/Button_rtl.css +22 -0
- data/dojo/dijit/themes/claro/form/Checkbox.css +77 -0
- data/dojo/dijit/themes/claro/form/Common.css +176 -0
- data/dojo/dijit/themes/claro/form/Common_rtl.css +10 -0
- data/dojo/dijit/themes/claro/form/NumberSpinner.css +143 -0
- data/dojo/dijit/themes/claro/form/RadioButton.css +82 -0
- data/dojo/dijit/themes/claro/form/Select.css +124 -0
- data/dojo/dijit/themes/claro/form/Select_rtl.css +4 -0
- data/dojo/dijit/themes/claro/form/Slider.css +359 -0
- data/dojo/dijit/themes/claro/form/Slider_rtl.css +31 -0
- data/dojo/dijit/themes/claro/form/images/button.png +0 -0
- data/dojo/dijit/themes/claro/form/images/buttonArrows.png +0 -0
- data/dojo/dijit/themes/claro/form/images/button_grad_d.png +0 -0
- data/dojo/dijit/themes/claro/form/images/checkboxAndRadioButtons_IE6.png +0 -0
- data/dojo/dijit/themes/claro/form/images/checkboxRadioButtonStates.png +0 -0
- data/dojo/dijit/themes/claro/form/images/commonFormArrows.png +0 -0
- data/dojo/dijit/themes/claro/form/images/error.png +0 -0
- data/dojo/dijit/themes/claro/form/images/formHighlight.png +0 -0
- data/dojo/dijit/themes/claro/form/images/shadow.png +0 -0
- data/dojo/dijit/themes/claro/form/images/sliderHorizontal.png +0 -0
- data/dojo/dijit/themes/claro/form/images/sliderThumbs.png +0 -0
- data/dojo/dijit/themes/claro/form/images/sliderVertical.png +0 -0
- data/dojo/dijit/themes/claro/form/images/textBox_back.png +0 -0
- data/dojo/dijit/themes/claro/images/calendarArrows.png +0 -0
- data/dojo/dijit/themes/claro/images/calendarArrows8bit.png +0 -0
- data/dojo/dijit/themes/claro/images/calendarContainerImages.png +0 -0
- data/dojo/dijit/themes/claro/images/checkmarkNoBorder.gif +0 -0
- data/dojo/dijit/themes/claro/images/checkmarkNoBorder.png +0 -0
- data/dojo/dijit/themes/claro/images/commonHighlight.png +0 -0
- data/dojo/dijit/themes/claro/images/dialogCloseIcon.png +0 -0
- data/dojo/dijit/themes/claro/images/dialogCloseIcon8bit.png +0 -0
- data/dojo/dijit/themes/claro/images/dnd.png +0 -0
- data/dojo/dijit/themes/claro/images/loading.gif +0 -0
- data/dojo/dijit/themes/claro/images/loadingAnimation.gif +0 -0
- data/dojo/dijit/themes/claro/images/menuHighlight.png +0 -0
- data/dojo/dijit/themes/claro/images/progressBarAnim.gif +0 -0
- data/dojo/dijit/themes/claro/images/progressBarEmpty.png +0 -0
- data/dojo/dijit/themes/claro/images/progressBarFull.png +0 -0
- data/dojo/dijit/themes/claro/images/spriteArrows.png +0 -0
- data/dojo/dijit/themes/claro/images/titlebar.png +0 -0
- data/dojo/dijit/themes/claro/images/tooltip.png +0 -0
- data/dojo/dijit/themes/claro/images/tooltip8bit.png +0 -0
- data/dojo/dijit/themes/claro/images/treeExpandImages.png +0 -0
- data/dojo/dijit/themes/claro/images/treeExpandImages8bit.png +0 -0
- data/dojo/dijit/themes/claro/images/treeExpand_loading.gif +0 -0
- data/dojo/dijit/themes/claro/layout/AccordionContainer.css +108 -0
- data/dojo/dijit/themes/claro/layout/BorderContainer.css +134 -0
- data/dojo/dijit/themes/claro/layout/ContentPane.css +40 -0
- data/dojo/dijit/themes/claro/layout/TabContainer.css +439 -0
- data/dojo/dijit/themes/claro/layout/TabContainer_rtl.css +77 -0
- data/dojo/dijit/themes/claro/layout/images/accordion.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/splitterHorizontalHover.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/splitterVerticalHover.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/tabBottom.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/tabClose.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/tabLeft.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/tabNested.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/tabRight.png +0 -0
- data/dojo/dijit/themes/claro/layout/images/tabTop.png +0 -0
- data/dojo/dijit/themes/dijit.css +633 -452
- data/dojo/dijit/themes/dijit_rtl.css +70 -59
- data/dojo/dijit/themes/nihilo/Calendar.css +0 -14
- data/dojo/dijit/themes/nihilo/Dialog.css +2 -5
- data/dojo/dijit/themes/nihilo/Editor.css +3 -58
- data/dojo/dijit/themes/nihilo/Editor_rtl.css +2 -6
- data/dojo/dijit/themes/nihilo/TimePicker.css +1 -11
- data/dojo/dijit/themes/nihilo/TimePicker_rtl.css +4 -0
- data/dojo/dijit/themes/nihilo/TitlePane.css +3 -32
- data/dojo/dijit/themes/nihilo/Toolbar.css +2 -2
- data/dojo/dijit/themes/nihilo/Tree.css +2 -20
- data/dojo/dijit/themes/nihilo/Tree_rtl.css +10 -16
- data/dojo/dijit/themes/nihilo/form/Button.css +36 -20
- data/dojo/dijit/themes/nihilo/form/Common.css +11 -37
- data/dojo/dijit/themes/nihilo/form/Select.css +4 -11
- data/dojo/dijit/themes/nihilo/form/Slider.css +0 -8
- data/dojo/dijit/themes/nihilo/layout/AccordionContainer.css +2 -4
- data/dojo/dijit/themes/nihilo/layout/AccordionContainer_rtl.css +1 -1
- data/dojo/dijit/themes/nihilo/layout/TabContainer.css +12 -23
- data/dojo/dijit/themes/nihilo/nihilo.css +2 -1
- data/dojo/dijit/themes/nihilo/nihilo_rtl.css +3 -2
- data/dojo/dijit/themes/soria/Calendar.css +0 -14
- data/dojo/dijit/themes/soria/Dialog.css +2 -5
- data/dojo/dijit/themes/soria/Editor.css +3 -57
- data/dojo/dijit/themes/soria/Editor_rtl.css +2 -7
- data/dojo/dijit/themes/soria/TimePicker.css +0 -10
- data/dojo/dijit/themes/soria/TimePicker_rtl.css +4 -0
- data/dojo/dijit/themes/soria/TitlePane.css +4 -30
- data/dojo/dijit/themes/soria/Toolbar.css +2 -2
- data/dojo/dijit/themes/soria/Tree.css +3 -20
- data/dojo/dijit/themes/soria/Tree_rtl.css +11 -12
- data/dojo/dijit/themes/soria/form/Button.css +38 -29
- data/dojo/dijit/themes/soria/form/Common.css +10 -36
- data/dojo/dijit/themes/soria/form/Select.css +4 -11
- data/dojo/dijit/themes/soria/form/Slider.css +0 -8
- data/dojo/dijit/themes/soria/layout/AccordionContainer.css +2 -4
- data/dojo/dijit/themes/soria/layout/AccordionContainer_rtl.css +1 -1
- data/dojo/dijit/themes/soria/layout/TabContainer.css +17 -34
- data/dojo/dijit/themes/soria/soria.css +2 -2
- data/dojo/dijit/themes/soria/soria_rtl.css +3 -2
- data/dojo/dijit/themes/themeTester.html +215 -100
- data/dojo/dijit/themes/tundra/Calendar.css +9 -20
- data/dojo/dijit/themes/tundra/Calendar_rtl.css +2 -2
- data/dojo/dijit/themes/tundra/Dialog.css +6 -25
- data/dojo/dijit/themes/tundra/Dialog_rtl.css +1 -1
- data/dojo/dijit/themes/tundra/Editor.css +5 -58
- data/dojo/dijit/themes/tundra/Editor_rtl.css +4 -9
- data/dojo/dijit/themes/tundra/Menu.css +2 -2
- data/dojo/dijit/themes/tundra/Menu_rtl.css +1 -6
- data/dojo/dijit/themes/tundra/TimePicker.css +0 -10
- data/dojo/dijit/themes/tundra/TimePicker_rtl.css +4 -0
- data/dojo/dijit/themes/tundra/TitlePane.css +4 -38
- data/dojo/dijit/themes/tundra/TitlePane_rtl.css +1 -1
- data/dojo/dijit/themes/tundra/Toolbar.css +12 -2
- data/dojo/dijit/themes/tundra/Tree.css +3 -22
- data/dojo/dijit/themes/tundra/Tree_rtl.css +9 -9
- data/dojo/dijit/themes/tundra/form/Button.css +35 -59
- data/dojo/dijit/themes/tundra/form/Common.css +12 -84
- data/dojo/dijit/themes/tundra/form/RadioButton.css +11 -13
- data/dojo/dijit/themes/tundra/form/Select.css +15 -22
- data/dojo/dijit/themes/tundra/form/Slider.css +0 -7
- data/dojo/dijit/themes/tundra/form/Slider_rtl.css +12 -12
- data/dojo/dijit/themes/tundra/layout/AccordionContainer.css +2 -4
- data/dojo/dijit/themes/tundra/layout/SplitContainer.css +0 -4
- data/dojo/dijit/themes/tundra/layout/TabContainer.css +19 -44
- data/dojo/dijit/themes/tundra/layout/TabContainer_rtl.css +21 -9
- data/dojo/dijit/themes/tundra/tundra.css +2 -1
- data/dojo/dijit/themes/tundra/tundra_rtl.css +2 -1
- data/dojo/dijit/tree/TreeStoreModel.js +13 -12
- data/dojo/dojo/DeferredList.js +66 -78
- data/dojo/dojo/LICENSE +1 -1
- data/dojo/dojo/NodeList-fx.js +92 -18
- data/dojo/dojo/Stateful.js +123 -0
- data/dojo/dojo/_base.js +1 -1
- data/dojo/dojo/_base/Deferred.js +211 -301
- data/dojo/dojo/_base/NodeList.js +28 -5
- data/dojo/dojo/_base/_loader/bootstrap.js +5 -16
- data/dojo/dojo/_base/_loader/hostenv_browser.js +42 -24
- data/dojo/dojo/_base/connect.js +13 -13
- data/dojo/dojo/_base/declare.js +81 -17
- data/dojo/dojo/_base/fx.js +75 -77
- data/dojo/dojo/_base/html.js +20 -10
- data/dojo/dojo/_base/json.js +2 -1
- data/dojo/dojo/back.js +7 -0
- data/dojo/dojo/cache.js +7 -8
- data/dojo/dojo/cldr/monetary.js +7 -4
- data/dojo/dojo/cldr/nls/ar/gregorian.js +7 -3
- data/dojo/dojo/cldr/nls/ar/hebrew.js +12 -16
- data/dojo/dojo/cldr/nls/ar/islamic-civil.js +124 -49
- data/dojo/dojo/cldr/nls/ar/islamic.js +61 -70
- data/dojo/dojo/cldr/nls/buddhist.js +236 -0
- data/dojo/dojo/cldr/nls/ca/gregorian.js +152 -148
- data/dojo/dojo/cldr/nls/cs/gregorian.js +110 -100
- data/dojo/dojo/cldr/nls/cs/number.js +1 -1
- data/dojo/dojo/cldr/nls/currency.js +0 -1
- data/dojo/dojo/cldr/nls/da/gregorian.js +144 -145
- data/dojo/dojo/cldr/nls/de/gregorian.js +22 -24
- data/dojo/dojo/cldr/nls/el/gregorian.js +15 -14
- data/dojo/dojo/cldr/nls/en-au/gregorian.js +3 -0
- data/dojo/dojo/cldr/nls/en-ca/gregorian.js +10 -0
- data/dojo/dojo/cldr/nls/en/gregorian.js +12 -10
- data/dojo/dojo/cldr/nls/es/gregorian.js +19 -20
- data/dojo/dojo/cldr/nls/fi/gregorian.js +15 -14
- data/dojo/dojo/cldr/nls/fr/gregorian.js +15 -17
- data/dojo/dojo/cldr/nls/gregorian.js +14 -8
- data/dojo/dojo/cldr/nls/he/gregorian.js +48 -49
- data/dojo/dojo/cldr/nls/he/hebrew.js +23 -56
- data/dojo/dojo/cldr/nls/he/islamic.js +17 -19
- data/dojo/dojo/cldr/nls/hebrew.js +133 -124
- data/dojo/dojo/cldr/nls/hu/gregorian.js +20 -17
- data/dojo/dojo/cldr/nls/islamic.js +132 -129
- data/dojo/dojo/cldr/nls/it/gregorian.js +143 -145
- data/dojo/dojo/cldr/nls/ja/gregorian.js +17 -17
- data/dojo/dojo/cldr/nls/ko/gregorian.js +19 -19
- data/dojo/dojo/cldr/nls/nb/gregorian.js +141 -143
- data/dojo/dojo/cldr/nls/nl/gregorian.js +12 -14
- data/dojo/dojo/cldr/nls/pl/gregorian.js +149 -143
- data/dojo/dojo/cldr/nls/pt-pt/gregorian.js +83 -39
- data/dojo/dojo/cldr/nls/pt/gregorian.js +14 -16
- data/dojo/dojo/cldr/nls/ru/gregorian.js +138 -146
- data/dojo/dojo/cldr/nls/sk/gregorian.js +15 -6
- data/dojo/dojo/cldr/nls/sl/gregorian.js +12 -11
- data/dojo/dojo/cldr/nls/sv/gregorian.js +23 -17
- data/dojo/dojo/cldr/nls/th/buddhist.js +10 -13
- data/dojo/dojo/cldr/nls/th/gregorian.js +140 -136
- data/dojo/dojo/cldr/nls/tr/gregorian.js +13 -13
- data/dojo/dojo/cldr/nls/zh-tw/gregorian.js +15 -2
- data/dojo/dojo/cldr/nls/zh/gregorian.js +17 -14
- data/dojo/dojo/cldr/supplemental.js +10 -10
- data/dojo/dojo/currency.js +27 -14
- data/dojo/dojo/data/ItemFileReadStore.js +22 -21
- data/dojo/dojo/date/locale.js +9 -9
- data/dojo/dojo/date/stamp.js +3 -5
- data/dojo/dojo/dnd/Container.js +3 -1
- data/dojo/dojo/dnd/Manager.js +1 -1
- data/dojo/dojo/dnd/Moveable.js +2 -2
- data/dojo/dojo/dnd/Mover.js +5 -5
- data/dojo/dojo/dnd/Source.js +9 -8
- data/dojo/dojo/dnd/common.js +1 -1
- data/dojo/dojo/dojo.js +6 -18
- data/dojo/dojo/hash.js +20 -15
- data/dojo/dojo/html.js +7 -6
- data/dojo/dojo/nls/ro/colors.js +155 -0
- data/dojo/dojo/number.js +67 -56
- data/dojo/dojo/parser.js +167 -47
- data/dojo/dojo/resources/dojo.css +5 -6
- data/dojo/dojo/robot.js +85 -11
- data/dojo/dojo/tests/NodeList-fx.html +58 -38
- data/dojo/dojo/tests/Stateful.js +36 -0
- data/dojo/dojo/tests/_base/Deferred.js +95 -0
- data/dojo/dojo/tests/_base/NodeList.html +9 -1
- data/dojo/dojo/tests/_base/declare.js +65 -3
- data/dojo/dojo/tests/_base/fx.html +55 -49
- data/dojo/dojo/tests/_base/html.html +7 -0
- data/dojo/dojo/tests/_base/html_rtl.html +1 -0
- data/dojo/dojo/tests/cache.js +7 -0
- data/dojo/dojo/tests/currency.js +3 -2
- data/dojo/dojo/tests/date/locale.js +7 -3
- data/dojo/dojo/tests/date/stamp.js +4 -0
- data/dojo/dojo/tests/dnd/robot/test_dnd.html +1 -1
- data/dojo/dojo/tests/hash.js +26 -1
- data/dojo/dojo/tests/module.js +3 -0
- data/dojo/dojo/tests/number.js +7 -0
- data/dojo/dojo/tests/parser.html +90 -10
- data/dojo/dojo/tests/uacss.js +10 -0
- data/dojo/{dijit/tests/_base → dojo/tests/uacss}/sniffQuirks.html +5 -4
- data/dojo/{dijit/tests/_base → dojo/tests/uacss}/sniffStandards.html +4 -4
- data/dojo/dojo/tests/window.js +11 -0
- data/dojo/{dijit/tests/_base → dojo/tests/window}/test_scroll.html +155 -229
- data/dojo/{dijit/tests/_base/test_scrollStrictDTD.html → dojo/tests/window/test_scrollNoDTD.html} +30 -35
- data/dojo/{dijit/tests/_base/test_scrollNoDTD.html → dojo/tests/window/test_scrollStrictDTD.html} +30 -31
- data/dojo/{dijit/tests/_base → dojo/tests/window}/viewport.html +8 -10
- data/dojo/dojo/tests/window/viewportQuirks.html +5 -0
- data/dojo/dojo/uacss.js +63 -0
- data/dojo/dojo/window.js +132 -0
- data/dojo/dojox/LICENSE +1 -1
- data/dojo/dojox/atom/io/model.js +1 -1
- data/dojo/dojox/atom/widget/nls/ro/FeedEntryEditor.js +7 -0
- data/dojo/dojox/atom/widget/nls/ro/FeedEntryViewer.js +12 -0
- data/dojo/dojox/atom/widget/nls/ro/FeedViewerEntry.js +4 -0
- data/dojo/dojox/atom/widget/nls/ro/PeopleEditor.js +6 -0
- data/dojo/dojox/av/FLAudio.js +62 -49
- data/dojo/dojox/av/resources/audio.swf +0 -0
- data/dojo/dojox/av/tests/test_FLAudio.html +15 -9
- data/dojo/dojox/charting/Chart2D.js +609 -51
- data/dojo/dojox/charting/DataChart.js +72 -63
- data/dojo/dojox/charting/DataSeries.js +183 -0
- data/dojo/dojox/charting/Element.js +201 -3
- data/dojo/dojox/charting/Series.js +47 -4
- data/dojo/dojox/charting/Theme.js +590 -189
- data/dojo/dojox/charting/action2d/Base.js +31 -5
- data/dojo/dojox/charting/action2d/Highlight.js +37 -12
- data/dojo/dojox/charting/action2d/Magnify.js +39 -13
- data/dojo/dojox/charting/action2d/MoveSlice.js +42 -13
- data/dojo/dojox/charting/action2d/Shake.js +36 -12
- data/dojo/dojox/charting/action2d/Tooltip.js +205 -7
- data/dojo/dojox/charting/axis2d/Base.js +46 -7
- data/dojo/dojox/charting/axis2d/Default.js +414 -238
- data/dojo/dojox/charting/axis2d/Invisible.js +290 -0
- data/dojo/dojox/charting/axis2d/common.js +53 -7
- data/dojo/dojox/charting/plot2d/Areas.js +2 -0
- data/dojo/dojox/charting/plot2d/Bars.js +94 -63
- data/dojo/dojox/charting/plot2d/Base.js +143 -53
- data/dojo/dojox/charting/plot2d/Bubble.js +139 -65
- data/dojo/dojox/charting/plot2d/Candlesticks.js +143 -80
- data/dojo/dojox/charting/plot2d/ClusteredBars.js +60 -58
- data/dojo/dojox/charting/plot2d/ClusteredColumns.js +59 -57
- data/dojo/dojox/charting/plot2d/Columns.js +78 -60
- data/dojo/dojox/charting/plot2d/Default.js +280 -121
- data/dojo/dojox/charting/plot2d/Grid.js +181 -19
- data/dojo/dojox/charting/plot2d/Lines.js +4 -0
- data/dojo/dojox/charting/plot2d/Markers.js +4 -0
- data/dojo/dojox/charting/plot2d/MarkersOnly.js +4 -0
- data/dojo/dojox/charting/plot2d/OHLC.js +127 -69
- data/dojo/dojox/charting/plot2d/Pie.js +200 -105
- data/dojo/dojox/charting/plot2d/Scatter.js +194 -8
- data/dojo/dojox/charting/plot2d/Stacked.js +71 -46
- data/dojo/dojox/charting/plot2d/StackedAreas.js +4 -0
- data/dojo/dojox/charting/plot2d/StackedBars.js +75 -64
- data/dojo/dojox/charting/plot2d/StackedColumns.js +75 -64
- data/dojo/dojox/charting/plot2d/StackedLines.js +4 -0
- data/dojo/dojox/charting/plot2d/_PlotEvents.js +123 -0
- data/dojo/dojox/charting/plot2d/common.js +44 -35
- data/dojo/dojox/charting/scaler/primitive.js +6 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bars1.html +85 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bars2.html +79 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bars3.html +79 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bars4.html +79 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bars5.html +82 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bubble1.html +71 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bubble2.html +65 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bubble3.html +66 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bubble4.html +65 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_bubble6.html +71 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_columns1.html +85 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_columns2.html +79 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_columns3.html +79 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_columns4.html +79 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_columns5.html +82 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie1.html +58 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie2.html +52 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie3.html +53 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie4.html +52 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie7.html +52 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie8.html +52 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pie9.html +52 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_pieA.html +52 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_scatter1.html +71 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_scatter2.html +65 -0
- data/dojo/dojox/charting/tests/gradients/test_grad_scatterB.html +54 -0
- data/dojo/dojox/charting/tests/stock.json +0 -1
- data/dojo/dojox/charting/tests/test_DataChart.html +3 -1
- data/dojo/dojox/charting/tests/test_DataSeries.html +216 -0
- data/dojo/dojox/charting/tests/test_anim2d.html +2 -0
- data/dojo/dojox/charting/tests/test_axes.html +81 -0
- data/dojo/dojox/charting/tests/test_axisZoomControl.html +91 -0
- data/dojo/dojox/charting/tests/test_bars.html +4 -2
- data/dojo/dojox/charting/tests/test_chart2d.html +14 -8
- data/dojo/dojox/charting/tests/test_chart2d_dynamics.html +4 -2
- data/dojo/dojox/charting/tests/test_chart2d_updating.html +2 -0
- data/dojo/dojox/charting/tests/test_cylinders.html +4 -2
- data/dojo/dojox/charting/tests/test_event2d.html +6 -3
- data/dojo/dojox/charting/tests/test_fireEvent.html +204 -0
- data/dojo/dojox/charting/tests/test_labels2d.html +57 -3
- data/dojo/dojox/charting/tests/test_nulls.html +89 -0
- data/dojo/dojox/charting/tests/test_pie2d.html +7 -4
- data/dojo/dojox/charting/tests/test_plot_order.html +96 -0
- data/dojo/dojox/charting/tests/test_rotatedLabels.html +85 -0
- data/dojo/dojox/charting/tests/test_scaler.html +4 -2
- data/dojo/dojox/charting/tests/test_series_order.html +88 -0
- data/dojo/dojox/charting/tests/test_sparklines.html +2 -0
- data/dojo/dojox/charting/tests/test_tension.html +55 -0
- data/dojo/dojox/charting/tests/test_themes.html +270 -115
- data/dojo/dojox/charting/tests/test_widget2d.html +3 -1
- data/dojo/dojox/charting/tests/test_win2d.html +6 -4
- data/dojo/dojox/charting/tests/theme_preview.html +69 -0
- data/dojo/dojox/charting/themes/Charged.js +91 -0
- data/dojo/dojox/charting/themes/Chris.js +77 -0
- data/dojo/dojox/charting/themes/Electric.js +92 -0
- data/dojo/dojox/charting/themes/Ireland.js +2 -2
- data/dojo/dojox/charting/themes/Julie.js +70 -0
- data/dojo/dojox/charting/themes/PlotKit/base.js +53 -0
- data/dojo/dojox/charting/themes/PlotKit/blue.js +6 -35
- data/dojo/dojox/charting/themes/PlotKit/cyan.js +6 -35
- data/dojo/dojox/charting/themes/PlotKit/green.js +6 -35
- data/dojo/dojox/charting/themes/PlotKit/orange.js +6 -35
- data/dojo/dojox/charting/themes/PlotKit/purple.js +6 -35
- data/dojo/dojox/charting/themes/PlotKit/red.js +6 -35
- data/dojo/dojox/charting/themes/PrimaryColors.js +14 -0
- data/dojo/dojox/charting/themes/Renkoo.js +85 -0
- data/dojo/dojox/charting/themes/ThreeD.js +49 -0
- data/dojo/dojox/charting/themes/Tom.js +87 -0
- data/dojo/dojox/charting/themes/Tufte.js +45 -50
- data/dojo/dojox/charting/themes/gradientGenerator.js +83 -0
- data/dojo/dojox/charting/widget/Chart2D.js +21 -1
- data/dojo/dojox/charting/widget/Legend.js +10 -1
- data/dojo/dojox/color/Palette.js +124 -17
- data/dojo/dojox/css3/fx.js +183 -0
- data/dojo/dojox/data/AndOrReadStore.js +4 -2
- data/dojo/dojox/data/ClientFilter.js +1 -1
- data/dojo/dojox/data/FlickrRestStore.js +86 -88
- data/dojo/dojox/data/HtmlStore.js +1 -1
- data/dojo/dojox/data/ItemExplorer.js +3 -3
- data/dojo/dojox/data/PersevereStore.js +1 -1
- data/dojo/dojox/data/QueryReadStore.js +6 -9
- data/dojo/dojox/data/ServiceStore.js +9 -2
- data/dojo/dojox/data/StoreExplorer.js +2 -2
- data/dojo/dojox/data/XmlStore.js +1 -1
- data/dojo/dojox/data/demos/stores/LazyLoadJSIStore.js +1 -1
- data/dojo/dojox/data/s3/proxy.example-php +73 -73
- data/dojo/dojox/data/tests/stores/FlickrRestStore.js +1 -1
- data/dojo/dojox/data/util/JsonQuery.js +0 -3
- data/dojo/dojox/date/README +7 -1
- data/dojo/dojox/date/buddhist/locale.js +5 -5
- data/dojo/dojox/date/hebrew/locale.js +41 -18
- data/dojo/dojox/date/hebrew/numerals.js +17 -13
- data/dojo/dojox/date/islamic.js +0 -1
- data/dojo/dojox/date/islamic/Date.js +17 -19
- data/dojo/dojox/date/islamic/locale.js +37 -16
- data/dojo/dojox/date/posix.js +1 -1
- data/dojo/dojox/date/tests/hebrew/Date.js +2 -2
- data/dojo/dojox/date/tests/islamic/Date.js +200 -17
- data/dojo/dojox/date/timezone.js +59 -62
- data/dojo/dojox/dnd/BoundingBoxController.js +130 -0
- data/dojo/dojox/dnd/README +22 -0
- data/dojo/dojox/dnd/Selector.js +159 -0
- data/dojo/dojox/dnd/tests/robot/test_selector.html +71 -0
- data/dojo/dojox/dnd/tests/test_selector.html +57 -0
- data/dojo/dojox/drawing/Drawing.js +24 -17
- data/dojo/dojox/drawing/_base.js +0 -1
- data/dojo/dojox/drawing/annotations/Angle.js +17 -10
- data/dojo/dojox/drawing/annotations/BoxShadow.js +92 -4
- data/dojo/dojox/drawing/annotations/Label.js +6 -6
- data/dojo/dojox/drawing/defaults.js +44 -27
- data/dojo/dojox/drawing/library/icons.js +7 -0
- data/dojo/dojox/drawing/manager/Anchors.js +22 -10
- data/dojo/dojox/drawing/manager/Canvas.js +6 -5
- data/dojo/dojox/drawing/manager/Mouse.js +45 -19
- data/dojo/dojox/drawing/manager/Stencil.js +29 -26
- data/dojo/dojox/drawing/manager/_registry.js +4 -1
- data/dojo/dojox/drawing/manager/keys.js +1 -1
- data/dojo/dojox/drawing/plugins/_Plugin.js +1 -1
- data/dojo/dojox/drawing/plugins/drawing/Grid.js +15 -4
- data/dojo/dojox/drawing/plugins/drawing/Silverlight.js +1 -1
- data/dojo/dojox/drawing/plugins/tools/Pan.js +29 -5
- data/dojo/dojox/drawing/plugins/tools/Zoom.js +4 -4
- data/dojo/dojox/drawing/stencil/Ellipse.js +1 -1
- data/dojo/dojox/drawing/stencil/Line.js +0 -17
- data/dojo/dojox/drawing/stencil/Path.js +17 -13
- data/dojo/dojox/drawing/stencil/Text.js +26 -7
- data/dojo/dojox/drawing/stencil/_Base.js +163 -159
- data/dojo/dojox/drawing/tests/drawing.html +34 -35
- data/dojo/dojox/drawing/tests/test_drawing.html +20 -21
- data/dojo/dojox/drawing/tests/test_shadows.html +18 -18
- data/dojo/dojox/drawing/tools/Ellipse.js +20 -6
- data/dojo/dojox/drawing/tools/Line.js +19 -9
- data/dojo/dojox/drawing/tools/Rect.js +21 -7
- data/dojo/dojox/drawing/tools/TextBlock.js +37 -29
- data/dojo/dojox/drawing/tools/custom/Axes.js +249 -97
- data/dojo/dojox/drawing/tools/custom/Vector.js +298 -6
- data/dojo/dojox/drawing/ui/Button.js +45 -20
- data/dojo/dojox/drawing/ui/Toolbar.js +94 -29
- data/dojo/dojox/drawing/ui/Tooltip.js +3 -3
- data/dojo/dojox/drawing/ui/dom/Pan.js +2 -2
- data/dojo/dojox/drawing/ui/dom/Toolbar.js +4 -4
- data/dojo/dojox/drawing/util/common.js +20 -14
- data/dojo/dojox/drawing/util/oo.js +1 -1
- data/dojo/dojox/dtl/Context.js +8 -7
- data/dojo/dojox/dtl/_DomTemplated.js +5 -1
- data/dojo/dojox/dtl/_Templated.js +38 -3
- data/dojo/dojox/dtl/_base.js +17 -8
- data/dojo/dojox/dtl/tests/context.js +11 -2
- data/dojo/dojox/editor/README +95 -2
- data/dojo/dojox/editor/plugins/Blockquote.js +506 -0
- data/dojo/dojox/editor/plugins/Breadcrumb.js +31 -25
- data/dojo/dojox/editor/plugins/CollapsibleToolbar.js +174 -0
- data/dojo/dojox/editor/plugins/EntityPalette.js +112 -290
- data/dojo/dojox/editor/plugins/FindReplace.js +490 -163
- data/dojo/dojox/editor/plugins/InsertAnchor.js +430 -0
- data/dojo/dojox/editor/plugins/NormalizeIndentOutdent.js +3 -51
- data/dojo/dojox/editor/plugins/NormalizeStyle.js +551 -0
- data/dojo/dojox/editor/plugins/PasteFromWord.js +206 -0
- data/dojo/dojox/editor/plugins/Preview.js +1 -1
- data/dojo/dojox/editor/plugins/Save.js +4 -4
- data/dojo/dojox/editor/plugins/ShowBlockNodes.js +1 -1
- data/dojo/dojox/editor/plugins/Smiley.js +48 -22
- data/dojo/dojox/editor/plugins/StatusBar.js +172 -0
- data/dojo/dojox/editor/plugins/TablePlugins.js +454 -394
- data/dojo/dojox/editor/plugins/TextColor.js +191 -0
- data/dojo/dojox/editor/plugins/ToolbarLineBreak.js +6 -1
- data/dojo/dojox/editor/plugins/_SmileyPalette.js +113 -333
- data/dojo/dojox/editor/plugins/nls/Blockquote.js +3 -0
- data/dojo/dojox/editor/plugins/nls/CollapsibleToolbar.js +4 -0
- data/dojo/dojox/editor/plugins/nls/FindReplace.js +15 -5
- data/dojo/dojox/editor/plugins/nls/InsertAnchor.js +8 -0
- data/dojo/dojox/editor/plugins/nls/PasteFromWord.js +6 -0
- data/dojo/dojox/editor/plugins/nls/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/TextColor.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ar/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/ca/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/cs/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/da/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/de/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/el/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/es/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/fi/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/fr/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/he/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/hu/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/it/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/ja/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/ko/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/nb/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/nl/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/pl/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/pt-pt/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/pt/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/ro/Blockquote.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ro/Breadcrumb.js +10 -0
- data/dojo/dojox/editor/plugins/nls/ro/CollapsibleToolbar.js +5 -0
- data/dojo/dojox/editor/plugins/nls/ro/FindReplace.js +22 -0
- data/dojo/dojox/editor/plugins/nls/ro/InsertAnchor.js +9 -0
- data/dojo/dojox/editor/plugins/nls/ro/InsertEntity.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ro/PageBreak.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ro/PasteFromWord.js +7 -0
- data/dojo/dojox/editor/plugins/nls/ro/Preview.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ro/Save.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ro/ShowBlockNodes.js +4 -0
- data/dojo/dojox/editor/plugins/nls/ro/Smiley.js +22 -0
- data/dojo/dojox/editor/plugins/nls/ro/TableDialog.js +30 -0
- data/dojo/dojox/editor/plugins/nls/ro/TextColor.js +5 -0
- data/dojo/dojox/editor/plugins/nls/ro/latinEntities.js +257 -0
- data/dojo/dojox/editor/plugins/nls/ru/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/sk/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/sl/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/sv/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/th/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/tr/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/zh-tw/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/nls/zh/FindReplace.js +14 -4
- data/dojo/dojox/editor/plugins/nls/zh/TableDialog.js +0 -1
- data/dojo/dojox/editor/plugins/resources/css/Blockquote.css +17 -0
- data/dojo/dojox/editor/plugins/resources/css/CollapsibleToolbar.css +173 -0
- data/dojo/dojox/editor/plugins/resources/css/FindReplace.css +56 -51
- data/dojo/dojox/editor/plugins/resources/css/InsertAnchor.css +17 -0
- data/dojo/dojox/editor/plugins/resources/css/InsertEntity.css +15 -37
- data/dojo/dojox/editor/plugins/resources/css/PasteFromWord.css +30 -0
- data/dojo/dojox/editor/plugins/resources/css/Smiley.css +20 -59
- data/dojo/dojox/editor/plugins/resources/css/StatusBar.css +75 -0
- data/dojo/dojox/editor/plugins/resources/css/TextColor.css +7 -0
- data/dojo/dojox/editor/plugins/resources/editorPlugins.css +1 -1
- data/dojo/dojox/editor/plugins/resources/icons/anchor.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/{findIconDisabled.gif → anchorDisabled.gif} +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/blockquote.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/blockquoteDisabled.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/{replaceIconDisabled.gif → claro/close.gif} +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceDisabled.png +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/editorIconsFindReplaceEnabled.png +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/nihilo/close.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/pasteFromWord.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/pasteFromWordDisabled.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/smileyDisabled.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/soria/close.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/tundra/close.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/anchor.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/claro/collapse.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/claro/expand.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/nihilo/collapse.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/nihilo/expand.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/nihilo/sidebar.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/soria/collapse.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/soria/expand.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/soria/sidebar.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/tundra/collapse.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/tundra/expand.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/images/tundra/sidebar.gif +0 -0
- data/dojo/dojox/editor/tests/editorBlockquote.html +118 -0
- data/dojo/dojox/editor/tests/editorCollapsibleToolbar.html +131 -0
- data/dojo/dojox/editor/tests/editorFindReplace.html +7 -3
- data/dojo/dojox/editor/tests/editorInsertAnchor.html +119 -0
- data/dojo/dojox/editor/tests/editorNormalizeStyle.html +163 -0
- data/dojo/dojox/editor/tests/editorPasteFromWord.html +98 -0
- data/dojo/dojox/editor/tests/editorSmileyPlugin.html +66 -8
- data/dojo/dojox/editor/tests/editorStatusBar.html +232 -0
- data/dojo/dojox/editor/tests/editorTablePlugs.html +80 -74
- data/dojo/dojox/editor/tests/editorTextColor.html +97 -0
- data/dojo/dojox/editor/tests/module.js +15 -0
- data/dojo/dojox/editor/tests/robot/Editor_Smiley.html +60 -0
- data/dojo/dojox/editor/tests/runTests.html +9 -0
- data/dojo/dojox/editor/tests/testPluginsAll.html +206 -0
- data/dojo/dojox/embed/Flash.js +94 -77
- data/dojo/dojox/flash/_base.js +3 -3
- data/dojo/dojox/form/BusyButton.js +2 -2
- data/dojo/dojox/form/CheckedMultiSelect.js +3 -16
- data/dojo/dojox/form/FileInput.js +4 -0
- data/dojo/dojox/form/FileInputAuto.js +12 -4
- data/dojo/dojox/form/FilePickerTextBox.js +5 -8
- data/dojo/dojox/form/FileUploader.js +1378 -1331
- data/dojo/dojox/form/ListInput.js +5 -5
- data/dojo/dojox/form/PasswordValidator.js +3 -3
- data/dojo/dojox/form/RangeSlider.js +3 -2
- data/dojo/dojox/form/Rating.js +0 -1
- data/dojo/dojox/form/TimeSpinner.js +1 -2
- data/dojo/dojox/form/manager/_Mixin.js +21 -11
- data/dojo/dojox/form/nls/ro/PasswordValidator.js +5 -0
- data/dojo/dojox/form/resources/CheckedMultiSelect.css +30 -0
- data/dojo/dojox/form/resources/CheckedMultiSelect.html +1 -1
- data/dojo/dojox/form/resources/FileInput.css +30 -0
- data/dojo/dojox/form/resources/FilePickerTextBox.html +2 -2
- data/dojo/dojox/form/resources/FileUploader.css +0 -24
- data/dojo/dojox/form/resources/HorizontalRangeSlider.html +38 -38
- data/dojo/dojox/form/resources/RangeSlider.css +9 -1
- data/dojo/dojox/form/resources/VerticalRangeSlider.html +49 -50
- data/dojo/dojox/form/resources/_CheckedMultiSelectItem.html +1 -1
- data/dojo/dojox/form/resources/uploader.swf +0 -0
- data/dojo/dojox/form/tests/UploadFile.php.disabled +25 -19
- data/dojo/dojox/form/tests/test_FileUploader.html +38 -38
- data/dojo/dojox/form/tests/test_FileUploaderDialog.html +0 -1
- data/dojo/dojox/form/tests/test_FileUploaderForm.html +5 -3
- data/dojo/dojox/form/tests/test_FileUploaderTabs.html +147 -0
- data/dojo/dojox/form/tests/test_MultiComboBox.html +1 -1
- data/dojo/dojox/form/tests/test_RangeSlider.html +1 -2
- data/dojo/dojox/form/tests/test_TimeSpinner.html +3 -30
- data/dojo/dojox/fx/Timeline.js +210 -0
- data/dojo/dojox/fx/ext-dojo/complex.js +169 -0
- data/dojo/dojox/fx/ext-dojo/reverse.js +98 -0
- data/dojo/dojox/fx/scroll.js +13 -6
- data/dojo/dojox/fx/tests/test_Timeline.html +173 -0
- data/dojo/dojox/fx/tests/test_complex.html +87 -0
- data/dojo/dojox/fx/tests/test_reverse.html +100 -0
- data/dojo/dojox/fx/tests/test_transform.html +210 -0
- data/dojo/dojox/fx/text.js +3 -3
- data/dojo/dojox/geo/README +37 -0
- data/dojo/dojox/geo/charting/Map.js +140 -0
- data/dojo/dojox/geo/charting/_Feature.js +169 -0
- data/dojo/dojox/geo/charting/_Marker.js +52 -0
- data/dojo/dojox/geo/charting/_base.js +53 -0
- data/dojo/dojox/geo/charting/resources/Map.css +30 -0
- data/dojo/dojox/geo/charting/resources/data/NOTICES +63 -0
- data/dojo/dojox/geo/charting/resources/data/USStates.json +261 -0
- data/dojo/dojox/geo/charting/resources/img/zoomin.gif +0 -0
- data/dojo/dojox/geo/charting/resources/img/zoomin.png +0 -0
- data/dojo/dojox/geo/charting/resources/img/zoomout.gif +0 -0
- data/dojo/dojox/geo/charting/resources/img/zoomout.png +0 -0
- data/dojo/dojox/geo/charting/resources/markers/USStates.json +1 -0
- data/dojo/dojox/geo/charting/tests/datastore/dataStore.json +1 -0
- data/dojo/dojox/geo/charting/tests/test_mapWithCharting.html +72 -0
- data/dojo/dojox/geo/charting/tests/test_mapWithLegend.html +63 -0
- data/dojo/dojox/geo/charting/tests/test_maps.html +37 -0
- data/dojo/dojox/geo/charting/widget/Legend.js +62 -0
- data/dojo/dojox/gfx/README +9 -2
- data/dojo/dojox/gfx/README-svgweb +98 -0
- data/dojo/dojox/gfx/VectorText.js +3 -3
- data/dojo/dojox/gfx/_base.js +2 -2
- data/dojo/dojox/gfx/arc.js +1 -1
- data/dojo/dojox/gfx/gradient.js +160 -0
- data/dojo/dojox/gfx/gradutils.js +91 -0
- data/dojo/dojox/gfx/path.js +89 -24
- data/dojo/dojox/gfx/resources/svg2gfx.xsl +53 -14
- data/dojo/dojox/gfx/shape.js +14 -7
- data/dojo/dojox/gfx/svg.js +135 -16
- data/dojo/dojox/gfx/tests/svgweb/README +15 -0
- data/dojo/dojox/gfx/tests/svgweb/sample.html +171 -0
- data/dojo/dojox/gfx/tests/svgweb/svgweb/COPYING.txt +65 -0
- data/dojo/dojox/gfx/tests/svgweb/svgweb/src/svg.htc +1 -0
- data/dojo/dojox/gfx/tests/svgweb/svgweb/src/svg.js +1 -0
- data/dojo/dojox/gfx/tests/svgweb/svgweb/src/svg.swf +0 -0
- data/dojo/dojox/gfx/tests/svgweb/test.roundrect.html +39 -0
- data/dojo/dojox/gfx/tests/svgweb/test_arc.html +66 -0
- data/dojo/dojox/gfx/tests/svgweb/test_bezier.html +81 -0
- data/dojo/dojox/gfx/tests/svgweb/test_destroy.html +58 -0
- data/dojo/dojox/gfx/tests/svgweb/test_fill.html +45 -0
- data/dojo/dojox/gfx/tests/svgweb/test_fx.html +104 -0
- data/dojo/dojox/gfx/tests/svgweb/test_fx_shapes.html +123 -0
- data/dojo/dojox/gfx/tests/svgweb/test_gfx.html +565 -0
- data/dojo/dojox/gfx/tests/svgweb/test_gradient.html +77 -0
- data/dojo/dojox/gfx/tests/svgweb/test_group1.html +70 -0
- data/dojo/dojox/gfx/tests/svgweb/test_group2.html +54 -0
- data/dojo/dojox/gfx/tests/svgweb/test_image1.html +80 -0
- data/dojo/dojox/gfx/tests/svgweb/test_image2.html +52 -0
- data/dojo/dojox/gfx/tests/svgweb/test_image3.html +77 -0
- data/dojo/dojox/gfx/tests/svgweb/test_image4.html +58 -0
- data/dojo/dojox/gfx/tests/svgweb/test_image5.html +67 -0
- data/dojo/dojox/gfx/tests/svgweb/test_linearGradient.html +75 -0
- data/dojo/dojox/gfx/tests/svgweb/test_linestyle.html +43 -0
- data/dojo/dojox/gfx/tests/svgweb/test_pattern.html +43 -0
- data/dojo/dojox/gfx/tests/svgweb/test_poly.html +49 -0
- data/dojo/dojox/gfx/tests/svgweb/test_resize.html +57 -0
- data/dojo/dojox/gfx/tests/svgweb/test_setPath.html +86 -0
- data/dojo/dojox/gfx/tests/svgweb/test_tbbox.html +113 -0
- data/dojo/dojox/gfx/tests/svgweb/test_text.html +80 -0
- data/dojo/dojox/gfx/tests/svgweb/test_textpath.html +77 -0
- data/dojo/dojox/gfx/tests/svgweb/test_transform.html +99 -0
- data/dojo/dojox/gfx/tests/svgweb/test_utils.html +234 -0
- data/dojo/dojox/gfx/tests/svgweb/test_vectortext_draw.html +64 -0
- data/dojo/dojox/gfx/tests/svgweb/test_vectortext_load.html +97 -0
- data/dojo/dojox/gfx/tests/test_image1.html +1 -4
- data/dojo/dojox/gfx/tests/test_image2.html +5 -5
- data/dojo/dojox/gfx/tests/test_image3.html +2 -2
- data/dojo/dojox/gfx/tests/test_image4.html +2 -2
- data/dojo/dojox/gfx/tests/test_linearGradient.html +2 -1
- data/dojo/dojox/gfx/tests/test_pattern.html +4 -3
- data/dojo/dojox/gfx/tests/test_refproj.html +109 -0
- data/dojo/dojox/gfx/vml.js +52 -57
- data/dojo/dojox/grid/DataGrid.js +17 -6
- data/dojo/dojox/grid/EnhancedGrid.js +24 -6
- data/dojo/dojox/grid/README +57 -0
- data/dojo/dojox/grid/_Builder.js +18 -8
- data/dojo/dojox/grid/_Grid.js +10 -20
- data/dojo/dojox/grid/_View.js +5 -2
- data/dojo/dojox/grid/cells/dijit.js +11 -4
- data/dojo/dojox/grid/enhanced/_Events.js +16 -6
- data/dojo/dojox/grid/enhanced/_Plugin.js +15 -20
- data/dojo/dojox/grid/enhanced/dnd/_DndEvents.js +6 -0
- data/dojo/dojox/grid/enhanced/dnd/_DndMovingManager.js +3 -1
- data/dojo/dojox/grid/enhanced/nls/ar/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/ca/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/da/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/el/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/fi/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/he/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/nb/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/nl/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/pt-pt/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/ro/EnhancedGrid.js +9 -0
- data/dojo/dojox/grid/enhanced/nls/sk/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/sl/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/sv/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/th/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/nls/tr/EnhancedGrid.js +8 -0
- data/dojo/dojox/grid/enhanced/plugins/IndirectSelection.js +5 -5
- data/dojo/dojox/grid/enhanced/plugins/Menu.js +22 -6
- data/dojo/dojox/grid/enhanced/plugins/NestedSorting.js +26 -42
- data/dojo/dojox/grid/enhanced/resources/EnhancedGrid.css +31 -32
- data/dojo/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css +16 -7
- data/dojo/dojox/grid/enhanced/resources/claroEnhancedGrid.css +104 -0
- data/dojo/dojox/grid/enhanced/resources/tundraEnhancedGrid.css +8 -17
- data/dojo/dojox/grid/resources/Grid.css +6 -0
- data/dojo/dojox/grid/resources/Grid_rtl.css +10 -2
- data/dojo/dojox/grid/resources/_Grid.html +1 -1
- data/dojo/dojox/grid/resources/claroGrid.css +216 -0
- data/dojo/dojox/grid/resources/images/header.png +0 -0
- data/dojo/dojox/grid/resources/images/header_shadow.png +0 -0
- data/dojo/dojox/grid/resources/images/row_back.png +0 -0
- data/dojo/dojox/grid/resources/images/td_button_down.png +0 -0
- data/dojo/dojox/grid/tests/enhanced/test_enhanced_grid_claro.html +70 -0
- data/dojo/dojox/grid/tests/robot/7815.html +0 -1
- data/dojo/dojox/grid/tests/robot/DataGrid_a11y.html +6 -1
- data/dojo/dojox/grid/tests/robot/DataGrid_mouse.html +50 -18
- data/dojo/dojox/grid/tests/robot/_DataGrid.html +0 -1
- data/dojo/dojox/grid/tests/robot/stores.js +3 -1
- data/dojo/dojox/grid/tests/test_grid_themes.html +27 -2
- data/dojo/dojox/grid/tests/test_treegrid_model.html +6 -6
- data/dojo/dojox/highlight/languages/_dynamic.js +2 -0
- data/dojo/dojox/highlight/languages/_static.js +1 -1
- data/dojo/dojox/highlight/languages/groovy.js +67 -0
- data/dojo/dojox/highlight/languages/java.js +58 -0
- data/dojo/dojox/highlight/languages/xquery.js +56 -0
- data/dojo/dojox/highlight/tests/test_highlight.html +147 -0
- data/dojo/dojox/html/entities.js +7 -7
- data/dojo/dojox/html/ext-dojo/style.js +460 -0
- data/dojo/dojox/html/format.js +5 -0
- data/dojo/dojox/html/metrics.js +31 -12
- data/dojo/dojox/html/tests/test_style-html.html +310 -0
- data/dojo/dojox/html/tests/test_themes.html +2 -2
- data/dojo/dojox/image/Lightbox.js +70 -28
- data/dojo/dojox/image/resources/Lightbox.css +11 -4
- data/dojo/dojox/image/resources/Lightbox.html +3 -3
- data/dojo/dojox/image/tests/Lightbox.html +2 -2
- data/dojo/dojox/image/tests/test_Lightbox.html +36 -2
- data/dojo/dojox/io/proxy/xip_client.html +1 -1
- data/dojo/dojox/io/proxy/xip_server.html +1 -1
- data/dojo/dojox/jq.js +1 -1
- data/dojo/dojox/json/query.js +7 -7
- data/dojo/dojox/json/ref.js +4 -2
- data/dojo/dojox/lang/README +13 -2
- data/dojo/dojox/lang/async.js +199 -0
- data/dojo/dojox/lang/async/event.js +41 -0
- data/dojo/dojox/lang/async/timeout.js +41 -0
- data/dojo/dojox/lang/async/topic.js +41 -0
- data/dojo/dojox/lang/oo/rearrange.js +1 -1
- data/dojo/dojox/lang/tests/async.js +216 -0
- data/dojo/dojox/lang/tests/docs.js +2 -2
- data/dojo/dojox/lang/tests/main.js +1 -1
- data/dojo/dojox/lang/tests/test_oo_decl.html +52 -3
- data/dojo/dojox/lang/utils.js +52 -9
- data/dojo/dojox/layout/ExpandoPane.js +71 -21
- data/dojo/dojox/layout/FloatingPane.js +7 -4
- data/dojo/dojox/layout/GridContainer.js +453 -920
- data/dojo/dojox/layout/GridContainerLite.js +811 -0
- data/dojo/dojox/layout/README +1 -1
- data/dojo/dojox/layout/ResizeHandle.js +6 -3
- data/dojo/dojox/layout/RotatorContainer.js +1 -1
- data/dojo/dojox/layout/TableContainer.js +7 -0
- data/dojo/dojox/layout/ToggleSplitter.js +2 -2
- data/dojo/dojox/layout/resources/ExpandoPane.css +52 -0
- data/dojo/dojox/layout/resources/ExpandoPane.html +2 -2
- data/dojo/dojox/layout/resources/GridContainer.css +49 -69
- data/dojo/dojox/layout/resources/GridContainer.html +9 -5
- data/dojo/dojox/layout/resources/ResizeHandle.css +18 -0
- data/dojo/dojox/layout/resources/icons/gridcontainer_grip.gif +0 -0
- data/dojo/dojox/layout/resources/icons/resizeRtl.png +0 -0
- data/dojo/dojox/layout/tests/resources/script_dnd.js +158 -0
- data/dojo/dojox/layout/tests/resources/set_complete_dnd.css +61 -0
- data/dojo/dojox/layout/tests/test_ExpandoPane.html +7 -1
- data/dojo/dojox/layout/tests/test_ExpandoPane_prog.html +1 -1
- data/dojo/dojox/layout/tests/test_GridContainer.html +24 -76
- data/dojo/dojox/layout/tests/test_GridContainerColWidths.html +31 -19
- data/dojo/dojox/layout/tests/test_GridContainerLite.html +122 -0
- data/dojo/dojox/layout/tests/test_GridContainerLite_doLayout.html +112 -0
- data/dojo/dojox/layout/tests/test_GridContainerLite_dragRestriction.html +148 -0
- data/dojo/dojox/layout/tests/test_GridContainer_ResizableCol.html +93 -0
- data/dojo/dojox/layout/tests/test_GridContainer_TitlePanes.html +85 -0
- data/dojo/dojox/layout/tests/test_GridContainer_complete_solution.html +103 -0
- data/dojo/dojox/layout/tests/test_GridContainer_dragHandle.html +107 -0
- data/dojo/dojox/layout/tests/{test_GridContainerBC.html → test_GridContainer_in_BorderContainer.html} +27 -61
- data/dojo/dojox/layout/tests/{test_GridContainerBC_prog.html → test_GridContainer_in_BorderContainer_prog.html} +142 -50
- data/dojo/dojox/layout/tests/test_TableContainer.html +2 -2
- data/dojo/dojox/math/BigInteger-ext.js +1 -3
- data/dojo/dojox/math/BigInteger.js +3 -3
- data/dojo/dojox/math/README +0 -3
- data/dojo/dojox/math/_base.js +48 -11
- data/dojo/dojox/math/tests/math.js +19 -1
- data/dojo/dojox/mdnd/AreaManager.js +707 -0
- data/dojo/dojox/mdnd/AutoScroll.js +195 -0
- data/dojo/dojox/mdnd/DropIndicator.js +86 -0
- data/dojo/dojox/mdnd/LazyManager.js +68 -0
- data/dojo/dojox/mdnd/Moveable.js +251 -0
- data/dojo/dojox/mdnd/PureSource.js +208 -0
- data/dojo/dojox/mdnd/README +94 -0
- data/dojo/dojox/mdnd/adapter/DndFromDojo.js +366 -0
- data/dojo/dojox/mdnd/adapter/DndToDojo.js +484 -0
- data/dojo/dojox/mdnd/dropMode/DefaultDropMode.js +333 -0
- data/dojo/dojox/mdnd/dropMode/OverDropMode.js +308 -0
- data/dojo/dojox/mdnd/dropMode/VerticalDropMode.js +343 -0
- data/dojo/dojox/mdnd/resources/dnd.css +93 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_acceptance.html +71 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_autoScroll.html +52 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_defaultDropMode.html +55 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_dndFromDojo.html +73 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_dndToDojo.html +93 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_dndToDojo_dndFromDojo.html +70 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_overDropMode.html +57 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_stress.html +83 -0
- data/dojo/dojox/mdnd/tests/functionalTests/test_dnd_verticalDropMode.html +55 -0
- data/dojo/dojox/mdnd/tests/module.js +16 -0
- data/dojo/dojox/mdnd/tests/resources/test_dnd.css +68 -0
- data/dojo/dojox/mdnd/tests/robot/module.js +16 -0
- data/dojo/dojox/mdnd/tests/robot/test_dnd_acceptance.html +284 -0
- data/dojo/dojox/mdnd/tests/robot/test_dnd_defaultDropMode.html +101 -0
- data/dojo/dojox/mdnd/tests/robot/test_dnd_dndFromDojo.html +322 -0
- data/dojo/dojox/mdnd/tests/robot/test_dnd_dndToDojo.html +198 -0
- data/dojo/dojox/mdnd/tests/robot/test_dnd_overDropMode.html +272 -0
- data/dojo/dojox/mdnd/tests/robot/test_dnd_verticalDropMode.html +101 -0
- data/dojo/dojox/mdnd/tests/runTests.html +9 -0
- data/dojo/dojox/mdnd/tests/unitTests/areaManager/AreaManagerCoverPresence.html +110 -0
- data/dojo/dojox/mdnd/tests/unitTests/areaManager/AreaManagerManagingDragItems.html +149 -0
- data/dojo/dojox/mdnd/tests/unitTests/areaManager/AreaManagerRegistering.html +124 -0
- data/dojo/dojox/mdnd/tests/unitTests/areaManager/module.js +12 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropIndicator/DropIndicatorTest.html +187 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropIndicator/module.js +8 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropMode/DefaultDropModeTest.html +241 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropMode/FixtureLib.js +87 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropMode/OverDropModeTest.html +195 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropMode/VerticalDropModeTest.html +241 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropMode/module.js +10 -0
- data/dojo/dojox/mdnd/tests/unitTests/dropMode/resources/domElement.html +130 -0
- data/dojo/dojox/mdnd/tests/unitTests/module.js +9 -0
- data/dojo/dojox/mobile.js +4 -0
- data/dojo/dojox/mobile/README +55 -0
- data/dojo/dojox/mobile/_base.js +1451 -0
- data/dojo/dojox/mobile/app.js +3 -0
- data/dojo/dojox/mobile/app/AlertDialog.js +182 -0
- data/dojo/dojox/mobile/app/ImageThumbView.js +254 -0
- data/dojo/dojox/mobile/app/ImageView.js +716 -0
- data/dojo/dojox/mobile/app/List.js +577 -0
- data/dojo/dojox/mobile/app/ListSelector.js +218 -0
- data/dojo/dojox/mobile/app/SceneAssistant.js +56 -0
- data/dojo/dojox/mobile/app/SceneController.js +157 -0
- data/dojo/dojox/mobile/app/StageController.js +137 -0
- data/dojo/dojox/mobile/app/TextBox.js +321 -0
- data/dojo/dojox/mobile/app/_FormWidget.js +294 -0
- data/dojo/dojox/mobile/app/_Widget.js +30 -0
- data/dojo/dojox/mobile/app/_base.js +226 -0
- data/dojo/dojox/mobile/app/_event.js +119 -0
- data/dojo/dojox/mobile/app/compat.js +109 -0
- data/dojo/dojox/mobile/build/build.bat +47 -0
- data/dojo/dojox/mobile/build/build.sh +50 -0
- data/dojo/dojox/mobile/build/profiles/mobile-all.profile.js +36 -0
- data/dojo/dojox/mobile/build/profiles/mobile.profile.js +40 -0
- data/dojo/dojox/mobile/compat.js +399 -0
- data/dojo/dojox/mobile/parser.js +80 -0
- data/dojo/dojox/mobile/tests/complexListApp/app/assistants/main-assistant.js +123 -0
- data/dojo/dojox/mobile/tests/complexListApp/app/views/main/emptyTemplate.html +3 -0
- data/dojo/dojox/mobile/tests/complexListApp/app/views/main/main-scene.html +23 -0
- data/dojo/dojox/mobile/tests/complexListApp/app/views/main/rowTemplate.html +15 -0
- data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-1.png +0 -0
- data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-2.png +0 -0
- data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-3.png +0 -0
- data/dojo/dojox/mobile/tests/complexListApp/images/i-icon-4.png +0 -0
- data/dojo/dojox/mobile/tests/complexListApp/index.html +37 -0
- data/dojo/dojox/mobile/tests/complexListApp/styles/style.css +38 -0
- data/dojo/dojox/mobile/tests/dialogApp/app/assistants/main-assistant.js +75 -0
- data/dojo/dojox/mobile/tests/dialogApp/app/views/main/main-scene.html +10 -0
- data/dojo/dojox/mobile/tests/dialogApp/index.html +37 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-image-thumb-view-assistant.js +198 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-image-view-assistant.js +170 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-search-group-assistant.js +123 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-search-selection-assistant.js +54 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/flickr-search-text-assistant.js +119 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/image-view-assistant.js +92 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/assistants/main-assistant.js +40 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-image-thumb-view/flickr-image-thumb-view-scene.html +17 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-image-view/flickr-image-view-scene.html +10 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-group/emptyTemplate.html +3 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-group/flickr-search-group-scene.html +19 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-group/rowTemplate.html +8 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-selection/flickr-search-selection-scene.html +7 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-selection/rowTemplate.html +8 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-text/emptyTemplate.html +3 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-text/flickr-search-group-scene.html +19 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/flickr-search-text/rowTemplate.html +15 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/image-view/image-view-scene.html +23 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/main/main-scene.html +6 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/app/views/main/rowTemplate.html +8 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/images/chris1_lg.jpg +0 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/images/chris2_lg.jpg +0 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/images/imageHoriz.jpg +0 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/images/imageVert.jpg +0 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/images/square.jpg +0 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/index.html +39 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/styles/styles.css +13 -0
- data/dojo/dojox/mobile/tests/imageControlsApp/view-resources.json +14 -0
- data/dojo/dojox/mobile/tests/images/a-icon-1-41x41.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-1.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-10.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-11.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-12.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-13.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-14.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-15.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-16.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-17.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-18.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-2-41x41.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-2.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-3.png +0 -0
- data/dojo/dojox/mobile/tests/images/a-icon-4.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-1.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-10.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-2.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-3.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-4.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-5.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-6.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-7.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-8.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-9.png +0 -0
- data/dojo/dojox/mobile/tests/images/i-icon-all.png +0 -0
- data/dojo/dojox/mobile/tests/images/icon-1.png +0 -0
- data/dojo/dojox/mobile/tests/images/not-images.png +0 -0
- data/dojo/dojox/mobile/tests/images/red-button-bg.png +0 -0
- data/dojo/dojox/mobile/tests/images/red-button-sel-bg.png +0 -0
- data/dojo/dojox/mobile/tests/images/widget-bg.png +0 -0
- data/dojo/dojox/mobile/tests/index.html +55 -0
- data/dojo/dojox/mobile/tests/inputApp/app/assistants/text-input-assistant.js +21 -0
- data/dojo/dojox/mobile/tests/inputApp/app/views/text-input/text-input-scene.html +50 -0
- data/dojo/dojox/mobile/tests/inputApp/index.html +37 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/app/assistants/main-assistant.js +41 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/app/assistants/second-assistant.js +32 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/app/assistants/third-assistant.js +33 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/app/views/main/main-scene.html +16 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/app/views/second/second-scene.html +12 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/app/views/third/third-scene.html +13 -0
- data/dojo/dojox/mobile/tests/multiSceneApp/index.html +37 -0
- data/dojo/dojox/mobile/tests/simpleApp/app/assistants/main-assistant.js +23 -0
- data/dojo/dojox/mobile/tests/simpleApp/app/views/main/main-scene.html +3 -0
- data/dojo/dojox/mobile/tests/simpleApp/index.html +36 -0
- data/dojo/dojox/mobile/tests/simpleListApp/app/assistants/main-assistant.js +66 -0
- data/dojo/dojox/mobile/tests/simpleListApp/app/views/main/main-scene.html +14 -0
- data/dojo/dojox/mobile/tests/simpleListApp/app/views/main/rowTemplate.html +3 -0
- data/dojo/dojox/mobile/tests/simpleListApp/index.html +36 -0
- data/dojo/dojox/mobile/tests/test_Android-ButtonList.html +68 -0
- data/dojo/dojox/mobile/tests/test_Android-EdgeToEdge.html +50 -0
- data/dojo/dojox/mobile/tests/test_Android-EdgeToEdgeCategory.html +46 -0
- data/dojo/dojox/mobile/tests/test_Android-Icon.html +58 -0
- data/dojo/dojox/mobile/tests/test_Android-RoundRectList.html +60 -0
- data/dojo/dojox/mobile/tests/test_Android-Settings.html +104 -0
- data/dojo/dojox/mobile/tests/test_Android-Switch.html +23 -0
- data/dojo/dojox/mobile/tests/test_Android-TabContainer.html +139 -0
- data/dojo/dojox/mobile/tests/test_Android-VariableHeightList.html +100 -0
- data/dojo/dojox/mobile/tests/test_ajax-html.html +34 -0
- data/dojo/dojox/mobile/tests/test_ajax-json.html +34 -0
- data/dojo/dojox/mobile/tests/test_anchor-label.html +74 -0
- data/dojo/dojox/mobile/tests/test_bookmarkable.html +112 -0
- data/dojo/dojox/mobile/tests/test_buttons.html +21 -0
- data/dojo/dojox/mobile/tests/test_dynamic-icons.html +53 -0
- data/dojo/dojox/mobile/tests/test_dynamic-items.html +98 -0
- data/dojo/dojox/mobile/tests/test_dynamic-view.html +58 -0
- data/dojo/dojox/mobile/tests/test_hash-parameter.html +71 -0
- data/dojo/dojox/mobile/tests/test_iPhone-Animation.html +81 -0
- data/dojo/dojox/mobile/tests/test_iPhone-Button.html +41 -0
- data/dojo/dojox/mobile/tests/test_iPhone-ButtonList.html +50 -0
- data/dojo/dojox/mobile/tests/test_iPhone-EdgeToEdge.html +47 -0
- data/dojo/dojox/mobile/tests/test_iPhone-EdgeToEdgeCategory.html +46 -0
- data/dojo/dojox/mobile/tests/test_iPhone-Heading.html +24 -0
- data/dojo/dojox/mobile/tests/test_iPhone-Icon.html +58 -0
- data/dojo/dojox/mobile/tests/test_iPhone-IconMulti.html +36 -0
- data/dojo/dojox/mobile/tests/test_iPhone-IconSingle.html +35 -0
- data/dojo/dojox/mobile/tests/test_iPhone-IconSingleBelow.html +35 -0
- data/dojo/dojox/mobile/tests/test_iPhone-ResultList.html +65 -0
- data/dojo/dojox/mobile/tests/test_iPhone-RoundRect.html +27 -0
- data/dojo/dojox/mobile/tests/test_iPhone-RoundRectList.html +54 -0
- data/dojo/dojox/mobile/tests/test_iPhone-Settings.html +168 -0
- data/dojo/dojox/mobile/tests/test_iPhone-Switch.html +23 -0
- data/dojo/dojox/mobile/tests/test_iPhone-TabContainer.html +169 -0
- data/dojo/dojox/mobile/tests/test_iPhone-VariableHeightList.html +99 -0
- data/dojo/dojox/mobile/tests/test_progress-indicator.html +83 -0
- data/dojo/dojox/mobile/tests/view-sample.html +38 -0
- data/dojo/dojox/mobile/tests/view1.html +14 -0
- data/dojo/dojox/mobile/tests/view1.json +18 -0
- data/dojo/dojox/mobile/tests/view2.html +9 -0
- data/dojo/dojox/mobile/tests/view2.json +31 -0
- data/dojo/dojox/mobile/tests/view3.html +16 -0
- data/dojo/dojox/mobile/tests/view3.json +44 -0
- data/dojo/dojox/mobile/themes/android/android-compat.css +284 -0
- data/dojo/dojox/mobile/themes/android/android.css +738 -0
- data/dojo/dojox/mobile/themes/android/compat/arrow-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/arrow-button-head.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/blue-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/blue-button-sel-bg.png +0 -0
- data/dojo/dojox/{editor/plugins/resources/icons/findReplaceDisabled.gif → mobile/themes/android/compat/gray-arrow.png} +0 -0
- data/dojo/dojox/mobile/themes/android/compat/icon-content-heading-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/switch-blue-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/switch-gray-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/switch-green-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/switch-knob-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/tab-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/tab-orange-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/android/compat/tab-sel-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/buttons-compat.css +30 -0
- data/dojo/dojox/mobile/themes/buttons.css +191 -0
- data/dojo/dojox/mobile/themes/compat/check-off-button.png +0 -0
- data/dojo/dojox/mobile/themes/compat/check-on-button.png +0 -0
- data/dojo/dojox/mobile/themes/compat/small-blue-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/compat/small-darkblue-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/compat/small-red-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/arrow-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/arrow-button-head.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/blue-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/blue-button-sel-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/edge-categ-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/gray-arrow.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/heading-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/icon-content-heading-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/switch-blue-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/switch-gray-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/switch-knob-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/tab-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/tab-sel-button-bg.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/compat/white-arrow.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/images/thumb-overlay.png +0 -0
- data/dojo/dojox/mobile/themes/iphone/iphone-app-compat.css +24 -0
- data/dojo/dojox/mobile/themes/iphone/iphone-app.css +281 -0
- data/dojo/dojox/mobile/themes/iphone/iphone-compat.css +290 -0
- data/dojo/dojox/mobile/themes/iphone/iphone.css +751 -0
- data/dojo/dojox/rails.js +143 -0
- data/dojo/dojox/rails/README +41 -0
- data/dojo/dojox/rails/tests/module.js +7 -0
- data/dojo/dojox/rails/tests/plugd/trigger.js +187 -0
- data/dojo/dojox/rails/tests/runTests.html +9 -0
- data/dojo/dojox/rails/tests/success_response.html +1 -0
- data/dojo/dojox/rails/tests/test_rails.html +320 -0
- data/dojo/dojox/robot/recorder.js +3 -3
- data/dojo/dojox/rpc/SMDLibrary/wikipedia.smd +49 -49
- data/dojo/dojox/rpc/tests/resources/query +5 -5
- data/dojo/dojox/sketch/Figure.js +2 -2
- data/dojo/dojox/sketch/UndoStack.js +2 -2
- data/dojo/dojox/validate/creditCard.js +1 -1
- data/dojo/dojox/widget/Calendar.js +18 -18
- data/dojo/dojox/widget/CalendarViews.js +2 -2
- data/dojo/dojox/widget/ColorPicker.js +248 -73
- data/dojo/dojox/widget/ColorPicker/ColorPicker.css +32 -19
- data/dojo/dojox/widget/ColorPicker/ColorPicker.html +71 -30
- data/dojo/dojox/widget/ColorPicker/images/hueHandleA11y.png +0 -0
- data/dojo/dojox/widget/DataPresentation.js +126 -60
- data/dojo/dojox/widget/Dialog.js +2 -1
- data/dojo/dojox/widget/Dialog/Dialog.css +7 -0
- data/dojo/dojox/widget/DynamicTooltip.js +3 -3
- data/dojo/dojox/widget/FeedPortlet.js +9 -9
- data/dojo/dojox/widget/FilePicker.js +2 -2
- data/dojo/dojox/widget/Portlet.js +8 -0
- data/dojo/dojox/widget/Portlet/Portlet.css +2 -2
- data/dojo/dojox/widget/RollingList.js +11 -8
- data/dojo/dojox/widget/Rotator.js +7 -1
- data/dojo/dojox/widget/Standby.js +32 -5
- data/dojo/dojox/widget/Toaster.js +3 -1
- data/dojo/dojox/widget/UpgradeBar.js +20 -20
- data/dojo/dojox/widget/Wizard.js +2 -2
- data/dojo/dojox/widget/Wizard/Wizard.css +5 -0
- data/dojo/dojox/widget/gauge/_Gauge.js +2 -2
- data/dojo/dojox/widget/nls/ColorPicker.js +4 -2
- data/dojo/dojox/widget/nls/ar/ColorPicker.js +3 -0
- data/dojo/dojox/widget/nls/ca/ColorPicker.js +6 -0
- data/dojo/dojox/widget/nls/da/ColorPicker.js +3 -0
- data/dojo/dojox/widget/nls/el/ColorPicker.js +10 -0
- data/dojo/dojox/widget/nls/fi/ColorPicker.js +3 -0
- data/dojo/dojox/widget/nls/he/ColorPicker.js +10 -0
- data/dojo/dojox/widget/nls/ko/ColorPicker.js +7 -1
- data/dojo/dojox/widget/nls/nb/ColorPicker.js +3 -0
- data/dojo/dojox/widget/nls/nl/ColorPicker.js +6 -0
- data/dojo/dojox/widget/nls/pt-pt/ColorPicker.js +8 -0
- data/dojo/dojox/widget/nls/ro/ColorPicker.js +5 -0
- data/dojo/dojox/widget/nls/ro/FilePicker.js +6 -0
- data/dojo/dojox/widget/nls/ro/Wizard.js +6 -0
- data/dojo/dojox/widget/nls/sk/ColorPicker.js +3 -0
- data/dojo/dojox/widget/nls/sl/ColorPicker.js +3 -0
- data/dojo/dojox/widget/nls/sv/ColorPicker.js +6 -0
- data/dojo/dojox/widget/nls/tr/ColorPicker.js +10 -0
- data/dojo/dojox/widget/rotator/ThumbnailController.js +96 -0
- data/dojo/dojox/widget/tests/test_ColorPicker.html +10 -1
- data/dojo/dojox/widget/tests/test_DataPresentation.html +7 -3
- data/dojo/dojox/widget/tests/test_PortletInGridContainer.html +27 -37
- data/dojo/dojox/widget/tests/test_PortletInGridContainer.js +2 -1
- data/dojo/dojox/widget/tests/test_PortletInGridContainerColumns.html +10 -8
- data/dojo/dojox/widget/tests/test_Rotator.html +2 -0
- data/dojo/dojox/widget/tests/test_Rotator_ThumbnailController.html +63 -0
- data/dojo/dojox/widget/tests/test_Standby.html +4 -4
- data/dojo/dojox/wire/Wire.js +32 -4
- data/dojo/dojox/wire/demos/markup/demo_ActionChaining.html +1 -1
- data/dojo/dojox/wire/demos/markup/demo_ConditionalActions.html +6 -6
- data/dojo/dojox/wire/demos/markup/demo_TopicWiring.html +1 -1
- data/dojo/dojox/xml/parser.js +2 -2
- data/dojo/util/LICENSE +1 -1
- data/dojo/util/buildscripts/build.bat +3 -3
- data/dojo/util/buildscripts/build.js +4 -2
- data/dojo/util/buildscripts/build_notice.txt +2 -4
- data/dojo/util/buildscripts/build_release.sh +6 -6
- data/dojo/util/buildscripts/cdnBuild.sh +39 -0
- data/dojo/util/buildscripts/cdnBuild.txt +13 -13
- data/dojo/util/buildscripts/cldr/README +1 -1
- data/dojo/util/buildscripts/cldr/build.xml +1 -1
- data/dojo/util/buildscripts/cldr/calendar.xsl +98 -74
- data/dojo/util/buildscripts/cldr/ldml/CatalogManager.properties +16 -16
- data/dojo/util/buildscripts/cldr/ldml/catalog +1 -1
- data/dojo/util/buildscripts/cldr/ldml/core.zip +0 -0
- data/dojo/util/buildscripts/copyright.txt +1 -1
- data/dojo/util/buildscripts/jslib/buildUtil.js +9 -0
- data/dojo/util/buildscripts/jslib/dojoGuardEnd.jsfrag +8 -7
- data/dojo/util/buildscripts/profiles/baseplus.profile.js +21 -0
- data/dojo/util/buildscripts/profiles/demos-all.profile.js +7 -0
- data/dojo/util/buildscripts/tests/conditionalTest.js +1 -1
- data/dojo/util/checkstyle/checkstyle.bat +3 -3
- data/dojo/util/checkstyle/checkstyleUtil.js +68 -4
- data/dojo/util/checkstyle/runCheckstyle.js +24 -2
- data/dojo/util/docscripts/LICENSE +1 -1
- data/dojo/util/docscripts/cheat/lib.js +1 -1
- data/dojo/util/docscripts/lib/parser2/JavaScriptArray.php +2 -2
- data/dojo/util/docscripts/makeCix.php +1 -1
- data/dojo/util/doh/_browserRunner.js +25 -4
- data/dojo/util/doh/_rhinoRunner.js +1 -0
- data/dojo/util/doh/robot/DOHRobot.jar +0 -0
- data/dojo/util/doh/robot/DOHRobot.java +32 -7
- data/dojo/util/doh/runner.html +2 -2
- data/dojo/util/doh/runner.js +14 -5
- data/dojo/util/jsdoc/LICENSE +1 -1
- data/dojo/util/migration/dijitCss14to15.sed +67 -0
- data/dojo/util/shrinksafe/shrinksafe.jar +0 -0
- data/dojo/util/shrinksafe/src/org/dojotoolkit/shrinksafe/resources/Messages.properties +1 -1
- data/dojo/util/shrinksafe/tests/escapeunicode.js +1 -0
- data/dojo/util/shrinksafe/tests/module.js +14 -5
- data/lib/dojo_src.rb +2 -5
- metadata +4940 -4373
- data/dojo/dijit/tests/_base/viewportQuirks.html +0 -5
- data/dojo/dijit/themes/nihilo/form/ComboBox.css +0 -12
- data/dojo/dijit/themes/nihilo/form/Common_rtl.css +0 -7
- data/dojo/dijit/themes/nihilo/images/editor.gif +0 -0
- data/dojo/dijit/themes/nihilo/images/editorDisabled.gif +0 -0
- data/dojo/dijit/themes/nihilo/images/editorDisabled_rtl.gif +0 -0
- data/dojo/dijit/themes/nihilo/images/editor_rtl.gif +0 -0
- data/dojo/dijit/themes/soria/form/ComboBox.css +0 -12
- data/dojo/dijit/themes/soria/form/Common_rtl.css +0 -7
- data/dojo/dijit/themes/soria/images/editor.gif +0 -0
- data/dojo/dijit/themes/soria/images/editorDisabled.gif +0 -0
- data/dojo/dijit/themes/soria/images/editorDisabled_rtl.gif +0 -0
- data/dojo/dijit/themes/soria/images/editor_rtl.gif +0 -0
- data/dojo/dijit/themes/templateThemeTest.html +0 -178
- data/dojo/dijit/themes/tundra/form/Common_rtl.css +0 -6
- data/dojo/dijit/themes/tundra/images/editor.gif +0 -0
- data/dojo/dijit/themes/tundra/images/editorDisabled.gif +0 -0
- data/dojo/dijit/themes/tundra/images/editorDisabled_rtl.gif +0 -0
- data/dojo/dijit/themes/tundra/images/editorMaster.png +0 -0
- data/dojo/dijit/themes/tundra/images/editor_rtl.gif +0 -0
- data/dojo/dojo/cldr/nls/de-de/number.js +0 -4
- data/dojo/dojo/cldr/nls/en-us/currency.js +0 -5
- data/dojo/dojo/cldr/nls/en-us/number.js +0 -4
- data/dojo/dojo/cldr/nls/es-es/gregorian.js +0 -7
- data/dojo/dojo/cldr/nls/es-es/number.js +0 -4
- data/dojo/dojo/cldr/nls/islamic-civil.js +0 -96
- data/dojo/dojo/cldr/nls/it-it/gregorian.js +0 -5
- data/dojo/dojo/cldr/nls/ja-jp/number.js +0 -4
- data/dojo/dojo/cldr/nls/ko-kr/gregorian.js +0 -6
- data/dojo/dojo/cldr/nls/ko-kr/number.js +0 -4
- data/dojo/dojo/cldr/nls/pt-br/gregorian.js +0 -18
- data/dojo/dojo/cldr/nls/zh-cn/gregorian.js +0 -12
- data/dojo/dojo/cldr/nls/zh-cn/number.js +0 -4
- data/dojo/dojo/cldr/nls/zh-tw/number.js +0 -6
- data/dojo/dojox/editor/plugins/resources/icons/findIcon.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/findReplace.gif +0 -0
- data/dojo/dojox/editor/plugins/resources/icons/replaceIcon.gif +0 -0
- data/dojo/dojox/math/LICENSE-BigInteger +0 -40
- data/dojo/util/buildscripts/cldr/ldml/ldml.dtd +0 -1166
- data/dojo/util/docscripts/api.json +0 -202488
- data/dojo/util/docscripts/api.xml +0 -54976
- data/dojo/util/resources/LICENSE +0 -195
- data/dojo/util/resources/api/api.xml +0 -0
- data/dojo/util/resources/api/dojo.cix +0 -0
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/dojo-styles.css +0 -114
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/bg-content-left.png +0 -0
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/bg-content-right.png +0 -0
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/body.png +0 -0
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/images/logo.png +0 -0
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/mini-dtk.css +0 -34
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/mini-dtk.psd +0 -0
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/style.css +0 -1092
- data/dojo/util/resources/dojotoolkit.org/mini-dtk/template.html +0 -115
- data/dojo/util/resources/logo/negative/dijit.logo.neg.ai +15 -4118
- data/dojo/util/resources/logo/negative/dijit.logo.neg.eps +0 -5557
- data/dojo/util/resources/logo/negative/dijit.logo.neg.png +0 -0
- data/dojo/util/resources/logo/negative/dijit.logo.neg.svg +0 -987
- data/dojo/util/resources/logo/negative/dojo.logo.neg.ai +0 -0
- data/dojo/util/resources/logo/negative/dojo.logo.neg.big.png +0 -0
- data/dojo/util/resources/logo/negative/dojo.logo.neg.eps +0 -64
- data/dojo/util/resources/logo/negative/dojo.logo.neg.png +0 -0
- data/dojo/util/resources/logo/negative/dojo.logo.neg.svg +0 -36
- data/dojo/util/resources/logo/negative/dojox.logo.neg.ai +8 -4003
- data/dojo/util/resources/logo/negative/dojox.logo.neg.eps +0 -5357
- data/dojo/util/resources/logo/negative/dojox.logo.neg.png +0 -0
- data/dojo/util/resources/logo/negative/dojox.logo.neg.svg +0 -41
- data/dojo/util/resources/logo/positive/dijit.logo.ai +10 -4169
- data/dojo/util/resources/logo/positive/dijit.logo.eps +0 -5562
- data/dojo/util/resources/logo/positive/dijit.logo.png +0 -0
- data/dojo/util/resources/logo/positive/dijit.logo.svg +0 -987
- data/dojo/util/resources/logo/positive/dojo.logo.ai +15 -3719
- data/dojo/util/resources/logo/positive/dojo.logo.big.png +0 -0
- data/dojo/util/resources/logo/positive/dojo.logo.eps +0 -64
- data/dojo/util/resources/logo/positive/dojo.logo.png +0 -0
- data/dojo/util/resources/logo/positive/dojo.logo.svg +0 -36
- data/dojo/util/resources/logo/positive/dojox.logo.ai +13 -4068
- data/dojo/util/resources/logo/positive/dojox.logo.eps +0 -5362
- data/dojo/util/resources/logo/positive/dojox.logo.png +0 -0
- data/dojo/util/resources/logo/positive/dojox.logo.svg +0 -41
- data/dojo/util/resources/themes/nihilo/nihilo.psd +0 -0
- data/dojo/util/resources/themes/soria/soria.psd +0 -0
data/dojo/dojox/flash/_base.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
dojo.provide("dojox.flash._base");
|
2
2
|
dojo.experimental("dojox.flash");
|
3
3
|
|
4
|
-
// for
|
5
|
-
dojo.require("
|
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 =
|
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.
|
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.
|
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.
|
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.
|
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
|
-
|
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("
|
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.
|
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.
|
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
|
-
|
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
|
-
(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
+
});
|