From 392074ffcac8d1d652d78fc552709c03cb5b08cf Mon Sep 17 00:00:00 2001 From: Jeremy Grelle Date: Fri, 26 Oct 2007 19:34:06 +0000 Subject: [PATCH] Default spring-faces component support now based on Dojo. Ext support moved to faces-ext tag namespace. --- .../main/java/META-INF/dijit/ColorPalette.js | 260 + .../main/java/META-INF/dijit/Declaration.js | 66 + .../src/main/java/META-INF/dijit/Dialog.js | 362 + .../src/main/java/META-INF/dijit/Editor.js | 368 + .../src/main/java/META-INF/dijit/Menu.js | 538 + .../main/java/META-INF/dijit/ProgressBar.js | 90 + .../src/main/java/META-INF/dijit/TitlePane.js | 129 + .../src/main/java/META-INF/dijit/Toolbar.js | 33 + .../src/main/java/META-INF/dijit/Tooltip.js | 188 + .../src/main/java/META-INF/dijit/Tree.js | 500 + .../src/main/java/META-INF/dijit/_Calendar.js | 226 + .../main/java/META-INF/dijit/_Container.js | 118 + .../main/java/META-INF/dijit/_Templated.js | 329 + .../src/main/java/META-INF/dijit/_Widget.js | 294 + .../src/main/java/META-INF/dijit/_base.js | 16 + .../main/java/META-INF/dijit/_base/bidi.js | 13 + .../main/java/META-INF/dijit/_base/focus.js | 327 + .../main/java/META-INF/dijit/_base/manager.js | 82 + .../main/java/META-INF/dijit/_base/place.js | 188 + .../main/java/META-INF/dijit/_base/popup.js | 249 + .../main/java/META-INF/dijit/_base/scroll.js | 33 + .../main/java/META-INF/dijit/_base/sniff.js | 43 + .../java/META-INF/dijit/_base/typematic.js | 132 + .../src/main/java/META-INF/dijit/_base/wai.js | 121 + .../main/java/META-INF/dijit/_base/window.js | 44 + .../java/META-INF/dijit/_editor/RichText.js | 1416 ++ .../java/META-INF/dijit/_editor/_Plugin.js | 91 + .../META-INF/dijit/_editor/nls/LinkDialog.js | 1 + .../META-INF/dijit/_editor/nls/commands.js | 1 + .../META-INF/dijit/_editor/nls/de/commands.js | 1 + .../META-INF/dijit/_editor/nls/it/commands.js | 1 + .../_editor/plugins/AlwaysShowToolbar.js | 147 + .../dijit/_editor/plugins/EnterKeyHandling.js | 422 + .../dijit/_editor/plugins/LinkDialog.js | 155 + .../main/java/META-INF/dijit/_editor/range.js | 566 + .../java/META-INF/dijit/_editor/selection.js | 220 + .../java/META-INF/dijit/_tree/Controller.js | 408 + .../main/java/META-INF/dijit/_tree/Node.html | 11 + .../main/java/META-INF/dijit/_tree/Tree.html | 3 + .../META-INF/dijit/bench/benchReceive.php | 127 + .../java/META-INF/dijit/bench/benchTool.html | 189 + .../META-INF/dijit/bench/create_widgets.html | 73 + .../dijit/bench/test_Button-programmatic.html | 75 + .../dijit/bench/test_button-results.html | 68 + .../dijit/bench/widget_construction_test.php | 186 + .../src/main/java/META-INF/dijit/changes.txt | 90 + .../src/main/java/META-INF/dijit/dijit-all.js | 20 + .../dijit/dijit-all.js.uncompressed.js | 14087 ++++++++++++++++ .../src/main/java/META-INF/dijit/dijit.js | 20 + .../META-INF/dijit/dijit.js.uncompressed.js | 2950 ++++ .../main/java/META-INF/dijit/form/Button.js | 273 + .../main/java/META-INF/dijit/form/CheckBox.js | 120 + .../main/java/META-INF/dijit/form/ComboBox.js | 679 + .../META-INF/dijit/form/CurrencyTextBox.js | 33 + .../java/META-INF/dijit/form/DateTextBox.js | 24 + .../META-INF/dijit/form/FilteringSelect.js | 166 + .../src/main/java/META-INF/dijit/form/Form.js | 270 + .../java/META-INF/dijit/form/InlineEditBox.js | 289 + .../java/META-INF/dijit/form/NumberSpinner.js | 31 + .../java/META-INF/dijit/form/NumberTextBox.js | 38 + .../main/java/META-INF/dijit/form/Slider.js | 347 + .../main/java/META-INF/dijit/form/TextBox.js | 129 + .../main/java/META-INF/dijit/form/Textarea.js | 220 + .../java/META-INF/dijit/form/TimeTextBox.js | 112 + .../META-INF/dijit/form/ValidationTextBox.js | 257 + .../META-INF/dijit/form/_DropDownTextBox.js | 235 + .../java/META-INF/dijit/form/_FormWidget.js | 240 + .../main/java/META-INF/dijit/form/_Spinner.js | 109 + .../java/META-INF/dijit/form/_TimePicker.js | 211 + .../java/META-INF/dijit/form/nls/ComboBox.js | 1 + .../java/META-INF/dijit/form/nls/Textarea.js | 1 + .../META-INF/dijit/form/nls/de/validate.js | 1 + .../META-INF/dijit/form/nls/fr/validate.js | 1 + .../META-INF/dijit/form/nls/it/validate.js | 1 + .../META-INF/dijit/form/nls/ja/validate.js | 1 + .../java/META-INF/dijit/form/nls/validate.js | 1 + .../META-INF/dijit/form/nls/zh-cn/validate.js | 1 + .../META-INF/dijit/form/templates/Button.html | 9 + .../dijit/form/templates/CheckBox.html | 7 + .../dijit/form/templates/ComboBox.html | 18 + .../dijit/form/templates/ComboButton.html | 21 + .../dijit/form/templates/DropDownButton.html | 11 + .../form/templates/HorizontalSlider.html | 37 + .../dijit/form/templates/InlineEditBox.html | 11 + .../dijit/form/templates/Spinner.html | 24 + .../dijit/form/templates/TextBox.html | 2 + .../dijit/form/templates/TimePicker.html | 6 + .../dijit/form/templates/VerticalSlider.html | 46 + .../META-INF/dijit/form/templates/blank.gif | Bin 0 -> 43 bytes .../dijit/layout/AccordionContainer.js | 194 + .../java/META-INF/dijit/layout/ContentPane.js | 371 + .../META-INF/dijit/layout/LayoutContainer.js | 71 + .../java/META-INF/dijit/layout/LinkPane.js | 36 + .../META-INF/dijit/layout/SplitContainer.js | 529 + .../META-INF/dijit/layout/StackContainer.js | 436 + .../META-INF/dijit/layout/TabContainer.js | 152 + .../META-INF/dijit/layout/_LayoutWidget.js | 181 + .../dijit/layout/templates/AccordionPane.html | 12 + .../dijit/layout/templates/TabContainer.html | 4 + .../dijit/layout/templates/TooltipDialog.html | 7 + .../main/java/META-INF/dijit/nls/common.js | 5 + .../main/java/META-INF/dijit/nls/de/common.js | 3 + .../java/META-INF/dijit/nls/dijit-all_ROOT.js | 1 + .../META-INF/dijit/nls/dijit-all_de-de.js | 1 + .../java/META-INF/dijit/nls/dijit-all_de.js | 1 + .../META-INF/dijit/nls/dijit-all_en-gb.js | 1 + .../META-INF/dijit/nls/dijit-all_en-us.js | 1 + .../java/META-INF/dijit/nls/dijit-all_en.js | 1 + .../META-INF/dijit/nls/dijit-all_es-es.js | 1 + .../java/META-INF/dijit/nls/dijit-all_es.js | 1 + .../META-INF/dijit/nls/dijit-all_fr-fr.js | 1 + .../java/META-INF/dijit/nls/dijit-all_fr.js | 1 + .../META-INF/dijit/nls/dijit-all_it-it.js | 1 + .../java/META-INF/dijit/nls/dijit-all_it.js | 1 + .../META-INF/dijit/nls/dijit-all_ja-jp.js | 1 + .../java/META-INF/dijit/nls/dijit-all_ja.js | 1 + .../META-INF/dijit/nls/dijit-all_ko-kr.js | 1 + .../java/META-INF/dijit/nls/dijit-all_ko.js | 1 + .../META-INF/dijit/nls/dijit-all_pt-br.js | 1 + .../java/META-INF/dijit/nls/dijit-all_pt.js | 1 + .../java/META-INF/dijit/nls/dijit-all_xx.js | 1 + .../META-INF/dijit/nls/dijit-all_zh-cn.js | 1 + .../META-INF/dijit/nls/dijit-all_zh-tw.js | 1 + .../java/META-INF/dijit/nls/dijit-all_zh.js | 1 + .../main/java/META-INF/dijit/nls/loading.js | 4 + .../META-INF/dijit/templates/Calendar.html | 37 + .../dijit/templates/ColorPalette.html | 5 + .../java/META-INF/dijit/templates/Dialog.html | 10 + .../META-INF/dijit/templates/ProgressBar.html | 9 + .../META-INF/dijit/templates/TitlePane.html | 14 + .../META-INF/dijit/templates/Tooltip.html | 4 + .../java/META-INF/dijit/templates/blank.gif | Bin 0 -> 43 bytes .../dijit/templates/buttons/bg-fade.png | Bin 0 -> 177 bytes .../META-INF/dijit/templates/colors3x4.png | Bin 0 -> 458 bytes .../META-INF/dijit/templates/colors7x10.png | Bin 0 -> 1450 bytes .../META-INF/dijit/themes/a11y/README.txt | 3 + .../themes/a11y/indeterminate_progress.gif | Bin 0 -> 2907 bytes .../main/java/META-INF/dijit/themes/dijit.css | 1355 ++ .../java/META-INF/dijit/themes/dijit_rtl.css | 57 + .../themes/noir/images/buttonActive-left.png | Bin 0 -> 771 bytes .../themes/noir/images/buttonActive-right.png | Bin 0 -> 835 bytes .../noir/images/buttonActive-stretch.png | Bin 0 -> 204 bytes .../noir/images/buttonDisabled-left.png | Bin 0 -> 565 bytes .../noir/images/buttonDisabled-right.png | Bin 0 -> 631 bytes .../noir/images/buttonDisabled-stretch.png | Bin 0 -> 184 bytes .../themes/noir/images/buttonEnabled-left.png | Bin 0 -> 742 bytes .../noir/images/buttonEnabled-right.png | Bin 0 -> 752 bytes .../noir/images/buttonEnabled-stretch.png | Bin 0 -> 205 bytes .../themes/noir/images/buttonHover-left.png | Bin 0 -> 713 bytes .../themes/noir/images/buttonHover-right.png | Bin 0 -> 694 bytes .../noir/images/buttonHover-stretch.png | Bin 0 -> 207 bytes .../dijit/themes/noir/images/close.png | Bin 0 -> 644 bytes .../dijit/themes/noir/images/closeActive.png | Bin 0 -> 648 bytes .../dijit/themes/noir/images/closeHover.png | Bin 0 -> 830 bytes .../images/comboButtonArrowActive-left.png | Bin 0 -> 742 bytes .../images/comboButtonArrowActive-right.png | Bin 0 -> 1869 bytes .../images/comboButtonArrowActive-stretch.png | Bin 0 -> 205 bytes .../images/comboButtonArrowHover-left.png | Bin 0 -> 742 bytes .../images/comboButtonArrowHover-right.png | Bin 0 -> 1801 bytes .../images/comboButtonArrowHover-stretch.png | Bin 0 -> 206 bytes .../noir/images/comboButtonBtnActive-left.png | Bin 0 -> 850 bytes .../images/comboButtonBtnActive-right.png | Bin 0 -> 1699 bytes .../images/comboButtonBtnActive-stretch.png | Bin 0 -> 207 bytes .../noir/images/comboButtonBtnHover-left.png | Bin 0 -> 792 bytes .../noir/images/comboButtonBtnHover-right.png | Bin 0 -> 1794 bytes .../images/comboButtonBtnHover-stretch.png | Bin 0 -> 207 bytes .../noir/images/comboButtonDisabled-left.png | Bin 0 -> 615 bytes .../noir/images/comboButtonDisabled-right.png | Bin 0 -> 889 bytes .../images/comboButtonDisabled-stretch.png | Bin 0 -> 184 bytes .../noir/images/comboButtonEnabled-left.png | Bin 0 -> 849 bytes .../noir/images/comboButtonEnabled-right.png | Bin 0 -> 1815 bytes .../images/comboButtonEnabled-stretch.png | Bin 0 -> 205 bytes .../noir/images/ddButtonActive-center.png | Bin 0 -> 1238 bytes .../noir/images/ddButtonActive-left.png | Bin 0 -> 769 bytes .../noir/images/ddButtonActive-right.png | Bin 0 -> 1238 bytes .../noir/images/ddButtonActive-stretch.png | Bin 0 -> 204 bytes .../noir/images/ddButtonDisabled-center.png | Bin 0 -> 893 bytes .../noir/images/ddButtonDisabled-left.png | Bin 0 -> 576 bytes .../noir/images/ddButtonDisabled-right.png | Bin 0 -> 893 bytes .../noir/images/ddButtonDisabled-stretch.png | Bin 0 -> 184 bytes .../noir/images/ddButtonEnabled-left.png | Bin 0 -> 742 bytes .../noir/images/ddButtonEnabled-right-06.png | Bin 0 -> 1097 bytes .../noir/images/ddButtonEnabled-right.png | Bin 0 -> 1097 bytes .../noir/images/ddButtonEnabled-stretch.png | Bin 0 -> 205 bytes .../noir/images/ddButtonHover-center.png | Bin 0 -> 1103 bytes .../themes/noir/images/ddButtonHover-left.png | Bin 0 -> 713 bytes .../noir/images/ddButtonHover-right.png | Bin 0 -> 1103 bytes .../noir/images/ddButtonHover-stretch.png | Bin 0 -> 207 bytes .../dijit/themes/noir/images/dndCopy.png | Bin 0 -> 814 bytes .../dijit/themes/noir/images/dndMove.png | Bin 0 -> 785 bytes .../dijit/themes/noir/images/dndNoCopy.png | Bin 0 -> 756 bytes .../dijit/themes/noir/images/dndNoMove.png | Bin 0 -> 750 bytes .../dijit/themes/noir/images/images.css | 103 + .../themes/noir/images/selectActive-left.png | Bin 0 -> 624 bytes .../themes/noir/images/selectActive-right.png | Bin 0 -> 1367 bytes .../noir/images/selectActive-stretch.png | Bin 0 -> 188 bytes .../noir/images/selectDisabled-left.png | Bin 0 -> 507 bytes .../noir/images/selectDisabled-right.png | Bin 0 -> 970 bytes .../noir/images/selectDisabled-stretch.png | Bin 0 -> 199 bytes .../themes/noir/images/selectEnabled-left.png | Bin 0 -> 588 bytes .../noir/images/selectEnabled-right.png | Bin 0 -> 1248 bytes .../noir/images/selectEnabled-stretch.png | Bin 0 -> 189 bytes .../themes/noir/images/selectHover-left.png | Bin 0 -> 579 bytes .../themes/noir/images/selectHover-right.png | Bin 0 -> 1250 bytes .../noir/images/selectHover-stretch.png | Bin 0 -> 184 bytes .../noir/images/spinnerActive-bottom.png | Bin 0 -> 1147 bytes .../themes/noir/images/spinnerActive-top.png | Bin 0 -> 1090 bytes .../noir/images/spinnerDisabled-bottom.png | Bin 0 -> 743 bytes .../noir/images/spinnerDisabled-left.png | Bin 0 -> 504 bytes .../noir/images/spinnerDisabled-stretch.png | Bin 0 -> 199 bytes .../noir/images/spinnerDisabled-top.png | Bin 0 -> 723 bytes .../noir/images/spinnerEnabled-bottom.png | Bin 0 -> 935 bytes .../noir/images/spinnerEnabled-left.png | Bin 0 -> 575 bytes .../noir/images/spinnerEnabled-stretch.png | Bin 0 -> 184 bytes .../themes/noir/images/spinnerEnabled-top.png | Bin 0 -> 991 bytes .../noir/images/spinnerHover-bottom.png | Bin 0 -> 990 bytes .../themes/noir/images/spinnerHover-top.png | Bin 0 -> 1035 bytes .../themes/noir/images/tabActive-left.png | Bin 0 -> 663 bytes .../themes/noir/images/tabActive-right.png | Bin 0 -> 657 bytes .../themes/noir/images/tabActive-stretch.png | Bin 0 -> 204 bytes .../themes/noir/images/tabDisabled-left.png | Bin 0 -> 496 bytes .../themes/noir/images/tabDisabled-right.png | Bin 0 -> 506 bytes .../noir/images/tabDisabled-stretch.png | Bin 0 -> 184 bytes .../themes/noir/images/tabEnabled-left.png | Bin 0 -> 680 bytes .../themes/noir/images/tabEnabled-right.png | Bin 0 -> 622 bytes .../themes/noir/images/tabEnabled-stretch.png | Bin 0 -> 205 bytes .../themes/noir/images/tabHover-left.png | Bin 0 -> 650 bytes .../themes/noir/images/tabHover-right.png | Bin 0 -> 600 bytes .../themes/noir/images/tabHover-stretch.png | Bin 0 -> 207 bytes .../java/META-INF/dijit/themes/noir/noir.css | 200 + .../java/META-INF/dijit/themes/noir/noir.html | 249 + .../java/META-INF/dijit/themes/noir/noir.psd | Bin 0 -> 728219 bytes .../dijit/themes/soria/images/arrows.png | Bin 0 -> 3640 bytes .../dijit/themes/soria/images/checkmark.png | Bin 0 -> 2292 bytes .../dijit/themes/soria/images/dndCopy.png | Bin 0 -> 814 bytes .../dijit/themes/soria/images/dndMove.png | Bin 0 -> 785 bytes .../dijit/themes/soria/images/dndNoCopy.png | Bin 0 -> 756 bytes .../dijit/themes/soria/images/dndNoMove.png | Bin 0 -> 750 bytes .../dijit/themes/soria/images/editor.gif | Bin 0 -> 4360 bytes .../themes/soria/images/gradientBottomBg.png | Bin 0 -> 388 bytes .../soria/images/gradientInverseBottomBg.png | Bin 0 -> 713 bytes .../soria/images/gradientInverseTopBg.png | Bin 0 -> 717 bytes .../themes/soria/images/gradientTopBg.png | Bin 0 -> 390 bytes .../soria/images/preciseSliderThumb.png | Bin 0 -> 290 bytes .../themes/soria/images/progressBarAnim.gif | Bin 0 -> 1676 bytes .../dijit/themes/soria/images/sliderThumb.png | Bin 0 -> 243 bytes .../images/splitContainerSizerH-thumb.png | Bin 0 -> 607 bytes .../soria/images/splitContainerSizerH.png | Bin 0 -> 181 bytes .../images/splitContainerSizerV-thumb.png | Bin 0 -> 536 bytes .../soria/images/splitContainerSizerV.png | Bin 0 -> 212 bytes .../dijit/themes/soria/images/tabClose.png | Bin 0 -> 726 bytes .../themes/soria/images/tabCloseHover.png | Bin 0 -> 697 bytes .../dijit/themes/soria/images/tooltips.png | Bin 0 -> 1963 bytes .../soria/images/treeExpand_loading.gif | Bin 0 -> 1081 bytes .../themes/soria/images/treeExpand_minus.gif | Bin 0 -> 547 bytes .../soria/images/treeExpand_minus_rtl.gif | Bin 0 -> 550 bytes .../themes/soria/images/treeExpand_plus.gif | Bin 0 -> 547 bytes .../soria/images/treeExpand_plus_rtl.gif | Bin 0 -> 550 bytes .../META-INF/dijit/themes/soria/soria.css | 1282 ++ .../META-INF/dijit/themes/soria/soria_rtl.css | 96 + .../dijit/themes/templateThemeTest.html | 182 + .../META-INF/dijit/themes/themeTester.html | 773 + .../themes/tundra/dojoTundraGradientBg.gif | Bin 0 -> 65 bytes .../themes/tundra/dojoTundraGradientBg.png | Bin 0 -> 135 bytes .../dijit/themes/tundra/dojoUITundra06.psd | Bin 0 -> 1979219 bytes .../dijit/themes/tundra/images/arrowDown.gif | Bin 0 -> 336 bytes .../dijit/themes/tundra/images/arrowDown.png | Bin 0 -> 506 bytes .../dijit/themes/tundra/images/arrowLeft.gif | Bin 0 -> 332 bytes .../dijit/themes/tundra/images/arrowLeft.png | Bin 0 -> 519 bytes .../dijit/themes/tundra/images/arrowRight.gif | Bin 0 -> 335 bytes .../dijit/themes/tundra/images/arrowRight.png | Bin 0 -> 532 bytes .../dijit/themes/tundra/images/arrowUp.gif | Bin 0 -> 337 bytes .../dijit/themes/tundra/images/arrowUp.png | Bin 0 -> 528 bytes .../themes/tundra/images/buttonActive.png | Bin 0 -> 137 bytes .../themes/tundra/images/buttonDisabled.png | Bin 0 -> 135 bytes .../themes/tundra/images/buttonEnabled.png | Bin 0 -> 148 bytes .../themes/tundra/images/buttonHover.png | Bin 0 -> 159 bytes .../themes/tundra/images/calendarDayLabel.png | Bin 0 -> 175 bytes .../tundra/images/calendarMonthLabel.png | Bin 0 -> 179 bytes .../tundra/images/calendarYearLabel.png | Bin 0 -> 182 bytes .../themes/tundra/images/checkboxActive.png | Bin 0 -> 352 bytes .../themes/tundra/images/checkboxDisabled.png | Bin 0 -> 160 bytes .../themes/tundra/images/checkboxEnabled.png | Bin 0 -> 166 bytes .../themes/tundra/images/checkboxHover.png | Bin 0 -> 164 bytes .../dijit/themes/tundra/images/checkmark.gif | Bin 0 -> 2436 bytes .../dijit/themes/tundra/images/checkmark.png | Bin 0 -> 2712 bytes .../tundra/images/checkmarkNoBorder.gif | Bin 0 -> 2028 bytes .../tundra/images/checkmarkNoBorder.png | Bin 0 -> 2698 bytes .../tundra/images/dijitProgressBarAnim.gif | Bin 0 -> 1676 bytes .../tundra/images/dijitProgressBarAnim.psd | Bin 0 -> 40142 bytes .../dijit/themes/tundra/images/dndCopy.png | Bin 0 -> 814 bytes .../dijit/themes/tundra/images/dndMove.png | Bin 0 -> 785 bytes .../dijit/themes/tundra/images/dndNoCopy.png | Bin 0 -> 756 bytes .../dijit/themes/tundra/images/dndNoMove.png | Bin 0 -> 750 bytes .../themes/tundra/images/doubleArrowDown.png | Bin 0 -> 158 bytes .../themes/tundra/images/doubleArrowUp.png | Bin 0 -> 146 bytes .../dijit/themes/tundra/images/editor.gif | Bin 0 -> 4360 bytes .../META-INF/dijit/themes/tundra/images/i.gif | Bin 0 -> 71 bytes .../dijit/themes/tundra/images/i_half.gif | Bin 0 -> 65 bytes .../dijit/themes/tundra/images/i_half_rtl.gif | Bin 0 -> 848 bytes .../dijit/themes/tundra/images/i_rtl.gif | Bin 0 -> 857 bytes .../dijit/themes/tundra/images/menu.png | Bin 0 -> 126 bytes .../dijit/themes/tundra/images/no.gif | Bin 0 -> 179 bytes .../dijit/themes/tundra/images/noX.gif | Bin 0 -> 80 bytes .../themes/tundra/images/popupMenuBg.gif | Bin 0 -> 97 bytes .../tundra/images/preciseSliderThumb.gif | Bin 0 -> 212 bytes .../tundra/images/preciseSliderThumb.png | Bin 0 -> 290 bytes .../tundra/images/progressBarAnim-1.png | Bin 0 -> 288 bytes .../tundra/images/progressBarAnim-2.png | Bin 0 -> 286 bytes .../tundra/images/progressBarAnim-3.png | Bin 0 -> 286 bytes .../tundra/images/progressBarAnim-4.png | Bin 0 -> 285 bytes .../tundra/images/progressBarAnim-5.png | Bin 0 -> 280 bytes .../tundra/images/progressBarAnim-6.png | Bin 0 -> 284 bytes .../tundra/images/progressBarAnim-7.png | Bin 0 -> 286 bytes .../tundra/images/progressBarAnim-8.png | Bin 0 -> 282 bytes .../tundra/images/progressBarAnim-9.png | Bin 0 -> 286 bytes .../themes/tundra/images/progressBarAnim.psd | Bin 0 -> 40142 bytes .../themes/tundra/images/progressBarEmpty.png | Bin 0 -> 127 bytes .../themes/tundra/images/progressBarFull.png | Bin 0 -> 150 bytes .../tundra/images/radioButtonActive.png | Bin 0 -> 613 bytes .../images/radioButtonActiveDisabled.png | Bin 0 -> 552 bytes .../tundra/images/radioButtonActiveHover.png | Bin 0 -> 694 bytes .../tundra/images/radioButtonDisabled.png | Bin 0 -> 453 bytes .../tundra/images/radioButtonEnabled.png | Bin 0 -> 545 bytes .../themes/tundra/images/radioButtonHover.png | Bin 0 -> 569 bytes .../themes/tundra/images/sliderEmpty.png | Bin 0 -> 123 bytes .../tundra/images/sliderEmptyVertical.png | Bin 0 -> 80 bytes .../dijit/themes/tundra/images/sliderFull.png | Bin 0 -> 132 bytes .../tundra/images/sliderFullVertical.png | Bin 0 -> 88 bytes .../themes/tundra/images/sliderThumb.png | Bin 0 -> 243 bytes .../themes/tundra/images/smallArrowDown.png | Bin 0 -> 126 bytes .../themes/tundra/images/smallArrowUp.png | Bin 0 -> 130 bytes .../images/splitContainerSizerH-thumb.png | Bin 0 -> 121 bytes .../tundra/images/splitContainerSizerH.png | Bin 0 -> 124 bytes .../images/splitContainerSizerV-thumb.png | Bin 0 -> 125 bytes .../tundra/images/splitContainerSizerV.png | Bin 0 -> 128 bytes .../dijit/themes/tundra/images/tabActive.png | Bin 0 -> 144 bytes .../dijit/themes/tundra/images/tabClose.gif | Bin 0 -> 193 bytes .../dijit/themes/tundra/images/tabClose.png | Bin 0 -> 296 bytes .../themes/tundra/images/tabCloseHover.gif | Bin 0 -> 193 bytes .../themes/tundra/images/tabCloseHover.png | Bin 0 -> 295 bytes .../themes/tundra/images/tabDisabled.png | Bin 0 -> 135 bytes .../dijit/themes/tundra/images/tabEnabled.png | Bin 0 -> 137 bytes .../dijit/themes/tundra/images/tabHover.png | Bin 0 -> 157 bytes .../dijit/themes/tundra/images/titleBar.png | Bin 0 -> 147 bytes .../dijit/themes/tundra/images/titleBarBg.gif | Bin 0 -> 97 bytes .../tundra/images/tooltipConnectorDown.gif | Bin 0 -> 204 bytes .../tundra/images/tooltipConnectorDown.png | Bin 0 -> 422 bytes .../tundra/images/tooltipConnectorLeft.gif | Bin 0 -> 204 bytes .../tundra/images/tooltipConnectorLeft.png | Bin 0 -> 344 bytes .../tundra/images/tooltipConnectorRight.gif | Bin 0 -> 204 bytes .../tundra/images/tooltipConnectorRight.png | Bin 0 -> 352 bytes .../tundra/images/tooltipConnectorUp.gif | Bin 0 -> 208 bytes .../tundra/images/tooltipConnectorUp.png | Bin 0 -> 351 bytes .../themes/tundra/images/treeExpand_leaf.gif | Bin 0 -> 68 bytes .../tundra/images/treeExpand_leaf_rtl.gif | Bin 0 -> 68 bytes .../tundra/images/treeExpand_loading.gif | Bin 0 -> 1081 bytes .../themes/tundra/images/treeExpand_minus.gif | Bin 0 -> 552 bytes .../tundra/images/treeExpand_minus_rtl.gif | Bin 0 -> 553 bytes .../themes/tundra/images/treeExpand_plus.gif | Bin 0 -> 552 bytes .../tundra/images/treeExpand_plus_rtl.gif | Bin 0 -> 553 bytes .../tundra/images/validationInputBg.png | Bin 0 -> 153 bytes .../META-INF/dijit/themes/tundra/tundra.css | 1297 ++ .../dijit/themes/tundra/tundra_rtl.css | 111 + .../java/META-INF/dojo/AdapterRegistry.js | 78 + .../main/java/META-INF/dojo/DeferredList.js | 68 + .../src/main/java/META-INF/dojo/OpenAjax.js | 191 + .../main/java/META-INF/dojo/_firebug/LICENSE | 37 + .../java/META-INF/dojo/_firebug/errorIcon.png | Bin 0 -> 457 bytes .../java/META-INF/dojo/_firebug/firebug.css | 210 + .../java/META-INF/dojo/_firebug/firebug.js | 626 + .../java/META-INF/dojo/_firebug/infoIcon.png | Bin 0 -> 524 bytes .../META-INF/dojo/_firebug/warningIcon.png | Bin 0 -> 516 bytes .../src/main/java/META-INF/dojo/back.js | 361 + .../src/main/java/META-INF/dojo/behavior.js | 185 + .../src/main/java/META-INF/dojo/build.txt | 121 + .../src/main/java/META-INF/dojo/cldr/README | 18 + .../main/java/META-INF/dojo/cldr/monetary.js | 27 + .../java/META-INF/dojo/cldr/nls/currency.js | 1 + .../META-INF/dojo/cldr/nls/de-de/number.js | 1 + .../META-INF/dojo/cldr/nls/de/currency.js | 1 + .../META-INF/dojo/cldr/nls/de/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/de/number.js | 1 + .../META-INF/dojo/cldr/nls/en-au/currency.js | 1 + .../META-INF/dojo/cldr/nls/en-au/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/en-ca/currency.js | 1 + .../META-INF/dojo/cldr/nls/en-ca/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/en-ca/number.js | 1 + .../META-INF/dojo/cldr/nls/en-gb/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/en-us/currency.js | 1 + .../META-INF/dojo/cldr/nls/en-us/number.js | 1 + .../META-INF/dojo/cldr/nls/en/currency.js | 1 + .../META-INF/dojo/cldr/nls/en/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/en/number.js | 1 + .../META-INF/dojo/cldr/nls/es-es/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/es-es/number.js | 1 + .../META-INF/dojo/cldr/nls/es/currency.js | 1 + .../META-INF/dojo/cldr/nls/es/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/es/number.js | 1 + .../META-INF/dojo/cldr/nls/fr/currency.js | 1 + .../META-INF/dojo/cldr/nls/fr/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/fr/number.js | 1 + .../java/META-INF/dojo/cldr/nls/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/it-it/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/it/currency.js | 1 + .../META-INF/dojo/cldr/nls/it/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/it/number.js | 1 + .../META-INF/dojo/cldr/nls/ja-jp/number.js | 1 + .../META-INF/dojo/cldr/nls/ja/currency.js | 1 + .../META-INF/dojo/cldr/nls/ja/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/ko-kr/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/ko-kr/number.js | 1 + .../META-INF/dojo/cldr/nls/ko/currency.js | 1 + .../META-INF/dojo/cldr/nls/ko/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/number.js | 1 + .../META-INF/dojo/cldr/nls/pt-br/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/pt/currency.js | 1 + .../META-INF/dojo/cldr/nls/pt/gregorian.js | 1 + .../java/META-INF/dojo/cldr/nls/pt/number.js | 1 + .../META-INF/dojo/cldr/nls/zh-cn/gregorian.js | 1 + .../META-INF/dojo/cldr/nls/zh-cn/number.js | 1 + .../META-INF/dojo/cldr/nls/zh-tw/number.js | 1 + .../META-INF/dojo/cldr/nls/zh/currency.js | 1 + .../META-INF/dojo/cldr/nls/zh/gregorian.js | 1 + .../java/META-INF/dojo/cldr/supplemental.js | 74 + .../src/main/java/META-INF/dojo/colors.js | 216 + .../src/main/java/META-INF/dojo/cookie.js | 54 + .../src/main/java/META-INF/dojo/currency.js | 103 + .../META-INF/dojo/data/ItemFileReadStore.js | 736 + .../META-INF/dojo/data/ItemFileWriteStore.js | 525 + .../java/META-INF/dojo/data/api/Identity.js | 107 + .../META-INF/dojo/data/api/Notification.js | 119 + .../main/java/META-INF/dojo/data/api/Read.js | 499 + .../java/META-INF/dojo/data/api/Request.js | 32 + .../main/java/META-INF/dojo/data/api/Write.js | 226 + .../java/META-INF/dojo/data/util/filter.js | 69 + .../META-INF/dojo/data/util/simpleFetch.js | 90 + .../java/META-INF/dojo/data/util/sorter.js | 81 + .../src/main/java/META-INF/dojo/date.js | 343 + .../main/java/META-INF/dojo/date/locale.js | 643 + .../src/main/java/META-INF/dojo/date/stamp.js | 126 + .../main/java/META-INF/dojo/dnd/autoscroll.js | 92 + .../src/main/java/META-INF/dojo/dnd/avatar.js | 75 + .../src/main/java/META-INF/dojo/dnd/common.js | 35 + .../main/java/META-INF/dojo/dnd/container.js | 298 + .../main/java/META-INF/dojo/dnd/manager.js | 175 + .../src/main/java/META-INF/dojo/dnd/move.js | 206 + .../main/java/META-INF/dojo/dnd/selector.js | 243 + .../src/main/java/META-INF/dojo/dnd/source.js | 361 + .../src/main/java/META-INF/dojo/dojo.js | 20 + .../META-INF/dojo/dojo.js.uncompressed.js | 7033 ++++++++ .../src/main/java/META-INF/dojo/fx.js | 215 + .../src/main/java/META-INF/dojo/i18n.js | 235 + .../src/main/java/META-INF/dojo/io/iframe.js | 338 + .../src/main/java/META-INF/dojo/io/script.js | 191 + .../src/main/java/META-INF/dojo/nls/colors.js | 154 + .../src/main/java/META-INF/dojo/number.js | 464 + .../src/main/java/META-INF/dojo/parser.js | 280 + .../src/main/java/META-INF/dojo/regexp.js | 53 + .../main/java/META-INF/dojo/resources/LICENSE | 9 + .../java/META-INF/dojo/resources/blank.html | 1 + .../main/java/META-INF/dojo/resources/dnd.css | 9 + .../java/META-INF/dojo/resources/dojo.css | 198 + .../dojo/resources/iframe_history.html | 79 + .../dojo/resources/images/dndCopy.png | Bin 0 -> 814 bytes .../dojo/resources/images/dndMove.png | Bin 0 -> 785 bytes .../dojo/resources/images/dndNoCopy.png | Bin 0 -> 756 bytes .../dojo/resources/images/dndNoMove.png | Bin 0 -> 750 bytes .../java/META-INF/dojo/rpc/JsonService.js | 61 + .../java/META-INF/dojo/rpc/JsonpService.js | 46 + .../main/java/META-INF/dojo/rpc/RpcService.js | 145 + .../src/main/java/META-INF/dojo/string.js | 79 + .../src/main/java/META-INF/dojo/tests.js | 6 + .../src/main/java/META-INF/faces-config.xml | 55 +- .../META-INF/spring-faces/SpringFaces-Dojo.js | 9 + .../META-INF/spring-faces/SpringFaces-Ext.js | 7 +- .../java/META-INF/spring-faces/SpringFaces.js | 12 +- .../java/META-INF/springfaces-ext.taglib.xml | 32 + .../main/java/META-INF/springfaces.taglib.xml | 24 +- .../springframework/faces/ui/DojoAdvisor.java | 144 +- .../faces/ui/DojoAdvisorRenderer.java | 109 + .../faces/ui/DojoClientCurrencyValidator.java | 55 + .../faces/ui/DojoClientDateValidator.java | 15 + .../faces/ui/DojoClientNumberValidator.java | 15 + .../faces/ui/DojoClientTextValidator.java | 15 + .../faces/ui/DojoRenderer.java | 13 +- .../springframework/faces/ui/ExtAdvisor.java | 22 +- ...dator.java => ExtClientDateValidator.java} | 8 +- ...tor.java => ExtClientNumberValidator.java} | 8 +- ...dator.java => ExtClientTextValidator.java} | 2 +- .../faces/ui/ExtJsComponent.java | 2 +- .../faces/ui/ExtJsRenderer.java | 9 +- .../faces/ui/SpringFacesRenderer.java | 22 + .../springframework/faces/ui/ValidateAll.java | 11 + ...Renderer.java => ValidateAllRenderer.java} | 2 +- .../faces/ui/resource/FlowResourceHelper.java | 27 + .../ResolveAndRenderResourceAction.java | 17 +- 497 files changed, 55550 insertions(+), 71 deletions(-) create mode 100644 spring-faces/src/main/java/META-INF/dijit/ColorPalette.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Declaration.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Dialog.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Editor.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Menu.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/ProgressBar.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/TitlePane.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Toolbar.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Tooltip.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/Tree.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_Calendar.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_Container.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_Templated.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_Widget.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/bidi.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/focus.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/manager.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/place.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/popup.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/scroll.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/sniff.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/typematic.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/wai.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_base/window.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/RichText.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/_Plugin.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/nls/LinkDialog.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/nls/commands.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/nls/de/commands.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/nls/it/commands.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/plugins/AlwaysShowToolbar.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/plugins/EnterKeyHandling.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/plugins/LinkDialog.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/range.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_editor/selection.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_tree/Controller.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/_tree/Node.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/_tree/Tree.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/bench/benchReceive.php create mode 100644 spring-faces/src/main/java/META-INF/dijit/bench/benchTool.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/bench/create_widgets.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/bench/test_Button-programmatic.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/bench/test_button-results.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/bench/widget_construction_test.php create mode 100644 spring-faces/src/main/java/META-INF/dijit/changes.txt create mode 100644 spring-faces/src/main/java/META-INF/dijit/dijit-all.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/dijit.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/dijit.js.uncompressed.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/Button.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/CheckBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/ComboBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/CurrencyTextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/DateTextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/FilteringSelect.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/Form.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/InlineEditBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/NumberSpinner.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/NumberTextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/Slider.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/TextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/Textarea.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/_DropDownTextBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/_Spinner.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/_TimePicker.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/ComboBox.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/Textarea.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/de/validate.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/fr/validate.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/it/validate.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/ja/validate.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/validate.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/nls/zh-cn/validate.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/Button.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/HorizontalSlider.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/Spinner.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/TextBox.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/TimePicker.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/VerticalSlider.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/form/templates/blank.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/AccordionContainer.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/ContentPane.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/LayoutContainer.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/LinkPane.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/SplitContainer.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/StackContainer.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/TabContainer.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/_LayoutWidget.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/templates/AccordionPane.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/templates/TabContainer.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/layout/templates/TooltipDialog.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/common.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/de/common.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ROOT.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de-de.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-gb.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-us.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es-es.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr-fr.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it-it.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja-jp.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko-kr.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt-br.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_xx.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-cn.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-tw.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/nls/loading.js create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/Calendar.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/ColorPalette.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/Dialog.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/ProgressBar.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/TitlePane.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/Tooltip.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/blank.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/buttons/bg-fade.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/colors3x4.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/templates/colors7x10.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/a11y/README.txt create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/a11y/indeterminate_progress.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/dijit.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/dijit_rtl.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/close.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeActive.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-center.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-center.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right-06.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-center.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndMove.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoMove.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/images.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-bottom.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-top.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-bottom.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-top.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-bottom.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-top.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-bottom.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-top.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-left.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-right.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-stretch.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.psd create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/arrows.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/checkmark.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndMove.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoMove.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/editor.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientBottomBg.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseBottomBg.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseTopBg.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientTopBg.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/preciseSliderThumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/progressBarAnim.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/sliderThumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH-thumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV-thumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabClose.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabCloseHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tooltips.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_loading.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/soria.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/soria/soria_rtl.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/templateThemeTest.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/themeTester.html create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoUITundra06.psd create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonActive.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonDisabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonEnabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarDayLabel.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarMonthLabel.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarYearLabel.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxActive.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxDisabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxEnabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.psd create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndMove.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoMove.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowDown.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowUp.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/editor.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/menu.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/no.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/noX.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/popupMenuBg.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-1.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-2.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-3.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-4.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-5.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-6.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-7.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-8.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-9.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim.psd create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarEmpty.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarFull.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActive.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveDisabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonDisabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonEnabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmpty.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmptyVertical.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFull.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFullVertical.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderThumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowDown.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowUp.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH-thumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV-thumb.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabActive.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabDisabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabEnabled.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabHover.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBar.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBarBg.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_loading.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus_rtl.gif create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/validationInputBg.png create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra.css create mode 100644 spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra_rtl.css create mode 100644 spring-faces/src/main/java/META-INF/dojo/AdapterRegistry.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/DeferredList.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/OpenAjax.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/_firebug/LICENSE create mode 100644 spring-faces/src/main/java/META-INF/dojo/_firebug/errorIcon.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.css create mode 100644 spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/_firebug/infoIcon.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/_firebug/warningIcon.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/back.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/behavior.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/build.txt create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/README create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/monetary.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/de-de/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/de/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/de/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/de/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-au/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-au/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-ca/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-ca/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-ca/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-gb/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-us/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en-us/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/en/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/es-es/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/es-es/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/es/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/es/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/es/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/fr/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/fr/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/fr/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/it-it/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/it/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/it/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/it/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ja-jp/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ja/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ja/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ko-kr/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ko-kr/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ko/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/ko/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/pt-br/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/pt/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/pt/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/pt/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/zh-cn/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/zh-cn/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/zh-tw/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/zh/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/nls/zh/gregorian.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cldr/supplemental.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/colors.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/cookie.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/currency.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/ItemFileReadStore.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/ItemFileWriteStore.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/api/Identity.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/api/Notification.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/api/Read.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/api/Request.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/api/Write.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/util/filter.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/util/simpleFetch.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/data/util/sorter.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/date.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/date/locale.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/date/stamp.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/autoscroll.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/avatar.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/common.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/container.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/manager.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/move.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/selector.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dnd/source.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dojo.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/dojo.js.uncompressed.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/fx.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/i18n.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/io/iframe.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/io/script.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/nls/colors.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/number.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/parser.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/regexp.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/LICENSE create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/blank.html create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/dnd.css create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/dojo.css create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/iframe_history.html create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/images/dndCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/images/dndMove.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/images/dndNoCopy.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/resources/images/dndNoMove.png create mode 100644 spring-faces/src/main/java/META-INF/dojo/rpc/JsonService.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/rpc/JsonpService.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/rpc/RpcService.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/string.js create mode 100644 spring-faces/src/main/java/META-INF/dojo/tests.js create mode 100644 spring-faces/src/main/java/META-INF/springfaces-ext.taglib.xml create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/DojoAdvisorRenderer.java create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/DojoClientCurrencyValidator.java create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/DojoClientDateValidator.java create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/DojoClientNumberValidator.java create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/DojoClientTextValidator.java rename spring-faces/src/main/java/org/springframework/faces/ui/{ClientDateValidator.java => ExtClientDateValidator.java} (94%) rename spring-faces/src/main/java/org/springframework/faces/ui/{ClientNumberValidator.java => ExtClientNumberValidator.java} (92%) rename spring-faces/src/main/java/org/springframework/faces/ui/{ClientTextValidator.java => ExtClientTextValidator.java} (99%) create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/SpringFacesRenderer.java create mode 100644 spring-faces/src/main/java/org/springframework/faces/ui/ValidateAll.java rename spring-faces/src/main/java/org/springframework/faces/ui/{ExtValidateAllRenderer.java => ValidateAllRenderer.java} (96%) diff --git a/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js b/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js new file mode 100644 index 00000000..ef061f61 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js @@ -0,0 +1,260 @@ +if(!dojo._hasResource["dijit.ColorPalette"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.ColorPalette"] = true; +dojo.provide("dijit.ColorPalette"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); +dojo.require("dojo.colors"); +dojo.require("dojo.i18n"); +dojo.requireLocalization("dojo", "colors", null, "ROOT"); + +dojo.declare( + "dijit.ColorPalette", + [dijit._Widget, dijit._Templated], +{ + // summary + // Grid showing various colors, so the user can pick a certain color + + // defaultTimeout: Number + // number of milliseconds before a held key or button becomes typematic + defaultTimeout: 500, + + // timeoutChangeRate: Number + // fraction of time used to change the typematic timer between events + // 1.0 means that each typematic event fires at defaultTimeout intervals + // < 1.0 means that each typematic event fires at an increasing faster rate + timeoutChangeRate: 0.90, + + // palette: String + // Size of grid, either "7x10" or "3x4". + palette: "7x10", + + //_value: String + // The value of the selected color. + value: null, + + //_currentFocus: Integer + // Index of the currently focused color. + _currentFocus: 0, + + // _xDim: Integer + // This is the number of colors horizontally across. + _xDim: null, + + // _yDim: Integer + /// This is the number of colors vertically down. + _yDim: null, + + // _palettes: Map + // This represents the value of the colors. + // The first level is a hashmap of the different arrays available + // The next two dimensions represent the columns and rows of colors. + _palettes: { + + "7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"], + ["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"], + ["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"], + ["gray", "red", "orangered", "darkorange", "yellow", "limegreen", "darkseagreen", "royalblue", "slateblue", "mediumorchid"], + ["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"], + ["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ], + ["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]], + + "3x4": [["white", "lime", "green", "blue"], + ["silver", "yellow", "fuchsia", "navy"], + ["gray", "red", "purple", "black"]] + + }, + + // _imagePaths: Map + // This is stores the path to the palette images + _imagePaths: { + "7x10": dojo.moduleUrl("dijit", "templates/colors7x10.png"), + "3x4": dojo.moduleUrl("dijit", "templates/colors3x4.png") + }, + + // _paletteCoords: Map + // This is a map that is used to calculate the coordinates of the + // images that make up the palette. + _paletteCoords: { + "leftOffset": 3, "topOffset": 3, + "cWidth": 18, "cHeight": 16 + }, + + // templatePath: String + // Path to the template of this widget. + templateString:"
\n\t
\n\t\t\n\t
\t\n
\n", + + + _paletteDims: { + "7x10": {"width": "185px", "height": "117px"}, + "3x4": {"width": "77px", "height": "53px"} + }, + + + postCreate: function(){ + // A name has to be given to the colorMap, this needs to be unique per Palette. + dojo.mixin(this.divNode.style, this._paletteDims[this.palette]); + this.imageNode.setAttribute("src", this._imagePaths[this.palette]); + var choices = this._palettes[this.palette]; + this.domNode.style.position = "relative"; + this._highlightNodes = []; + this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang); + + for(var row=0; row < choices.length; row++){ + for(var col=0; col < choices[row].length; col++){ + var highlightNode = document.createElement("img"); + highlightNode.src = dojo.moduleUrl("dijit", "templates/blank.gif"); + dojo.addClass(highlightNode, "dijitPaletteImg"); + var color = choices[row][col]; + var colorValue = new dojo.Color(dojo.Color.named[color]); + highlightNode.alt = this.colorNames[color]; + highlightNode.color = colorValue.toHex(); + var highlightStyle = highlightNode.style; + highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color; + dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler){ + this.connect(highlightNode, "on"+handler.toLowerCase(), "_onColor"+handler); + }, this); + this.divNode.appendChild(highlightNode); + var coords = this._paletteCoords; + highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px"; + highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px"; + highlightNode.setAttribute("tabIndex","-1"); + highlightNode.title = this.colorNames[color]; + dijit.wai.setAttr(highlightNode, "waiRole", "role", "gridcell"); + highlightNode.index = this._highlightNodes.length; + this._highlightNodes.push(highlightNode); + } + } + this._highlightNodes[this._currentFocus].tabIndex = 0; + this._xDim = choices[0].length; + this._yDim = choices.length; + + // Now set all events + // The palette itself is navigated to with the tab key on the keyboard + // Keyboard navigation within the Palette is with the arrow keys + // Spacebar selects the color. + // For the up key the index is changed by negative the x dimension. + + var keyIncrementMap = { + UP_ARROW: -this._xDim, + // The down key the index is increase by the x dimension. + DOWN_ARROW: this._xDim, + // Right and left move the index by 1. + RIGHT_ARROW: 1, + LEFT_ARROW: -1 + }; + for(var key in keyIncrementMap){ + dijit.typematic.addKeyListener(this.domNode, + {keyCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false}, + this, + function(){ + var increment = keyIncrementMap[key]; + return function(count){ this._navigateByKey(increment, count); }; + }(), + this.timeoutChangeRate, this.defaultTimeout); + } + }, + + focus: function(){ + // summary: + // Focus this ColorPalette. + dijit.focus(this._highlightNodes[this._currentFocus]); + }, + + onChange: function(color){ + // summary: + // Callback when a color is selected. + // color: String + // Hex value corresponding to color. + console.debug("Color selected is: "+color); + }, + + _onColorDijitclick: function(/*Event*/ evt){ + // summary: + // Handler for click, enter key & space key. Selects the color. + // evt: + // The event. + var target = evt.currentTarget; + if (this._currentFocus != target.index){ + this._currentFocus = target.index; + dijit.focus(target); + } + this._selectColor(target); + dojo.stopEvent(evt); + }, + + _onColorMouseOut: function(/*Event*/ evt){ + // summary: + // Handler for onMouseOut. Removes highlight. + // evt: + // The mouse event. + dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight"); + }, + + _onColorMouseOver: function(/*Event*/ evt){ + // summary: + // Handler for onMouseOver. Highlights the color. + // evt: + // The mouse event. + var target = evt.currentTarget; + target.tabIndex = 0; + target.focus(); + }, + + _onColorBlur: function(/*Event*/ evt){ + // summary: + // Handler for onBlur. Removes highlight and sets + // the first color as the palette's tab point. + // evt: + // The blur event. + dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight"); + evt.currentTarget.tabIndex = -1; + this._currentFocus = 0; + this._highlightNodes[0].tabIndex = 0; + }, + + _onColorFocus: function(/*Event*/ evt){ + // summary: + // Handler for onFocus. Highlights the color. + // evt: + // The focus event. + if(this._currentFocus != evt.currentTarget.index){ + this._highlightNodes[this._currentFocus].tabIndex = -1; + } + this._currentFocus = evt.currentTarget.index; + dojo.addClass(evt.currentTarget, "dijitPaletteImgHighlight"); + + }, + + _selectColor: function(selectNode){ + // summary: + // This selects a color. It triggers the onChange event + // area: + // The area node that covers the color being selected. + this.value = selectNode.color; + this.onChange(selectNode.color); + }, + + _navigateByKey: function(increment, typeCount){ + // summary:we + // This is the callback for typematic. + // It changes the focus and the highlighed color. + // increment: + // How much the key is navigated. + // typeCount: + // How many times typematic has fired. + + // typecount == -1 means the key is released. + if(typeCount == -1){ return; } + + var newFocusIndex = this._currentFocus + increment; + if(newFocusIndex < this._highlightNodes.length && newFocusIndex > -1) + { + var focusNode = this._highlightNodes[newFocusIndex]; + focusNode.tabIndex = 0; + focusNode.focus(); + } + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Declaration.js b/spring-faces/src/main/java/META-INF/dijit/Declaration.js new file mode 100644 index 00000000..aeb2ec01 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Declaration.js @@ -0,0 +1,66 @@ +if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Declaration"] = true; +dojo.provide("dijit.Declaration"); +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); + +dojo.declare( + "dijit.Declaration", + dijit._Widget, + { + // summary: + // The Declaration widget allows a user to declare new widget + // classes directly from a snippet of markup. + + _noScript: true, + widgetClass: "", + replaceVars: true, + defaults: null, + mixins: [], + buildRendering: function(){ + var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef); + var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan(); + var scripts = dojo.query("> script[type^='dojo/']", src).orphan(); + var srcType = src.nodeName; + + var propList = this.defaults||{}; + + this.mixins = this.mixins.length ? + dojo.map(this.mixins, dojo.getObject) : + [ dijit._Widget, dijit._Templated ]; + + if(preambles.length){ + // we only support one preamble. So be it. + propList.preamble = dojo.parser._functionFromScript(preambles[0]); + } + propList.widgetsInTemplate = true; + propList.templateString = "<"+srcType+" class='"+src.className+"'>"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+""; + + // strip things so we don't create stuff under us in the initial setup phase + dojo.query("[dojoType]", src).forEach(function(node){ + node.removeAttribute("dojoType"); + }); + scripts.forEach(function(s){ + if(!s.getAttribute("event")){ + this.mixins.push(dojo.parser._functionFromScript(s)); + } + }, this); + + // create the new widget class + dojo.declare( + this.widgetClass, + this.mixins, + propList + ); + + var wcp = dojo.getObject(this.widgetClass).prototype; + scripts.forEach(function(s){ + if(s.getAttribute("event")){ + dojo.parser._wireUpMethod(wcp, s); + } + }); + } + } +); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Dialog.js b/spring-faces/src/main/java/META-INF/dijit/Dialog.js new file mode 100644 index 00000000..6da36841 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Dialog.js @@ -0,0 +1,362 @@ +if(!dojo._hasResource["dijit.Dialog"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Dialog"] = true; +dojo.provide("dijit.Dialog"); + +dojo.require("dojo.dnd.move"); +dojo.require("dojo.fx"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); +dojo.require("dijit.layout.ContentPane"); +dojo.require("dijit.form.Form"); + +dojo.declare( + "dijit.DialogUnderlay", + [dijit._Widget, dijit._Templated], + { + // summary: the thing that grays out the screen behind the dialog + + // Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe. + // Inner div has opacity specified in CSS file. + templateString: "
", + + postCreate: function(){ + dojo.body().appendChild(this.domNode); + this.bgIframe = new dijit.BackgroundIframe(this.domNode); + }, + + layout: function(){ + // summary + // Sets the background to the size of the viewport (rather than the size + // of the document) since we need to cover the whole browser window, even + // if the document is only a few lines long. + + var viewport = dijit.getViewport(); + var is = this.node.style, + os = this.domNode.style; + + os.top = viewport.t + "px"; + os.left = viewport.l + "px"; + is.width = viewport.w + "px"; + is.height = viewport.h + "px"; + + // process twice since the scroll bar may have been removed + // by the previous resizing + var viewport2 = dijit.getViewport(); + if(viewport.w != viewport2.w){ is.width = viewport2.w + "px"; } + if(viewport.h != viewport2.h){ is.height = viewport2.h + "px"; } + }, + + show: function(){ + this.domNode.style.display = "block"; + this.layout(); + if(this.bgIframe.iframe){ + this.bgIframe.iframe.style.display = "block"; + } + this._resizeHandler = this.connect(window, "onresize", "layout"); + }, + + hide: function(){ + this.domNode.style.display = "none"; + this.domNode.style.width = this.domNode.style.height = "1px"; + if(this.bgIframe.iframe){ + this.bgIframe.iframe.style.display = "none"; + } + this.disconnect(this._resizeHandler); + }, + + uninitialize: function(){ + if(this.bgIframe){ + this.bgIframe.destroy(); + } + } + } +); + +dojo.declare( + "dijit.Dialog", + [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin], + { + // summary: + // Pops up a modal dialog window, blocking access to the screen + // and also graying out the screen Dialog is extended from + // ContentPane so it supports all the same parameters (href, etc.) + + templateString: null, + templateString:"
\n\t\t
\n\t\t${title}\n\t\t\n\t\t\tx\n\t\t\n\t
\n\t\t
\n\t\n
\n", + + // title: String + // Title of the dialog + title: "", + + duration: 400, + + _lastFocusItem:null, + + postCreate: function(){ + dojo.body().appendChild(this.domNode); + dijit.Dialog.superclass.postCreate.apply(this, arguments); + this.domNode.style.display="none"; + this.connect(this, "onExecute", "hide"); + this.connect(this, "onCancel", "hide"); + }, + + onLoad: function(){ + // when href is specified we need to reposition + // the dialog after the data is loaded + this._position(); + dijit.Dialog.superclass.onLoad.call(this); + }, + + _setup: function(){ + // summary: + // stuff we need to do before showing the Dialog for the first + // time (but we defer it until right beforehand, for + // performance reasons) + + this._modalconnects = []; + + if(this.titleBar){ + this._moveable = new dojo.dnd.Moveable(this.domNode, { handle: this.titleBar }); + } + + this._underlay = new dijit.DialogUnderlay(); + + var node = this.domNode; + this._fadeIn = dojo.fx.combine( + [dojo.fadeIn({ + node: node, + duration: this.duration + }), + dojo.fadeIn({ + node: this._underlay.domNode, + duration: this.duration, + onBegin: dojo.hitch(this._underlay, "show") + }) + ] + ); + + this._fadeOut = dojo.fx.combine( + [dojo.fadeOut({ + node: node, + duration: this.duration, + onEnd: function(){ + node.style.display="none"; + } + }), + dojo.fadeOut({ + node: this._underlay.domNode, + duration: this.duration, + onEnd: dojo.hitch(this._underlay, "hide") + }) + ] + ); + }, + + uninitialize: function(){ + if(this._underlay){ + this._underlay.destroy(); + } + }, + + _position: function(){ + // summary: position modal dialog in center of screen + + var viewport = dijit.getViewport(); + var mb = dojo.marginBox(this.domNode); + + var style = this.domNode.style; + style.left = (viewport.l + (viewport.w - mb.w)/2) + "px"; + style.top = (viewport.t + (viewport.h - mb.h)/2) + "px"; + }, + + _findLastFocus: function(/*Event*/ evt){ + // summary: called from onblur of dialog container to determine the last focusable item + this._lastFocused = evt.target; + }, + + _cycleFocus: function(/*Event*/ evt){ + // summary: when tabEnd receives focus, advance focus around to titleBar + + // on first focus to tabEnd, store the last focused item in dialog + if(!this._lastFocusItem){ + this._lastFocusItem = this._lastFocused; + } + this.titleBar.focus(); + }, + + _onKey: function(/*Event*/ evt){ + if(evt.keyCode){ + var node = evt.target; + // see if we are shift-tabbing from titleBar + if(node == this.titleBar && evt.shiftKey && evt.keyCode == dojo.keys.TAB){ + if (this._lastFocusItem){ + this._lastFocusItem.focus(); // send focus to last item in dialog if known + } + dojo.stopEvent(evt); + }else{ + // see if the key is for the dialog + while (node){ + if(node == this.domNode){ + if (evt.keyCode == dojo.keys.ESCAPE){ + this.hide(); + }else{ + return; // just let it go + } + } + node = node.parentNode; + } + // this key is for the disabled document window + if (evt.keyCode != dojo.keys.TAB){ // allow tabbing into the dialog for a11y + dojo.stopEvent(evt); + // opera won't tab to a div + }else if (!dojo.isOpera){ + try{ + this.titleBar.focus(); + }catch(e){/*squelch*/} + } + } + } + }, + + show: function(){ + // summary: display the dialog + + // first time we show the dialog, there's some initialization stuff to do + if(!this._alreadyInitialized){ + this._setup(); + this._alreadyInitialized=true; + } + + if(this._fadeOut.status() == "playing"){ + this._fadeOut.stop(); + } + + this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout")); + this._modalconnects.push(dojo.connect(document.documentElement, "onkeypress", this, "_onKey")); + + // IE doesn't bubble onblur events - use ondeactivate instead + var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur"; + this._modalconnects.push(dojo.connect(this.containerNode, ev, this, "_findLastFocus")); + + + dojo.style(this.domNode, "opacity", 0); + this.domNode.style.display="block"; + + this._loadCheck(); // lazy load trigger + + this._position(); + + this._fadeIn.play(); + + this._savedFocus = dijit.getFocus(this); + + // set timeout to allow the browser to render dialog + setTimeout(dojo.hitch(this, function(){ + dijit.focus(this.titleBar); + }), 50); + }, + + hide: function(){ + // summary + // Hide the dialog + + // if we haven't been initialized yet then we aren't showing and we can just return + if(!this._alreadyInitialized){ + return; + } + + if(this._fadeIn.status() == "playing"){ + this._fadeIn.stop(); + } + this._fadeOut.play(); + + if (this._scrollConnected){ + this._scrollConnected = false; + } + dojo.forEach(this._modalconnects, dojo.disconnect); + this._modalconnects = []; + + // TODO: this is failing on FF presumably because the DialogUnderlay hasn't disappeared yet? + // Attach it to fire at the end of the animation + dijit.focus(this._savedFocus); + }, + + layout: function() { + if(this.domNode.style.display == "block"){ + this._underlay.layout(); + this._position(); + } + } + } +); + +dojo.declare( + "dijit.TooltipDialog", + [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin], + { + // summary: + // Pops up a dialog that appears like a Tooltip + + // title: String + // Description of tooltip dialog (required for a11Y) + title: "", + + _lastFocusItem: null, + + templateString: null, + templateString:"
\n\t
\n\t\t
\n\t
\n\t\n\t
\n
\n", + + postCreate: function(){ + dijit.TooltipDialog.superclass.postCreate.apply(this, arguments); + this.connect(this.containerNode, "onkeypress", "_onKey"); + + // IE doesn't bubble onblur events - use ondeactivate instead + var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur"; + this.connect(this.containerNode, ev, "_findLastFocus"); + this.containerNode.title=this.title; + }, + + orient: function(/*Object*/ corner){ + // summary: configure widget to be displayed in given position relative to the button + this.domNode.className="dijitTooltipDialog " +" dijitTooltipAB"+(corner.charAt(1)=='L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0)=='T' ? "Below" : "Above"); + }, + + onOpen: function(/*Object*/ pos){ + // summary: called when dialog is displayed + this.orient(pos.corner); + this._loadCheck(); // lazy load trigger + this.containerNode.focus(); + }, + + _onKey: function(/*Event*/ evt){ + //summary: keep keyboard focus in dialog; close dialog on escape key + if (evt.keyCode == dojo.keys.ESCAPE){ + this.onCancel(); + }else if (evt.target == this.containerNode && evt.shiftKey && evt.keyCode == dojo.keys.TAB){ + if (this._lastFocusItem){ + this._lastFocusItem.focus(); + } + dojo.stopEvent(evt); + } + }, + + _findLastFocus: function(/*Event*/ evt){ + // summary: called from onblur of dialog container to determine the last focusable item + this._lastFocused = evt.target; + }, + + _cycleFocus: function(/*Event*/ evt){ + // summary: when tabEnd receives focus, advance focus around to containerNode + + // on first focus to tabEnd, store the last focused item in dialog + if(!this._lastFocusItem){ + this._lastFocusItem = this._lastFocused; + } + this.containerNode.focus(); + } + } +); + + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Editor.js b/spring-faces/src/main/java/META-INF/dijit/Editor.js new file mode 100644 index 00000000..622bf2bb --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Editor.js @@ -0,0 +1,368 @@ +if(!dojo._hasResource["dijit.Editor"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Editor"] = true; +dojo.provide("dijit.Editor"); +dojo.require("dijit._editor.RichText"); +dojo.require("dijit.Toolbar"); +dojo.require("dijit._editor._Plugin"); +dojo.require("dijit._Container"); +dojo.require("dojo.i18n"); +dojo.requireLocalization("dijit._editor", "commands", null, "it,ROOT,de"); + +dojo.declare( + "dijit.Editor", + [ dijit._editor.RichText, dijit._Container ], + { + // plugins: + // a list of plugin names (as strings) or instances (as objects) + // for this widget. +// plugins: [ "dijit._editor.plugins.DefaultToolbar" ], + plugins: null, + extraPlugins: null, + preamble: function(){ + this.inherited('preamble',arguments); + this.plugins=["undo","redo","|","cut","copy","paste","|","bold","italic","underline","strikethrough","|", + "insertOrderedList","insertUnorderedList","indent","outdent","|","justifyLeft","justifyRight","justifyCenter","justifyFull"/*"createlink"*/]; + + this._plugins=[]; + this._editInterval = this.editActionInterval * 1000; + }, + toolbar: null, + postCreate: function(){ + //for custom undo/redo + if(this.customUndo){ + dojo['require']("dijit._editor.range"); + this._steps=this._steps.slice(0); + this._undoedSteps=this._undoedSteps.slice(0); +// this.addKeyHandler('z',this.KEY_CTRL,this.undo); +// this.addKeyHandler('y',this.KEY_CTRL,this.redo); + } + if(dojo.isArray(this.extraPlugins)){ + this.plugins=this.plugins.concat(this.extraPlugins); + } + +// try{ + dijit.Editor.superclass.postCreate.apply(this, arguments); + + this.commands = dojo.i18n.getLocalization("dijit._editor", "commands", this.lang); + + if(!this.toolbar){ + // if we haven't been assigned a toolbar, create one + this.toolbar = new dijit.Toolbar(); + dojo.place(this.toolbar.domNode, this.editingArea, "before"); + } + + dojo.forEach(this.plugins, this.addPlugin, this); +// }catch(e){ console.debug(e); } + }, + destroy: function(){ + dojo.forEach(this._plugins, function(p){ + if(p.destroy){ + p.destroy(); + } + }); + this._plugins=[]; + this.inherited('destroy',arguments); + }, + addPlugin: function(/*String||Object*/plugin, /*Integer?*/index){ + // summary: + // takes a plugin name as a string or a plugin instance and + // adds it to the toolbar and associates it with this editor + // instance. The resulting plugin is added to the Editor's + // plugins array. If index is passed, it's placed in the plugins + // array at that index. No big magic, but a nice helper for + // passing in plugin names via markup. + // plugin: String, args object or plugin instance. Required. + // args: This object will be passed to the plugin constructor. + // index: + // Integer, optional. Used when creating an instance from + // something already in this.plugins. Ensures that the new + // instance is assigned to this.plugins at that index. + var args=dojo.isString(plugin)?{name:plugin}:plugin; + if(!args.setEditor){ + var o={"args":args,"plugin":null,"editor":this}; + dojo.publish("dijit.Editor.getPlugin",[o]); + if(!o.plugin){ + var pc = dojo.getObject(args.name); + if(pc){ + o.plugin=new pc(args); + } + } + if(!o.plugin){ + console.debug('Can not find plugin',plugin); + return; + } + plugin=o.plugin; + } + if(arguments.length > 1){ + this._plugins[index] = plugin; + }else{ + this._plugins.push(plugin); + } + plugin.setEditor(this); + if(dojo.isFunction(plugin.setToolbar)){ + plugin.setToolbar(this.toolbar); + } + }, + /* beginning of custom undo/redo support */ + + // customUndo: Boolean + // Whether we shall use custom undo/redo support instead of the native + // browser support. By default, we only enable customUndo for IE, as it + // has broken native undo/redo support. Note: the implementation does + // support other browsers which have W3C DOM2 Range API. + customUndo: dojo.isIE, + + // editActionInterval: Integer + // When using customUndo, not every keystroke will be saved as a step. + // Instead typing (including delete) will be grouped together: after + // a user stop typing for editActionInterval seconds, a step will be + // saved; if a user resume typing within editActionInterval seconds, + // the timeout will be restarted. By default, editActionInterval is 3 + // seconds. + editActionInterval: 3, + beginEditing: function(cmd){ + if(!this._inEditing){ + this._inEditing=true; + this._beginEditing(cmd); + } + if(this.editActionInterval>0){ + if(this._editTimer){ + clearTimeout(this._editTimer); + } + this._editTimer = setTimeout(dojo.hitch(this, this.endEditing), this._editInterval); + } + }, + _steps:[], + _undoedSteps:[], + execCommand: function(cmd){ + if(this.customUndo && (cmd=='undo' || cmd=='redo')){ + return cmd=='undo'?this.undo():this.redo(); + }else{ + try{ + if(this.customUndo){ + this.endEditing(); + this._beginEditing(); + } + var r = this.inherited('execCommand',arguments); + if(this.customUndo){ + this._endEditing(); + } + return r; + }catch(e){ + if(dojo.isMoz){ + if('copy'==cmd){ + alert(this.commands['copyErrorFF']); + }else if('cut'==cmd){ + alert(this.commands['cutErrorFF']); + }else if('paste'==cmd){ + alert(this.commands['pasteErrorFF']); + } + } + return false; + } + } + }, + queryCommandEnabled: function(cmd){ + if(this.customUndo && (cmd=='undo' || cmd=='redo')){ + return cmd=='undo'?(this._steps.length>1):(this._undoedSteps.length>0); + }else{ + return this.inherited('queryCommandEnabled',arguments); + } + }, + _changeToStep: function(from,to){ + this.setValue(to.text); + var b=to.bookmark; + if(!b){ return; } + if(dojo.isIE){ + if(dojo.isArray(b)){//IE CONTROL + var tmp=[]; + dojo.forEach(b,function(n){ + tmp.push(dijit.range.getNode(n,this.editNode)); + },this); + b=tmp; + } + }else{//w3c range + var r=dijit.range.create(); + r.setStart(dijit.range.getNode(b.startContainer,this.editNode),b.startOffset); + r.setEnd(dijit.range.getNode(b.endContainer,this.editNode),b.endOffset); + b=r; + } + dojo.withGlobal(this.window,'moveToBookmark',dijit,[b]); + }, + undo: function(){ + console.log('undo'); + this.endEditing(true); + var s=this._steps.pop(); + if(this._steps.length>0){ + this.focus(); + this._changeToStep(s,this._steps[this._steps.length-1]); + this._undoedSteps.push(s); + this.onDisplayChanged(); + return true; + } + return false; + }, + redo: function(){ + console.log('redo'); + this.endEditing(true); + var s=this._undoedSteps.pop(); + if(s && this._steps.length>0){ + this.focus(); + this._changeToStep(this._steps[this._steps.length-1],s); + this._steps.push(s); + this.onDisplayChanged(); + return true; + } + return false; + }, + endEditing: function(ignore_caret){ + if(this._editTimer){ + clearTimeout(this._editTimer); + } + if(this._inEditing){ + this._endEditing(ignore_caret); + this._inEditing=false; + } + }, + _getBookmark: function(){ + var b=dojo.withGlobal(this.window,dijit.getBookmark); + if(dojo.isIE){ + if(dojo.isArray(b)){//CONTROL + var tmp=[]; + dojo.forEach(b,function(n){ + tmp.push(dijit.range.getIndex(n,this.editNode).o); + },this); + b=tmp; + } + }else{//w3c range + var tmp=dijit.range.getIndex(b.startContainer,this.editNode).o + b={startContainer:tmp, + startOffset:b.startOffset, + endContainer:b.endContainer===b.startContainer?tmp:dijit.range.getIndex(b.endContainer,this.editNode).o, + endOffset:b.endOffset}; + } + return b; + }, + _beginEditing: function(cmd){ + if(this._steps.length===0){ + this._steps.push({'text':this.savedContent,'bookmark':this._getBookmark()}); + } + }, + _endEditing: function(ignore_caret){ + var v=this.getValue(true); + + this._undoedSteps=[];//clear undoed steps + this._steps.push({'text':v,'bookmark':this._getBookmark()}); + }, + onKeyDown: function(e){ + if(!this.customUndo){ + this.inherited('onKeyDown',arguments); + return; + } + var k=e.keyCode,ks=dojo.keys; + if(e.ctrlKey){ + if(k===90||k===122){ //z + dojo.stopEvent(e); + this.undo(); + return; + }else if(k===89||k===121){ //y + dojo.stopEvent(e); + this.redo(); + return; + } + } + this.inherited('onKeyDown',arguments); + + switch(k){ + case ks.ENTER: + this.beginEditing(); + break; + case ks.BACKSPACE: + case ks.DELETE: + this.beginEditing(); + break; + case 88: //x + case 86: //v + if(e.ctrlKey && !e.altKey && !e.metaKey){ + this.endEditing();//end current typing step if any + if(e.keyCode == 88){ + this.beginEditing('cut'); + //use timeout to trigger after the cut is complete + setTimeout(dojo.hitch(this, this.endEditing), 1); + }else{ + this.beginEditing('paste'); + //use timeout to trigger after the paste is complete + setTimeout(dojo.hitch(this, this.endEditing), 1); + } + break; + } + //pass through + default: + if(!e.ctrlKey && !e.altKey && !e.metaKey && (e.keyCodedojo.keys.F15)){ + this.beginEditing(); + break; + } + //pass through + case ks.ALT: + this.endEditing(); + break; + case ks.UP_ARROW: + case ks.DOWN_ARROW: + case ks.LEFT_ARROW: + case ks.RIGHT_ARROW: + case ks.HOME: + case ks.END: + case ks.PAGE_UP: + case ks.PAGE_DOWN: + this.endEditing(true); + break; + //maybe ctrl+backspace/delete, so don't endEditing when ctrl is pressed + case ks.CTRL: + case ks.SHIFT: + break; + } + }, + _onBlur: function(){ + this.inherited('_onBlur',arguments); + this.endEditing(true); + }, + onClick: function(){ + this.endEditing(true); + this.inherited('onClick',arguments); + } + /* end of custom undo/redo support */ + } +); + +dojo.subscribe("dijit.Editor.getPlugin",null,function(o){ + if(o.plugin){ return; } + var args=o.args, p; + var _p = dijit._editor._Plugin; + var name=args.name; + switch(name){ + case "undo": case "redo": case "cut": case "copy": case "paste": case "insertOrderedList": + case "insertUnorderedList": case "indent": case "outdent": case "justifyCenter": + case "justifyFull": case "justifyLeft": case "justifyRight": case "delete": + case "selectAll": case "removeFormat": + p = new _p({ command: name }); + break; + + case "bold": case "italic": case "underline": case "strikethrough": + case "subscript": case "superscript": + //shall we try to auto require here? or require user to worry about it? +// dojo['require']('dijit.form.Button'); + p = new _p({ buttonClass: dijit.form.ToggleButton, command: name }); + break; + case "|": + p = new _p({ button: new dijit.ToolbarSeparator() }); + break; + case "createlink": +// dojo['require']('dijit._editor.plugins.LinkDialog'); + p = new dijit._editor.plugins.LinkDialog(); + break; + } +// console.log('name',name,p); + o.plugin=p; +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Menu.js b/spring-faces/src/main/java/META-INF/dijit/Menu.js new file mode 100644 index 00000000..cf4fc5f4 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Menu.js @@ -0,0 +1,538 @@ +if(!dojo._hasResource["dijit.Menu"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Menu"] = true; +dojo.provide("dijit.Menu"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Container"); +dojo.require("dijit._Templated"); + +dojo.declare( + "dijit.Menu", + [dijit._Widget, dijit._Templated, dijit._Container], +{ + preamble: function() { + this._bindings = []; + }, + + templateString: + '' + + ''+ + '
', + + // targetNodeIds: String[] + // Array of dom node ids of nodes to attach to. + // Fill this with nodeIds upon widget creation and it becomes context menu for those nodes. + targetNodeIds: [], + + // contextMenuForWindow: Boolean + // if true, right clicking anywhere on the window will cause this context menu to open; + // if false, must specify targetNodeIds + contextMenuForWindow: false, + + // parentMenu: Widget + // pointer to menu that displayed me + parentMenu: null, + + // popupDelay: Integer + // number of milliseconds before hovering (without clicking) causes the popup to automatically open + popupDelay: 500, + + // _contextMenuWithMouse: Boolean + // used to record mouse and keyboard events to determine if a context + // menu is being opened with the keyboard or the mouse + _contextMenuWithMouse: false, + + postCreate: function(){ + if(this.contextMenuForWindow){ + this.bindDomNode(dojo.body()); + }else{ + dojo.forEach(this.targetNodeIds, this.bindDomNode, this); + } + }, + + startup: function(){ + dojo.forEach(this.getChildren(), function(child){ child.startup(); }); + }, + + onExecute: function(){ + // summary: attach point for notification about when a menu item has been executed + }, + + onCancel: function(/*Boolean*/ closeAll){ + // summary: attach point for notification about when the user cancels the current menu + }, + + focus: function(){ + this._focusFirstItem(); + }, + + _moveToPopup: function(/*Event*/ evt){ + if(this._focusedItem && this._focusedItem.popup && !this._focusedItem.disabled){ + return this._activateCurrentItem(evt); + } + return false; + }, + + _activateCurrentItem: function(/*Event*/ evt){ + if(this._focusedItem){ + this._focusedItem._onClick(evt); + return true; //do not pass to parent menu + } + return false; + }, + + _onKeyPress: function(/*Event*/ evt){ + // summary + // Handle keyboard based menu navigation. + if(evt.ctrlKey || evt.altKey){ return; } + + var key = (evt.charCode == dojo.keys.SPACE ? dojo.keys.SPACE : evt.keyCode); + switch(key){ + case dojo.keys.DOWN_ARROW: + this._focusNeighborItem(1); + dojo.stopEvent(evt); + break; + case dojo.keys.UP_ARROW: + this._focusNeighborItem(-1); + dojo.stopEvent(evt); + break; + case dojo.keys.RIGHT_ARROW: + this._moveToPopup(evt); + dojo.stopEvent(evt); + break; + case dojo.keys.LEFT_ARROW: + if(this.parentMenu){ + this.onCancel(false); + }else{ + dojo.stopEvent(evt); + } + break; + case dojo.keys.TAB: + dojo.stopEvent(evt); + // Hmm, there's no good infrastructure to support cancel closing the whole tree + // of menus, but it's close to an execute event, in the sense that focus is returned + // to the previously focused node (for a context menu) or to the DropDownButton + this.onExecute(); + break; + } + }, + + _findValidItem: function(dir){ + // summary: find the next/previous item to focus on (depending on dir setting). + + var curItem = this._focusedItem; + if(curItem){ + curItem = dir>0 ? curItem.getNextSibling() : curItem.getPreviousSibling(); + } + + var children = this.getChildren(); + for(var i=0; i < children.length; ++i){ + if(!curItem){ + curItem = children[(dir>0) ? 0 : (children.length-1)]; + } + //find next/previous visible menu item, not including separators + if(curItem._onHover && dojo.style(curItem.domNode, "display") != "none"){ + return curItem; + } + curItem = dir>0 ? curItem.getNextSibling() : curItem.getPreviousSibling(); + } + }, + + _focusNeighborItem: function(dir){ + // summary: focus on the next / previous item (depending on dir setting) + var item = this._findValidItem(dir); + this._focusItem(item); + }, + + _focusFirstItem: function(){ + // blur focused item to make findValidItem() find the first item in the menu + if(this._focusedItem){ + this._blurFocusedItem(); + } + var item = this._findValidItem(1); + this._focusItem(item); + }, + + _focusItem: function(/*MenuItem*/ item){ + // summary: internal function to focus a given menu item + + if(!item || item==this._focusedItem){ + return; + } + + if(this._focusedItem){ + this._blurFocusedItem(); + } + item._focus(); + this._focusedItem = item; + }, + + onItemHover: function(/*MenuItem*/ item){ + this._focusItem(item); + + if(this._focusedItem.popup && !this._focusedItem.disabled && !this.hover_timer){ + this.hover_timer = setTimeout(dojo.hitch(this, "_openPopup"), this.popupDelay); + } + }, + + _blurFocusedItem: function(){ + // summary: internal function to remove focus from the currently focused item + if(this._focusedItem){ + // Close all popups that are open and descendants of this menu + dijit.popup.closeTo(this); + this._focusedItem._blur(); + this._stopPopupTimer(); + this._focusedItem = null; + } + }, + + onItemUnhover: function(/*MenuItem*/ item){ + //this._blurFocusedItem(); + }, + + _stopPopupTimer: function(){ + if(this.hover_timer){ + clearTimeout(this.hover_timer); + this.hover_timer = null; + } + }, + + _getTopMenu: function(){ + for(var top=this; top.parentMenu; top=top.parentMenu); + return top; + }, + + onItemClick: function(/*Widget*/ item){ + // summary: user defined function to handle clicks on an item + // summary: internal function for clicks + if(item.disabled){ return false; } + + if(item.popup){ + if(!this.is_open){ + this._openPopup(); + } + }else{ + // before calling user defined handler, close hierarchy of menus + // and restore focus to place it was when menu was opened + this.onExecute(); + + // user defined handler for click + item.onClick(); + } + }, + + // thanks burstlib! + _iframeContentWindow: function(/* HTMLIFrameElement */iframe_el) { + // summary + // returns the window reference of the passed iframe + var win = dijit.getDocumentWindow(dijit.Menu._iframeContentDocument(iframe_el)) || + // Moz. TODO: is this available when defaultView isn't? + dijit.Menu._iframeContentDocument(iframe_el)['__parent__'] || + (iframe_el.name && document.frames[iframe_el.name]) || null; + return win; // Window + }, + + _iframeContentDocument: function(/* HTMLIFrameElement */iframe_el){ + // summary + // returns a reference to the document object inside iframe_el + var doc = iframe_el.contentDocument // W3 + || (iframe_el.contentWindow && iframe_el.contentWindow.document) // IE + || (iframe_el.name && document.frames[iframe_el.name] && document.frames[iframe_el.name].document) + || null; + return doc; // HTMLDocument + }, + + bindDomNode: function(/*String|DomNode*/ node){ + // summary: attach menu to given node + node = dojo.byId(node); + + //TODO: this is to support context popups in Editor. Maybe this shouldn't be in dijit.Menu + var win = dijit.getDocumentWindow(node.ownerDocument); + if(node.tagName.toLowerCase()=="iframe"){ + win = this._iframeContentWindow(node); + node = dojo.withGlobal(win, dojo.body); + } + + // to capture these events at the top level, + // attach to document, not body + var cn = (node == dojo.body() ? dojo.doc : node); + + node[this.id] = this._bindings.push([ + dojo.connect(cn, "oncontextmenu", this, "_openMyself"), + dojo.connect(cn, "onkeydown", this, "_contextKey"), + dojo.connect(cn, "onmousedown", this, "_contextMouse") + ]); + }, + + unBindDomNode: function(/*String|DomNode*/ nodeName){ + // summary: detach menu from given node + var node = dojo.byId(nodeName); + var bid = node[this.id]-1, b = this._bindings[bid]; + dojo.forEach(b, dojo.disconnect); + delete this._bindings[bid]; + }, + + _contextKey: function(e){ + this._contextMenuWithMouse = false; + if (e.keyCode == dojo.keys.F10) { + dojo.stopEvent(e); + if (e.shiftKey && e.type=="keydown") { + // FF: copying the wrong property from e will cause the system + // context menu to appear in spite of stopEvent. Don't know + // exactly which properties cause this effect. + var _e = { target: e.target, pageX: e.pageX, pageY: e.pageY }; + _e.preventDefault = _e.stopPropagation = function(){}; + // IE: without the delay, focus work in "open" causes the system + // context menu to appear in spite of stopEvent. + window.setTimeout(dojo.hitch(this, function(){ this._openMyself(_e); }), 1); + } + } + }, + + _contextMouse: function(e){ + this._contextMenuWithMouse = true; + }, + + _openMyself: function(/*Event*/ e){ + // summary: + // Internal function for opening myself when the user + // does a right-click or something similar + + dojo.stopEvent(e); + + // Get coordinates. + // if we are opening the menu with the mouse or on safari open + // the menu at the mouse cursor + // (Safari does not have a keyboard command to open the context menu + // and we don't currently have a reliable way to determine + // _contextMenuWithMouse on Safari) + var x,y; + if(dojo.isSafari || this._contextMenuWithMouse){ + x=e.pageX; + y=e.pageY; + }else{ + // otherwise open near e.target + var coords = dojo.coords(e.target, true); + x = coords.x + 10; + y = coords.y + 10; + } + + var self=this; + var savedFocus = dijit.getFocus(this); + function closeAndRestoreFocus(){ + // user has clicked on a menu or popup + dijit.focus(savedFocus); + dijit.popup.closeAll(); + } + dijit.popup.open({ + popup: this, + x: x, + y: y, + onExecute: closeAndRestoreFocus, + onCancel: closeAndRestoreFocus, + orient: this.isLeftToRight() ? 'L' : 'R' + }); + this.focus(); + + this._onBlur = function(){ + // Usually the parent closes the child widget but if this is a context + // menu then there is no parent + dijit.popup.closeAll(); + // don't try to restor focus; user has clicked another part of the screen + // and set focus there + } + }, + + onOpen: function(/*Event*/ e){ + // summary + // Open menu relative to the mouse + this.isShowingNow = true; + }, + + onClose: function(){ + // summary: callback when this menu is closed + this._stopPopupTimer(); + this.parentMenu = null; + this.isShowingNow = false; + this.currentPopup = null; + if(this._focusedItem){ + this._blurFocusedItem(); + } + }, + + _openPopup: function(){ + // summary: open the popup to the side of the current menu item + this._stopPopupTimer(); + var from_item = this._focusedItem; + var popup = from_item.popup; + + if(popup.isShowingNow){ return; } + popup.parentMenu = this; + var self = this; + dijit.popup.open({ + parent: this, + popup: popup, + around: from_item.arrowCell, + orient: this.isLeftToRight() ? {'TR': 'TL', 'TL': 'TR'} : {'TL': 'TR', 'TR': 'TL'}, + submenu: true, + onCancel: function(){ + // called when the child menu is canceled + dijit.popup.close(); + self._focusedItem._focus(); // put focus back on my node + self.currentPopup = null; + } + }); + + + this.currentPopup = popup; + + if(popup.focus){ + popup.focus(); + } + } +} +); + +dojo.declare( + "dijit.MenuItem", + [dijit._Widget, dijit._Templated, dijit._Contained], +{ + // summary + // A line item in a Menu2 + + // Make 3 columns + // icon, label, and expand arrow (BiDi-dependent) indicating sub-menu + templateString: + '' + +'
' + +'' + +'' + +'' + +'' + +'', + + // iconSrc: String + // path to icon to display to the left of the menu text + iconSrc: '', + + // label: String + // menu text + label: '', + + // iconClass: String + // class to apply to div in button to make it display an icon + iconClass: "", + + // disabled: Boolean + // if true, the menu item is disabled + // if false, the menu item is enabled + disabled: false, + + postCreate: function(){ + dojo.setSelectable(this.domNode, false); + this.setDisabled(this.disabled); + if(this.label){ + this.containerNode.innerHTML=this.label; + } + }, + + _onHover: function(){ + // summary: callback when mouse is moved onto menu item + this.getParent().onItemHover(this); + }, + + _onUnhover: function(){ + // summary: callback when mouse is moved off of menu item + // if we are unhovering the currently selected item + // then unselect it + this.getParent().onItemUnhover(this); + }, + + _onClick: function(evt){ + this.getParent().onItemClick(this); + dojo.stopEvent(evt); + }, + + onClick: function() { + // summary + // User defined function to handle clicks + }, + + _focus: function(){ + dojo.addClass(this.domNode, 'dijitMenuItemHover'); + try{ + dijit.focus(this.containerNode); + }catch(e){ + // this throws on IE (at least) in some scenarios + } + }, + + _blur: function(){ + dojo.removeClass(this.domNode, 'dijitMenuItemHover'); + }, + + setDisabled: function(/*Boolean*/ value){ + // summary: enable or disable this menu item + this.disabled = value; + dojo[value ? "addClass" : "removeClass"](this.domNode, 'dijitMenuItemDisabled'); + dijit.wai.setAttr(this.containerNode, 'waiState', 'disabled', value ? 'true' : 'false'); + } +}); + +dojo.declare( + "dijit.PopupMenuItem", + dijit.MenuItem, +{ + _fillContent: function(){ + // my inner HTML contains both the menu item text and a popup widget, like + //
+ // pick me + // ... + //
+ // the first part holds the menu item text and the second part is the popup + if(this.srcNodeRef){ + var nodes = dojo.query("*", this.srcNodeRef); + dijit.PopupMenuItem.superclass._fillContent.call(this, nodes[0]); + + // save pointer to srcNode so we can grab the drop down widget after it's instantiated + this.dropDownContainer = this.srcNodeRef; + } + }, + + startup: function(){ + // we didn't copy the dropdown widget from the this.srcNodeRef, so it's in no-man's + // land now. move it to document.body. + if(!this.popup){ + var node = dojo.query("[widgetId]", this.dropDownContainer)[0]; + this.popup = dijit.byNode(node); + } + dojo.body().appendChild(this.popup.domNode); + + this.popup.domNode.style.display="none"; + dojo.addClass(this.expand, "dijitMenuExpandEnabled"); + dojo.style(this.expand, "display", ""); + dijit.wai.setAttr(this.containerNode, "waiState", "haspopup", "true"); + } +}); + +dojo.declare( + "dijit.MenuSeparator", + [dijit._Widget, dijit._Templated, dijit._Contained], +{ + // summary + // A line between two menu items + + templateString: '' + +'
' + +'
' + +'', + + postCreate: function(){ + dojo.setSelectable(this.domNode, false); + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/ProgressBar.js b/spring-faces/src/main/java/META-INF/dijit/ProgressBar.js new file mode 100644 index 00000000..7fb2149b --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/ProgressBar.js @@ -0,0 +1,90 @@ +if(!dojo._hasResource["dijit.ProgressBar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.ProgressBar"] = true; +dojo.provide("dijit.ProgressBar"); + +dojo.require("dojo.fx"); +dojo.require("dojo.number"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); + +dojo.declare("dijit.ProgressBar", [dijit._Widget, dijit._Templated], { + // summary: + // a progress widget + // + // usage: + //
+ + // progress: String (Percentage or Number) + // initial progress value. + // with "%": percentage value, 0% <= progress <= 100% + // or without "%": absolute value, 0 <= progress <= maximum + progress: "0", + + // maximum: Float + // max sample number + maximum: 100, + + // places: Number + // number of places to show in values; 0 by default + places: 0, + + // indeterminate: Boolean + // false: show progress + // true: show that a process is underway but that the progress is unknown + indeterminate: false, + + templateString:"
 
 
\n", + + _indeterminateHighContrastImagePath: + dojo.moduleUrl("dijit", "themes/a11y/indeterminate_progress.gif"), + + // public functions + postCreate: function(){ + dijit.ProgressBar.superclass.postCreate.apply(this, arguments); + + this.inteterminateHighContrastImage.setAttribute("src", + this._indeterminateHighContrastImagePath); + + this.update(); + }, + + update: function(/*Object?*/attributes){ + // summary: update progress information + // + // attributes: may provide progress and/or maximum properties on this parameter, + // see attribute specs for details. + dojo.mixin(this, attributes||{}); + var percent = 1, classFunc; + if(this.indeterminate){ + classFunc = "addClass"; + dijit.wai.removeAttr(this.internalProgress, "waiState", "valuenow"); + }else{ + classFunc = "removeClass"; + if(String(this.progress).indexOf("%") != -1){ + percent = Math.min(parseFloat(this.progress)/100, 1); + this.progress = percent * this.maximum; + }else{ + this.progress = Math.min(this.progress, this.maximum); + percent = this.progress / this.maximum; + } + var text = this.report(percent); + this.label.firstChild.nodeValue = text; + dijit.wai.setAttr(this.internalProgress, "waiState", "valuenow", text); + } + dojo[classFunc](this.domNode, "dijitProgressBarIndeterminate"); + this.internalProgress.style.width = (percent * 100) + "%"; + this.onChange(); + }, + + report: function(/*float*/percent){ + // Generates message to show; may be overridden by user + return dojo.number.format(percent, {type: "percent", places: this.places, locale: this.lang}); + }, + + onChange: function(){} +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/TitlePane.js b/spring-faces/src/main/java/META-INF/dijit/TitlePane.js new file mode 100644 index 00000000..191ff6e7 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/TitlePane.js @@ -0,0 +1,129 @@ +if(!dojo._hasResource["dijit.TitlePane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.TitlePane"] = true; +dojo.provide("dijit.TitlePane"); + +dojo.require("dojo.fx"); + +dojo.require("dijit._Templated"); +dojo.require("dijit.layout.ContentPane"); + +dojo.declare( + "dijit.TitlePane", + [dijit.layout.ContentPane, dijit._Templated], +{ + // summary + // A pane with a title on top, that can be opened or collapsed. + + // title: String + // Title of the pane + title: "", + + // open: Boolean + // Whether pane is opened or closed. + open: true, + + // duration: Integer + // milliseconds to fade in/fade out + duration: 250, + + templateString:"
\n\t
\n\t\t\n\t\t\n\t
\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t
\n
\n", + + postCreate: function(){ + this.setTitle(this.title); + if(!this.open){ + this.hideNode.style.display = this.wipeNode.style.display = "none"; + } + this._setCss(); + dojo.setSelectable(this.titleNode, false); + dijit.TitlePane.superclass.postCreate.apply(this, arguments); + dijit.wai.setAttr(this.containerNode, "waiState", "titleledby", this.titleNode.id); + dijit.wai.setAttr(this.focusNode, "waiState", "haspopup", "true"); + + // setup open/close animations + var hideNode = this.hideNode, wipeNode = this.wipeNode; + this._wipeIn = dojo.fx.wipeIn({ + node: this.wipeNode, + duration: this.duration, + beforeBegin: function(){ + hideNode.style.display=""; + } + }); + this._wipeOut = dojo.fx.wipeOut({ + node: this.wipeNode, + duration: this.duration, + onEnd: function(){ + hideNode.style.display="none"; + } + }); + }, + + setContent: function(content){ + // summary + // Typically called when an href is loaded. Our job is to make the animation smooth + if(this._wipeOut.status() == "playing"){ + // we are currently *closing* the pane, so just let that continue + dijit.layout.ContentPane.prototype.setContent.apply(this, content); + }else{ + if(this._wipeIn.status() == "playing"){ + this._wipeIn.stop(); + } + + // freeze container at current height so that adding new content doesn't make it jump + dojo.marginBox(this.wipeNode, {h: dojo.marginBox(this.wipeNode).h}); + + // add the new content (erasing the old content, if any) + dijit.layout.ContentPane.prototype.setContent.apply(this, arguments); + + // call _wipeIn.play() to animate from current height to new height + this._wipeIn.play(); + } + }, + + toggle: function(){ + // summary: switches between opened and closed state + dojo.forEach([this._wipeIn, this._wipeOut], function(animation){ + if(animation.status() == "playing"){ + animation.stop(); + } + }); + + this[this.open ? "_wipeOut" : "_wipeIn"].play(); + this.open =! this.open; + + // load content (if this is the first time we are opening the TitlePane + // and content is specified as an href, or we have setHref when hidden) + this._loadCheck(); + + this._setCss(); + }, + + _setCss: function(){ + var classes = ["dijitClosed", "dijitOpen"]; + var boolIndex = this.open; + dojo.removeClass(this.focusNode, classes[!boolIndex+0]); + this.focusNode.className += " " + classes[boolIndex+0]; + + // provide a character based indicator for images-off mode + this.arrowNodeInner.innerHTML = this.open ? "-" : "+"; + }, + + _onTitleKey: function(/*Event*/ e){ + // summary: callback when user hits a key + if(e.keyCode == dojo.keys.ENTER || e.charCode == dojo.keys.SPACE){ + this._onTitleClick(); + } + else if(e.keyCode == dojo.keys.DOWN_ARROW){ + if(this.open){ + this.containerNode.focus(); + e.preventDefault(); + } + } + }, + + setTitle: function(/*String*/ title){ + // summary: sets the text of the title + this.titleNode.innerHTML=title; + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Toolbar.js b/spring-faces/src/main/java/META-INF/dijit/Toolbar.js new file mode 100644 index 00000000..6ce850e6 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Toolbar.js @@ -0,0 +1,33 @@ +if(!dojo._hasResource["dijit.Toolbar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Toolbar"] = true; +dojo.provide("dijit.Toolbar"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Container"); +dojo.require("dijit._Templated"); + +dojo.declare( + "dijit.Toolbar", + [dijit._Widget, dijit._Templated, dijit._Container], +{ + templateString: + '
' + +// '' + // factor out style +// ''+ +// '
' + + '
' +} +); + +// Combine with dijit.MenuSeparator?? +dojo.declare( + "dijit.ToolbarSeparator", + [ dijit._Widget, dijit._Templated ], +{ + // summary + // A line between two menu items + templateString: '
', + postCreate: function(){ dojo.setSelectable(this.domNode, false); } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Tooltip.js b/spring-faces/src/main/java/META-INF/dijit/Tooltip.js new file mode 100644 index 00000000..10f57e41 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Tooltip.js @@ -0,0 +1,188 @@ +if(!dojo._hasResource["dijit.Tooltip"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Tooltip"] = true; +dojo.provide("dijit.Tooltip"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); + +dojo.declare( + "dijit._MasterTooltip", + [dijit._Widget, dijit._Templated], + { + // summary + // Internal widget that holds the actual tooltip markup, + // which occurs once per page. + // Called by Tooltip widgets which are just containers to hold + // the markup + + // duration: Integer + // Milliseconds to fade in/fade out + duration: 200, + + templateString:"
\n\t
\n\t
\n
\n", + + postCreate: function(){ + dojo.body().appendChild(this.domNode); + + this.bgIframe = new dijit.BackgroundIframe(this.domNode); + + // Setup fade-in and fade-out functions. + this.fadeIn = dojo.fadeIn({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onShow") }), + this.fadeOut = dojo.fadeOut({ node: this.domNode, duration: this.duration, onEnd: dojo.hitch(this, "_onHide") }); + + }, + + show: function(/*String*/ innerHTML, /*DomNode*/ aroundNode){ + // summary: + // Display tooltip w/specified contents to right specified node + // (To left if there's no space on the right, or if LTR==right) + + if(this.fadeOut.status() == "playing"){ + // previous tooltip is being hidden; wait until the hide completes then show new one + this._onDeck=arguments; + return; + } + this.containerNode.innerHTML=innerHTML; + + // Firefox bug. when innerHTML changes to be shorter than previous + // one, the node size will not be updated until it moves. + this.domNode.style.top = (this.domNode.offsetTop + 1) + "px"; + + // position the element and change CSS according to position + var align = this.isLeftToRight() ? {'BR': 'BL', 'BL': 'BR'} : {'BL': 'BR', 'BR': 'BL'}; + var pos = dijit.placeOnScreenAroundElement(this.domNode, aroundNode, align); + this.domNode.className="dijitTooltip dijitTooltip" + (pos.corner=='BL' ? "Right" : "Left"); + + // show it + dojo.style(this.domNode, "opacity", 0); + this.fadeIn.play(); + this.isShowingNow = true; + }, + + _onShow: function(){ + if(dojo.isIE){ + // the arrow won't show up on a node w/an opacity filter + this.domNode.style.filter=""; + } + }, + + hide: function(){ + // summary: hide the tooltip + if(this._onDeck){ + // this hide request is for a show() that hasn't even started yet; + // just cancel the pending show() + this._onDeck=null; + return; + } + this.fadeIn.stop(); + this.isShowingNow = false; + this.fadeOut.play(); + }, + + _onHide: function(){ + this.domNode.style.cssText=""; // to position offscreen again + if(this._onDeck){ + // a show request has been queued up; do it now + this.show.apply(this, this._onDeck); + this._onDeck=null; + } + } + + } +); + +// Make a single tooltip markup on the page that is reused as appropriate +dojo.addOnLoad(function(){ + dijit.MasterTooltip = new dijit._MasterTooltip(); +}); + +dojo.declare( + "dijit.Tooltip", + dijit._Widget, + { + // summary + // Pops up a tooltip (a help message) when you hover over a node. + + // label: String + // Text to display in the tooltip. + // Specified as innerHTML when creating the widget from markup. + label: "", + + // showDelay: Integer + // Number of milliseconds to wait after hovering over/focusing on the object, before + // the tooltip is displayed. + showDelay: 400, + + // connectId: String + // Id of domNode to attach the tooltip to. + // (When user hovers over specified dom node, the tooltip will appear.) + connectId: "", + + postCreate: function(){ + this.srcNodeRef.style.display="none"; + + this._connectNode = dojo.byId(this.connectId); + + dojo.forEach(["onMouseOver", "onHover", "onMouseOut", "onUnHover"], function(event){ + this.connect(this._connectNode, event.toLowerCase(), "_"+event); + }, this); + }, + + _onMouseOver: function(/*Event*/ e){ + this._onHover(e); + }, + + _onMouseOut: function(/*Event*/ e){ + if(dojo.isDescendant(e.relatedTarget, this._connectNode)){ + // false event; just moved from target to target child; ignore. + return; + } + this._onUnHover(e); + }, + + _onHover: function(/*Event*/ e){ + if(this._hover){ return; } + this._hover=true; + // If tooltip not showing yet then set a timer to show it shortly + if(!this.isShowingNow && !this._showTimer){ + this._showTimer = setTimeout(dojo.hitch(this, "open"), this.showDelay); + } + }, + + _onUnHover: function(/*Event*/ e){ + if(!this._hover){ return; } + this._hover=false; + + if(this._showTimer){ + clearTimeout(this._showTimer); + delete this._showTimer; + }else{ + this.close(); + } + }, + + open: function(){ + // summary: display the tooltip; usually not called directly. + if(this.isShowingNow){ return; } + if(this._showTimer){ + clearTimeout(this._showTimer); + delete this._showTimer; + } + dijit.MasterTooltip.show(this.label || this.domNode.innerHTML, this._connectNode); + this.isShowingNow = true; + }, + + close: function(){ + // summary: hide the tooltip; usually not called directly. + if(!this.isShowingNow){ return; } + dijit.MasterTooltip.hide(); + this.isShowingNow = false; + }, + + uninitialize: function(){ + this.close(); + } + } +); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/Tree.js b/spring-faces/src/main/java/META-INF/dijit/Tree.js new file mode 100644 index 00000000..e51d7faa --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/Tree.js @@ -0,0 +1,500 @@ +if(!dojo._hasResource["dijit.Tree"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Tree"] = true; +dojo.provide("dijit.Tree"); + +dojo.require("dojo.fx"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); +dojo.require("dijit._Container"); +dojo.require("dijit._tree.Controller"); + +dojo.declare( + "dijit._TreeBase", + [dijit._Widget, dijit._Templated, dijit._Container, dijit._Contained], +{ + // summary: + // Base class for Tree and _TreeNode + + // state: String + // dynamic loading-related stuff. + // When an empty folder node appears, it is "UNCHECKED" first, + // then after dojo.data query it becomes "LOADING" and, finally "LOADED" + state: "UNCHECKED", + locked: false, + + lock: function(){ + // summary: lock this node (and it's descendants) while a delete is taking place? + this.locked = true; + }, + unlock: function(){ + if(!this.locked){ + //dojo.debug((new Error()).stack); + throw new Error(this.declaredClass+" unlock: not locked"); + } + this.locked = false; + }, + + isLocked: function(){ + // summary: can this node be modified? + // returns: false if this node or any of it's ancestors are locked + var node = this; + while(true){ + if(node.lockLevel){ + return true; + } + if(!node.getParent() || node.isTree){ + break; + } + node = node.getParent(); + } + return false; + }, + + setChildren: function(/* Object[] */ childrenArray){ + // summary: + // Sets the children of this node. + // Sets this.isFolder based on whether or not there are children + // Takes array of objects like: {label: ...} (_TreeNode options basically) + // See parameters of _TreeNode for details. + + this.destroyDescendants(); + + this.state = "LOADED"; + var nodeMap= {}; + if(childrenArray && childrenArray.length > 0){ + this.isFolder = true; + if(!this.containerNode){ // maybe this node was unfolderized and still has container + this.containerNode = this.tree.containerNodeTemplate.cloneNode(true); + this.domNode.appendChild(this.containerNode); + } + + // Create _TreeNode widget for each specified tree node + dojo.forEach(childrenArray, function(childParams){ + var child = new dijit._TreeNode(dojo.mixin({ + tree: this.tree, + label: this.tree.store.getLabel(childParams.item) + }, childParams)); + this.addChild(child); + nodeMap[this.tree.store.getIdentity(childParams.item)] = child; + }, this); + + // note that updateLayout() needs to be called on each child after + // _all_ the children exist + dojo.forEach(this.getChildren(), function(child, idx){ + child._updateLayout(); + }); + + }else{ + this.isFolder=false; + } + + if(this.isTree){ + // put first child in tab index if one exists. + var fc = this.getChildren()[0]; + var tabnode = fc ? fc.labelNode : this.domNode; + tabnode.setAttribute("tabIndex", "0"); + } + + return nodeMap; + }, + + addChildren: function(/* object[] */ childrenArray){ + // summary: + // adds the children to this node. + // Takes array of objects like: {label: ...} (_TreeNode options basically) + + // See parameters of _TreeNode for details. + var nodeMap = {}; + if (childrenArray && childrenArray.length > 0){ + dojo.forEach(childrenArray, function(childParams){ + var child = new dijit._TreeNode( + dojo.mixin({ + tree: this.tree, + label: this.tree.store.getLabel(childParams.item) + }, childParams) + ); + this.addChild(child); + nodeMap[this.tree.store.getIdentity(childParams.item)] = child; + }, this); + + dojo.forEach(this.getChildren(), function(child, idx){ + child._updateLayout(); + }); + } + + return nodeMap; + }, + + deleteNode: function(/* treeNode */ node) { + node.destroy(); + + dojo.forEach(this.getChildren(), function(child, idx){ + child._updateLayout(); + }); + }, + + makeFolder: function() { + //summary: if this node wasn't already a folder, turn it into one and call _setExpando() + this.isFolder=true; + this._setExpando(false); + } +}); + +dojo.declare( + "dijit.Tree", + dijit._TreeBase, +{ + // summary + // Tree view does all the drawing, visual node management etc. + // Throws events about clicks on it, so someone may catch them and process + // Events: + // afterTreeCreate, + // beforeTreeDestroy, + // execute : for clicking the label, or hitting the enter key when focused on the label, + // toggleOpen : for clicking the expando key (toggles hide/collapse), + // previous : go to previous visible node, + // next : go to next visible node, + // zoomIn : go to child nodes, + // zoomOut : go to parent node + + // store: String||dojo.data.Store + // The store to get data to display in the tree + store: null, + + // query: String + // query to get top level node(s) of tree (ex: {type:'continent'}) + query: null, + + // childrenAttr: String + // name of attribute that holds children of a tree node + childrenAttr: "children", + + templateString:"
\n", + + isExpanded: true, // consider this "root node" to be always expanded + + isTree: true, + + _publish: function(/*String*/ topicName, /*Object*/ message){ + // summary: + // Publish a message for this widget/topic + dojo.publish(this.id, [dojo.mixin({tree: this, event: topicName}, message||{})]); + }, + + postMixInProperties: function(){ + this.tree = this; + + // setup table mapping keys to events + var keyTopicMap = {}; + keyTopicMap[dojo.keys.ENTER]="execute"; + keyTopicMap[dojo.keys.LEFT_ARROW]="zoomOut"; + keyTopicMap[dojo.keys.RIGHT_ARROW]="zoomIn"; + keyTopicMap[dojo.keys.UP_ARROW]="previous"; + keyTopicMap[dojo.keys.DOWN_ARROW]="next"; + keyTopicMap[dojo.keys.HOME]="first"; + keyTopicMap[dojo.keys.END]="last"; + this._keyTopicMap = keyTopicMap; + }, + + postCreate: function(){ + this.containerNode = this.domNode; + + // make template for container node (we will clone this and insert it into + // any nodes that have children) + var div = document.createElement('div'); + div.style.display = 'none'; + div.className = "dijitTreeContainer"; + dijit.wai.setAttr(div, "waiRole", "role", "presentation"); + this.containerNodeTemplate = div; + + + // start the controller, passing in the store + this._controller = new dijit._tree.DataController( + { + store: this.store, + treeId: this.id, + query: this.query, + childrenAttr: this.childrenAttr + } + ); + + this._publish("afterTreeCreate"); + }, + + destroy: function(){ + // publish destruction event so that any listeners should stop listening + this._publish("beforeTreeDestroy"); + return dijit._Widget.prototype.destroy.apply(this, arguments); + }, + + toString: function(){ + return "["+this.declaredClass+" ID:"+this.id+"]"; + }, + + getIconClass: function(/*dojo.data.Item*/ item){ + // summary: user overridable class to return CSS class name to display icon + }, + + _domElement2TreeNode: function(/*DomNode*/ domElement){ + var ret; + do{ + ret=dijit.byNode(domElement); + }while(!ret && (domElement = domElement.parentNode)); + return ret; + }, + + _onClick: function(/*Event*/ e){ + // summary: translates click events into commands for the controller to process + var domElement = e.target; + + // find node + var nodeWidget = this._domElement2TreeNode(domElement); + if(!nodeWidget || !nodeWidget.isTreeNode){ + return; + } + + if(domElement == nodeWidget.expandoNode || + domElement == nodeWidget.expandoNodeText){ + // expando node was clicked + if(nodeWidget.isFolder){ + this._publish("toggleOpen", {node:nodeWidget}); + } + }else{ + this._publish("execute", { item: nodeWidget.item, node: nodeWidget} ); + this.onClick(nodeWidget.item, nodeWidget); + } + dojo.stopEvent(e); + }, + + onClick: function(/* dojo.data */ item){ + // summary: user overridable function + console.log("default onclick handler", item); + }, + + _onKeyPress: function(/*Event*/ e){ + // summary: translates keypress events into commands for the controller + if(e.altKey){ return; } + var treeNode = this._domElement2TreeNode(e.target); + if(!treeNode){ return; } + + // Note: On IE e.keyCode is not 0 for printables so check e.charCode. + // In dojo charCode is universally 0 for non-printables. + if(e.charCode){ // handle printables (letter navigation) + // Check for key navigation. + var navKey = e.charCode; + if(!e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey){ + navKey = (String.fromCharCode(navKey)).toLowerCase(); + this._publish("letterKeyNav", { node: treeNode, key: navKey } ); + dojo.stopEvent(e); + } + }else{ // handle non-printables (arrow keys) + if(this._keyTopicMap[e.keyCode]){ + this._publish(this._keyTopicMap[e.keyCode], { node: treeNode, item: treeNode.item } ); + dojo.stopEvent(e); + } + } + }, + + blurNode: function(){ + // summary + // Removes focus from the currently focused node (which must be visible). + // Usually not called directly (just call focusNode() on another node instead) + var node = this.lastFocused; + if(!node){ return; } + var labelNode = node.labelNode; + dojo.removeClass(labelNode, "dijitTreeLabelFocused"); + labelNode.setAttribute("tabIndex", "-1"); + this.lastFocused = null; + }, + + focusNode: function(/* _tree.Node */ node){ + // summary + // Focus on the specified node (which must be visible) + + this.blurNode(); + + // set tabIndex so that the tab key can find this node + var labelNode = node.labelNode; + labelNode.setAttribute("tabIndex", "0"); + + this.lastFocused = node; + dojo.addClass(labelNode, "dijitTreeLabelFocused"); + + // set focus so that the label wil be voiced using screen readers + labelNode.focus(); + }, + + _onBlur: function(){ + // summary: + // We've moved away from the whole tree. The currently "focused" node + // (see focusNode above) should remain as the lastFocused node so we can + // tab back into the tree. Just change CSS to get rid of the dotted border + // until that time + if(this.lastFocused){ + var labelNode = this.lastFocused.labelNode; + dojo.removeClass(labelNode, "dijitTreeLabelFocused"); + } + }, + + _onFocus: function(){ + // summary: + // If we were previously on the tree, there's a currently "focused" node + // already. Just need to set the CSS back so it looks focused. + if(this.lastFocused){ + var labelNode = this.lastFocused.labelNode; + dojo.addClass(labelNode, "dijitTreeLabelFocused"); + } + } +}); + +dojo.declare( + "dijit._TreeNode", + dijit._TreeBase, +{ + // summary + // Single node within a tree + + templateString:"
\n\t
\n\t\t
\n\t\t\n\t
\n
\n", + + // item: dojo.data.Item + // the dojo.data entry this tree represents + item: null, + + isTreeNode: true, + + // label: String + // Text of this tree node + label: "", + + isFolder: null, // set by widget depending on children/args + + isExpanded: false, + + postCreate: function(){ + // set label, escaping special characters + this.labelNode.innerHTML = ""; + this.labelNode.appendChild(document.createTextNode(this.label)); + + // set expand icon for leaf + this._setExpando(); + + // set icon based on item + dojo.addClass(this.iconNode, this.tree.getIconClass(this.item)); + }, + + markProcessing: function(){ + // summary: visually denote that tree is loading data, etc. + this.state = "LOADING"; + this._setExpando(true); + }, + + unmarkProcessing: function(){ + // summary: clear markup from markProcessing() call + this._setExpando(false); + }, + + _updateLayout: function(){ + // summary: set appropriate CSS classes for this.domNode + + dojo.removeClass(this.domNode, "dijitTreeIsRoot"); + if(this.getParent()["isTree"]){ + dojo.addClass(this.domNode, "dijitTreeIsRoot"); + } + + dojo.removeClass(this.domNode, "dijitTreeIsLast"); + if(!this.getNextSibling()){ + dojo.addClass(this.domNode, "dijitTreeIsLast"); + } + }, + + _setExpando: function(/*Boolean*/ processing){ + // summary: set the right image for the expando node + + // apply the appropriate class to the expando node + var styles = ["dijitTreeExpandoLoading", "dijitTreeExpandoOpened", + "dijitTreeExpandoClosed", "dijitTreeExpandoLeaf"]; + var idx = processing ? 0 : (this.isFolder ? (this.isExpanded ? 1 : 2) : 3); + dojo.forEach(styles, + function(s){ + dojo.removeClass(this.expandoNode, s); + }, this + ); + dojo.addClass(this.expandoNode, styles[idx]); + + // provide a non-image based indicator for images-off mode + this.expandoNodeText.innerHTML = + processing ? "*" : + (this.isFolder ? + (this.isExpanded ? "-" : "+") : "*"); + }, + + setChildren: function(items){ + var ret = dijit.Tree.superclass.setChildren.apply(this, arguments); + + // create animations for showing/hiding the children + this._wipeIn = dojo.fx.wipeIn({node: this.containerNode, duration: 250}); + dojo.connect(this.wipeIn, "onEnd", dojo.hitch(this, "_afterExpand")); + this._wipeOut = dojo.fx.wipeOut({node: this.containerNode, duration: 250}); + dojo.connect(this.wipeOut, "onEnd", dojo.hitch(this, "_afterCollapse")); + + return ret; + }, + + expand: function(){ + // summary: show my children + if(this.isExpanded){ return; } + + // cancel in progress collapse operation + if(this._wipeOut.status() == "playing"){ + this._wipeOut.stop(); + } + + this.isExpanded = true; + dijit.wai.setAttr(this.labelNode, "waiState", "expanded", "true"); + dijit.wai.setAttr(this.containerNode, "waiRole", "role", "group"); + + this._setExpando(); + + // TODO: use animation that's constant speed of movement, not constant time regardless of height + this._wipeIn.play(); + }, + + _afterExpand: function(){ + this.onShow(); + this._publish("afterExpand", {node: this}); + }, + + collapse: function(){ + if(!this.isExpanded){ return; } + + // cancel in progress expand operation + if(this._wipeIn.status() == "playing"){ + this._wipeIn.stop(); + } + + this.isExpanded = false; + dijit.wai.setAttr(this.labelNode, "waiState", "expanded", "false"); + this._setExpando(); + + this._wipeOut.play(); + }, + + _afterCollapse: function(){ + this.onHide(); + this._publish("afterCollapse", {node: this}); + }, + + + setLabelNode: function(label) { + this.labelNode.innerHTML=""; + this.labelNode.appendChild(document.createTextNode(label)); + }, + + + toString: function(){ + return '['+this.declaredClass+', '+this.label+']'; + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/_Calendar.js b/spring-faces/src/main/java/META-INF/dijit/_Calendar.js new file mode 100644 index 00000000..7e96f967 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/_Calendar.js @@ -0,0 +1,226 @@ +if(!dojo._hasResource["dijit._Calendar"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit._Calendar"] = true; +dojo.provide("dijit._Calendar"); + +dojo.require("dojo.cldr.supplemental"); +dojo.require("dojo.date"); +dojo.require("dojo.date.locale"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); + +dojo.declare( + "dijit._Calendar", + [dijit._Widget, dijit._Templated], + { + /* + summary: + A simple GUI for choosing a date in the context of a monthly calendar. + + description: + This widget is used internally by other widgets and is not accessible + as a standalone widget. + This widget can't be used in a form because it doesn't serialize the date to an + field. For a form element, use DateTextBox instead. + + Note that the parser takes all dates attributes passed in the `RFC 3339` format: + http://www.faqs.org/rfcs/rfc3339.html (2005-06-30T08:05:00-07:00) + so that they are serializable and locale-independent. + + usage: + var calendar = new dijit._Calendar({}, dojo.byId("calendarNode")); + -or- +
+ */ + templateString:"\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n
\n\t\t\t\t-\n\t\t\t\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t\t
+
\n\t\t\t
\n\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t

\n\t\t\t
\t\n", + + // value: Date + // the currently selected Date + value: new Date(), + + // dayWidth: String + // How to represent the days of the week in the calendar header. See dojo.date.locale + dayWidth: "narrow", + + setValue: function(/*Date*/ value){ + // summary: set the current date and update the UI. If the date is disabled, the selection will + // not change, but the display will change to the corresponding month. + if(!this.value || dojo.date.compare(value, this.value)){ + value = new Date(value); + this.displayMonth = new Date(value); + if(!this.isDisabledDate(value, this.lang)){ + this.value = value; + this.value.setHours(0,0,0,0); + this.onChange(this.value); + } + this._populateGrid(); + } + }, + + _setText: function(node, text){ + while(node.firstChild){ + node.removeChild(node.firstChild); + } + node.appendChild(document.createTextNode(text)); + }, + + _populateGrid: function(){ + var month = this.displayMonth; + month.setDate(1); + var firstDay = month.getDay(); + var daysInMonth = dojo.date.getDaysInMonth(month); + var daysInPreviousMonth = dojo.date.getDaysInMonth(dojo.date.add(month, "month", -1)); + var today = new Date(); + var selected = this.value; + + var dayOffset = dojo.cldr.supplemental.getFirstDayOfWeek(this.lang); + if(dayOffset > firstDay){ dayOffset -= 7; } + + // Iterate through dates in the calendar and fill in date numbers and style info + dojo.query(".dijitCalendarDateTemplate", this.domNode).forEach(function(template, i){ + i += dayOffset; + var date = new Date(month); + var number, clazz = "dijitCalendar", adj = 0; + + if(i < firstDay){ + number = daysInPreviousMonth - firstDay + i + 1; + adj = -1; + clazz += "Previous"; + }else if(i >= (firstDay + daysInMonth)){ + number = i - firstDay - daysInMonth + 1; + adj = 1; + clazz += "Next"; + }else{ + number = i - firstDay + 1; + clazz += "Current"; + } + + if(adj){ + date = dojo.date.add(date, "month", adj); + } + date.setDate(number); + + if(!dojo.date.compare(date, today, "date")){ + clazz = "dijitCalendarCurrentDate " + clazz; + } + + if(!dojo.date.compare(date, selected, "date")){ + clazz = "dijitCalendarSelectedDate " + clazz; + } + + if(this.isDisabledDate(date, this.lang)){ + clazz = "dijitCalendarDisabledDate " + clazz; + } + + template.className = clazz + "Month dijitCalendarDateTemplate"; + template.dijitDateValue = date.valueOf(); + var label = dojo.query(".dijitCalendarDateLabel", template)[0]; + this._setText(label, date.getDate()); + }, this); + + // Fill in localized month name + var monthNames = dojo.date.locale.getNames('months', 'wide', 'standAlone', this.lang); + this._setText(this.monthLabelNode, monthNames[month.getMonth()]); + + // Fill in localized prev/current/next years + var y = month.getFullYear() - 1; + dojo.forEach(["previous", "current", "next"], function(name){ + this._setText(this[name+"YearLabelNode"], + dojo.date.locale.format(new Date(y++, 0), {selector:'year', locale:this.lang})); + }, this); + }, + + postCreate: function(){ + dijit._Calendar.superclass.postCreate.apply(this); + + var cloneClass = dojo.hitch(this, function(clazz, n){ + var template = dojo.query(clazz, this.domNode)[0]; + for(var i=0; i [widgetId]", this.containerNode || this.domNode).map(dijit.byNode); // Array + }, + + hasChildren: function(){ + // summary: + // returns true if widget has children + var cn = this.containerNode || this.domNode; + return !!this._firstElement(cn); // Boolean + } + } +); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/_Templated.js b/spring-faces/src/main/java/META-INF/dijit/_Templated.js new file mode 100644 index 00000000..2ab78168 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/_Templated.js @@ -0,0 +1,329 @@ +if(!dojo._hasResource["dijit._Templated"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit._Templated"] = true; +dojo.provide("dijit._Templated"); + +dojo.require("dijit._Widget"); + +dojo.require("dojo.string"); +dojo.require("dojo.parser"); + +dojo.declare("dijit._Templated", + null, + { + // summary: + // mixin for widgets that are instantiated from a template + + // templateNode: DomNode + // a node that represents the widget template. Pre-empts both templateString and templatePath. + templateNode: null, + + // templateString String: + // a string that represents the widget template. Pre-empts the + // templatePath. In builds that have their strings "interned", the + // templatePath is converted to an inline templateString, thereby + // preventing a synchronous network call. + templateString: null, + + // templatePath: String + // Path to template (HTML file) for this widget + templatePath: null, + + // widgetsInTemplate Boolean: + // should we parse the template to find widgets that might be + // declared in markup inside it? false by default. + widgetsInTemplate: false, + + // containerNode DomNode: + // holds child elements. "containerNode" is generally set via a + // dojoAttachPoint assignment and it designates where children of + // the src dom node will be placed + containerNode: null, + + // method over-ride + buildRendering: function(){ + // summary: + // Construct the UI for this widget from a template. + // description: + // Lookup cached version of template, and download to cache if it + // isn't there already. Returns either a DomNode or a string, depending on + // whether or not the template contains ${foo} replacement parameters. + + var cached = dijit._Templated.getCachedTemplate(this.templatePath, this.templateString); + + var node; + if(dojo.isString(cached)){ + var className = this.declaredClass, _this = this; + // Cache contains a string because we need to do property replacement + // do the property replacement + var tstr = dojo.string.substitute(cached, this, function(value, key){ + if(key.charAt(0) == '!'){ value = _this[key.substr(1)]; } + if(typeof value == "undefined"){ throw new Error(className+" template:"+key); } // a debugging aide + + // Substitution keys beginning with ! will skip the transform step, + // in case a user wishes to insert unescaped markup, e.g. ${!foo} + return key.charAt(0) == "!" ? value : + // Safer substitution, see heading "Attribute values" in + // http://www.w3.org/TR/REC-html40/appendix/notes.html#h-B.3.2 + value.toString().replace(/"/g,"""); //TODO: add &? use encodeXML method? + }, this); + + node = dijit._Templated._createNodesFromText(tstr)[0]; + }else{ + // if it's a node, all we have to do is clone it + node = cached.cloneNode(true); + } + + // recurse through the node, looking for, and attaching to, our + // attachment points which should be defined on the template node. + this._attachTemplateNodes(node); + if(this.srcNodeRef){ + dojo.style(this.styleNode || node, "cssText", this.srcNodeRef.style.cssText); + if(this.srcNodeRef.className){ + node.className += " " + this.srcNodeRef.className; + } + } + + this.domNode = node; + if(this.srcNodeRef && this.srcNodeRef.parentNode){ + this.srcNodeRef.parentNode.replaceChild(this.domNode, this.srcNodeRef); + } + if(this.widgetsInTemplate){ + var childWidgets = dojo.parser.parse(this.domNode); + this._attachTemplateNodes(childWidgets, function(n,p){ + return n[p]; + }); + } + + this._fillContent(this.srcNodeRef); + }, + + _fillContent: function(/*DomNode*/ source){ + // summary: + // relocate source contents to templated container node + // this.containerNode must be able to receive children, or exceptions will be thrown + var dest = this.containerNode; + if(source && dest){ + while(source.hasChildNodes()){ + dest.appendChild(source.firstChild); + } + } + }, + + _attachTemplateNodes: function(rootNode, getAttrFunc){ + // summary: + // map widget properties and functions to the handlers specified in + // the dom node and it's descendants. This function iterates over all + // nodes and looks for these properties: + // * dojoAttachPoint + // * dojoAttachEvent + // * waiRole + // * waiState + // rootNode: DomNode|Array[Widgets] + // the node to search for properties. All children will be searched. + // getAttrFunc: function? + // a function which will be used to obtain property for a given + // DomNode/Widget + + getAttrFunc = getAttrFunc || function(n,p){ return n.getAttribute(p); }; + + var nodes = dojo.isArray(rootNode) ? rootNode : (rootNode.all || rootNode.getElementsByTagName("*")); + var x=dojo.isArray(rootNode)?0:-1; + for(; x declarations so that external SVG and XML + //documents can be added to a document without worry. Also, if the string + //is an HTML document, only the part inside the body tag is returned. + if(tString){ + tString = tString.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im, ""); + var matches = tString.match(/]*>\s*([\s\S]+)\s*<\/body>/im); + if(matches){ + tString = matches[1]; + } + }else{ + tString = ""; + } + return tString; //String +}; + + +if(dojo.isIE){ + dojo.addOnUnload(function(){ + var cache = dijit._Templated._templateCache; + for(var key in cache){ + var value = cache[key]; + if(!isNaN(value.nodeType)){ // isNode equivalent + dojo._destroyElement(value); + } + cache[key] = null; + } + }); +} + +(function(){ + var tagMap = { + cell: {re: /^]/i, pre: "", post: "
"}, + row: {re: /^]/i, pre: "", post: "
"}, + section: {re: /^<(thead|tbody|tfoot)[\s\r\n>]/i, pre: "", post: "
"} + }; + + // dummy container node used temporarily to hold nodes being created + var tn; + + dijit._Templated._createNodesFromText = function(/*String*/text){ + // summary + // Attempts to create a set of nodes based on the structure of the passed text. + + if(!tn){ + tn = dojo.doc.createElement("div"); + tn.style.display="none"; + } + var tableType = "none"; + var rtext = text.replace(/^\s+/, ""); + for(var type in tagMap){ + var map = tagMap[type]; + if(map.re.test(rtext)){ + tableType = type; + text = map.pre + text + map.post; + break; + } + } + + tn.innerHTML = text; + dojo.body().appendChild(tn); + if(tn.normalize){ + tn.normalize(); + } + + var tag = { cell: "tr", row: "tbody", section: "table" }[tableType]; + var _parent = (typeof tag != "undefined") ? + tn.getElementsByTagName(tag)[0] : + tn; + + var nodes = []; + while(_parent.firstChild){ + nodes.push(_parent.removeChild(_parent.firstChild)); + } + tn.innerHTML=""; + return nodes; // Array + } +})(); + +// These arguments can be specified for widgets which are used in templates. +// Since any widget can be specified as sub widgets in template, mix it +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget,{ + dojoAttachEvent: "", + dojoAttachPoint: "", + waiRole: "", + waiState:"" +}) + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/_Widget.js b/spring-faces/src/main/java/META-INF/dijit/_Widget.js new file mode 100644 index 00000000..bfce597c --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/_Widget.js @@ -0,0 +1,294 @@ +if(!dojo._hasResource["dijit._Widget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit._Widget"] = true; +dojo.provide("dijit._Widget"); + +dojo.require("dijit._base"); + +dojo.declare("dijit._Widget", null, { + constructor: function(params, srcNodeRef){ + this.create(params, srcNodeRef); + }, + // id: String + // a unique, opaque ID string that can be assigned by users or by the + // system. If the developer passes an ID which is known not to be + // unique, the specified ID is ignored and the system-generated ID is + // used instead. + id: "", + + // lang: String + // Language to display this widget in (like en-us). + // Defaults to brower's specified preferred language (typically the language of the OS) + lang: "", + + // dir: String + // Bi-directional support, as defined by the HTML DIR attribute. Either left-to-right "ltr" or right-to-left "rtl". + dir: "", + + // srcNodeRef: DomNode + // pointer to original dom node + srcNodeRef: null, + + // domNode DomNode: + // this is our visible representation of the widget! Other DOM + // Nodes may by assigned to other properties, usually through the + // template system's dojoAttachPonit syntax, but the domNode + // property is the canonical "top level" node in widget UI. + domNode: null, + + //////////// INITIALIZATION METHODS /////////////////////////////////////// + + create: function(params, srcNodeRef) { + // summary: + // To understand the process by which widgets are instantiated, it + // is critical to understand what other methods create calls and + // which of them you'll want to override. Of course, adventurous + // developers could override create entirely, but this should + // only be done as a last resort. + // + // Below is a list of the methods that are called, in the order + // they are fired, along with notes about what they do and if/when + // you should over-ride them in your widget: + // + // postMixInProperties: + // a stub function that you can over-ride to modify + // variables that may have been naively assigned by + // mixInProperties + // # widget is added to manager object here + // buildRendering + // Subclasses use this method to handle all UI initialization + // Sets this.domNode. Templated widgets do this automatically + // and otherwise it just uses the source dom node. + // postCreate + // a stub function that you can over-ride to modify take + // actions once the widget has been placed in the UI + + // store pointer to original dom tree + this.srcNodeRef = dojo.byId(srcNodeRef); + + // For garbage collection. An array of handles returned by Widget.connect() + // Each handle returned from Widget.connect() is an array of handles from dojo.connect() + this._connects=[]; + + // _attaches: String[] + // names of all our dojoAttachPoint variables + this._attaches=[]; + + //mixin our passed parameters + if(this.srcNodeRef && (typeof this.srcNodeRef.id == "string")){ this.id = this.srcNodeRef.id; } + if(params){ + dojo.mixin(this,params); + } + this.postMixInProperties(); + + // generate an id for the widget if one wasn't specified + // (be sure to do this before buildRendering() because that function might + // expect the id to be there. + if(!this.id){ + this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_")); + } + dijit.registry.add(this); + + this.buildRendering(); + if(this.domNode){ + this.domNode.setAttribute("widgetId", this.id); + if(this.srcNodeRef && this.srcNodeRef.dir){ + this.domNode.dir = this.srcNodeRef.dir; + } + } + this.postCreate(); + + // If srcNodeRef has been processed and removed from the DOM (e.g. TemplatedWidget) then delete it to allow GC. + if(this.srcNodeRef && !this.srcNodeRef.parentNode){ + delete this.srcNodeRef; + } + }, + + postMixInProperties: function(){ + // summary + // Called after the parameters to the widget have been read-in, + // but before the widget template is instantiated. + // Especially useful to set properties that are referenced in the widget template. + }, + + buildRendering: function(){ + // summary: + // Construct the UI for this widget, setting this.domNode. + // Most widgets will mixin TemplatedWidget, which overrides this method. + this.domNode = this.srcNodeRef; + }, + + postCreate: function(){ + // summary: + // Called after a widget's dom has been setup + }, + + startup: function(){ + // summary: + // Called after a widget's children, and other widgets on the page, have been created. + // Provides an opportunity to manipulate any children before they are displayed + // This is useful for composite widgets that need to control or layout sub-widgets + // Many layout widgets can use this as a wiring phase + }, + + //////////// DESTROY FUNCTIONS //////////////////////////////// + + destroyRecursive: function(/*Boolean*/ finalize){ + // summary: + // Destroy this widget and it's descendants. This is the generic + // "destructor" function that all widget users should call to + // cleanly discard with a widget. Once a widget is destroyed, it's + // removed from the manager object. + // finalize: Boolean + // is this function being called part of global environment + // tear-down? + + this.destroyDescendants(); + this.destroy(); + }, + + destroy: function(/*Boolean*/ finalize){ + // summary: + // Destroy this widget, but not its descendants + // finalize: Boolean + // is this function being called part of global environment + // tear-down? + this.uninitialize(); + dojo.forEach(this._connects, function(array){ + dojo.forEach(array, dojo.disconnect); + }); + this.destroyRendering(finalize); + dijit.registry.remove(this.id); + }, + + destroyRendering: function(/*Boolean*/ finalize){ + // summary: + // Destroys the DOM nodes associated with this widget + // finalize: Boolean + // is this function being called part of global environment + // tear-down? + + if(this.bgIframe){ + this.bgIframe.destroy(); + delete this.bgIframe; + } + + if(this.domNode){ + dojo._destroyElement(this.domNode); + delete this.domNode; + } + + if(this.srcNodeRef){ + dojo._destroyElement(this.srcNodeRef); + delete this.srcNodeRef; + } + }, + + destroyDescendants: function(){ + // summary: + // Recursively destroy the children of this widget and their + // descendants. + + // TODO: should I destroy in the reverse order, to go bottom up? + dojo.forEach(this.getDescendants(), function(widget){ widget.destroy(); }); + }, + + uninitialize: function(){ + // summary: + // stub function. Over-ride to implement custom widget tear-down + // behavior. + return false; + }, + + ////////////////// MISCELLANEOUS METHODS /////////////////// + + toString: function(){ + // summary: + // returns a string that represents the widget. When a widget is + // cast to a string, this method will be used to generate the + // output. Currently, it does not implement any sort of reversable + // serialization. + return '[Widget ' + this.declaredClass + ', ' + (this.id || 'NO ID') + ']'; // String + }, + + getDescendants: function(){ + // summary: + // return all the descendant widgets + var list = dojo.query('[widgetId]', this.domNode); + return list.map(dijit.byNode); // Array + }, + + nodesWithKeyClick : ["input", "button"], + + connect: function( + /*Object|null*/ obj, + /*String*/ event, + /*String|Function*/ method){ + + // summary: + // Connects specified obj/event to specified method of this object + // and registers for disconnect() on widget destroy. + // Special event: "ondijitclick" triggers on a click or enter-down or space-up + // Similar to dojo.connect() but takes three arguments rather than four. + var handles =[]; + if(event == "ondijitclick"){ + var w = this; + // add key based click activation for unsupported nodes. + if(!this.nodesWithKeyClick[obj.nodeName]){ + handles.push(dojo.connect(obj, "onkeydown", this, + function(e){ + if(e.keyCode == dojo.keys.ENTER){ + return (dojo.isString(method))? + w[method](e) : method.call(w, e); + }else if(e.keyCode == dojo.keys.SPACE){ + // stop space down as it causes IE to scroll + // the browser window + dojo.stopEvent(e); + } + })); + handles.push(dojo.connect(obj, "onkeyup", this, + function(e){ + if(e.keyCode == dojo.keys.SPACE){ + return dojo.isString(method) ? + w[method](e) : method.call(w, e); + } + })); + } + event = "onclick"; + } + handles.push(dojo.connect(obj, event, this, method)); + + // return handles for FormElement and ComboBox + this._connects.push(handles); + return handles; + }, + + disconnect: function(/*Object*/ handles){ + // summary: + // Disconnects handle created by this.connect. + // Also removes handle from this widget's list of connects + for(var i=0; i Menu --> +// MenuItem. The onBlur event for Combobutton doesn't fire due to focusing +// on the Menu or a MenuItem, since they are considered part of the +// Combobutton widget. It only happens when focus is shifted +// somewhere completely different. + +dojo.mixin(dijit, +{ + // _curFocus: DomNode + // Currently focused item on screen + _curFocus: null, + + // _prevFocus: DomNode + // Previously focused item on screen + _prevFocus: null, + + isCollapsed: function(){ + // summary: tests whether the current selection is empty + var _window = dojo.global; + var _document = dojo.doc; + if(_document.selection){ // IE + return !_document.selection.createRange().text; // Boolean + }else if(_window.getSelection){ + var selection = _window.getSelection(); + if(dojo.isString(selection)){ // Safari + return !selection; // Boolean + }else{ // Mozilla/W3 + return selection.isCollapsed || !selection.toString(); // Boolean + } + } + }, + + getBookmark: function(){ + // summary: Retrieves a bookmark that can be used with moveToBookmark to return to the same range + var bookmark, selection = dojo.doc.selection; + if(selection){ // IE + var range = selection.createRange(); + if(selection.type.toUpperCase()=='CONTROL'){ + bookmark = range.length ? dojo._toArray(range) : null; + }else{ + bookmark = range.getBookmark(); + } + }else{ + if(dojo.global.getSelection){ + selection = dojo.global.getSelection(); + if(selection){ + var range = selection.getRangeAt(0); + bookmark = range.cloneRange(); + } + }else{ + console.debug("No idea how to store the current selection for this browser!"); + } + } + return bookmark; // Array + }, + + moveToBookmark: function(/*Object*/bookmark){ + // summary: Moves current selection to a bookmark + // bookmark: this should be a returned object from dojo.html.selection.getBookmark() + var _document = dojo.doc; + if(_document.selection){ // IE + var range; + if(dojo.isArray(bookmark)){ + range = _document.body.createControlRange(); + dojo.forEach(bookmark, range.addElement); + }else{ + range = _document.selection.createRange(); + range.moveToBookmark(bookmark); + } + range.select(); + }else{ //Moz/W3C + var selection = dojo.global.getSelection && dojo.global.getSelection(); + if(selection && selection.removeAllRanges){ + selection.removeAllRanges(); + selection.addRange(bookmark); + }else{ + console.debug("No idea how to restore selection for this browser!"); + } + } + }, + + getFocus: function(/*Widget*/menu, /*Window*/ openedForWindow){ + // summary: + // Returns the current focus and selection. + // Called when a popup appears (either a top level menu or a dialog), + // or when a toolbar/menubar receives focus + // + // menu: + // the menu that's being opened + // + // openedForWindow: + // iframe in which menu was opened + // + // returns: + // a handle to restore focus/selection + + return { + // Node to return focus to + node: menu && dojo.isDescendant(dijit._curFocus, menu.domNode) ? dijit._prevFocus : dijit._curFocus, + + // Previously selected text + bookmark: + !dojo.withGlobal(openedForWindow||dojo.global, dijit.isCollapsed) ? + dojo.withGlobal(openedForWindow||dojo.global, dijit.getBookmark) : + null, + + openedForWindow: openedForWindow + }; // Object + }, + + focus: function(/*Object || DomNode */ handle){ + // summary: + // Sets the focused node and the selection according to argument. + // To set focus to an iframe's content, pass in the iframe itself. + // handle: + // object returned by get(), or a DomNode + + if(!handle){ return; } + + var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object + bookmark = handle.bookmark, + openedForWindow = handle.openedForWindow; + + // Set the focus + // Note that for iframe's we need to use the ")+""+((dojo.isIE||dojo.isSafari)?"":"
"):"",_nlsResources:null,focus:function(){if(!this.disabled){this._changing();}if(dojo.isMozilla){dijit.focus(this.iframe);}else{dijit.focus(this.focusNode);}},setValue:function(_595,_596){var _597=this.editNode;if(typeof _595=="string"){_597.innerHTML="";if(_595.split){var _598=this;var _599=true;dojo.forEach(_595.split("\n"),function(line){if(_599){_599=false;}else{_597.appendChild(document.createElement("BR"));}_597.appendChild(document.createTextNode(line));});}else{_597.appendChild(document.createTextNode(_595));}if(this.iframe){this.sizeNode=document.createElement("div");_597.appendChild(this.sizeNode);}}else{_595=_597.innerHTML;if(this.iframe){_595=_595.replace(/
<\/div>\r?\n?$/i,"");}_595=_595.replace(/\s*\r?\n|^\s+|\s+$| /g,"").replace(/>\s+<").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])
/g,"$1\n").replace(/<\/p>\s*]*>|]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&/gi,"&").replace(/</gi,"<").replace(/>/gi,">");}this.formValueNode.value=_595;if(this.iframe){var _59b=this.sizeNode.offsetTop;if(_597.scrollWidth>_597.clientWidth){_59b+=16;}if(this.lastHeight!=_59b){if(_59b==0){_59b=16;}dojo.contentBox(this.iframe,{h:_59b});this.lastHeight=_59b;}}dijit.form.Textarea.superclass.setValue.call(this,_595,_596);},getValue:function(){return this.formValueNode.value;},postMixInProperties:function(){dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments);if(this.srcNodeRef&&this.srcNodeRef.innerHTML!=""){this.value=this.srcNodeRef.innerHTML;this.srcNodeRef.innerHTML="";}if((!this.value||this.value=="")&&this.srcNodeRef&&this.srcNodeRef.value){this.value=this.srcNodeRef.value;}if(!this.value){this.value="";}this.value=this.value.replace(/\r\n/g,"\n").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&");},postCreate:function(){if(dojo.isIE||dojo.isSafari){this.domNode.style.overflowY="hidden";this.eventNode=this.focusNode=this.editNode;this.connect(this.eventNode,"oncut",this._changing);this.connect(this.eventNode,"onpaste",this._changing);}else{if(dojo.isMozilla){var w=this.iframe.contentWindow;var d=w.document;this._nlsResources=dojo.i18n.getLocalization("dijit.form","Textarea");d.open();d.write(""+this._nlsResources.iframeTitle1+"");d.close();this.editNode=d.body;this.iframe.style.overflowY="hidden";this.eventNode=d;this.focusNode=this.editNode;this.connect(w,"resize",this._changed);}else{this.focusNode=this.domNode;}}if(this.eventNode){this.connect(this.eventNode,"keypress",this._onKeyPress);this.connect(this.eventNode,"mousemove",this._changed);this.connect(this.eventNode,"focus",this._focused);this.connect(this.eventNode,"blur",this._blurred);}if(this.editNode){this.connect(this.editNode,"change",this._changed);}this.inherited("postCreate",arguments);},_focused:function(e){dojo.addClass(this.iframe||this.domNode,"dijitInputFieldFocused");this._changed(e);},_blurred:function(e){dojo.removeClass(this.iframe||this.domNode,"dijitInputFieldFocused");this._changed(e,true);},_onIframeBlur:function(){this.iframe.contentDocument.title=this._nlsResources.iframeTitle1;},_onKeyPress:function(e){if(e.keyCode==dojo.keys.TAB&&!e.shiftKey&&!e.ctrlKey&&!e.altKey&&this.iframe){this.iframe.contentDocument.title=this._nlsResources.iframeTitle2;this.iframe.focus();dojo.stopEvent(e);}else{if(e.keyCode==dojo.keys.ENTER){e.stopPropagation();}else{if(this.inherited("_onKeyPress",arguments)&&this.iframe){var te=document.createEvent("KeyEvents");te.initKeyEvent("keypress",true,true,null,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.keyCode,e.charCode);this.iframe.dispatchEvent(te);}}}this._changing();},_changing:function(e){setTimeout(dojo.hitch(this,"_changed",e,false),1);},_changed:function(e,_5a4){if(this.iframe&&this.iframe.contentDocument.designMode!="on"){this.iframe.contentDocument.designMode="on";}this.setValue(null,_5a4);}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,_started:false,startup:function(){if(this._started){return;}var _5a5=this.getChildren();dojo.forEach(_5a5,this._setupChild,this);dojo.some(_5a5,function(_5a6){if(_5a6.selected){this.selectedChildWidget=_5a6;}return _5a6.selected;},this);if(!this.selectedChildWidget&&_5a5[0]){this.selectedChildWidget=_5a5[0];this.selectedChildWidget.selected=true;}if(this.selectedChildWidget){this._showChild(this.selectedChildWidget);}dojo.publish(this.id+"-startup",[{children:_5a5,selected:this.selectedChildWidget}]);dijit.layout._LayoutWidget.prototype.startup.apply(this,arguments);this._started=true;},_setupChild:function(page){page.domNode.style.display="none";page.domNode.style.position="relative";return page;},addChild:function(_5a8,_5a9){dijit._Container.prototype.addChild.apply(this,arguments);_5a8=this._setupChild(_5a8);if(this._started){this.layout();dojo.publish(this.id+"-addChild",[_5a8]);if(!this.selectedChildWidget){this.selectChild(_5a8);}}},removeChild:function(page){dijit._Container.prototype.removeChild.apply(this,arguments);if(this._beingDestroyed){return;}if(this._started){dojo.publish(this.id+"-removeChild",[page]);this.layout();}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _5ab=this.getChildren();if(_5ab.length){this.selectChild(_5ab[0]);}}}},selectChild:function(page){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);}},_transition:function(_5ad,_5ae){if(_5ae){this._hideChild(_5ae);}this._showChild(_5ad);if(this.doLayout&&_5ad.resize){_5ad.resize(this._containerContentBox||this._contentBox);}},forward:function(){var _5af=this.getChildren();var _5b0=dojo.indexOf(_5af,this.selectedChildWidget);this.selectChild(_5af[(_5b0+1)%_5af.length]);},back:function(){var _5b1=this.getChildren();var _5b2=dojo.indexOf(_5b1,this.selectedChildWidget);this.selectChild(_5b1[(_5b2+_5b1.length-1)%_5b1.length]);},_onKeyPress:function(e){if(e.ctrlKey){switch(e.keyCode){case dojo.keys.PAGE_DOWN:case dojo.keys.PAGE_UP:case dojo.keys.TAB:if((e.keyCode==dojo.keys.PAGE_DOWN)||(e.keyCode==dojo.keys.TAB&&!e.shiftKey)){this.forward();}else{this.back();}dijit.focus(this.selectedChildWidget.domNode);dojo.stopEvent(e);return false;break;default:if((e.keyChar=="w")&&(this.selectedChildWidget.closable)){this.closeChild(this.selectedChildWidget);dojo.stopEvent(e);}}}},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._contentBox);}},_showChild:function(page){var _5b5=this.getChildren();page.isFirstChild=(page==_5b5[0]);page.isLastChild=(page==_5b5[_5b5.length-1]);page.selected=true;page.domNode.style.display="";if(page._loadCheck){page._loadCheck();}if(page.onShow){page.onShow();}},_hideChild:function(page){page.selected=false;page.domNode.style.display="none";if(page.onHide){page.onHide();}},closeChild:function(page){var _5b8=page.onClose(this,page);if(_5b8){this.removeChild(page);page.destroy();}},destroy:function(){this._beingDestroyed=true;dijit.layout.StackContainer.superclass.destroy.apply(this,arguments);}});dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"",containerId:"",buttonWidget:"dijit.layout._StackButton",postCreate:function(){dijit.wai.setAttr(this.domNode,"waiRole","role","tablist");this.pane2button={};this._subscriptions=[dojo.subscribe(this.containerId+"-startup",this,"onStartup"),dojo.subscribe(this.containerId+"-addChild",this,"onAddChild"),dojo.subscribe(this.containerId+"-removeChild",this,"onRemoveChild"),dojo.subscribe(this.containerId+"-selectChild",this,"onSelectChild")];},onStartup:function(info){dojo.forEach(info.children,this.onAddChild,this);this.onSelectChild(info.selected);},destroy:function(){dojo.forEach(this._subscriptions,dojo.unsubscribe);dijit.layout.StackController.superclass.destroy.apply(this,arguments);},onAddChild:function(page){var _5bb=document.createElement("span");this.domNode.appendChild(_5bb);var cls=dojo.getObject(this.buttonWidget);var _5bd=new cls({label:page.title,closeButton:page.closable},_5bb);this.addChild(_5bd);this.pane2button[page]=_5bd;page.controlButton=_5bd;var _5be=this;dojo.connect(_5bd,"onClick",function(){_5be.onButtonClick(page);});dojo.connect(_5bd,"onClickCloseButton",function(){_5be.onCloseButtonClick(page);});if(!this._currentChild){_5bd.focusNode.setAttribute("tabIndex","0");this._currentChild=page;}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}var _5c0=this.pane2button[page];if(_5c0){_5c0.destroy();}this.pane2button[page]=null;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _5c2=this.pane2button[this._currentChild];_5c2.setChecked(false);_5c2.focusNode.setAttribute("tabIndex","-1");}var _5c3=this.pane2button[page];_5c3.setChecked(true);this._currentChild=page;_5c3.focusNode.setAttribute("tabIndex","0");},onButtonClick:function(page){var _5c5=dijit.byId(this.containerId);_5c5.selectChild(page);},onCloseButtonClick:function(page){var _5c7=dijit.byId(this.containerId);_5c7.closeChild(page);var b=this.pane2button[this._currentChild];if(b){dijit.focus(b.focusNode||b.domNode);}},adjacent:function(_5c9){var _5ca=this.getChildren();var _5cb=dojo.indexOf(_5ca,this.pane2button[this._currentChild]);var _5cc=_5c9?1:_5ca.length-1;return _5ca[(_5cb+_5cc)%_5ca.length];},onkeypress:function(evt){if(this.disabled||evt.altKey||evt.shiftKey||evt.ctrlKey){return;}var _5ce=true;switch(evt.keyCode){case dojo.keys.LEFT_ARROW:case dojo.keys.UP_ARROW:_5ce=false;case dojo.keys.RIGHT_ARROW:case dojo.keys.DOWN_ARROW:this.adjacent(_5ce).onClick();dojo.stopEvent(evt);break;case dojo.keys.DELETE:if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);dojo.stopEvent(evt);}default:return;}}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});dojo.extend(dijit._Widget,{title:"",selected:false,closable:false,onClose:function(){return true;}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:250,_verticalSpace:0,postCreate:function(){this.domNode.style.overflow="hidden";dijit.layout.AccordionContainer.superclass.postCreate.apply(this,arguments);},startup:function(){if(this._started){return;}dijit.layout.StackContainer.prototype.startup.apply(this,arguments);if(this.selectedChildWidget){var _5d1=this.selectedChildWidget.containerNode.style;_5d1.display="";_5d1.overflow="auto";this.selectedChildWidget._setSelectedState(true);}},layout:function(){var _5d2=0;var _5d3=this.selectedChildWidget;dojo.forEach(this.getChildren(),function(_5d4){_5d2+=_5d4.getTitleHeight();});var _5d5=this._contentBox;this._verticalSpace=(_5d5.h-_5d2);if(_5d3){_5d3.containerNode.style.height=this._verticalSpace+"px";}},_setupChild:function(page){return page;},_transition:function(_5d7,_5d8){var _5d9=[];var _5da=this._verticalSpace;if(_5d7){_5d7.setSelected(true);var _5db=_5d7.containerNode;_5db.style.display="";_5d9.push(dojo.animateProperty({node:_5db,duration:this.duration,properties:{height:{start:"1",end:_5da}},onEnd:function(){_5db.style.overflow="auto";}}));}if(_5d8){_5d8.setSelected(false);var _5dc=_5d8.containerNode;_5dc.style.overflow="hidden";_5d9.push(dojo.animateProperty({node:_5dc,duration:this.duration,properties:{height:{start:_5da,end:"1"}},onEnd:function(){_5dc.style.display="none";}}));}dojo.fx.combine(_5d9).play();},processKey:function(evt){if(this.disabled||evt.altKey||evt.shiftKey||evt.ctrlKey){return dijit.layout.AccordionContainer.superclass._onKeyPress.apply(this,arguments);}var _5de=true;switch(evt.keyCode){case dojo.keys.LEFT_ARROW:case dojo.keys.UP_ARROW:_5de=false;case dojo.keys.RIGHT_ARROW:case dojo.keys.DOWN_ARROW:var _5df=this.getChildren();var _5e0=dojo.indexOf(_5df,evt._dijitWidget);_5e0+=_5de?1:_5df.length-1;var next=_5df[_5e0%_5df.length];dojo.stopEvent(evt);next._onTitleClick();}}});dojo.declare("dijit.layout.AccordionPane",[dijit.layout.ContentPane,dijit._Templated,dijit._Contained],{templateString:"
${title}
\n
\n",postCreate:function(){dijit.layout.AccordionPane.superclass.postCreate.apply(this,arguments);dojo.setSelectable(this.titleNode,false);this.setSelected(this.selected);},getTitleHeight:function(){return dojo.marginBox(this.titleNode).h;},_onTitleClick:function(){var _5e2=this.getParent();_5e2.selectChild(this);dijit.focus(this.focusNode);},_onKeyPress:function(evt){evt._dijitWidget=this;return this.getParent().processKey(evt);},_setSelectedState:function(_5e4){this.selected=_5e4;(_5e4?dojo.addClass:dojo.removeClass)(this.domNode,"dijitAccordionPane-selected");this.focusNode.setAttribute("tabIndex",(_5e4)?"0":"-1");},setSelected:function(_5e5){this._setSelectedState(_5e5);if(_5e5){this.onSelected();}},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.LayoutContainer"]){dojo._hasResource["dijit.layout.LayoutContainer"]=true;dojo.provide("dijit.layout.LayoutContainer");dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{layout:function(){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());},addChild:function(_5e6,_5e7){dijit._Container.prototype.addChild.apply(this,arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}},removeChild:function(_5e8){dijit._Container.prototype.removeChild.apply(this,arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}}});dojo.extend(dijit._Widget,{layoutAlign:"none"});}if(!dojo._hasResource["dijit.layout.LinkPane"]){dojo._hasResource["dijit.layout.LinkPane"]=true;dojo.provide("dijit.layout.LinkPane");dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"
",postCreate:function(){if(this.srcNodeRef){this.title+=this.srcNodeRef.innerHTML;}dijit.layout.LinkPane.superclass.postCreate.apply(this,arguments);}});}if(!dojo._hasResource["dojo.cookie"]){dojo._hasResource["dojo.cookie"]=true;dojo.provide("dojo.cookie");dojo.cookie=function(name,_5ea,_5eb){var c=document.cookie;if(arguments.length==1){var idx=c.lastIndexOf(name+"=");if(idx==-1){return null;}var _5ee=idx+name.length+1;var end=c.indexOf(";",idx+name.length+1);if(end==-1){end=c.length;}return decodeURIComponent(c.substring(_5ee,end));}else{_5eb=_5eb||{};_5ea=encodeURIComponent(_5ea);if(typeof (_5eb.expires)=="number"){var d=new Date();d.setTime(d.getTime()+(_5eb.expires*24*60*60*1000));_5eb.expires=d;}document.cookie=name+"="+_5ea+(_5eb.expires?"; expires="+_5eb.expires.toUTCString():"")+(_5eb.path?"; path="+_5eb.path:"")+(_5eb.domain?"; domain="+_5eb.domain:"")+(_5eb.secure?"; secure":"");return null;}};}if(!dojo._hasResource["dijit.layout.SplitContainer"]){dojo._hasResource["dijit.layout.SplitContainer"]=true;dojo.provide("dijit.layout.SplitContainer");dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{activeSizing:false,sizerWidth:15,orientation:"horizontal",persist:true,postMixInProperties:function(){dijit.layout.SplitContainer.superclass.postMixInProperties.apply(this,arguments);this.isHorizontal=(this.orientation=="horizontal");},postCreate:function(){dijit.layout.SplitContainer.superclass.postCreate.apply(this,arguments);this.sizers=[];dojo.addClass(this.domNode,"dijitSplitContainer");if(dojo.isMozilla){this.domNode.style.overflow="-moz-scrollbars-none";}if(typeof this.sizerWidth=="object"){try{this.sizerWidth=parseInt(this.sizerWidth.toString());}catch(e){this.sizerWidth=15;}}var _5f1=this.virtualSizer=document.createElement("div");_5f1.style.position="relative";_5f1.style.zIndex=10;_5f1.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";this.domNode.appendChild(_5f1);dojo.setSelectable(_5f1,false);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_5f2,i,_5f4){this._injectChild(_5f2);if(i<_5f4.length-1){this._addSizer();}},this);if(this.persist){this._restoreState();}dijit.layout._LayoutWidget.prototype.startup.apply(this,arguments);this._started=true;},_injectChild:function(_5f5){_5f5.domNode.style.position="absolute";dojo.addClass(_5f5.domNode,"dijitSplitPane");},_addSizer:function(){var i=this.sizers.length;var _5f7=this.sizers[i]=document.createElement("div");_5f7.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";var _5f8=document.createElement("div");_5f8.className="thumb";_5f7.appendChild(_5f8);var self=this;var _5fa=(function(){var _5fb=i;return function(e){self.beginSizing(e,_5fb);};})();dojo.connect(_5f7,"onmousedown",_5fa);this.domNode.appendChild(_5f7);dojo.setSelectable(_5f7,false);},removeChild:function(_5fd){if(this.sizers.length&&dojo.indexOf(this.getChildren(),_5fd)!=-1){var i=this.sizers.length-1;dojo._destroyElement(this.sizers[i]);this.sizers.length--;}dijit._Container.prototype.removeChild.apply(this,arguments);if(this._started){this.layout();}},addChild:function(_5ff,_600){dijit._Container.prototype.addChild.apply(this,arguments);if(this._started){this._injectChild(_5ff);var _601=this.getChildren();if(_601.length>1){this._addSizer();}this.layout();}},layout:function(){this.paneWidth=this._contentBox.w;this.paneHeight=this._contentBox.h;var _602=this.getChildren();if(!_602.length){return;}var _603=this.isHorizontal?this.paneWidth:this.paneHeight;if(_602.length>1){_603-=this.sizerWidth*(_602.length-1);}var _604=0;dojo.forEach(_602,function(_605){_604+=_605.sizeShare;});var _606=_603/_604;var _607=0;dojo.forEach(_602.slice(0,_602.length-1),function(_608){var size=Math.round(_606*_608.sizeShare);_608.sizeActual=size;_607+=size;});_602[_602.length-1].sizeActual=_603-_607;this._checkSizes();var pos=0;var size=_602[0].sizeActual;this._movePanel(_602[0],pos,size);_602[0].position=pos;pos+=size;if(!this.sizers){return;}dojo.some(_602.slice(1),function(_60c,i){if(!this.sizers[i]){return true;}this._moveSlider(this.sizers[i],pos,this.sizerWidth);this.sizers[i].position=pos;pos+=this.sizerWidth;size=_60c.sizeActual;this._movePanel(_60c,pos,size);_60c.position=pos;pos+=size;},this);},_movePanel:function(_60e,pos,size){if(this.isHorizontal){_60e.domNode.style.left=pos+"px";_60e.domNode.style.top=0;var box={w:size,h:this.paneHeight};if(_60e.resize){_60e.resize(box);}else{dojo.marginBox(_60e.domNode,box);}}else{_60e.domNode.style.left=0;_60e.domNode.style.top=pos+"px";var box={w:this.paneWidth,h:size};if(_60e.resize){_60e.resize(box);}else{dojo.marginBox(_60e.domNode,box);}}},_moveSlider:function(_612,pos,size){if(this.isHorizontal){_612.style.left=pos+"px";_612.style.top=0;dojo.marginBox(_612,{w:size,h:this.paneHeight});}else{_612.style.left=0;_612.style.top=pos+"px";dojo.marginBox(_612,{w:this.paneWidth,h:size});}},_growPane:function(_615,pane){if(_615>0){if(pane.sizeActual>pane.sizeMin){if((pane.sizeActual-pane.sizeMin)>_615){pane.sizeActual=pane.sizeActual-_615;_615=0;}else{_615-=pane.sizeActual-pane.sizeMin;pane.sizeActual=pane.sizeMin;}}}return _615;},_checkSizes:function(){var _617=0;var _618=0;var _619=this.getChildren();dojo.forEach(_619,function(_61a){_618+=_61a.sizeActual;_617+=_61a.sizeMin;});if(_617<=_618){var _61b=0;dojo.forEach(_619,function(_61c){if(_61c.sizeActual<_61c.sizeMin){_61b+=_61c.sizeMin-_61c.sizeActual;_61c.sizeActual=_61c.sizeMin;}});if(_61b>0){var list=this.isDraggingLeft?_619.reverse():_619;dojo.forEach(list,function(_61e){_61b=this._growPane(_61b,_61e);},this);}}else{dojo.forEach(_619,function(_61f){_61f.sizeActual=Math.round(_618*(_61f.sizeMin/_617));});}},beginSizing:function(e,i){var _622=this.getChildren();this.paneBefore=_622[i];this.paneAfter=_622[i+1];this.isSizing=true;this.sizingSplitter=this.sizers[i];if(!this.cover){this.cover=dojo.doc.createElement("div");this.domNode.appendChild(this.cover);var s=this.cover.style;s.position="absolute";s.zIndex=1;s.top=0;s.left=0;s.width="100%";s.height="100%";}else{this.cover.style.zIndex=1;}this.sizingSplitter.style.zIndex=2;this.originPos=dojo.coords(_622[0].domNode,true);if(this.isHorizontal){var _624=(e.layerX?e.layerX:e.offsetX);var _625=e.pageX;this.originPos=this.originPos.x;}else{var _624=(e.layerY?e.layerY:e.offsetY);var _625=e.pageY;this.originPos=this.originPos.y;}this.startPoint=this.lastPoint=_625;this.screenToClientOffset=_625-_624;this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;if(!this.activeSizing){this._showSizingLine();}this.connect(document.documentElement,"onmousemove","changeSizing");this.connect(document.documentElement,"onmouseup","endSizing");dojo.stopEvent(e);},changeSizing:function(e){if(!this.isSizing){return;}this.lastPoint=this.isHorizontal?e.pageX:e.pageY;this.movePoint();if(this.activeSizing){this._updateSize();}else{this._moveSizingLine();}dojo.stopEvent(e);},endSizing:function(e){if(!this.isSizing){return;}if(this.cover){this.cover.style.zIndex=-1;}if(!this.activeSizing){this._hideSizingLine();}this._updateSize();this.isSizing=false;if(this.persist){this._saveState(this);}},movePoint:function(){var p=this.lastPoint-this.screenToClientOffset;var a=p-this.dragOffset;a=this.legaliseSplitPoint(a);p=a+this.dragOffset;this.lastPoint=p+this.screenToClientOffset;},legaliseSplitPoint:function(a){a+=this.sizingSplitter.position;this.isDraggingLeft=!!(a>0);if(!this.activeSizing){var min=this.paneBefore.position+this.paneBefore.sizeMin;if(amax){a=max;}}a-=this.sizingSplitter.position;this._checkSizes();return a;},_updateSize:function(){var pos=this.lastPoint-this.dragOffset-this.originPos;var _62e=this.paneBefore.position;var _62f=this.paneAfter.position+this.paneAfter.sizeActual;this.paneBefore.sizeActual=pos-_62e;this.paneAfter.position=pos+this.sizerWidth;this.paneAfter.sizeActual=_62f-this.paneAfter.position;dojo.forEach(this.getChildren(),function(_630){_630.sizeShare=_630.sizeActual;});if(this._started){this.layout();}},_showSizingLine:function(){this._moveSizingLine();dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});this.virtualSizer.style.display="block";},_hideSizingLine:function(){this.virtualSizer.style.display="none";},_moveSizingLine:function(){var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;this.virtualSizer.style[this.isHorizontal?"left":"top"]=pos+"px";},_getCookieName:function(i){return this.id+"_"+i;},_restoreState:function(){dojo.forEach(this.getChildren(),function(_633,i){var _635=this._getCookieName(i);var _636=dojo.cookie(_635);if(_636){var pos=parseInt(_636);if(typeof pos=="number"){_633.sizeShare=pos;}}},this);},_saveState:function(){dojo.forEach(this.getChildren(),function(_638,i){dojo.cookie(this._getCookieName(i),_638.sizeShare);},this);}});dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",templateString:null,templateString:"
\n\t
\n\t
\n
\n",postCreate:function(){dijit.layout.TabContainer.superclass.postCreate.apply(this,arguments);this.tablist=new dijit.layout.TabController({id:this.id+"_tablist",tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id},this.tablistNode);},_setupChild:function(tab){dojo.addClass(tab.domNode,"dijitTabPane");dijit.layout.TabContainer.superclass._setupChild.apply(this,arguments);return tab;},startup:function(){if(this._started){return;}this.tablist.startup();dijit.layout.TabContainer.superclass.startup.apply(this,arguments);if(dojo.isSafari){setTimeout(dojo.hitch(this,"layout"),0);}},layout:function(){if(!this.doLayout){return;}var _63b=this.tabPosition.replace(/-h/,"");var _63c=[{domNode:this.tablist.domNode,layoutAlign:_63b},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_63c);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_63c[1]);if(this.selectedChildWidget){this._showChild(this.selectedChildWidget);if(this.doLayout&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox);}}},destroy:function(){this.tablist.destroy();dijit.layout.TabContainer.superclass.destroy.apply(this,arguments);}});dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"
",tabPosition:"top",doLayout:true,buttonWidget:"dijit.layout._TabButton",postMixInProperties:function(){this["class"]="dijitTabLabels-"+this.tabPosition+(this.doLayout?"":" dijitTabNoLayout");dijit.layout.TabController.superclass.postMixInProperties.apply(this,arguments);}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",templateString:"
"+"
"+"${!label}"+""+"x"+""+"
"+"
",postCreate:function(){if(this.closeButton){dojo.addClass(this.innerDiv,"dijitClosable");}else{this.closeButtonNode.style.display="none";}dijit.layout._TabButton.superclass.postCreate.apply(this,arguments);dojo.setSelectable(this.containerNode,false);}});}if(!dojo._hasResource["dijit.dijit-all"]){dojo._hasResource["dijit.dijit-all"]=true;console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");dojo.provide("dijit.dijit-all");}dojo.i18n._preloadLocalizations("dijit.nls.dijit-all",["ROOT","es-es","es","it-it","pt-br","de","fr-fr","zh-cn","pt","en-us","zh","fr","zh-tw","it","en-gb","xx","de-de","ko-kr","ja-jp","ko","en","ja"]); diff --git a/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js b/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js new file mode 100644 index 00000000..936ddd9d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js @@ -0,0 +1,14087 @@ +/* + Copyright (c) 2004-2007, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.colors"] = true; +dojo.provide("dojo.colors"); + +(function(){ + // this is a standard convertion prescribed by the CSS3 Color Module + var hue2rgb = function(m1, m2, h){ + if(h < 0){ ++h; } + if(h > 1){ --h; } + var h6 = 6 * h; + if(h6 < 1){ return m1 + (m2 - m1) * h6; } + if(2 * h < 1){ return m2; } + if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; } + return m1; + }; + + dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ + // summary: get rgb(a) array from css-style color declarations + // description: this function can handle all 4 CSS3 Color Module formats: + // rgb, rgba, hsl, hsla, including rgb(a) with percentage values. + var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/); + if(m){ + var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1]; + if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){ + var r = c[0]; + if(r.charAt(r.length - 1) == "%"){ + // 3 rgb percentage values + var a = dojo.map(c, function(x){ + return parseFloat(x) * 2.56; + }); + if(l == 4){ a[3] = c[3]; } + return dojo.colorFromArray(a, obj); // dojo.Color + } + return dojo.colorFromArray(c, obj); // dojo.Color + } + if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){ + // normalize hsl values + var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360, + S = parseFloat(c[1]) / 100, + L = parseFloat(c[2]) / 100, + // calculate rgb according to the algorithm + // recommended by the CSS3 Color Module + m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S, + m1 = 2 * L - m2, + a = [hue2rgb(m1, m2, H + 1 / 3) * 256, + hue2rgb(m1, m2, H) * 256, hue2rgb(m1, m2, H - 1 / 3) * 256, 1]; + if(l == 4){ a[3] = c[3]; } + return dojo.colorFromArray(a, obj); // dojo.Color + } + } + return null; // dojo.Color + }; + + var confine = function(c, low, high){ + // summary: + // sanitize a color component by making sure it is a number, + // and clamping it to valid values + c = Number(c); + return isNaN(c) ? high : c < low ? low : c > high ? high : c; // Number + }; + + dojo.Color.prototype.sanitize = function(){ + // summary: makes sure that the object has correct attributes + var t = this; + t.r = Math.round(confine(t.r, 0, 255)); + t.g = Math.round(confine(t.g, 0, 255)); + t.b = Math.round(confine(t.b, 0, 255)); + t.a = confine(t.a, 0, 1); + return this; // dojo.Color + }; +})(); + + +dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){ + // summary: creates a greyscale color with an optional alpha + return dojo.colorFromArray([g, g, g, a]); +}; + + +// mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings +dojo.Color.named = dojo.mixin({ +aliceblue: [240,248,255], +antiquewhite: [250,235,215], +aquamarine: [127,255,212], +azure: [240,255,255], +beige: [245,245,220], +bisque: [255,228,196], +blanchedalmond: [255,235,205], +blueviolet: [138,43,226], +brown: [165,42,42], +burlywood: [222,184,135], +cadetblue: [95,158,160], +chartreuse: [127,255,0], +chocolate: [210,105,30], +coral: [255,127,80], +cornflowerblue: [100,149,237], +cornsilk: [255,248,220], +crimson: [220,20,60], +cyan: [0,255,255], +darkblue: [0,0,139], +darkcyan: [0,139,139], +darkgoldenrod: [184,134,11], +darkgray: [169,169,169], +darkgreen: [0,100,0], +darkgrey: [169,169,169], +darkkhaki: [189,183,107], +darkmagenta: [139,0,139], +darkolivegreen: [85,107,47], +darkorange: [255,140,0], +darkorchid: [153,50,204], +darkred: [139,0,0], +darksalmon: [233,150,122], +darkseagreen: [143,188,143], +darkslateblue: [72,61,139], +darkslategray: [47,79,79], +darkslategrey: [47,79,79], +darkturquoise: [0,206,209], +darkviolet: [148,0,211], +deeppink: [255,20,147], +deepskyblue: [0,191,255], +dimgray: [105,105,105], +dimgrey: [105,105,105], +dodgerblue: [30,144,255], +firebrick: [178,34,34], +floralwhite: [255,250,240], +forestgreen: [34,139,34], +gainsboro: [220,220,220], +ghostwhite: [248,248,255], +gold: [255,215,0], +goldenrod: [218,165,32], +greenyellow: [173,255,47], +grey: [128,128,128], +honeydew: [240,255,240], +hotpink: [255,105,180], +indianred: [205,92,92], +indigo: [75,0,130], +ivory: [255,255,240], +khaki: [240,230,140], +lavender: [230,230,250], +lavenderblush: [255,240,245], +lawngreen: [124,252,0], +lemonchiffon: [255,250,205], +lightblue: [173,216,230], +lightcoral: [240,128,128], +lightcyan: [224,255,255], +lightgoldenrodyellow: [250,250,210], +lightgray: [211,211,211], +lightgreen: [144,238,144], +lightgrey: [211,211,211], +lightpink: [255,182,193], +lightsalmon: [255,160,122], +lightseagreen: [32,178,170], +lightskyblue: [135,206,250], +lightslategray: [119,136,153], +lightslategrey: [119,136,153], +lightsteelblue: [176,196,222], +lightyellow: [255,255,224], +limegreen: [50,205,50], +linen: [250,240,230], +magenta: [255,0,255], +mediumaquamarine: [102,205,170], +mediumblue: [0,0,205], +mediumorchid: [186,85,211], +mediumpurple: [147,112,219], +mediumseagreen: [60,179,113], +mediumslateblue: [123,104,238], +mediumspringgreen: [0,250,154], +mediumturquoise: [72,209,204], +mediumvioletred: [199,21,133], +midnightblue: [25,25,112], +mintcream: [245,255,250], +mistyrose: [255,228,225], +moccasin: [255,228,181], +navajowhite: [255,222,173], +oldlace: [253,245,230], +olivedrab: [107,142,35], +orange: [255,165,0], +orangered: [255,69,0], +orchid: [218,112,214], +palegoldenrod: [238,232,170], +palegreen: [152,251,152], +paleturquoise: [175,238,238], +palevioletred: [219,112,147], +papayawhip: [255,239,213], +peachpuff: [255,218,185], +peru: [205,133,63], +pink: [255,192,203], +plum: [221,160,221], +powderblue: [176,224,230], +rosybrown: [188,143,143], +royalblue: [65,105,225], +saddlebrown: [139,69,19], +salmon: [250,128,114], +sandybrown: [244,164,96], +seagreen: [46,139,87], +seashell: [255,245,238], +sienna: [160,82,45], +skyblue: [135,206,235], +slateblue: [106,90,205], +slategray: [112,128,144], +slategrey: [112,128,144], +snow: [255,250,250], +springgreen: [0,255,127], +steelblue: [70,130,180], +tan: [210,180,140], +thistle: [216,191,216], +tomato: [255,99,71], +transparent: [0, 0, 0, 0], +turquoise: [64,224,208], +violet: [238,130,238], +wheat: [245,222,179], +whitesmoke: [245,245,245], +yellowgreen: [154,205,50] +}, dojo.Color.named); + +} + +if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.i18n"] = true; +dojo.provide("dojo.i18n"); + +dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){ +// summary: +// Returns an Object containing the localization for a given resource bundle +// in a package, matching the specified locale. +// +// description: +// Returns a hash containing name/value pairs in its prototypesuch that values can be easily overridden. +// Throws an exception if the bundle is not found. +// Bundle must have already been loaded by dojo.requireLocalization() or by a build optimization step. +// +// packageName: package which is associated with this resource +// bundleName: the base filename of the resource bundle (without the ".js" suffix) +// locale: the variant to load (optional). By default, the locale defined by the +// host environment: dojo.locale + + locale = dojo.i18n.normalizeLocale(locale); + + // look for nearest locale match + var elements = locale.split('-'); + var module = [packageName,"nls",bundleName].join('.'); + var bundle = dojo._loadedModules[module]; + if(bundle){ + var localization; + for(var i = elements.length; i > 0; i--){ + var loc = elements.slice(0, i).join('_'); + if(bundle[loc]){ + localization = bundle[loc]; + break; + } + } + if(!localization){ + localization = bundle.ROOT; + } + + // make a singleton prototype so that the caller won't accidentally change the values globally + if(localization){ + var clazz = function(){}; + clazz.prototype = localization; + return new clazz(); // Object + } + } + + throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale); +}; + +dojo.i18n.normalizeLocale = function(/*String?*/locale){ + // summary: + // Returns canonical form of locale, as used by Dojo. + // + // description: + // All variants are case-insensitive and are separated by '-' as specified in RFC 3066. + // If no locale is specified, the dojo.locale is returned. dojo.locale is defined by + // the user agent's locale unless overridden by djConfig. + + var result = locale ? locale.toLowerCase() : dojo.locale; + if(result == "root"){ + result = "ROOT"; + } + return result; // String +}; + +dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // See dojo.requireLocalization() + // + // description: + // Called by the bootstrap, but factored out so that it is only included in the build when needed. + + var targetLocale = dojo.i18n.normalizeLocale(locale); + var bundlePackage = [moduleName, "nls", bundleName].join("."); + // NOTE: + // When loading these resources, the packaging does not match what is + // on disk. This is an implementation detail, as this is just a + // private data structure to hold the loaded resources. e.g. + // tests/hello/nls/en-us/salutations.js is loaded as the object + // tests.hello.nls.salutations.en_us={...} The structure on disk is + // intended to be most convenient for developers and translators, but + // in memory it is more logical and efficient to store in a different + // order. Locales cannot use dashes, since the resulting path will + // not evaluate as valid JS, so we translate them to underscores. + + //Find the best-match locale to load if we have available flat locales. + var bestLocale = ""; + if(availableFlatLocales){ + var flatLocales = availableFlatLocales.split(","); + for(var i = 0; i < flatLocales.length; i++){ + //Locale must match from start of string. + if(targetLocale.indexOf(flatLocales[i]) == 0){ + if(flatLocales[i].length > bestLocale.length){ + bestLocale = flatLocales[i]; + } + } + } + if(!bestLocale){ + bestLocale = "ROOT"; + } + } + + //See if the desired locale is already loaded. + var tempLocale = availableFlatLocales ? bestLocale : targetLocale; + var bundle = dojo._loadedModules[bundlePackage]; + var localizedBundle = null; + if(bundle){ + if(djConfig.localizationComplete && bundle._built){return;} + var jsLoc = tempLocale.replace(/-/g, '_'); + var translationPackage = bundlePackage+"."+jsLoc; + localizedBundle = dojo._loadedModules[translationPackage]; + } + + if(!localizedBundle){ + bundle = dojo["provide"](bundlePackage); + var syms = dojo._getModuleSymbols(moduleName); + var modpath = syms.concat("nls").join("/"); + var parent; + + dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){ + var jsLoc = loc.replace(/-/g, '_'); + var translationPackage = bundlePackage + "." + jsLoc; + var loaded = false; + if(!dojo._loadedModules[translationPackage]){ + // Mark loaded whether it's found or not, so that further load attempts will not be made + dojo["provide"](translationPackage); + var module = [modpath]; + if(loc != "ROOT"){module.push(loc);} + module.push(bundleName); + var filespec = module.join("/") + '.js'; + loaded = dojo._loadPath(filespec, null, function(hash){ + // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath + var clazz = function(){}; + clazz.prototype = parent; + bundle[jsLoc] = new clazz(); + for(var j in hash){ bundle[jsLoc][j] = hash[j]; } + }); + }else{ + loaded = true; + } + if(loaded && bundle[jsLoc]){ + parent = bundle[jsLoc]; + }else{ + bundle[jsLoc] = parent; + } + + if(availableFlatLocales){ + //Stop the locale path searching if we know the availableFlatLocales, since + //the first call to this function will load the only bundle that is needed. + return true; + } + }); + } + + //Save the best locale bundle as the target locale bundle when we know the + //the available bundles. + if(availableFlatLocales && targetLocale != bestLocale){ + bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')]; + } +}; + +(function(){ + // If other locales are used, dojo.requireLocalization should load them as + // well, by default. + // + // Override dojo.requireLocalization to do load the default bundle, then + // iterate through the extraLocale list and load those translations as + // well, unless a particular locale was requested. + + var extra = djConfig.extraLocale; + if(extra){ + if(!extra instanceof Array){ + extra = [extra]; + } + + var req = dojo.i18n._requireLocalization; + dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){ + req(m,b,locale, availableFlatLocales); + if(locale){return;} + for(var i=0; i 0; i--){ + searchlist.push(elements.slice(0, i).join('-')); + } + searchlist.push(false); + if(down){searchlist.reverse();} + + for(var j = searchlist.length - 1; j >= 0; j--){ + var loc = searchlist[j] || "ROOT"; + var stop = searchFunc(loc); + if(stop){ break; } + } +}; + +dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){ + // summary: + // Load built, flattened resource bundles, if available for all + // locales used in the page. Only called by built layer files. + + function preload(locale){ + locale = dojo.i18n.normalizeLocale(locale); + dojo.i18n._searchLocalePath(locale, true, function(loc){ + for(var i=0; i\n\t
\n\t\t\n\t
\t\n\n", + + + _paletteDims: { + "7x10": {"width": "185px", "height": "117px"}, + "3x4": {"width": "77px", "height": "53px"} + }, + + + postCreate: function(){ + // A name has to be given to the colorMap, this needs to be unique per Palette. + dojo.mixin(this.divNode.style, this._paletteDims[this.palette]); + this.imageNode.setAttribute("src", this._imagePaths[this.palette]); + var choices = this._palettes[this.palette]; + this.domNode.style.position = "relative"; + this._highlightNodes = []; + this.colorNames = dojo.i18n.getLocalization("dojo", "colors", this.lang); + + for(var row=0; row < choices.length; row++){ + for(var col=0; col < choices[row].length; col++){ + var highlightNode = document.createElement("img"); + highlightNode.src = dojo.moduleUrl("dijit", "templates/blank.gif"); + dojo.addClass(highlightNode, "dijitPaletteImg"); + var color = choices[row][col]; + var colorValue = new dojo.Color(dojo.Color.named[color]); + highlightNode.alt = this.colorNames[color]; + highlightNode.color = colorValue.toHex(); + var highlightStyle = highlightNode.style; + highlightStyle.color = highlightStyle.backgroundColor = highlightNode.color; + dojo.forEach(["Dijitclick", "MouseOut", "MouseOver", "Blur", "Focus"], function(handler){ + this.connect(highlightNode, "on"+handler.toLowerCase(), "_onColor"+handler); + }, this); + this.divNode.appendChild(highlightNode); + var coords = this._paletteCoords; + highlightStyle.top = coords.topOffset + (row * coords.cHeight) + "px"; + highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px"; + highlightNode.setAttribute("tabIndex","-1"); + highlightNode.title = this.colorNames[color]; + dijit.wai.setAttr(highlightNode, "waiRole", "role", "gridcell"); + highlightNode.index = this._highlightNodes.length; + this._highlightNodes.push(highlightNode); + } + } + this._highlightNodes[this._currentFocus].tabIndex = 0; + this._xDim = choices[0].length; + this._yDim = choices.length; + + // Now set all events + // The palette itself is navigated to with the tab key on the keyboard + // Keyboard navigation within the Palette is with the arrow keys + // Spacebar selects the color. + // For the up key the index is changed by negative the x dimension. + + var keyIncrementMap = { + UP_ARROW: -this._xDim, + // The down key the index is increase by the x dimension. + DOWN_ARROW: this._xDim, + // Right and left move the index by 1. + RIGHT_ARROW: 1, + LEFT_ARROW: -1 + }; + for(var key in keyIncrementMap){ + dijit.typematic.addKeyListener(this.domNode, + {keyCode:dojo.keys[key], ctrlKey:false, altKey:false, shiftKey:false}, + this, + function(){ + var increment = keyIncrementMap[key]; + return function(count){ this._navigateByKey(increment, count); }; + }(), + this.timeoutChangeRate, this.defaultTimeout); + } + }, + + focus: function(){ + // summary: + // Focus this ColorPalette. + dijit.focus(this._highlightNodes[this._currentFocus]); + }, + + onChange: function(color){ + // summary: + // Callback when a color is selected. + // color: String + // Hex value corresponding to color. + console.debug("Color selected is: "+color); + }, + + _onColorDijitclick: function(/*Event*/ evt){ + // summary: + // Handler for click, enter key & space key. Selects the color. + // evt: + // The event. + var target = evt.currentTarget; + if (this._currentFocus != target.index){ + this._currentFocus = target.index; + dijit.focus(target); + } + this._selectColor(target); + dojo.stopEvent(evt); + }, + + _onColorMouseOut: function(/*Event*/ evt){ + // summary: + // Handler for onMouseOut. Removes highlight. + // evt: + // The mouse event. + dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight"); + }, + + _onColorMouseOver: function(/*Event*/ evt){ + // summary: + // Handler for onMouseOver. Highlights the color. + // evt: + // The mouse event. + var target = evt.currentTarget; + target.tabIndex = 0; + target.focus(); + }, + + _onColorBlur: function(/*Event*/ evt){ + // summary: + // Handler for onBlur. Removes highlight and sets + // the first color as the palette's tab point. + // evt: + // The blur event. + dojo.removeClass(evt.currentTarget, "dijitPaletteImgHighlight"); + evt.currentTarget.tabIndex = -1; + this._currentFocus = 0; + this._highlightNodes[0].tabIndex = 0; + }, + + _onColorFocus: function(/*Event*/ evt){ + // summary: + // Handler for onFocus. Highlights the color. + // evt: + // The focus event. + if(this._currentFocus != evt.currentTarget.index){ + this._highlightNodes[this._currentFocus].tabIndex = -1; + } + this._currentFocus = evt.currentTarget.index; + dojo.addClass(evt.currentTarget, "dijitPaletteImgHighlight"); + + }, + + _selectColor: function(selectNode){ + // summary: + // This selects a color. It triggers the onChange event + // area: + // The area node that covers the color being selected. + this.value = selectNode.color; + this.onChange(selectNode.color); + }, + + _navigateByKey: function(increment, typeCount){ + // summary:we + // This is the callback for typematic. + // It changes the focus and the highlighed color. + // increment: + // How much the key is navigated. + // typeCount: + // How many times typematic has fired. + + // typecount == -1 means the key is released. + if(typeCount == -1){ return; } + + var newFocusIndex = this._currentFocus + increment; + if(newFocusIndex < this._highlightNodes.length && newFocusIndex > -1) + { + var focusNode = this._highlightNodes[newFocusIndex]; + focusNode.tabIndex = 0; + focusNode.focus(); + } + } +}); + +} + +if(!dojo._hasResource["dijit.Declaration"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.Declaration"] = true; +dojo.provide("dijit.Declaration"); + + + +dojo.declare( + "dijit.Declaration", + dijit._Widget, + { + // summary: + // The Declaration widget allows a user to declare new widget + // classes directly from a snippet of markup. + + _noScript: true, + widgetClass: "", + replaceVars: true, + defaults: null, + mixins: [], + buildRendering: function(){ + var src = this.srcNodeRef.parentNode.removeChild(this.srcNodeRef); + var preambles = dojo.query("> script[type='dojo/method'][event='preamble']", src).orphan(); + var scripts = dojo.query("> script[type^='dojo/']", src).orphan(); + var srcType = src.nodeName; + + var propList = this.defaults||{}; + + this.mixins = this.mixins.length ? + dojo.map(this.mixins, dojo.getObject) : + [ dijit._Widget, dijit._Templated ]; + + if(preambles.length){ + // we only support one preamble. So be it. + propList.preamble = dojo.parser._functionFromScript(preambles[0]); + } + propList.widgetsInTemplate = true; + propList.templateString = "<"+srcType+" class='"+src.className+"'>"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+""; + + // strip things so we don't create stuff under us in the initial setup phase + dojo.query("[dojoType]", src).forEach(function(node){ + node.removeAttribute("dojoType"); + }); + scripts.forEach(function(s){ + if(!s.getAttribute("event")){ + this.mixins.push(dojo.parser._functionFromScript(s)); + } + }, this); + + // create the new widget class + dojo.declare( + this.widgetClass, + this.mixins, + propList + ); + + var wcp = dojo.getObject(this.widgetClass).prototype; + scripts.forEach(function(s){ + if(s.getAttribute("event")){ + dojo.parser._wireUpMethod(wcp, s); + } + }); + } + } +); + +} + +if(!dojo._hasResource["dojo.dnd.common"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.dnd.common"] = true; +dojo.provide("dojo.dnd.common"); + +dojo.dnd._copyKey = navigator.appVersion.indexOf("Macintosh") < 0 ? "ctrlKey" : "metaKey"; + +dojo.dnd.getCopyKeyState = function(e) { + // summary: abstracts away the difference between selection on Mac and PC, + // and returns the state of the "copy" key to be pressed. + // e: Event: mouse event + return e[dojo.dnd._copyKey]; // Boolean +}; + +dojo.dnd._uniqueId = 0; +dojo.dnd.getUniqueId = function(){ + // summary: returns a unique string for use with any DOM element + var id; + do{ + id = "dojoUnique" + (++dojo.dnd._uniqueId); + }while(dojo.byId(id)); + return id; +}; + +dojo.dnd._empty = {}; + +dojo.dnd.isFormElement = function(/*Event*/ e){ + // summary: returns true, if user clicked on a form element + var t = e.target; + if(t.nodeType == 3 /*TEXT_NODE*/){ + t = t.parentNode; + } + return " button textarea input select option ".indexOf(" " + t.tagName.toLowerCase() + " ") >= 0; // Boolean +}; + +} + +if(!dojo._hasResource["dojo.dnd.autoscroll"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.dnd.autoscroll"] = true; +dojo.provide("dojo.dnd.autoscroll"); + +dojo.dnd.getViewport = function(){ + // summary: returns a viewport size (visible part of the window) + var d = dojo.doc, dd = d.documentElement, w = window, b = dojo.body(); + if(dojo.isMozilla){ + return {w: dd.clientWidth, h: w.innerHeight}; // Object + }else if(!dojo.isOpera && w.innerWidth){ + return {w: w.innerWidth, h: w.innerHeight}; // Object + }else if (!dojo.isOpera && dd && dd.clientWidth){ + return {w: dd.clientWidth, h: dd.clientHeight}; // Object + }else if (b.clientWidth){ + return {w: b.clientWidth, h: b.clientHeight}; // Object + } + return null; // Object +}; + +dojo.dnd.V_TRIGGER_AUTOSCROLL = 32; +dojo.dnd.H_TRIGGER_AUTOSCROLL = 32; + +dojo.dnd.V_AUTOSCROLL_VALUE = 16; +dojo.dnd.H_AUTOSCROLL_VALUE = 16; + +dojo.dnd.autoScroll = function(e){ + // summary: a handler for onmousemove event, which scrolls the window, if necesary + // e: Event: onmousemove event + var v = dojo.dnd.getViewport(), dx = 0, dy = 0; + if(e.clientX < dojo.dnd.H_TRIGGER_AUTOSCROLL){ + dx = -dojo.dnd.H_AUTOSCROLL_VALUE; + }else if(e.clientX > v.w - dojo.dnd.H_TRIGGER_AUTOSCROLL){ + dx = dojo.dnd.H_AUTOSCROLL_VALUE; + } + if(e.clientY < dojo.dnd.V_TRIGGER_AUTOSCROLL){ + dy = -dojo.dnd.V_AUTOSCROLL_VALUE; + }else if(e.clientY > v.h - dojo.dnd.V_TRIGGER_AUTOSCROLL){ + dy = dojo.dnd.V_AUTOSCROLL_VALUE; + } + window.scrollBy(dx, dy); +}; + +dojo.dnd._validNodes = {"div": 1, "p": 1, "td": 1}; +dojo.dnd._validOverflow = {"auto": 1, "scroll": 1}; + +dojo.dnd.autoScrollNodes = function(e){ + // summary: a handler for onmousemove event, which scrolls the first avaialble Dom element, + // it falls back to dojo.dnd.autoScroll() + // e: Event: onmousemove event + for(var n = e.target; n;){ + if(n.nodeType == 1 && (n.tagName.toLowerCase() in dojo.dnd._validNodes)){ + var s = dojo.getComputedStyle(n); + if(s.overflow.toLowerCase() in dojo.dnd._validOverflow){ + var b = dojo._getContentBox(n, s), t = dojo._abs(n, true); + console.debug(b.l, b.t, t.x, t.y, n.scrollLeft, n.scrollTop); + b.l += t.x + n.scrollLeft; + b.t += t.y + n.scrollTop; + var w = Math.min(dojo.dnd.H_TRIGGER_AUTOSCROLL, b.w / 2), + h = Math.min(dojo.dnd.V_TRIGGER_AUTOSCROLL, b.h / 2), + rx = e.pageX - b.l, ry = e.pageY - b.t, dx = 0, dy = 0; + if(rx > 0 && rx < b.w){ + if(rx < w){ + dx = -dojo.dnd.H_AUTOSCROLL_VALUE; + }else if(rx > b.w - w){ + dx = dojo.dnd.H_AUTOSCROLL_VALUE; + } + } + //console.debug("ry =", ry, "b.h =", b.h, "h =", h); + if(ry > 0 && ry < b.h){ + if(ry < h){ + dy = -dojo.dnd.V_AUTOSCROLL_VALUE; + }else if(ry > b.h - h){ + dy = dojo.dnd.V_AUTOSCROLL_VALUE; + } + } + var oldLeft = n.scrollLeft, oldTop = n.scrollTop; + n.scrollLeft = n.scrollLeft + dx; + n.scrollTop = n.scrollTop + dy; + if(dx || dy) console.debug(oldLeft + ", " + oldTop + "\n" + dx + ", " + dy + "\n" + n.scrollLeft + ", " + n.scrollTop); + if(oldLeft != n.scrollLeft || oldTop != n.scrollTop){ return; } + } + } + try{ + n = n.parentNode; + }catch(x){ + n = null; + } + } + dojo.dnd.autoScroll(e); +}; + +} + +if(!dojo._hasResource["dojo.dnd.move"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.dnd.move"] = true; +dojo.provide("dojo.dnd.move"); + + + + +dojo.dnd.Mover = function(node, e){ + // summary: an object, which makes a node follow the mouse, + // used as a default mover, and as a base class for custom movers + // node: Node: a node (or node's id) to be moved + // e: Event: a mouse event, which started the move; + // only pageX and pageY properties are used + this.node = dojo.byId(node); + this.marginBox = {l: e.pageX, t: e.pageY}; + var d = node.ownerDocument, firstEvent = dojo.connect(d, "onmousemove", this, "onFirstMove"); + this.events = [ + dojo.connect(d, "onmousemove", this, "onMouseMove"), + dojo.connect(d, "onmouseup", this, "destroy"), + // cancel text selection and text dragging + dojo.connect(d, "ondragstart", dojo, "stopEvent"), + dojo.connect(d, "onselectstart", dojo, "stopEvent"), + firstEvent + ]; + // set globals to indicate that move has started + dojo.publish("/dnd/move/start", [this.node]); + dojo.addClass(dojo.body(), "dojoMove"); + dojo.addClass(this.node, "dojoMoveItem"); +}; + +dojo.extend(dojo.dnd.Mover, { + // mouse event processors + onMouseMove: function(e){ + // summary: event processor for onmousemove + // e: Event: mouse event + dojo.dnd.autoScroll(e); + var m = this.marginBox; + dojo.marginBox(this.node, {l: m.l + e.pageX, t: m.t + e.pageY}); + }, + // utilities + onFirstMove: function(){ + // summary: makes the node absolute; it is meant to be called only once + this.node.style.position = "absolute"; // enforcing the absolute mode + var m = dojo.marginBox(this.node); + m.l -= this.marginBox.l; + m.t -= this.marginBox.t; + this.marginBox = m; + dojo.disconnect(this.events.pop()); + }, + destroy: function(){ + // summary: stops the move, deletes all references, so the object can be garbage-collected + dojo.forEach(this.events, dojo.disconnect); + // undo global settings + dojo.publish("/dnd/move/stop", [this.node]); + dojo.removeClass(dojo.body(), "dojoMove"); + dojo.removeClass(this.node, "dojoMoveItem"); + // destroy objects + this.events = this.node = null; + } +}); + +dojo.dnd.Moveable = function(node, params){ + // summary: an object, which makes a node moveable + // node: Node: a node (or node's id) to be moved + // params: Object: an optional object with additional parameters; + // following parameters are recognized: + // handle: Node: a node (or node's id), which is used as a mouse handle + // if omitted, the node itself is used as a handle + // delay: Number: delay move by this number of pixels + // skip: Boolean: skip move of form elements + // mover: Object: a constructor of custom Mover + this.node = dojo.byId(node); + this.handle = (params && params.handle) ? dojo.byId(params.handle) : null; + if(!this.handle){ this.handle = this.node; } + this.delay = (params && params.delay > 0) ? params.delay : 0; + this.skip = params && params.skip; + this.mover = (params && params.mover) ? params.mover : dojo.dnd.Mover; + this.events = [ + dojo.connect(this.handle, "onmousedown", this, "onMouseDown"), + // cancel text selection and text dragging + dojo.connect(this.handle, "ondragstart", dojo, "stopEvent"), + dojo.connect(this.handle, "onselectstart", dojo, "stopEvent") + ]; +}; + +dojo.extend(dojo.dnd.Moveable, { + // object attributes (for markup) + handle: "", + delay: 0, + skip: false, + + // markup methods + markupFactory: function(params, node){ + return new dojo.dnd.Moveable(node, params); + }, + + // methods + destroy: function(){ + // summary: stops watching for possible move, deletes all references, so the object can be garbage-collected + dojo.forEach(this.events, dojo.disconnect); + this.events = this.node = this.handle = null; + }, + + // mouse event processors + onMouseDown: function(e){ + // summary: event processor for onmousedown, creates a Mover for the node + // e: Event: mouse event + if(this.skip && dojo.dnd.isFormElement(e)){ return; } + if(this.delay){ + this.events.push(dojo.connect(this.handle, "onmousemove", this, "onMouseMove")); + this.events.push(dojo.connect(this.handle, "onmouseup", this, "onMouseUp")); + this._lastX = e.pageX; + this._lastY = e.pageY; + }else{ + new this.mover(this.node, e); + } + dojo.stopEvent(e); + }, + onMouseMove: function(e){ + // summary: event processor for onmousemove, used only for delayed drags + // e: Event: mouse event + if(Math.abs(e.pageX - this._lastX) > this.delay || Math.abs(e.pageY - this._lastY) > this.delay){ + this.onMouseUp(e); + new this.mover(this.node, e); + } + dojo.stopEvent(e); + }, + onMouseUp: function(e){ + // summary: event processor for onmouseup, used only for delayed delayed drags + // e: Event: mouse event + dojo.disconnect(this.events.pop()); + dojo.disconnect(this.events.pop()); + } +}); + +dojo.dnd.constrainedMover = function(fun, within){ + // summary: returns a constrained version of dojo.dnd.Mover + // description: this function produces n object, which will put a constraint on + // the margin box of dragged object in absolute coordinates + // fun: Function: called on drag, and returns a constraint box + // within: Boolean: if true, constraints the whole dragged object withtin the rectangle, + // otherwise the constraint is applied to the left-top corner + var mover = function(node, e){ + dojo.dnd.Mover.call(this, node, e); + }; + dojo.extend(mover, dojo.dnd.Mover.prototype); + dojo.extend(mover, { + onMouseMove: function(e){ + // summary: event processor for onmousemove + // e: Event: mouse event + var m = this.marginBox, c = this.constraintBox, + l = m.l + e.pageX, t = m.t + e.pageY; + l = l < c.l ? c.l : c.r < l ? c.r : l; + t = t < c.t ? c.t : c.b < t ? c.b : t; + dojo.marginBox(this.node, {l: l, t: t}); + }, + onFirstMove: function(){ + // summary: called once to initialize things; it is meant to be called only once + dojo.dnd.Mover.prototype.onFirstMove.call(this); + var c = this.constraintBox = fun.call(this), m = this.marginBox; + c.r = c.l + c.w - (within ? m.w : 0); + c.b = c.t + c.h - (within ? m.h : 0); + } + }); + return mover; // Object +}; + +dojo.dnd.boxConstrainedMover = function(box, within){ + // summary: a specialization of dojo.dnd.constrainedMover, which constrains to the specified box + // box: Object: a constraint box (l, t, w, h) + // within: Boolean: if true, constraints the whole dragged object withtin the rectangle, + // otherwise the constraint is applied to the left-top corner + return dojo.dnd.constrainedMover(function(){ return box; }, within); // Object +}; + +dojo.dnd.parentConstrainedMover = function(area, within){ + // summary: a specialization of dojo.dnd.constrainedMover, which constrains to the parent node + // area: String: "margin" to constrain within the parent's margin box, "border" for the border box, + // "padding" for the padding box, and "content" for the content box; "content" is the default value. + // within: Boolean: if true, constraints the whole dragged object withtin the rectangle, + // otherwise the constraint is applied to the left-top corner + var fun = function(){ + var n = this.node.parentNode, + s = dojo.getComputedStyle(n), + mb = dojo._getMarginBox(n, s); + if(area == "margin"){ + return mb; // Object + } + var t = dojo._getMarginExtents(n, s); + mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; + if(area == "border"){ + return mb; // Object + } + t = dojo._getBorderExtents(n, s); + mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; + if(area == "padding"){ + return mb; // Object + } + t = dojo._getPadExtents(n, s); + mb.l += t.l, mb.t += t.t, mb.w -= t.w, mb.h -= t.h; + return mb; // Object + }; + return dojo.dnd.constrainedMover(fun, within); // Object +}; + +} + +if(!dojo._hasResource["dojo.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.fx"] = true; +dojo.provide("dojo.fx"); +dojo.provide("dojo.fx.Toggler"); + +dojo.fx.chain = function(/*dojo._Animation[]*/ animations){ + // summary: Chain a list of _Animations to run in sequence + var first = animations.shift(); + var previous = first; + dojo.forEach(animations, function(current){ + dojo.connect(previous, "onEnd", current, "play"); + previous = current; + }); + return first; // dojo._Animation +}; + +dojo.fx.combine = function(/*dojo._Animation[]*/ animations){ + // summary: Combine a list of _Animations to run in parallel + + var first = animations.shift(); + dojo.forEach(animations, function(current){ + dojo.forEach([ + +//FIXME: onEnd gets fired multiple times for each animation, not once for the combined animation +// should we return to a "container" with its own unique events? + + "play", "pause", "stop" + ], function(event){ + if(current[event]){ + dojo.connect(first, event, current, event); + } + }, this); + }); + return first; // dojo._Animation +}; + +dojo.declare("dojo.fx.Toggler", null, { + constructor: function(args){ + // summary: + // class constructor for an animation toggler. It accepts a packed + // set of arguments about what type of animation to use in each + // direction, duration, etc. + // example: + // var t = new dojo.fx.Toggler({ + // node: "nodeId", + // showDuration: 500, + // // hideDuration will default to "200" + // showFunc: dojo.wipeIn, + // // hideFunc will default to "fadeOut" + // }); + // t.show(100); // delay showing for 100ms + // // ...time passes... + // t.hide(); + + // FIXME: need a policy for where the toggler should "be" the next + // time show/hide are called if we're stopped somewhere in the + // middle. + + var _t = this; + + dojo.mixin(_t, args); + _t.node = args.node; + _t._showArgs = dojo.mixin({}, args); + _t._showArgs.node = _t.node; + _t._showArgs.duration = _t.showDuration; + _t.showAnim = _t.showFunc(_t._showArgs); + + _t._hideArgs = dojo.mixin({}, args); + _t._hideArgs.node = _t.node; + _t._hideArgs.duration = _t.hideDuration; + _t.hideAnim = _t.hideFunc(_t._hideArgs); + + dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true)); + dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true)); + }, + + node: null, + showFunc: dojo.fadeIn, + hideFunc: dojo.fadeOut, + + showDuration: 200, + hideDuration: 200, + + _showArgs: null, + _showAnim: null, + + _hideArgs: null, + _hideAnim: null, + + _isShowing: false, + _isHiding: false, + + show: function(delay){ + delay = delay||0; + return this.showAnim.play(delay); + }, + + hide: function(delay){ + delay = delay||0; + return this.hideAnim.play(delay); + } +}); + +dojo.fx.wipeIn = function(/*Object*/ args){ + // summary + // Returns an animation that will expand the + // node defined in 'args' object from it's current height to + // it's natural height (with no scrollbar). + // Node must have no margin/border/padding. + args.node = dojo.byId(args.node); + var node = args.node, s = node.style; + + var anim = dojo.animateProperty(dojo.mixin({ + properties: { + height: { + // wrapped in functions so we wait till the last second to query (in case value has changed) + start: function(){ + // start at current [computed] height, but use 1px rather than 0 + // because 0 causes IE to display the whole panel + s.overflow="hidden"; + if(s.visibility=="hidden"||s.display=="none"){ + s.height="1px"; + s.display=""; + s.visibility=""; + return 1; + }else{ + var height = dojo.style(node, "height"); + return Math.max(height, 1); + } + }, + end: function(){ + return node.scrollHeight; + } + } + } + }, args)); + + dojo.connect(anim, "onEnd", anim, function(){ + s.height = "auto"; + }); + + return anim; // dojo._Animation +} + +dojo.fx.wipeOut = function(/*Object*/ args){ + // summary + // Returns an animation that will shrink node defined in "args" + // from it's current height to 1px, and then hide it. + var node = (args.node = dojo.byId(args.node)); + + var anim = dojo.animateProperty(dojo.mixin({ + properties: { + height: { + end: 1 // 0 causes IE to display the whole panel + } + } + }, args)); + + dojo.connect(anim, "beforeBegin", anim, function(){ + var s=node.style; + s.overflow = "hidden"; + s.display = ""; + }); + dojo.connect(anim, "onEnd", anim, function(){ + var s=this.node.style; + s.height = "auto"; + s.display = "none"; + }); + + return anim; // dojo._Animation +} + +dojo.fx.slideTo = function(/*Object?*/ args){ + // summary + // Returns an animation that will slide "node" + // defined in args Object from its current position to + // the position defined by (args.left, args.top). + + var node = args.node = dojo.byId(args.node); + var compute = dojo.getComputedStyle; + + var top = null; + var left = null; + + var init = (function(){ + var innerNode = node; + return function(){ + var pos = compute(innerNode).position; + top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node).top) || 0); + left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node).left) || 0); + + if(pos != 'absolute' && pos != 'relative'){ + var ret = dojo.coords(innerNode, true); + top = ret.y; + left = ret.x; + innerNode.style.position="absolute"; + innerNode.style.top=top+"px"; + innerNode.style.left=left+"px"; + } + } + })(); + init(); + + var anim = dojo.animateProperty(dojo.mixin({ + properties: { + top: { start: top, end: args.top||0 }, + left: { start: left, end: args.left||0 } + } + }, args)); + dojo.connect(anim, "beforeBegin", anim, init); + + return anim; // dojo._Animation +} + +} + +if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.ContentPane"] = true; +dojo.provide("dijit.layout.ContentPane"); + + + + + + +dojo.declare( + "dijit.layout.ContentPane", + dijit._Widget, +{ + // summary: + // A widget that acts as a Container for other widgets, and includes a ajax interface + // description: + // A widget that can be used as a standalone widget + // or as a baseclass for other widgets + // Handles replacement of document fragment using either external uri or javascript + // generated markup or DOM content, instantiating widgets within that content. + // Don't confuse it with an iframe, it only needs/wants document fragments. + // It's useful as a child of LayoutContainer, SplitContainer, or TabContainer. + // But note that those classes can contain any widget as a child. + // usage: + // Some quick samples: + // To change the innerHTML use .setContent('new content') + // + // Or you can send it a NodeList, .setContent(dojo.query('div [class=selected]', userSelection)) + // please note that the nodes in NodeList will copied, not moved + // + // To do a ajax update use .setHref('url') + + // href: String + // The href of the content that displays now. + // Set this at construction if you want to load data externally when the + // pane is shown. (Set preload=true to load it immediately.) + // Changing href after creation doesn't have any effect; see setHref(); + href: "", + + // extractContent: Boolean + // Extract visible content from inside of .... + extractContent: false, + + // parseOnLoad: Boolean + // parse content and create the widgets, if any + parseOnLoad: true, + + // preventCache: Boolean + // Cache content retreived externally + preventCache: false, + + // preload: Boolean + // Force load of data even if pane is hidden. + preload: false, + + // refreshOnShow: Boolean + // Refresh (re-download) content when pane goes from hidden to shown + refreshOnShow: false, + + // loadingMessage: String + // Message that shows while downloading + loadingMessage: "${loadingState}", // TODO: consider a graphical representation for this state which does not require localization + + // errorMessage: String + // Message that shows if an error occurs + errorMessage: "${errorState}", // TODO: consider a graphical representation for this state which does not require localization + + // isLoaded: Boolean + // Tells loading status see onLoad|onUnload for event hooks + isLoaded: false, + + // class: String + // Class name to apply to ContentPane dom nodes + "class": "dijitContentPane", + + postCreate: function(){ + // remove the title attribute so it doesn't show up when i hover + // over a node + this.domNode.title = ""; + + if(this.preload){ + this._loadCheck(); + } + + var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang); + this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages); + this.errorMessage = dojo.string.substitute(this.errorMessage, messages); + + // for programatically created ContentPane (with tag), need to muck w/CSS + // or it's as though overflow:visible is set + dojo.addClass(this.domNode, this["class"]); + }, + + startup: function(){ + if(!this._started){ + this._loadCheck(); + this._started = true; + } + }, + + refresh: function(){ + // summary: + // Force a refresh (re-download) of content, be sure to turn off cache + + // we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane + return this._prepareLoad(true); + }, + + setHref: function(/*String|Uri*/ href){ + // summary: + // Reset the (external defined) content of this pane and replace with new url + // Note: It delays the download until widget is shown if preload is false + // href: + // url to the page you want to get, must be within the same domain as your mainpage + this.href = href; + + // we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane + return this._prepareLoad(); + }, + + setContent: function(/*String|DomNode|Nodelist*/data){ + // summary: + // Replaces old content with data content, include style classes from old content + // data: + // the new Content may be String, DomNode or NodeList + // + // if data is a NodeList (or an array of nodes) nodes are copied + // so you can import nodes from another document implicitly + + // clear href so we cant run refresh and clear content + // refresh should only work if we downloaded the content + if(!this._isDownloaded){ + this.href = ""; + this._onUnloadHandler(); + } + + this._setContent(data || ""); + + this._isDownloaded = false; // must be set after _setContent(..), pathadjust in dojox.layout.ContentPane + + if(this.parseOnLoad){ + this._createSubWidgets(); + } + + this._onLoadHandler(); + }, + + cancel: function(){ + // summary + // Cancels a inflight download of content + if(this._xhrDfd && (this._xhrDfd.fired == -1)){ + this._xhrDfd.cancel(); + } + + delete this._xhrDfd; // garbage collect + }, + + destroy: function(){ + // if we have multiple controllers destroying us, bail after the first + if(this._beingDestroyed){ + return; + } + // make sure we call onUnload + this._onUnloadHandler(); + this._beingDestroyed = true; + dijit.layout.ContentPane.superclass.destroy.call(this); + }, + + resize: function(size){ + dojo.marginBox(this.domNode, size); + }, + + _prepareLoad: function(forceLoad){ + // sets up for a xhrLoad, load is deferred until widget onShow + // cancels a inflight download + this.cancel(); + this.isLoaded = false; + this._loadCheck(forceLoad); + }, + + _loadCheck: function(forceLoad){ + // call this when you change onShow (onSelected) status when selected in parent container + // it's used as a trigger for href download when this.domNode.display != 'none' + + // sequence: + // if no href -> bail + // forceLoad -> always load + // this.preload -> load when download not in progress, domNode display doesn't matter + // this.refreshOnShow -> load when download in progress bails, domNode display !='none' AND + // this.open !== false (undefined is ok), isLoaded doesn't matter + // else -> load when download not in progress, if this.open !== false (undefined is ok) AND + // domNode display != 'none', isLoaded must be false + + var displayState = ((this.open !== false) && (this.domNode.style.display != 'none')); + + if(this.href && + (forceLoad || + (this.preload && !this._xhrDfd) || + (this.refreshOnShow && displayState && !this._xhrDfd) || + (!this.isLoaded && displayState && !this._xhrDfd) + ) + ){ + this._downloadExternalContent(); + } + }, + + _downloadExternalContent: function(){ + this._onUnloadHandler(); + + // display loading message + // TODO: maybe we should just set a css class with a loading image as background? + this._setContent( + this.onDownloadStart.call(this) + ); + + var self = this; + var getArgs = { + preventCache: (this.preventCache || this.refreshOnShow), + url: this.href, + handleAs: "text" + }; + if(dojo.isObject(this.ioArgs)){ + dojo.mixin(getArgs, this.ioArgs); + } + + var hand = this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs); + + hand.addCallback(function(html){ + try{ + self.onDownloadEnd.call(self); + self._isDownloaded = true; + self.setContent.call(self, html); // onload event is called from here + }catch(err){ + self._onError.call(self, 'Content', err); // onContentError + } + delete self._xhrDfd; + return html; + }); + + hand.addErrback(function(err){ + if(!hand.cancelled){ + // show error message in the pane + self._onError.call(self, 'Download', err); // onDownloadError + } + delete self._xhrDfd; + return err; + }); + }, + + _onLoadHandler: function(){ + this.isLoaded = true; + try{ + this.onLoad.call(this); + }catch(e){ + console.error('Error '+this.widgetId+' running custom onLoad code'); + } + }, + + _onUnloadHandler: function(){ + this.isLoaded = false; + this.cancel(); + try{ + this.onUnload.call(this); + }catch(e){ + console.error('Error '+this.widgetId+' running custom onUnload code'); + } + }, + + _setContent: function(cont){ + this.destroyDescendants(); + + try{ + var node = this.containerNode || this.domNode; + while(node.firstChild){ + dojo._destroyElement(node.firstChild); + } + if(typeof cont == "string"){ + // dijit.ContentPane does only minimal fixes, + // No pathAdjustments, script retrieval, style clean etc + // some of these should be available in the dojox.layout.ContentPane + if(this.extractContent){ + match = cont.match(/]*>\s*([\s\S]+)\s*<\/body>/im); + if(match){ cont = match[1]; } + } + node.innerHTML = cont; + }else{ + // domNode or NodeList + if(cont.nodeType){ // domNode (htmlNode 1 or textNode 3) + node.appendChild(cont); + }else{// nodelist or array such as dojo.Nodelist + dojo.forEach(cont, function(n){ + node.appendChild(n.cloneNode(true)); + }); + } + } + }catch(e){ + // check if a domfault occurs when we are appending this.errorMessage + // like for instance if domNode is a UL and we try append a DIV + var errMess = this.onContentError(e); + try{ + node.innerHTML = errMess; + }catch(e){ + console.error('Fatal '+this.id+' could not change content due to '+e.message, e); + } + } + }, + + _onError: function(type, err, consoleText){ + // shows user the string that is returned by on[type]Error + // overide on[type]Error and return your own string to customize + var errText = this['on' + type + 'Error'].call(this, err); + if(consoleText){ + console.error(consoleText, err); + }else if(errText){// a empty string won't change current content + this._setContent.call(this, errText); + } + }, + + _createSubWidgets: function(){ + // summary: scan my contents and create subwidgets + var rootNode = this.containerNode || this.domNode; + try{ + dojo.parser.parse(rootNode, true); + }catch(e){ + this._onError('Content', e, "Couldn't create widgets in "+this.id + +(this.href ? " from "+this.href : "")); + } + }, + + // EVENT's, should be overide-able + onLoad: function(e){ + // summary: + // Event hook, is called after everything is loaded and widgetified + }, + + onUnload: function(e){ + // summary: + // Event hook, is called before old content is cleared + }, + + onDownloadStart: function(){ + // summary: + // called before download starts + // the string returned by this function will be the html + // that tells the user we are loading something + // override with your own function if you want to change text + return this.loadingMessage; + }, + + onContentError: function(/*Error*/ error){ + // summary: + // called on DOM faults, require fault etc in content + // default is to display errormessage inside pane + }, + + onDownloadError: function(/*Error*/ error){ + // summary: + // Called when download error occurs, default is to display + // errormessage inside pane. Overide function to change that. + // The string returned by this function will be the html + // that tells the user a error happend + return this.errorMessage; + }, + + onDownloadEnd: function(){ + // summary: + // called when download is finished + } +}); + +} + +if(!dojo._hasResource["dijit.form.Form"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.form.Form"] = true; +dojo.provide("dijit.form.Form"); + + + + +dojo.declare("dijit.form._FormMixin", null, + { + /* + summary: + Widget corresponding to
tag, for validation and serialization + + usage: + + Name: +
+ myObj={name: "John Doe"}; + dijit.byId('myForm').setValues(myObj); + + myObj=dijit.byId('myForm').getValues(); + TODO: + * Repeater + * better handling for arrays. Often form elements have names with [] like + * people[3].sex (for a list of people [{name: Bill, sex: M}, ...]) + + */ + + // execute: Function + // User defined function to do stuff when the user hits the submit button + execute: function(/*Object*/ formContents){}, + + // onCancel: Function + // Callback when user has canceled dialog, to notify container + // (user shouldn't override) + onCancel: function(){}, + + // onExecute: Function + // Callback when user is about to execute dialog, to notify container + // (user shouldn't override) + onExecute: function(){}, + + templateString: "
", + + _onSubmit: function(/*event*/e) { + // summary: callback when user hits submit button + dojo.stopEvent(e); + this.onExecute(); // notify container that we are about to execute + this.execute(this.getValues()); + }, + + submit: function() { + // summary: programatically submit form + this.containerNode.submit(); + }, + + setValues: function(/*object*/obj) { + // summary: fill in form values from a JSON structure + + // generate map from name --> [list of widgets with that name] + var map = {}; + dojo.forEach(this.getDescendants(), function(widget){ + if(!widget.name){ return; } + var entry = map[widget.name] || (map[widget.name] = [] ); + entry.push(widget); + }); + + // call setValue() or setChecked() for each widget, according to obj + for(var name in map){ + var widgets = map[name], // array of widgets w/this name + values = dojo.getObject(name, false, obj); // list of values for those widgets + if(!dojo.isArray(values)){ + values = [ values ]; + } + if(widgets[0].setChecked){ + // for checkbox/radio, values is a list of which widgets should be checked + dojo.forEach(widgets, function(w, i){ + w.setChecked(dojo.indexOf(values, w.value) != -1); + }); + }else{ + // otherwise, values is a list of values to be assigned sequentially to each widget + dojo.forEach(widgets, function(w, i){ + w.setValue(values[i]); + }); + } + } + + /*** + * TODO: code for plain input boxes (this shouldn't run for inputs that are part of widgets + + dojo.forEach(this.containerNode.elements, function(element){ + if (element.name == ''){return}; // like "continue" + var namePath = element.name.split("."); + var myObj=obj; + var name=namePath[namePath.length-1]; + for(var j=1,len2=namePath.length;j 1) { + if(typeof(myObj[nameA[0]]) == "undefined") { + myObj[nameA[0]]=[ ]; + } // if + + nameIndex=parseInt(nameA[1]); + if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") { + myObj[nameA[0]][nameIndex]={}; + } + myObj=myObj[nameA[0]][nameIndex]; + continue; + } // repeater support ends + + if(typeof(myObj[p]) == "undefined") { + myObj=undefined; + break; + }; + myObj=myObj[p]; + } + + if (typeof(myObj) == "undefined") { + return; // like "continue" + } + if (typeof(myObj[name]) == "undefined" && this.ignoreNullValues) { + return; // like "continue" + } + + // TODO: widget values (just call setValue() on the widget) + + switch(element.type) { + case "checkbox": + element.checked = (name in myObj) && + dojo.some(myObj[name], function(val){ return val==element.value; }); + break; + case "radio": + element.checked = (name in myObj) && myObj[name]==element.value; + break; + case "select-multiple": + element.selectedIndex=-1; + dojo.forEach(element.options, function(option){ + option.selected = dojo.some(myObj[name], function(val){ return option.value == val; }); + }); + break; + case "select-one": + element.selectedIndex="0"; + dojo.forEach(element.options, function(option){ + option.selected = option.value == myObj[name]; + }); + break; + case "hidden": + case "text": + case "textarea": + case "password": + element.value = myObj[name] || ""; + break; + } + }); + */ + }, + + getValues: function() { + // summary: generate JSON structure from form values + + // get widget values + var obj = {}; + dojo.forEach(this.getDescendants(), function(widget){ + var value = widget.getValue ? widget.getValue() : widget.value; + var name = widget.name; + if(!name){ return; } + + // Store widget's value(s) as a scalar, except for checkboxes which are automatically arrays + if(widget.setChecked){ + if(/Radio/.test(widget.declaredClass)){ + // radio button + if(widget.checked){ + dojo.setObject(name, value, obj); + } + }else{ + // checkbox/toggle button + var ary=dojo.getObject(name, false, obj); + if(!ary){ + ary=[]; + dojo.setObject(name, ary, obj); + } + if(widget.checked){ + ary.push(value); + } + } + }else{ + // plain input + dojo.setObject(name, value, obj); + } + }); + + /*** + * code for plain input boxes (see also dojo.formToObject, can we use that instead of this code? + * but it doesn't understand [] notation, presumably) + var obj = { }; + dojo.forEach(this.containerNode.elements, function(elm){ + if (!elm.name) { + return; // like "continue" + } + var namePath = elm.name.split("."); + var myObj=obj; + var name=namePath[namePath.length-1]; + for(var j=1,len2=namePath.length;j 1) { + if(typeof(myObj[nameA[0]]) == "undefined") { + myObj[nameA[0]]=[ ]; + } // if + nameIndex=parseInt(nameA[1]); + if(typeof(myObj[nameA[0]][nameIndex]) == "undefined") { + myObj[nameA[0]][nameIndex]={}; + } + } else if(typeof(myObj[nameA[0]]) == "undefined") { + myObj[nameA[0]]={} + } // if + + if (nameA.length == 1) { + myObj=myObj[nameA[0]]; + } else { + myObj=myObj[nameA[0]][nameIndex]; + } // if + } // for + + if ((elm.type != "select-multiple" && elm.type != "checkbox" && elm.type != "radio") || (elm.type=="radio" && elm.checked)) { + if(name == name.split("[")[0]) { + myObj[name]=elm.value; + } else { + // can not set value when there is no name + } + } else if (elm.type == "checkbox" && elm.checked) { + if(typeof(myObj[name]) == 'undefined') { + myObj[name]=[ ]; + } + myObj[name].push(elm.value); + } else if (elm.type == "select-multiple") { + if(typeof(myObj[name]) == 'undefined') { + myObj[name]=[ ]; + } + for (var jdx=0,len3=elm.options.length; jdx
", + + postCreate: function(){ + dojo.body().appendChild(this.domNode); + this.bgIframe = new dijit.BackgroundIframe(this.domNode); + }, + + layout: function(){ + // summary + // Sets the background to the size of the viewport (rather than the size + // of the document) since we need to cover the whole browser window, even + // if the document is only a few lines long. + + var viewport = dijit.getViewport(); + var is = this.node.style, + os = this.domNode.style; + + os.top = viewport.t + "px"; + os.left = viewport.l + "px"; + is.width = viewport.w + "px"; + is.height = viewport.h + "px"; + + // process twice since the scroll bar may have been removed + // by the previous resizing + var viewport2 = dijit.getViewport(); + if(viewport.w != viewport2.w){ is.width = viewport2.w + "px"; } + if(viewport.h != viewport2.h){ is.height = viewport2.h + "px"; } + }, + + show: function(){ + this.domNode.style.display = "block"; + this.layout(); + if(this.bgIframe.iframe){ + this.bgIframe.iframe.style.display = "block"; + } + this._resizeHandler = this.connect(window, "onresize", "layout"); + }, + + hide: function(){ + this.domNode.style.display = "none"; + this.domNode.style.width = this.domNode.style.height = "1px"; + if(this.bgIframe.iframe){ + this.bgIframe.iframe.style.display = "none"; + } + this.disconnect(this._resizeHandler); + }, + + uninitialize: function(){ + if(this.bgIframe){ + this.bgIframe.destroy(); + } + } + } +); + +dojo.declare( + "dijit.Dialog", + [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin], + { + // summary: + // Pops up a modal dialog window, blocking access to the screen + // and also graying out the screen Dialog is extended from + // ContentPane so it supports all the same parameters (href, etc.) + + templateString: null, + templateString:"
\n\t\t
\n\t\t${title}\n\t\t\n\t\t\tx\n\t\t\n\t
\n\t\t
\n\t\n
\n", + + // title: String + // Title of the dialog + title: "", + + duration: 400, + + _lastFocusItem:null, + + postCreate: function(){ + dojo.body().appendChild(this.domNode); + dijit.Dialog.superclass.postCreate.apply(this, arguments); + this.domNode.style.display="none"; + this.connect(this, "onExecute", "hide"); + this.connect(this, "onCancel", "hide"); + }, + + onLoad: function(){ + // when href is specified we need to reposition + // the dialog after the data is loaded + this._position(); + dijit.Dialog.superclass.onLoad.call(this); + }, + + _setup: function(){ + // summary: + // stuff we need to do before showing the Dialog for the first + // time (but we defer it until right beforehand, for + // performance reasons) + + this._modalconnects = []; + + if(this.titleBar){ + this._moveable = new dojo.dnd.Moveable(this.domNode, { handle: this.titleBar }); + } + + this._underlay = new dijit.DialogUnderlay(); + + var node = this.domNode; + this._fadeIn = dojo.fx.combine( + [dojo.fadeIn({ + node: node, + duration: this.duration + }), + dojo.fadeIn({ + node: this._underlay.domNode, + duration: this.duration, + onBegin: dojo.hitch(this._underlay, "show") + }) + ] + ); + + this._fadeOut = dojo.fx.combine( + [dojo.fadeOut({ + node: node, + duration: this.duration, + onEnd: function(){ + node.style.display="none"; + } + }), + dojo.fadeOut({ + node: this._underlay.domNode, + duration: this.duration, + onEnd: dojo.hitch(this._underlay, "hide") + }) + ] + ); + }, + + uninitialize: function(){ + if(this._underlay){ + this._underlay.destroy(); + } + }, + + _position: function(){ + // summary: position modal dialog in center of screen + + var viewport = dijit.getViewport(); + var mb = dojo.marginBox(this.domNode); + + var style = this.domNode.style; + style.left = (viewport.l + (viewport.w - mb.w)/2) + "px"; + style.top = (viewport.t + (viewport.h - mb.h)/2) + "px"; + }, + + _findLastFocus: function(/*Event*/ evt){ + // summary: called from onblur of dialog container to determine the last focusable item + this._lastFocused = evt.target; + }, + + _cycleFocus: function(/*Event*/ evt){ + // summary: when tabEnd receives focus, advance focus around to titleBar + + // on first focus to tabEnd, store the last focused item in dialog + if(!this._lastFocusItem){ + this._lastFocusItem = this._lastFocused; + } + this.titleBar.focus(); + }, + + _onKey: function(/*Event*/ evt){ + if(evt.keyCode){ + var node = evt.target; + // see if we are shift-tabbing from titleBar + if(node == this.titleBar && evt.shiftKey && evt.keyCode == dojo.keys.TAB){ + if (this._lastFocusItem){ + this._lastFocusItem.focus(); // send focus to last item in dialog if known + } + dojo.stopEvent(evt); + }else{ + // see if the key is for the dialog + while (node){ + if(node == this.domNode){ + if (evt.keyCode == dojo.keys.ESCAPE){ + this.hide(); + }else{ + return; // just let it go + } + } + node = node.parentNode; + } + // this key is for the disabled document window + if (evt.keyCode != dojo.keys.TAB){ // allow tabbing into the dialog for a11y + dojo.stopEvent(evt); + // opera won't tab to a div + }else if (!dojo.isOpera){ + try{ + this.titleBar.focus(); + }catch(e){/*squelch*/} + } + } + } + }, + + show: function(){ + // summary: display the dialog + + // first time we show the dialog, there's some initialization stuff to do + if(!this._alreadyInitialized){ + this._setup(); + this._alreadyInitialized=true; + } + + if(this._fadeOut.status() == "playing"){ + this._fadeOut.stop(); + } + + this._modalconnects.push(dojo.connect(window, "onscroll", this, "layout")); + this._modalconnects.push(dojo.connect(document.documentElement, "onkeypress", this, "_onKey")); + + // IE doesn't bubble onblur events - use ondeactivate instead + var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur"; + this._modalconnects.push(dojo.connect(this.containerNode, ev, this, "_findLastFocus")); + + + dojo.style(this.domNode, "opacity", 0); + this.domNode.style.display="block"; + + this._loadCheck(); // lazy load trigger + + this._position(); + + this._fadeIn.play(); + + this._savedFocus = dijit.getFocus(this); + + // set timeout to allow the browser to render dialog + setTimeout(dojo.hitch(this, function(){ + dijit.focus(this.titleBar); + }), 50); + }, + + hide: function(){ + // summary + // Hide the dialog + + // if we haven't been initialized yet then we aren't showing and we can just return + if(!this._alreadyInitialized){ + return; + } + + if(this._fadeIn.status() == "playing"){ + this._fadeIn.stop(); + } + this._fadeOut.play(); + + if (this._scrollConnected){ + this._scrollConnected = false; + } + dojo.forEach(this._modalconnects, dojo.disconnect); + this._modalconnects = []; + + // TODO: this is failing on FF presumably because the DialogUnderlay hasn't disappeared yet? + // Attach it to fire at the end of the animation + dijit.focus(this._savedFocus); + }, + + layout: function() { + if(this.domNode.style.display == "block"){ + this._underlay.layout(); + this._position(); + } + } + } +); + +dojo.declare( + "dijit.TooltipDialog", + [dijit.layout.ContentPane, dijit._Templated, dijit.form._FormMixin], + { + // summary: + // Pops up a dialog that appears like a Tooltip + + // title: String + // Description of tooltip dialog (required for a11Y) + title: "", + + _lastFocusItem: null, + + templateString: null, + templateString:"
\n\t
\n\t\t
\n\t
\n\t\n\t
\n
\n", + + postCreate: function(){ + dijit.TooltipDialog.superclass.postCreate.apply(this, arguments); + this.connect(this.containerNode, "onkeypress", "_onKey"); + + // IE doesn't bubble onblur events - use ondeactivate instead + var ev = typeof(document.ondeactivate) == "object" ? "ondeactivate" : "onblur"; + this.connect(this.containerNode, ev, "_findLastFocus"); + this.containerNode.title=this.title; + }, + + orient: function(/*Object*/ corner){ + // summary: configure widget to be displayed in given position relative to the button + this.domNode.className="dijitTooltipDialog " +" dijitTooltipAB"+(corner.charAt(1)=='L'?"Left":"Right")+" dijitTooltip"+(corner.charAt(0)=='T' ? "Below" : "Above"); + }, + + onOpen: function(/*Object*/ pos){ + // summary: called when dialog is displayed + this.orient(pos.corner); + this._loadCheck(); // lazy load trigger + this.containerNode.focus(); + }, + + _onKey: function(/*Event*/ evt){ + //summary: keep keyboard focus in dialog; close dialog on escape key + if (evt.keyCode == dojo.keys.ESCAPE){ + this.onCancel(); + }else if (evt.target == this.containerNode && evt.shiftKey && evt.keyCode == dojo.keys.TAB){ + if (this._lastFocusItem){ + this._lastFocusItem.focus(); + } + dojo.stopEvent(evt); + } + }, + + _findLastFocus: function(/*Event*/ evt){ + // summary: called from onblur of dialog container to determine the last focusable item + this._lastFocused = evt.target; + }, + + _cycleFocus: function(/*Event*/ evt){ + // summary: when tabEnd receives focus, advance focus around to containerNode + + // on first focus to tabEnd, store the last focused item in dialog + if(!this._lastFocusItem){ + this._lastFocusItem = this._lastFocused; + } + this.containerNode.focus(); + } + } +); + + +} + +if(!dojo._hasResource["dijit._editor.selection"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit._editor.selection"] = true; +dojo.provide("dijit._editor.selection"); + +// FIXME: +// all of these methods branch internally for IE. This is probably +// sub-optimal in terms of runtime performance. We should investigate the +// size difference for differentiating at definition time. + +dojo.mixin(dijit._editor.selection, { + getType: function(){ + // summary: Get the selection type (like document.select.type in IE). + if(dojo.doc["selection"]){ //IE + return dojo.doc.selection.type.toLowerCase(); + }else{ + var stype = "text"; + + // Check if the actual selection is a CONTROL (IMG, TABLE, HR, etc...). + var oSel; + try{ + oSel = dojo.global.getSelection(); + }catch(e){ /*squelch*/ } + + if(oSel && oSel.rangeCount==1){ + var oRange = oSel.getRangeAt(0); + if( (oRange.startContainer == oRange.endContainer) && + ((oRange.endOffset - oRange.startOffset) == 1) && + (oRange.startContainer.nodeType != 3 /* text node*/) + ){ + stype = "control"; + } + } + return stype; + } + }, + + getSelectedText: function(){ + // summary: + // Return the text (no html tags) included in the current selection or null if no text is selected + if(dojo.doc["selection"]){ //IE + if(dijit._editor.selection.getType() == 'control'){ + return null; + } + return dojo.doc.selection.createRange().text; + }else{ + var selection = dojo.global.getSelection(); + if(selection){ + return selection.toString(); + } + } + }, + + getSelectedHtml: function(){ + // summary: + // Return the html of the current selection or null if unavailable + if(dojo.doc["selection"]){ //IE + if(dijit._editor.selection.getType() == 'control'){ + return null; + } + return dojo.doc.selection.createRange().htmlText; + }else{ + var selection = dojo.global.getSelection(); + if(selection && selection.rangeCount){ + var frag = selection.getRangeAt(0).cloneContents(); + var div = document.createElement("div"); + div.appendChild(frag); + return div.innerHTML; + } + return null; + } + }, + + getSelectedElement: function(){ + // summary: + // Retrieves the selected element (if any), just in the case that + // a single element (object like and image or a table) is + // selected. + if(this.getType() == "control"){ + if(dojo.doc["selection"]){ //IE + var range = dojo.doc.selection.createRange(); + if(range && range.item){ + return dojo.doc.selection.createRange().item(0); + } + }else{ + var selection = dojo.global.getSelection(); + return selection.anchorNode.childNodes[ selection.anchorOffset ]; + } + } + }, + + getParentElement: function(){ + // summary: + // Get the parent element of the current selection + if(this.getType() == "control"){ + var p = this.getSelectedElement(); + if(p){ return p.parentNode; } + }else{ + if(dojo.doc["selection"]){ //IE + return dojo.doc.selection.createRange().parentElement(); + }else{ + var selection = dojo.global.getSelection(); + if(selection){ + var node = selection.anchorNode; + + while(node && (node.nodeType != 1)){ // not an element + node = node.parentNode; + } + + return node; + } + } + } + }, + + hasAncestorElement: function(/*String*/tagName /* ... */){ + // summary: + // Check whether current selection has a parent element which is + // of type tagName (or one of the other specified tagName) + return (this.getAncestorElement.apply(this, arguments) != null); + }, + + getAncestorElement: function(/*String*/tagName /* ... */){ + // summary: + // Return the parent element of the current selection which is of + // type tagName (or one of the other specified tagName) + + var node = this.getSelectedElement() || this.getParentElement(); + return this.getParentOfType(node, arguments); + }, + + isTag: function(/*DomNode*/node, /*Array*/tags){ + if(node && node.tagName){ + var _nlc = node.tagName.toLowerCase(); + for(var i=0; i'); + }catch(e){ } + } +} +dojo.declare("dijit._editor.RichText", [ dijit._Widget ], { + preamble: function(){ + // summary: + // dijit._editor.RichText is the core of the WYSIWYG editor in dojo, which + // provides the basic editing features. It also encapsulates the differences + // of different js engines for various browsers + + // contentPreFilters: Array + // pre content filter function register array. + // these filters will be executed before the actual + // editing area get the html content + this.contentPreFilters = []; + + // contentPostFilters: Array + // post content filter function register array. + // these will be used on the resulting html + // from contentDomPostFilters. The resuling + // content is the final html (returned by getValue()) + this.contentPostFilters = []; + + // contentDomPreFilters: Array + // pre content dom filter function register array. + // these filters are applied after the result from + // contentPreFilters are set to the editing area + this.contentDomPreFilters = []; + + // contentDomPostFilters: Array + // post content dom filter function register array. + // these filters are executed on the editing area dom + // the result from these will be passed to contentPostFilters + this.contentDomPostFilters = []; + + // editingAreaStyleSheets: Array + // array to store all the stylesheets applied to the editing area + this.editingAreaStyleSheets=[]; + + this._keyHandlers = {}; + this.contentPreFilters.push(dojo.hitch(this, "_preFixUrlAttributes")); + if(dojo.isMoz){ + this.contentPreFilters.push(this._fixContentForMoz); + } + //this.contentDomPostFilters.push(this._postDomFixUrlAttributes); + + + this.onLoadDeferred = new dojo.Deferred(); + }, + + // inheritWidth: Boolean + // whether to inherit the parent's width or simply use 100% + inheritWidth: false, + + // focusOnLoad: Boolean + // whether focusing into this instance of richtext when page onload + focusOnLoad: false, + + // name: String + // If a save name is specified the content is saved and restored when the user + // leave this page can come back, or if the editor is not properly closed after + // editing has started. + name: "", + + // styleSheets: String + // semicolon (";") separated list of css files for the editing area + styleSheets: "", + + // _content: String + // temporary content storage + _content: "", + + // height: String + // set height to fix the editor at a specific height, with scrolling. + // By default, this is 300px. If you want to have the editor always + // resizes to accommodate the content, use AlwaysShowToolbar plugin + // and set height="" + height: "300px", + + // minHeight: String + // The minimum height that the editor should have + minHeight: "1em", + + // isClosed: Boolean + isClosed: true, + + // isLoaded: Boolean + isLoaded: false, + + // _SEPARATOR: String + // used to concat contents from multiple textareas into a single string + _SEPARATOR: "@@**%%__RICHTEXTBOUNDRY__%%**@@", + + // onLoadDeferred: dojo.Deferred + // deferred that can be used to connect to the onLoad function. This + // will only be set if dojo.Deferred is required + onLoadDeferred: null, + + // Init + postCreate: function(){ + dojo.publish("dijit._editor.RichText::init", [this]); + this.open(); + this.setupDefaultShortcuts(); + }, + + setupDefaultShortcuts: function(){ + // summary: add some default key handlers + // description: + // Overwrite this to setup your own handlers. The default + // implementation does not use Editor commands, but directly + // executes the builtin commands within the underlying browser + // support. + var ctrl = this.KEY_CTRL; + var exec = function(cmd, arg){ + return arguments.length == 1 ? function(){ this.execCommand(cmd); } : + function(){ this.execCommand(cmd, arg); } + } + this.addKeyHandler("b", ctrl, exec("bold")); + this.addKeyHandler("i", ctrl, exec("italic")); + this.addKeyHandler("u", ctrl, exec("underline")); + this.addKeyHandler("a", ctrl, exec("selectall")); + this.addKeyHandler("s", ctrl, function () { this.save(true); }); + + this.addKeyHandler("1", ctrl, exec("formatblock", "h1")); + this.addKeyHandler("2", ctrl, exec("formatblock", "h2")); + this.addKeyHandler("3", ctrl, exec("formatblock", "h3")); + this.addKeyHandler("4", ctrl, exec("formatblock", "h4")); + + this.addKeyHandler("\\", ctrl, exec("insertunorderedlist")); + if(!dojo.isIE){ + this.addKeyHandler("Z", ctrl, exec("redo")); + } + }, + + // events: Array + // events which should be connected to the underlying editing area + events: ["onKeyPress", "onKeyDown", "onKeyUp", "onClick"], + + // events: Array + // events which should be connected to the underlying editing + // area, events in this array will be addListener with + // capture=true + captureEvents: [], + + _editorCommandsLocalized: false, + _localizeEditorCommands: function(){ + if(this._editorCommandsLocalized){ + return; + } + this._editorCommandsLocalized = true; + + //in IE, names for blockformat is locale dependent, so we cache the values here + + //if the normal way fails, we try the hard way to get the list + + //do not use _cacheLocalBlockFormatNames here, as it will + //trigger security warning in IE7 + + //in the array below, ul can not come directly after ol, + //otherwise the queryCommandValue returns Normal for it + var formats = ['p', 'pre', 'address', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ol', 'div', 'ul']; + var localhtml = "", format, i=0; + while(format=formats[i++]){ + if(format.charAt(1) != 'l'){ + localhtml += "<"+format+">content"; + }else{ + localhtml += "<"+format+">
  • content
  • "; + } + } + //queryCommandValue returns empty if we hide editNode, so move it out of screen temporary + var div=document.createElement('div'); + div.style.position = "absolute"; + div.style.left = "-2000px"; + div.style.top = "-2000px"; + document.body.appendChild(div); + div.innerHTML = localhtml; + var node = div.firstChild; + while(node){ + dijit._editor.selection.selectElement(node.firstChild); + dojo.withGlobal(this.window, "selectElement", dijit._editor.selection, [node.firstChild]); + var nativename = node.tagName.toLowerCase(); + this._local2NativeFormatNames[nativename] = document.queryCommandValue("formatblock");//this.queryCommandValue("formatblock"); + this._native2LocalFormatNames[this._local2NativeFormatNames[nativename]] = nativename; + node = node.nextSibling; + } + document.body.removeChild(div); + }, + + open: function(/*DomNode, optional*/element){ + // summary: + // Transforms the node referenced in this.domNode into a rich text editing + // node. This will result in the creation and replacement with an ') + + '' + + ((dojo.isIE || dojo.isSafari) ? '':'') + : '', + + _nlsResources: null, // Needed for screen readers on FF2 + + focus: function(){ + // summary: Received focus, needed for the InlineEditBox widget + if(!this.disabled){ + this._changing(); // set initial height + } + if(dojo.isMozilla){ + dijit.focus(this.iframe); + }else{ + dijit.focus(this.focusNode); + } + }, + + setValue: function(/*String*/ value, /*Boolean, optional*/ priorityChange){ + var editNode = this.editNode; + if(typeof value == "string"){ + editNode.innerHTML = ""; // wipe out old nodes + if(value.split){ + var _this=this; + var isFirst = true; + dojo.forEach(value.split("\n"), function(line){ + if(isFirst){ isFirst = false; } + else { + editNode.appendChild(document.createElement("BR")); // preserve line breaks + } + editNode.appendChild(document.createTextNode(line)); // use text nodes so that imbedded tags can be edited + }); + }else{ + editNode.appendChild(document.createTextNode(value)); + } + if(this.iframe){ + this.sizeNode = document.createElement('div'); + editNode.appendChild(this.sizeNode); + } + }else{ + // blah
    blah --> blah\nblah + //

    blah

    blah

    --> blah\nblah + //
    blah
    blah
    --> blah\nblah + // &<> -->&< > + value = editNode.innerHTML; + if(this.iframe){ // strip sizeNode + value = value.replace(/
    <\/div>\r?\n?$/i,""); + } + value = value.replace(/\s*\r?\n|^\s+|\s+$| /g,"").replace(/>\s+<").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])
    /g,"$1\n").replace(/<\/p>\s*]*>|]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&/gi,"\&").replace(/</gi,"<").replace(/>/gi,">"); + } + this.formValueNode.value = value; + if(this.iframe){ + var newHeight = this.sizeNode.offsetTop; + if(editNode.scrollWidth > editNode.clientWidth){ newHeight+=16; } // scrollbar space needed? + if(this.lastHeight != newHeight){ // cache size so that we don't get a resize event because of a resize event + if(newHeight == 0){ newHeight = 16; } // height = 0 causes the browser to not set scrollHeight + dojo.contentBox(this.iframe, {h: newHeight}); + this.lastHeight = newHeight; + } + } + dijit.form.Textarea.superclass.setValue.call(this, value, priorityChange); + }, + + getValue: function(){ + return this.formValueNode.value; + }, + + postMixInProperties: function(){ + dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments); + // don't let the source text be converted to a DOM structure since we just want raw text + if(this.srcNodeRef && this.srcNodeRef.innerHTML != ""){ + this.value = this.srcNodeRef.innerHTML; + this.srcNodeRef.innerHTML = ""; + } + if((!this.value || this.value == "") && this.srcNodeRef && this.srcNodeRef.value){ + this.value = this.srcNodeRef.value; + } + if(!this.value){ this.value = ""; } + this.value = this.value.replace(/\r\n/g,"\n").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&"); + }, + + postCreate: function(){ + if(dojo.isIE || dojo.isSafari){ + this.domNode.style.overflowY = 'hidden'; + this.eventNode = this.focusNode = this.editNode; + this.connect(this.eventNode, "oncut", this._changing); + this.connect(this.eventNode, "onpaste", this._changing); + }else if(dojo.isMozilla){ + var w = this.iframe.contentWindow; + var d = w.document; + // In the case of Firefox an iframe is used and when the text gets focus, + // focus is fired from the document object. There isn't a way to put a + // waiRole on the document object and as a result screen readers don't + // announce the role. As a result screen reader users are lost. + // + // An additional problem is that the browser gives the document object a + // very cryptic accessible name, e.g. + // wyciwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html + // When focus is fired from the document object, the screen reader speaks + // the accessible name. The cyptic accessile name is confusing. + // + // A workaround for both of these problems is to give the iframe's + // document a title, the name of which is similar to a role name, i.e. + // "edit area". This will be used as the accessible name which will replace + // the cryptic name and will also convey the role information to the user. + // Because it is read directly to the user, the string must be localized. + this._nlsResources = dojo.i18n.getLocalization("dijit.form", "Textarea"); + d.open(); + d.write('' + + this._nlsResources.iframeTitle1 + // "edit area" + ''); + // body > br style is to remove the
    that gets added by FF + d.close(); + this.editNode = d.body; + this.iframe.style.overflowY = 'hidden'; + // resize is a method of window, not document + this.eventNode = d; + this.focusNode = this.editNode; + this.connect(w, "resize", this._changed); // resize is only on the window object + }else{ + this.focusNode = this.domNode; + } + if(this.eventNode){ + this.connect(this.eventNode, "keypress", this._onKeyPress); + this.connect(this.eventNode, "mousemove", this._changed); + this.connect(this.eventNode, "focus", this._focused); + this.connect(this.eventNode, "blur", this._blurred); + } + if(this.editNode){ + this.connect(this.editNode, "change", this._changed); // needed for mouse paste events per #3479 + } + this.inherited('postCreate', arguments); + }, + + // event handlers, you can over-ride these in your own subclasses + _focused: function(e){ + dojo.addClass(this.iframe||this.domNode, "dijitInputFieldFocused"); + this._changed(e); + }, + + _blurred: function(e){ + dojo.removeClass(this.iframe||this.domNode, "dijitInputFieldFocused"); + this._changed(e, true); + }, + + _onIframeBlur: function(){ + // Reset the title back to "edit area". + this.iframe.contentDocument.title = this._nlsResources.iframeTitle1; + }, + + _onKeyPress: function(e){ + if(e.keyCode == dojo.keys.TAB && !e.shiftKey && !e.ctrlKey && !e.altKey && this.iframe){ + // Pressing the tab key in the iframe (with designMode on) will cause the + // entry of a tab character so we have to trap that here. Since we don't + // know the next focusable object we put focus on the iframe and then the + // user has to press tab again (which then does the expected thing). + // A problem with that is that the screen reader user hears "edit area" + // announced twice which causes confusion. By setting the + // contentDocument's title to "edit area frame" the confusion should be + // eliminated. + this.iframe.contentDocument.title = this._nlsResources.iframeTitle2; + // Place focus on the iframe. A subsequent tab or shift tab will put focus + // on the correct control. + // Note: Can't use this.focus() because that results in a call to + // dijit.focus and if that receives an iframe target it will set focus + // on the iframe's contentWindow. + this.iframe.focus(); // this.focus(); won't work + dojo.stopEvent(e); + }else if(e.keyCode == dojo.keys.ENTER){ + e.stopPropagation(); + }else if(this.inherited("_onKeyPress", arguments) && this.iframe){ + // #3752: + // The key press will not make it past the iframe. + // If a widget is listening outside of the iframe, (like InlineEditBox) + // it will not hear anything. + // Create an equivalent event so everyone else knows what is going on. + var te = document.createEvent("KeyEvents"); + te.initKeyEvent("keypress", true, true, null, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.keyCode, e.charCode); + this.iframe.dispatchEvent(te); + } + this._changing(); + }, + + _changing: function(e){ + // summary: event handler for when a change is imminent + setTimeout(dojo.hitch(this, "_changed", e, false), 1); + }, + + _changed: function(e, priorityChange){ + // summary: event handler for when a change has already happened + if(this.iframe && this.iframe.contentDocument.designMode != "on"){ + this.iframe.contentDocument.designMode="on"; // in case this failed on init due to being hidden + } + this.setValue(null, priorityChange); + } +}); + +} + +if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.StackContainer"] = true; +dojo.provide("dijit.layout.StackContainer"); + + + + + +dojo.declare( + "dijit.layout.StackContainer", + dijit.layout._LayoutWidget, + + // summary + // A container that has multiple children, but shows only + // one child at a time (like looking at the pages in a book one by one). + // + // Publishes topics -addChild, -removeChild, and -selectChild + // + // Can be base class for container, Wizard, Show, etc. +{ + // doLayout: Boolean + // if true, change the size of my currently displayed child to match my size + doLayout: true, + + _started: false, + + startup: function(){ + if(this._started){ return; } + + var children = this.getChildren(); + + // Setup each page panel + dojo.forEach(children, this._setupChild, this); + + // Figure out which child to initially display + dojo.some(children, function(child){ + if(child.selected){ + this.selectedChildWidget = child; + } + return child.selected; + }, this); + + // Default to the first child + if(!this.selectedChildWidget && children[0]){ + this.selectedChildWidget = children[0]; + this.selectedChildWidget.selected = true; + } + if(this.selectedChildWidget){ + this._showChild(this.selectedChildWidget); + } + + // Now publish information about myself so any StackControllers can initialize.. + dojo.publish(this.id+"-startup", [{children: children, selected: this.selectedChildWidget}]); + + dijit.layout._LayoutWidget.prototype.startup.apply(this, arguments); + this._started = true; + }, + + _setupChild: function(/*Widget*/ page){ + // Summary: prepare the given child + + page.domNode.style.display = "none"; + + // since we are setting the width/height of the child elements, they need + // to be position:relative, or IE has problems (See bug #2033) + page.domNode.style.position = "relative"; + + return page; + }, + + addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + dijit._Container.prototype.addChild.apply(this, arguments); + child = this._setupChild(child); + + if(this._started){ + // in case the tab titles have overflowed from one line to two lines + this.layout(); + + dojo.publish(this.id+"-addChild", [child]); + + // if this is the first child, then select it + if(!this.selectedChildWidget){ + this.selectChild(child); + } + } + }, + + removeChild: function(/*Widget*/ page){ + + dijit._Container.prototype.removeChild.apply(this, arguments); + + // If we are being destroyed than don't run the code below (to select another page), because we are deleting + // every page one by one + if(this._beingDestroyed){ return; } + + if(this._started){ + // this will notify any tablists to remove a button; do this first because it may affect sizing + dojo.publish(this.id+"-removeChild", [page]); + + // in case the tab titles now take up one line instead of two lines + this.layout(); + } + + if(this.selectedChildWidget === page){ + this.selectedChildWidget = undefined; + if(this._started){ + var children = this.getChildren(); + if(children.length){ + this.selectChild(children[0]); + } + } + } + }, + + selectChild: function(/*Widget*/ page){ + // summary + // Show the given widget (which must be one of my children) + + page = dijit.byId(page); + + if(this.selectedChildWidget != page){ + // Deselect old page and select new one + this._transition(page, this.selectedChildWidget); + this.selectedChildWidget = page; + dojo.publish(this.id+"-selectChild", [page]); + } + }, + + _transition: function(/*Widget*/newWidget, /*Widget*/oldWidget){ + if(oldWidget){ + this._hideChild(oldWidget); + } + this._showChild(newWidget); + + // Size the new widget, in case this is the first time it's being shown, + // or I have been resized since the last time it was shown. + // page must be visible for resizing to work + if(this.doLayout && newWidget.resize){ + newWidget.resize(this._containerContentBox || this._contentBox); + } + }, + + forward: function(){ + // Summary: advance to next page + var children = this.getChildren(); + var index = dojo.indexOf(children, this.selectedChildWidget); + this.selectChild(children[ (index + 1) % children.length ]); + }, + + back: function(){ + // Summary: go back to previous page + var children = this.getChildren(); + var index = dojo.indexOf(children, this.selectedChildWidget); + this.selectChild(children[ (index + children.length - 1) % children.length ]); + }, + + // TODO: move this logic into controller? + _onKeyPress: function(e){ + // summary + // Keystroke handling for keystrokes on the tab panel itself (that were bubbled up to me) + // Ctrl-w: close tab + if (e.ctrlKey){ + switch(e.keyCode){ + case dojo.keys.PAGE_DOWN: + case dojo.keys.PAGE_UP: + case dojo.keys.TAB: + if ((e.keyCode == dojo.keys.PAGE_DOWN) || + (e.keyCode == dojo.keys.TAB && !e.shiftKey)){ + this.forward(); + }else{ + this.back(); + } + dijit.focus(this.selectedChildWidget.domNode); + dojo.stopEvent(e); + return false; + break; + default: + if((e.keyChar == "w") && + (this.selectedChildWidget.closable)){ + this.closeChild(this.selectedChildWidget); + dojo.stopEvent(e); + } + } + } + }, + + layout: function(){ + // Summary: called when any page is shown, to make it fit the container correctly + if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){ + this.selectedChildWidget.resize(this._contentBox); + } + }, + + _showChild: function(/*Widget*/ page){ + var children = this.getChildren(); + page.isFirstChild = (page == children[0]); + page.isLastChild = (page == children[children.length-1]); + page.selected = true; + + page.domNode.style.display=""; + if(page._loadCheck){ + page._loadCheck(); // trigger load in ContentPane + } + if(page.onShow){ + page.onShow(); + } + }, + + _hideChild: function(/*Widget*/ page){ + page.selected=false; + page.domNode.style.display="none"; + if(page.onHide){ + page.onHide(); + } + }, + + closeChild: function(/*Widget*/ page){ + // summary + // callback when user clicks the [X] to remove a page + // if onClose() returns true then remove and destroy the childd + var remove = page.onClose(this, page); + if(remove){ + this.removeChild(page); + // makes sure we can clean up executeScripts in ContentPane onUnLoad + page.destroy(); + } + }, + + destroy: function(){ + this._beingDestroyed = true; + dijit.layout.StackContainer.superclass.destroy.apply(this, arguments); + } +}); + + +dojo.declare( + "dijit.layout.StackController", + [dijit._Widget, dijit._Templated, dijit._Container], + { + // summary + // Set of buttons to select a page in a page list. + // Monitors the specified StackContainer, and whenever a page is + // added, deleted, or selected, updates itself accordingly. + + templateString: "", + + // containerId: String + // the id of the page container that I point to + containerId: "", + + // buttonWidget: String + // the name of the button widget to create to correspond to each page + buttonWidget: "dijit.layout._StackButton", + + postCreate: function(){ + dijit.wai.setAttr(this.domNode, "waiRole", "role", "tablist"); + + this.pane2button = {}; // mapping from panes to buttons + this._subscriptions=[ + dojo.subscribe(this.containerId+"-startup", this, "onStartup"), + dojo.subscribe(this.containerId+"-addChild", this, "onAddChild"), + dojo.subscribe(this.containerId+"-removeChild", this, "onRemoveChild"), + dojo.subscribe(this.containerId+"-selectChild", this, "onSelectChild") + ]; + }, + + onStartup: function(/*Object*/ info){ + // summary: called after StackContainer has finished initializing + dojo.forEach(info.children, this.onAddChild, this); + this.onSelectChild(info.selected); + }, + + destroy: function(){ + dojo.forEach(this._subscriptions, dojo.unsubscribe); + dijit.layout.StackController.superclass.destroy.apply(this, arguments); + }, + + onAddChild: function(/*Widget*/ page){ + // summary + // Called whenever a page is added to the container. + // Create button corresponding to the page. + + // add a node that will be promoted to the button widget + var refNode = document.createElement("span"); + this.domNode.appendChild(refNode); + // create an instance of the button widget + var cls = dojo.getObject(this.buttonWidget); + var button = new cls({label: page.title, closeButton: page.closable}, refNode); + this.addChild(button); + this.pane2button[page] = button; + page.controlButton = button; // this value might be overwritten if two tabs point to same container + + var _this = this; + dojo.connect(button, "onClick", function(){ _this.onButtonClick(page); }); + dojo.connect(button, "onClickCloseButton", function(){ _this.onCloseButtonClick(page); }); + if(!this._currentChild){ // put the first child into the tab order + button.focusNode.setAttribute("tabIndex","0"); + this._currentChild = page; + } + }, + + onRemoveChild: function(/*Widget*/ page){ + // summary + // Called whenever a page is removed from the container. + // Remove the button corresponding to the page. + if(this._currentChild === page){ this._currentChild = null; } + var button = this.pane2button[page]; + if(button){ + // TODO? if current child { reassign } + button.destroy(); + } + this.pane2button[page] = null; + }, + + onSelectChild: function(/*Widget*/ page){ + // Summary + // Called when a page has been selected in the StackContainer, either by me or by another StackController + + if(!page){ return; } + + if(this._currentChild){ + var oldButton=this.pane2button[this._currentChild]; + oldButton.setChecked(false); + oldButton.focusNode.setAttribute("tabIndex", "-1"); + } + + var newButton=this.pane2button[page]; + newButton.setChecked(true); + this._currentChild = page; + newButton.focusNode.setAttribute("tabIndex", "0"); + }, + + onButtonClick: function(/*Widget*/ page){ + // summary + // Called whenever one of my child buttons is pressed in an attempt to select a page + var container = dijit.byId(this.containerId); // TODO: do this via topics? + container.selectChild(page); + }, + + onCloseButtonClick: function(/*Widget*/ page){ + // summary + // Called whenever one of my child buttons [X] is pressed in an attempt to close a page + var container = dijit.byId(this.containerId); + container.closeChild(page); + var b = this.pane2button[this._currentChild]; + if(b){ + dijit.focus(b.focusNode || b.domNode); + } + }, + + // TODO: this is a bit redundant with forward, back api in StackContainer + adjacent: function(/*Boolean*/ forward){ + // find currently focused button in children array + var children = this.getChildren(); + var current = dojo.indexOf(children, this.pane2button[this._currentChild]); + // pick next button to focus on + var offset = forward ? 1 : children.length - 1; + return children[ (current + offset) % children.length ]; + }, + + onkeypress: function(/*Event*/ evt){ + // summary: + // Handle keystrokes on the page list, for advancing to next/previous button + // and closing the current page. + + if(this.disabled || evt.altKey || evt.shiftKey || evt.ctrlKey){ return; } + var forward = true; + switch(evt.keyCode){ + case dojo.keys.LEFT_ARROW: + case dojo.keys.UP_ARROW: + forward=false; + // fall through + case dojo.keys.RIGHT_ARROW: + case dojo.keys.DOWN_ARROW: + this.adjacent(forward).onClick(); + dojo.stopEvent(evt); + break; + case dojo.keys.DELETE: + if (this._currentChild.closable){ + this.onCloseButtonClick(this._currentChild); + dojo.stopEvent(evt); // so we don't close a browser tab! + } + default: + return; + } + } + } +); + +dojo.declare( + "dijit.layout._StackButton", + dijit.form.ToggleButton, +{ + // summary + // Internal widget used by StackContainer. + // The button-like or tab-like object you click to select or delete a page + + onClick: function(/*Event*/ evt) { + // this is for TabContainer where the tabs are rather than button, + // so need to set focus explicitly (on some browsers) + dijit.focus(this.focusNode); + + // ... now let StackController catch the event and tell me what to do + }, + + onClickCloseButton: function(/*Event*/ evt){ + // summary + // StackContainer connects to this function; if your widget contains a close button + // then clicking it should call this function. + evt.stopPropagation(); + } +}); + +// These arguments can be specified for the children of a StackContainer. +// Since any widget can be specified as a StackContainer child, mix them +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget, { + // title: String + // Title of this widget. Used by TabContainer to the name the tab, etc. + title: "", + + // selected: Boolean + // Is this child currently selected? + selected: false, + + // closable: Boolean + // True if user can close (destroy) this child, such as (for example) clicking the X on the tab. + closable: false, // true if user can close this tab pane + + onClose: function(){ + // summary: Callback if someone tries to close the child, child will be closed if func returns true + return true; + } +}); + +} + +if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.AccordionContainer"] = true; +dojo.provide("dijit.layout.AccordionContainer"); + + + + + + + + +dojo.declare( + "dijit.layout.AccordionContainer", + dijit.layout.StackContainer, + { + // summary: + // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, + // and switching between panes is visualized by sliding the other panes up/down. + // usage: + //
    + //
    + //
    ...
    + //
    + //
    + //

    This is some text

    + // ... + //
    + + // duration: Integer + // Amount of time (in ms) it takes to slide panes + duration: 250, + + _verticalSpace: 0, + + postCreate: function(){ + this.domNode.style.overflow="hidden"; + dijit.layout.AccordionContainer.superclass.postCreate.apply(this, arguments); + }, + + startup: function(){ + if(this._started){ return; } + dijit.layout.StackContainer.prototype.startup.apply(this, arguments); + if(this.selectedChildWidget){ + var style = this.selectedChildWidget.containerNode.style; + style.display = ""; + style.overflow = "auto"; + this.selectedChildWidget._setSelectedState(true); + } + }, + + layout: function(){ + // summary + // Set the height of the open pane based on what room remains + // get cumulative height of all the title bars, and figure out which pane is open + var totalCollapsedHeight = 0; + var openPane = this.selectedChildWidget; + dojo.forEach(this.getChildren(), function(child){ + totalCollapsedHeight += child.getTitleHeight(); + }); + var mySize = this._contentBox; + this._verticalSpace = (mySize.h - totalCollapsedHeight); + if(openPane){ + openPane.containerNode.style.height = this._verticalSpace + "px"; +/*** +TODO: this is wrong. probably you wanted to call resize on the SplitContainer +inside the AccordionPane?? + if(openPane.resize){ + openPane.resize({h: this._verticalSpace}); + } +***/ + } + }, + + _setupChild: function(/*Widget*/ page){ + // Summary: prepare the given child + return page; + }, + + _transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){ +//TODO: should be able to replace this with calls to slideIn/slideOut + var animations = []; + var paneHeight = this._verticalSpace; + if(newWidget){ + newWidget.setSelected(true); + var newContents = newWidget.containerNode; + newContents.style.display = ""; + + animations.push(dojo.animateProperty({ + node: newContents, + duration: this.duration, + properties: { + height: { start: "1", end: paneHeight } + }, + onEnd: function(){ + newContents.style.overflow = "auto"; + } + })); + } + if(oldWidget){ + oldWidget.setSelected(false); + var oldContents = oldWidget.containerNode; + oldContents.style.overflow = "hidden"; + animations.push(dojo.animateProperty({ + node: oldContents, + duration: this.duration, + properties: { + height: { start: paneHeight, end: "1" } + }, + onEnd: function(){ + oldContents.style.display = "none"; + } + })); + } + + dojo.fx.combine(animations).play(); + }, + + // note: we are treating the container as controller here + processKey: function(/*Event*/ evt){ + if(this.disabled || evt.altKey || evt.shiftKey || evt.ctrlKey){ + return dijit.layout.AccordionContainer.superclass._onKeyPress.apply(this, arguments); + } + var forward = true; + switch(evt.keyCode){ + case dojo.keys.LEFT_ARROW: + case dojo.keys.UP_ARROW: + forward = false; + // fallthrough + case dojo.keys.RIGHT_ARROW: + case dojo.keys.DOWN_ARROW: + // find currently focused button in children array + var children = this.getChildren(); + var index = dojo.indexOf(children, evt._dijitWidget); + // pick next button to focus on + index += forward ? 1 : children.length - 1; + var next = children[ index % children.length ]; + dojo.stopEvent(evt); + next._onTitleClick(); + } + } + } +); + +dojo.declare( + "dijit.layout.AccordionPane", + [dijit.layout.ContentPane, dijit._Templated, dijit._Contained], +{ + // summary + // AccordionPane is a box with a title that contains another widget (often a ContentPane). + // It's a widget used internally by AccordionContainer. + + templateString:"
    ${title}
    \n
    \n", + + postCreate: function(){ + dijit.layout.AccordionPane.superclass.postCreate.apply(this, arguments); + dojo.setSelectable(this.titleNode, false); + this.setSelected(this.selected); + }, + + getTitleHeight: function(){ + // summary: returns the height of the title dom node + return dojo.marginBox(this.titleNode).h; // Integer + }, + + _onTitleClick: function(){ + // summary: callback when someone clicks my title + var parent = this.getParent(); + parent.selectChild(this); + dijit.focus(this.focusNode); + }, + + _onKeyPress: function(/*Event*/ evt){ + evt._dijitWidget = this; + return this.getParent().processKey(evt); + }, + + _setSelectedState: function(/*Boolean*/ isSelected){ + this.selected = isSelected; + (isSelected ? dojo.addClass : dojo.removeClass)(this.domNode, "dijitAccordionPane-selected"); + this.focusNode.setAttribute("tabIndex",(isSelected)? "0":"-1"); + }, + + setSelected: function(/*Boolean*/ isSelected){ + // summary: change the selected state on this pane + this._setSelectedState(isSelected); + if(isSelected){ this.onSelected(); } + }, + + onSelected: function(){ + // summary: called when this pane is selected + } +}); + +} + +if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.LayoutContainer"] = true; +dojo.provide("dijit.layout.LayoutContainer"); + + + +dojo.declare( + "dijit.layout.LayoutContainer", + dijit.layout._LayoutWidget, +{ + // summary + // Provides Delphi-style panel layout semantics. + // + // details + // A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"), + // that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client". + // It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box, + // and then it takes the child marked "client" and puts it into the remaining space in the middle. + // + // Left/right positioning is similar to CSS's "float: left" and "float: right", + // and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such + // CSS. + // + // Note that there can only be one client element, but there can be multiple left, right, top, + // or bottom elements. + // + // usage + // + //
    + //
    header text
    + //
    table of contents
    + //
    client area
    + //
    + // + // Lays out each child in the natural order the children occur in. + // Basically each child is laid out into the "remaining space", where "remaining space" is initially + // the content area of this widget, but is reduced to a smaller rectangle each time a child is added. + // + + layout: function(){ + dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); + }, + + addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + dijit._Container.prototype.addChild.apply(this, arguments); + if(this._started){ + dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); + } + }, + + removeChild: function(/*Widget*/ widget){ + dijit._Container.prototype.removeChild.apply(this, arguments); + if(this._started){ + dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); + } + } +}); + +// This argument can be specified for the children of a LayoutContainer. +// Since any widget can be specified as a LayoutContainer child, mix it +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget, { + // layoutAlign: String + // "none", "left", "right", "bottom", "top", and "client". + // See the LayoutContainer description for details on this parameter. + layoutAlign: 'none' +}); + +} + +if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.LinkPane"] = true; +dojo.provide("dijit.layout.LinkPane"); + + + + +dojo.declare("dijit.layout.LinkPane", + [dijit.layout.ContentPane, dijit._Templated], +{ + // summary + // LinkPane is just a ContentPane that loads data remotely (via the href attribute), + // and has markup similar to an anchor. The anchor's body (the words between and ) + // become the title of the widget (used for TabContainer, AccordionContainer, etc.) + // usage + // my title + + // I'm using a template because the user may specify the input as + // title, in which case we need to get rid of the + // because we don't want a link. + templateString: '
    ', + + postCreate: function(){ + + // If user has specified node contents, they become the title + // (the link must be plain text) + if(this.srcNodeRef){ + this.title += this.srcNodeRef.innerHTML; + } + + dijit.layout.LinkPane.superclass.postCreate.apply(this, arguments); + + } +}); + +} + +if(!dojo._hasResource["dojo.cookie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.cookie"] = true; +dojo.provide("dojo.cookie"); + +dojo.cookie = function(/*String*/name, /*String?*/value, /*Object?*/props){ + // summary: + // Get or set a cookie. + // + // If you pass in one argument, the the value of the cookie is returned + // + // If you pass in two arguments, the cookie value is set to the second + // argument. + // + // If you pass in three arguments, the cookie value is set to the + // second argument, and the options on the third argument are used for + // extended properties on the cookie + // + // name: The name of the cookie + // value: Optional. The value for the cookie. + // props: + // Optional additional properties for the cookie + // expires: Date or Number. Number is seen as days. + // If expires is in the past, the cookie will be deleted + // If expires is left out or is 0, the cookie will expire + // when the browser closes. + // path: String. The path to use for the cookie. + // domain: String. The domain to use for the cookie. + // secure: Boolean. Whether to only send the cookie on secure connections + var c = document.cookie; + if(arguments.length == 1){ + var idx = c.lastIndexOf(name+'='); + if(idx == -1){ return null; } + var start = idx+name.length+1; + var end = c.indexOf(';', idx+name.length+1); + if(end == -1){ end = c.length; } + return decodeURIComponent(c.substring(start, end)); + }else{ + props = props || {}; + value = encodeURIComponent(value); + if(typeof(props.expires) == "number"){ + var d = new Date(); + d.setTime(d.getTime()+(props.expires*24*60*60*1000)); + props.expires = d; + } + document.cookie = name + "=" + value + + (props.expires ? "; expires=" + props.expires.toUTCString() : "") + + (props.path ? "; path=" + props.path : "") + + (props.domain ? "; domain=" + props.domain : "") + + (props.secure ? "; secure" : ""); + return null; + } +}; + +} + +if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.SplitContainer"] = true; +dojo.provide("dijit.layout.SplitContainer"); + +// +// TODO +// make it prettier +// active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case) +// + + + + +dojo.declare( + "dijit.layout.SplitContainer", + dijit.layout._LayoutWidget, +{ + // summary + // Contains multiple children widgets, all of which are displayed side by side + // (either horizontally or vertically); there's a bar between each of the children, + // and you can adjust the relative size of each child by dragging the bars. + // + // You must specify a size (width and height) for the SplitContainer. + + // activeSizing: Boolean + // If true, the children's size changes as you drag the bar; + // otherwise, the sizes don't change until you drop the bar (by mouse-up) + activeSizing: false, + + // sizerWidget: Integer + // Size in pixels of the bar between each child + // TODO: this should be a CSS attribute + sizerWidth: 15, + + // orientation: String + // either 'horizontal' or vertical; indicates whether the children are + // arranged side-by-side or up/down. + orientation: 'horizontal', + + // persist: Boolean + // Save splitter positions in a cookie + persist: true, + + postMixInProperties: function(){ + dijit.layout.SplitContainer.superclass.postMixInProperties.apply(this, arguments); + this.isHorizontal = (this.orientation == 'horizontal'); + }, + + postCreate: function(){ + dijit.layout.SplitContainer.superclass.postCreate.apply(this, arguments); + this.sizers = []; + dojo.addClass(this.domNode, "dijitSplitContainer"); + // overflow has to be explicitly hidden for splitContainers using gekko (trac #1435) + // to keep other combined css classes from inadvertantly making the overflow visible + if(dojo.isMozilla){ + this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work + } + + // create the fake dragger + if(typeof this.sizerWidth == "object"){ + try{ //FIXME: do this without a try/catch + this.sizerWidth = parseInt(this.sizerWidth.toString()); + }catch(e){ this.sizerWidth = 15; } + } + var sizer = this.virtualSizer = document.createElement('div'); + sizer.style.position = 'relative'; + + // #1681: work around the dreaded 'quirky percentages in IE' layout bug + // If the splitcontainer's dimensions are specified in percentages, it + // will be resized when the virtualsizer is displayed in _showSizingLine + // (typically expanding its bounds unnecessarily). This happens because + // we use position: relative for .dijitSplitContainer. + // The workaround: instead of changing the display style attribute, + // switch to changing the zIndex (bring to front/move to back) + + sizer.style.zIndex = 10; + sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV'; + this.domNode.appendChild(sizer); + dojo.setSelectable(sizer, false); + }, + + startup: function(){ + if(this._started){ return; } + dojo.forEach(this.getChildren(), function(child, i, children){ + // attach the children and create the draggers + this._injectChild(child); + + if(i < children.length-1){ + this._addSizer(); + } + }, this); + + if(this.persist){ + this._restoreState(); + } + dijit.layout._LayoutWidget.prototype.startup.apply(this, arguments); + this._started = true; + }, + + _injectChild: function(child){ + child.domNode.style.position = "absolute"; + dojo.addClass(child.domNode, "dijitSplitPane"); + }, + + _addSizer: function(){ + var i = this.sizers.length; + + // TODO: use a template for this!!! + var sizer = this.sizers[i] = document.createElement('div'); + sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV'; + + // add the thumb div + var thumb = document.createElement('div'); + thumb.className = 'thumb'; + sizer.appendChild(thumb); + + var self = this; + var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })(); + dojo.connect(sizer, "onmousedown", handler); + + this.domNode.appendChild(sizer); + dojo.setSelectable(sizer, false); + }, + + removeChild: function(widget){ + // Remove sizer, but only if widget is really our child and + // we have at least one sizer to throw away + if(this.sizers.length && dojo.indexOf(this.getChildren(), widget) != -1){ + var i = this.sizers.length - 1; + dojo._destroyElement(this.sizers[i]); + this.sizers.length--; + } + + // Remove widget and repaint + dijit._Container.prototype.removeChild.apply(this, arguments); + if(this._started){ + this.layout(); + } + }, + + addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + dijit._Container.prototype.addChild.apply(this, arguments); + + if(this._started){ + // Do the stuff that startup() does for each widget + this._injectChild(child); + var children = this.getChildren(); + if(children.length > 1){ + this._addSizer(); + } + + // and then reposition (ie, shrink) every pane to make room for the new guy + this.layout(); + } + }, + + layout: function(){ + // summary: + // Do layout of panels + + // base class defines this._contentBox on initial creation and also + // on resize + this.paneWidth = this._contentBox.w; + this.paneHeight = this._contentBox.h; + + var children = this.getChildren(); + if(!children.length){ return; } + + // + // calculate space + // + + var space = this.isHorizontal ? this.paneWidth : this.paneHeight; + if(children.length > 1){ + space -= this.sizerWidth * (children.length - 1); + } + + // + // calculate total of SizeShare values + // + var outOf = 0; + dojo.forEach(children, function(child){ + outOf += child.sizeShare; + }); + + // + // work out actual pixels per sizeshare unit + // + var pixPerUnit = space / outOf; + + // + // set the SizeActual member of each pane + // + var totalSize = 0; + dojo.forEach(children.slice(0, children.length - 1), function(child){ + var size = Math.round(pixPerUnit * child.sizeShare); + child.sizeActual = size; + totalSize += size; + }); + + children[children.length-1].sizeActual = space - totalSize; + + // + // make sure the sizes are ok + // + this._checkSizes(); + + // + // now loop, positioning each pane and letting children resize themselves + // + + var pos = 0; + var size = children[0].sizeActual; + this._movePanel(children[0], pos, size); + children[0].position = pos; + pos += size; + + // if we don't have any sizers, our layout method hasn't been called yet + // so bail until we are called..TODO: REVISIT: need to change the startup + // algorithm to guaranteed the ordering of calls to layout method + if(!this.sizers){ + return; + } + + dojo.some(children.slice(1), function(child, i){ + // error-checking + if(!this.sizers[i]){ + return true; + } + // first we position the sizing handle before this pane + this._moveSlider(this.sizers[i], pos, this.sizerWidth); + this.sizers[i].position = pos; + pos += this.sizerWidth; + + size = child.sizeActual; + this._movePanel(child, pos, size); + child.position = pos; + pos += size; + }, this); + }, + + _movePanel: function(panel, pos, size){ + if(this.isHorizontal){ + panel.domNode.style.left = pos + 'px'; // TODO: resize() takes l and t parameters too, don't need to set manually + panel.domNode.style.top = 0; + var box = {w: size, h: this.paneHeight}; + if(panel.resize){ + panel.resize(box); + }else{ + dojo.marginBox(panel.domNode, box); + } + }else{ + panel.domNode.style.left = 0; // TODO: resize() takes l and t parameters too, don't need to set manually + panel.domNode.style.top = pos + 'px'; + var box = {w: this.paneWidth, h: size}; + if(panel.resize){ + panel.resize(box); + }else{ + dojo.marginBox(panel.domNode, box); + } + } + }, + + _moveSlider: function(slider, pos, size){ + if(this.isHorizontal){ + slider.style.left = pos + 'px'; + slider.style.top = 0; + dojo.marginBox(slider, { w: size, h: this.paneHeight }); + }else{ + slider.style.left = 0; + slider.style.top = pos + 'px'; + dojo.marginBox(slider, { w: this.paneWidth, h: size }); + } + }, + + _growPane: function(growth, pane){ + if(growth > 0){ + if(pane.sizeActual > pane.sizeMin){ + if((pane.sizeActual - pane.sizeMin) > growth){ + + // stick all the growth in this pane + pane.sizeActual = pane.sizeActual - growth; + growth = 0; + }else{ + // put as much growth in here as we can + growth -= pane.sizeActual - pane.sizeMin; + pane.sizeActual = pane.sizeMin; + } + } + } + return growth; + }, + + _checkSizes: function(){ + + var totalMinSize = 0; + var totalSize = 0; + var children = this.getChildren(); + + dojo.forEach(children, function(child){ + totalSize += child.sizeActual; + totalMinSize += child.sizeMin; + }); + + // only make adjustments if we have enough space for all the minimums + + if(totalMinSize <= totalSize){ + + var growth = 0; + + dojo.forEach(children, function(child){ + if(child.sizeActual < child.sizeMin){ + growth += child.sizeMin - child.sizeActual; + child.sizeActual = child.sizeMin; + } + }); + + if(growth > 0){ + var list = this.isDraggingLeft ? children.reverse() : children; + dojo.forEach(list, function(child){ + growth = this._growPane(growth, child); + }, this); + } + }else{ + dojo.forEach(children, function(child){ + child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize)); + }); + } + }, + + beginSizing: function(e, i){ + var children = this.getChildren(); + this.paneBefore = children[i]; + this.paneAfter = children[i+1]; + + this.isSizing = true; + this.sizingSplitter = this.sizers[i]; + + if(!this.cover){ + this.cover = dojo.doc.createElement('div'); + this.domNode.appendChild(this.cover); + var s = this.cover.style; + s.position = 'absolute'; + s.zIndex = 1; + s.top = 0; + s.left = 0; + s.width = "100%"; + s.height = "100%"; + }else{ + this.cover.style.zIndex = 1; + } + this.sizingSplitter.style.zIndex = 2; + + // TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet + this.originPos = dojo.coords(children[0].domNode, true); + if(this.isHorizontal){ + var client = (e.layerX ? e.layerX : e.offsetX); + var screen = e.pageX; + this.originPos = this.originPos.x; + }else{ + var client = (e.layerY ? e.layerY : e.offsetY); + var screen = e.pageY; + this.originPos = this.originPos.y; + } + this.startPoint = this.lastPoint = screen; + this.screenToClientOffset = screen - client; + this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position; + + if(!this.activeSizing){ + this._showSizingLine(); + } + + // + // attach mouse events + // + this.connect(document.documentElement, "onmousemove", "changeSizing"); + this.connect(document.documentElement, "onmouseup", "endSizing"); + + dojo.stopEvent(e); + }, + + changeSizing: function(e){ + if(!this.isSizing){ return; } + this.lastPoint = this.isHorizontal ? e.pageX : e.pageY; + this.movePoint(); + if(this.activeSizing){ + this._updateSize(); + }else{ + this._moveSizingLine(); + } + dojo.stopEvent(e); + }, + + endSizing: function(e){ + if(!this.isSizing){ return; } + if(this.cover){ + this.cover.style.zIndex = -1; + } + if(!this.activeSizing){ + this._hideSizingLine(); + } + + this._updateSize(); + + this.isSizing = false; + + if(this.persist){ + this._saveState(this); + } + }, + + movePoint: function(){ + + // make sure lastPoint is a legal point to drag to + var p = this.lastPoint - this.screenToClientOffset; + + var a = p - this.dragOffset; + a = this.legaliseSplitPoint(a); + p = a + this.dragOffset; + + this.lastPoint = p + this.screenToClientOffset; + }, + + legaliseSplitPoint: function(a){ + + a += this.sizingSplitter.position; + + this.isDraggingLeft = !!(a > 0); + + if(!this.activeSizing){ + var min = this.paneBefore.position + this.paneBefore.sizeMin; + if(a < min){ + a = min; + } + + var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin)); + if(a > max){ + a = max; + } + } + + a -= this.sizingSplitter.position; + + this._checkSizes(); + + return a; + }, + + _updateSize: function(){ + //FIXME: sometimes this.lastPoint is NaN + var pos = this.lastPoint - this.dragOffset - this.originPos; + + var start_region = this.paneBefore.position; + var end_region = this.paneAfter.position + this.paneAfter.sizeActual; + + this.paneBefore.sizeActual = pos - start_region; + this.paneAfter.position = pos + this.sizerWidth; + this.paneAfter.sizeActual = end_region - this.paneAfter.position; + + dojo.forEach(this.getChildren(), function(child){ + child.sizeShare = child.sizeActual; + }); + + if(this._started){ + this.layout(); + } + }, + + _showSizingLine: function(){ + + this._moveSizingLine(); + + dojo.marginBox(this.virtualSizer, + this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth }); + + this.virtualSizer.style.display = 'block'; + }, + + _hideSizingLine: function(){ + this.virtualSizer.style.display = 'none'; + }, + + _moveSizingLine: function(){ + var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position; + this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; + }, + + _getCookieName: function(i){ + return this.id + "_" + i; + }, + + _restoreState: function(){ + dojo.forEach(this.getChildren(), function(child, i){ + var cookieName = this._getCookieName(i); + var cookieValue = dojo.cookie(cookieName); + if(cookieValue){ + var pos = parseInt(cookieValue); + if(typeof pos == "number"){ + child.sizeShare = pos; + } + } + }, this); + }, + + _saveState: function(){ + dojo.forEach(this.getChildren(), function(child, i){ + dojo.cookie(this._getCookieName(i), child.sizeShare); + }, this); + } +}); + +// These arguments can be specified for the children of a SplitContainer. +// Since any widget can be specified as a SplitContainer child, mix them +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget, { + // sizeMin: Integer + // Minimum size (width or height) of a child of a SplitContainer. + // The value is relative to other children's sizeShare properties. + sizeMin: 10, + + // sizeShare: Integer + // Size (width or height) of a child of a SplitContainer. + // The value is relative to other children's sizeShare properties. + // For example, if there are two children and each has sizeShare=10, then + // each takes up 50% of the available space. + sizeShare: 10 +}); + +} + +if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.TabContainer"] = true; +dojo.provide("dijit.layout.TabContainer"); + + + + +dojo.declare( + "dijit.layout.TabContainer", + [dijit.layout.StackContainer, dijit._Templated], +{ + // summary + // A TabContainer is a container that has multiple panes, but shows only + // one pane at a time. There are a set of tabs corresponding to each pane, + // where each tab has the title (aka title) of the pane, and optionally a close button. + // + // Publishes topics -addChild, -removeChild, and -selectChild + // (where is the id of the TabContainer itself. + + // tabPosition: String + // Defines where tabs go relative to tab content. + // "top", "bottom", "left-h", "right-h" + tabPosition: "top", + + templateString: null, // override setting in StackContainer + templateString:"
    \n\t
    \n\t
    \n
    \n", + + postCreate: function(){ + dijit.layout.TabContainer.superclass.postCreate.apply(this, arguments); + // create the tab list that will have a tab (a.k.a. tab button) for each tab panel + this.tablist = new dijit.layout.TabController( + { + id: this.id + "_tablist", + tabPosition: this.tabPosition, + doLayout: this.doLayout, + containerId: this.id + }, this.tablistNode); + }, + + _setupChild: function(tab){ + dojo.addClass(tab.domNode, "dijitTabPane"); + dijit.layout.TabContainer.superclass._setupChild.apply(this, arguments); + return tab; + }, + + startup: function(){ + if(this._started){ return; } + + // wire up the tablist and its tabs + this.tablist.startup(); + dijit.layout.TabContainer.superclass.startup.apply(this, arguments); + + if(dojo.isSafari){ + // sometimes safari 3.0.3 miscalculates the height of the tab labels, see #4058 + setTimeout(dojo.hitch(this, "layout"), 0); + } + }, + + layout: function(){ + // Summary: Configure the content pane to take up all the space except for where the tabs are + if(!this.doLayout){ return; } + + // position and size the titles and the container node + var titleAlign=this.tabPosition.replace(/-h/,""); + var children = [ + {domNode: this.tablist.domNode, layoutAlign: titleAlign}, + {domNode: this.containerNode, layoutAlign: "client"} + ]; + dijit.layout.layoutChildren(this.domNode, this._contentBox, children); + + // Compute size to make each of my children. + // children[1] is the margin-box size of this.containerNode, set by layoutChildren() call above + this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[1]); + + if(this.selectedChildWidget){ + this._showChild(this.selectedChildWidget); + if(this.doLayout && this.selectedChildWidget.resize){ + this.selectedChildWidget.resize(this._containerContentBox); + } + } + }, + + destroy: function(){ + this.tablist.destroy(); + dijit.layout.TabContainer.superclass.destroy.apply(this, arguments); + } +}); + +//TODO: make private? +dojo.declare( + "dijit.layout.TabController", + dijit.layout.StackController, + { + // summary + // Set of tabs (the things with titles and a close button, that you click to show a tab panel). + // Lets the user select the currently shown pane in a TabContainer or StackContainer. + // TabController also monitors the TabContainer, and whenever a pane is + // added or deleted updates itself accordingly. + + templateString: "
    ", + + // tabPosition: String + // Defines where tabs go relative to the content. + // "top", "bottom", "left-h", "right-h" + tabPosition: "top", + + doLayout: true, + + // buttonWidget: String + // the name of the tab widget to create to correspond to each page + buttonWidget: "dijit.layout._TabButton", + + postMixInProperties: function(){ + this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout"); + dijit.layout.TabController.superclass.postMixInProperties.apply(this, arguments); + } + } +); + +dojo.declare( + "dijit.layout._TabButton", dijit.layout._StackButton, +{ + // summary + // A tab (the thing you click to select a pane). + // Contains the title of the pane, and optionally a close-button to destroy the pane. + // This is an internal widget and should not be instantiated directly. + + baseClass: "dijitTab", + + templateString: "
    " + +"
    " + +"${!label}" + +"" + +"x" + +"" + +"
    " + +"
    ", + + postCreate: function(){ + if(this.closeButton){ + dojo.addClass(this.innerDiv, "dijitClosable"); + } else { + this.closeButtonNode.style.display="none"; + } + dijit.layout._TabButton.superclass.postCreate.apply(this, arguments); + dojo.setSelectable(this.containerNode, false); + } +}); + +} + +if(!dojo._hasResource["dijit.dijit-all"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.dijit-all"] = true; +console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool"); +dojo.provide("dijit.dijit-all"); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + + +dojo.i18n._preloadLocalizations("dijit.nls.dijit-all", ["ROOT", "es-es", "es", "it-it", "pt-br", "de", "fr-fr", "zh-cn", "pt", "en-us", "zh", "fr", "zh-tw", "it", "en-gb", "xx", "de-de", "ko-kr", "ja-jp", "ko", "en", "ja"]); diff --git a/spring-faces/src/main/java/META-INF/dijit/dijit.js b/spring-faces/src/main/java/META-INF/dijit/dijit.js new file mode 100644 index 00000000..5a18ff66 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/dijit.js @@ -0,0 +1,20 @@ +/* + Copyright (c) 2004-2007, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){var _1=dojo.global;var _2=dojo.doc;if(_2.selection){return !_2.selection.createRange().text;}else{if(_1.getSelection){var _3=_1.getSelection();if(dojo.isString(_3)){return !_3;}else{return _3.isCollapsed||!_3.toString();}}}},getBookmark:function(){var _4,_5=dojo.doc.selection;if(_5){var _6=_5.createRange();if(_5.type.toUpperCase()=="CONTROL"){_4=_6.length?dojo._toArray(_6):null;}else{_4=_6.getBookmark();}}else{if(dojo.global.getSelection){_5=dojo.global.getSelection();if(_5){var _6=_5.getRangeAt(0);_4=_6.cloneRange();}}else{console.debug("No idea how to store the current selection for this browser!");}}return _4;},moveToBookmark:function(_7){var _8=dojo.doc;if(_8.selection){var _9;if(dojo.isArray(_7)){_9=_8.body.createControlRange();dojo.forEach(_7,_9.addElement);}else{_9=_8.selection.createRange();_9.moveToBookmark(_7);}_9.select();}else{var _a=dojo.global.getSelection&&dojo.global.getSelection();if(_a&&_a.removeAllRanges){_a.removeAllRanges();_a.addRange(_7);}else{console.debug("No idea how to restore selection for this browser!");}}},getFocus:function(_b,_c){return {node:_b&&dojo.isDescendant(dijit._curFocus,_b.domNode)?dijit._prevFocus:dijit._curFocus,bookmark:!dojo.withGlobal(_c||dojo.global,dijit.isCollapsed)?dojo.withGlobal(_c||dojo.global,dijit.getBookmark):null,openedForWindow:_c};},focus:function(_d){if(!_d){return;}var _e="node" in _d?_d.node:_d,_f=_d.bookmark,_10=_d.openedForWindow;if(_e){var _11=(_e.tagName.toLowerCase()=="iframe")?_e.contentWindow:_e;if(_11&&_11.focus){try{_11.focus();}catch(e){}}dijit._onFocusNode(_e);}if(_f&&dojo.withGlobal(_10||dojo.global,dijit.isCollapsed)){if(_10){_10.focus();}try{dojo.withGlobal(_10||dojo.global,moveToBookmark,null,[_f]);}catch(e){}}},_activeStack:[],registerWin:function(_12){if(!_12){_12=window;}dojo.connect(_12.document,"onmousedown",null,function(evt){dijit._ignoreNextBlurEvent=true;setTimeout(function(){dijit._ignoreNextBlurEvent=false;},0);dijit._onTouchNode(evt.target||evt.srcElement);});var _14=_12.document.body||_12.document.getElementsByTagName("body")[0];if(_14){if(dojo.isIE){_14.attachEvent("onactivate",function(evt){if(evt.srcElement.tagName.toLowerCase()!="body"){dijit._onFocusNode(evt.srcElement);}});_14.attachEvent("ondeactivate",function(evt){dijit._onBlurNode();});}else{_14.addEventListener("focus",function(evt){dijit._onFocusNode(evt.target);},true);_14.addEventListener("blur",function(evt){dijit._onBlurNode();},true);}}},_onBlurNode:function(){if(dijit._ignoreNextBlurEvent){dijit._ignoreNextBlurEvent=false;return;}dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._blurAllTimer){clearTimeout(dijit._blurAllTimer);}dijit._blurAllTimer=setTimeout(function(){delete dijit._blurAllTimer;dijit._setStack([]);},100);},_onTouchNode:function(_19){if(dijit._blurAllTimer){clearTimeout(dijit._blurAllTimer);delete dijit._blurAllTimer;}var _1a=[];try{while(_19){if(_19.dijitPopupParent){_19=dijit.byId(_19.dijitPopupParent).domNode;}else{if(_19.tagName&&_19.tagName.toLowerCase()=="body"){if(_19===dojo.body()){break;}_19=dojo.query("iframe").filter(function(_1b){return _1b.contentDocument.body===_19;})[0];}else{var id=_19.getAttribute&&_19.getAttribute("widgetId");if(id){_1a.unshift(id);}_19=_19.parentNode;}}}}catch(e){}dijit._setStack(_1a);},_onFocusNode:function(_1d){if(_1d&&_1d.tagName&&_1d.tagName.toLowerCase()=="body"){return;}dijit._onTouchNode(_1d);if(_1d==dijit._curFocus){return;}dijit._prevFocus=dijit._curFocus;dijit._curFocus=_1d;dojo.publish("focusNode",[_1d]);var w=dijit.byId(_1d.id);if(w&&w._setStateClass){w._focused=true;w._setStateClass();var _1f=dojo.connect(_1d,"onblur",function(){w._focused=false;w._setStateClass();dojo.disconnect(_1f);});}},_setStack:function(_20){var _21=dijit._activeStack;dijit._activeStack=_20;for(var _22=0;_22=_22;i--){var _24=dijit.byId(_21[i]);if(_24){dojo.publish("widgetBlur",[_24]);if(_24._onBlur){_24._onBlur();}}}for(var i=_22;i<_20.length;i++){var _24=dijit.byId(_20[i]);if(_24){dojo.publish("widgetFocus",[_24]);if(_24._onFocus){_24._onFocus();}}}}});dojo.addOnLoad(dijit.registerWin);}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};},add:function(_25){this._hash[_25.id]=_25;},remove:function(id){delete this._hash[id];},forEach:function(_27){for(var id in this._hash){_27(this._hash[id]);}},filter:function(_29){var res=new dijit.WidgetSet();this.forEach(function(_2b){if(_29(_2b)){res.add(_2b);}});return res;},byId:function(id){return this._hash[id];},byClass:function(cls){return this.filter(function(_2e){return _2e.declaredClass==cls;});}});dijit.registry=new dijit.WidgetSet();dijit._widgetTypeCtr={};dijit.getUniqueId=function(_2f){var id;do{id=_2f+"_"+(dijit._widgetTypeCtr[_2f]!==undefined?++dijit._widgetTypeCtr[_2f]:dijit._widgetTypeCtr[_2f]=0);}while(dijit.byId(id));return id;};if(dojo.isIE){dojo.addOnUnload(function(){dijit.registry.forEach(function(_31){_31.destroy();});});}dijit.byId=function(id){return (dojo.isString(id))?dijit.registry.byId(id):id;};dijit.byNode=function(_33){return dijit.registry.byId(_33.getAttribute("widgetId"));};}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){var _34=dojo.global;var _35=dojo.doc;var w=0,h=0;if(dojo.isMozilla){w=_35.documentElement.clientWidth;h=_34.innerHeight;}else{if(!dojo.isOpera&&_34.innerWidth){w=_34.innerWidth;h=_34.innerHeight;}else{if(dojo.isIE&&_35.documentElement&&_35.documentElement.clientHeight){w=_35.documentElement.clientWidth;h=_35.documentElement.clientHeight;}else{if(dojo.body().clientWidth){w=dojo.body().clientWidth;h=dojo.body().clientHeight;}}}}var _38=dojo._docScroll();return {w:w,h:h,l:_38.x,t:_38.y};};dijit.placeOnScreen=function(_39,pos,_3b,_3c){var _3d=dojo.map(_3b,function(_3e){return {corner:_3e,pos:pos};});return dijit._place(_39,_3d);};dijit._place=function(_3f,_40,_41){var _42=dijit.getViewport();if(!_3f.parentNode||String(_3f.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_3f);}var _43=null;for(var i=0;i<_40.length;i++){var _45=_40[i].corner;var pos=_40[i].pos;if(_41){_41(_45);}var _47=_3f.style.display;var _48=_3f.style.visibility;_3f.style.visibility="hidden";_3f.style.display="";var mb=dojo.marginBox(_3f);_3f.style.display=_47;_3f.style.visibility=_48;var _4a=(_45.charAt(1)=="L"?pos.x:Math.max(_42.l,pos.x-mb.w)),_4b=(_45.charAt(0)=="T"?pos.y:Math.max(_42.t,pos.y-mb.h)),_4c=(_45.charAt(1)=="L"?Math.min(_42.l+_42.w,_4a+mb.w):pos.x),_4d=(_45.charAt(0)=="T"?Math.min(_42.t+_42.h,_4b+mb.h):pos.y),_4e=_4c-_4a,_4f=_4d-_4b,_50=(mb.w-_4e)+(mb.h-_4f);if(_43==null||_50<_43.overflow){_43={corner:_45,aroundCorner:_40[i].aroundCorner,x:_4a,y:_4b,w:_4e,h:_4f,overflow:_50};}if(_50==0){break;}}_3f.style.left=_43.x+"px";_3f.style.top=_43.y+"px";return _43;};dijit.placeOnScreenAroundElement=function(_51,_52,_53,_54){_52=dojo.byId(_52);var _55=_52.style.display;_52.style.display="";var _56=_52.offsetWidth;var _57=_52.offsetHeight;var _58=dojo.coords(_52,true);_52.style.display=_55;var _59=[];for(var _5a in _53){_59.push({aroundCorner:_5a,corner:_53[_5a],pos:{x:_58.x+(_5a.charAt(1)=="L"?0:_56),y:_58.y+(_5a.charAt(0)=="T"?0:_57)}});}return dijit._place(_51,_59,_54);};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){if(dojo.isSafari&&!doc._parentWindow){var fix=function(win){win.document._parentWindow=win;for(var i=0;i";_74=dojo.doc.createElement(_75);}else{var _74=dojo.doc.createElement("iframe");_74.src="javascript:\"\"";_74.className="dijitBackgroundIframe";}_74.tabIndex=-1;dojo.body().appendChild(_74);}return _74;};this.push=function(_76){_76.style.display="";if(dojo.isIE){_76.style.removeExpression("width");_76.style.removeExpression("height");}_73.push(_76);};}();if(dojo.isIE&&dojo.isIE<7){dojo.addOnLoad(function(){var f=dijit._frames;dojo.forEach([f.pop()],f.push);});}dijit.BackgroundIframe=function(_78){if(!_78.id){throw new Error("no id");}if((dojo.isIE&&dojo.isIE<7)||(dojo.isFF&&dojo.isFF<3&&dojo.hasClass(dojo.body(),"dijit_a11y"))){var _79=dijit._frames.pop();_78.appendChild(_79);if(dojo.isIE){_79.style.setExpression("width","document.getElementById('"+_78.id+"').offsetWidth");_79.style.setExpression("height","document.getElementById('"+_78.id+"').offsetHeight");}this.iframe=_79;}};dojo.extend(dijit.BackgroundIframe,{destroy:function(){if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_7a){if(dojo.isIE){if(dojo.marginBox(_7a.parentNode).h<=_7a.parentNode.scrollHeight){_7a.scrollIntoView(false);}}else{if(dojo.isMozilla){_7a.scrollIntoView(false);}else{var _7b=_7a.parentNode;var _7c=_7b.scrollTop+dojo.marginBox(_7b).h;var _7d=_7a.offsetTop+dojo.marginBox(_7a).h;if(_7c<_7d){_7b.scrollTop+=(_7d-_7c);}else{if(_7b.scrollTop>_7a.offsetTop){_7b.scrollTop-=(_7b.scrollTop-_7a.offsetTop);}}}}};}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");(function(){var d=dojo;var ie=d.isIE;var _80=d.isOpera;var maj=Math.floor;var _82={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_iequirks:ie&&d.isQuirks,dj_opera:_80,dj_opera8:maj(_80)==8,dj_opera9:maj(_80)==9,dj_khtml:d.isKhtml,dj_safari:d.isSafari,dj_gecko:d.isMozilla};for(var p in _82){if(_82[p]){var _84=dojo.doc.documentElement;if(_84.className){_84.className+=" "+p;}else{_84.className=p;}}}})();}if(!dojo._hasResource["dijit._base.bidi"]){dojo._hasResource["dijit._base.bidi"]=true;dojo.provide("dijit._base.bidi");dojo.addOnLoad(function(){if(!dojo._isBodyLtr()){dojo.addClass(dojo.body(),"dijitRtl");}});}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=(this._currentTimeout<0)?this._initialDelay:((this._subsequentDelay>1)?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay));this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_86,_87,_88,obj,_8a,_8b){if(obj!=this._obj){this.stop();this._initialDelay=_8b?_8b:500;this._subsequentDelay=_8a?_8a:0.9;this._obj=obj;this._evt=evt;this._node=_87;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_86,_88);this._fireEventAndReload();}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_8c,_8d,_8e,_8f,_90,_91){var ary=[];ary.push(dojo.connect(_8c,"onkeypress",this,function(evt){if(evt.keyCode==_8d.keyCode&&(!_8d.charCode||_8d.charCode==evt.charCode)&&((typeof _8d.ctrlKey=="undefined")||_8d.ctrlKey==evt.ctrlKey)&&((typeof _8d.altKey=="undefined")||_8d.altKey==evt.ctrlKey)&&((typeof _8d.shiftKey=="undefined")||_8d.shiftKey==evt.ctrlKey)){dojo.stopEvent(evt);dijit.typematic.trigger(_8d,_8e,_8c,_8f,_8d,_90,_91);}else{if(dijit.typematic._obj==_8d){dijit.typematic.stop();}}}));ary.push(dojo.connect(_8c,"onkeyup",this,function(evt){if(dijit.typematic._obj==_8d){dijit.typematic.stop();}}));return ary;},addMouseListener:function(_95,_96,_97,_98,_99){var ary=[];ary.push(dojo.connect(_95,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_96,_95,_97,_95,_98,_99);}));ary.push(dojo.connect(_95,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}));ary.push(dojo.connect(_95,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}));ary.push(dojo.connect(_95,"mousemove",this,function(evt){dojo.stopEvent(evt);}));ary.push(dojo.connect(_95,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_96,_95,_97,_95,_98,_99);setTimeout("dijit.typematic.stop()",50);}}));return ary;},addListener:function(_a0,_a1,_a2,_a3,_a4,_a5,_a6){return this.addKeyListener(_a1,_a2,_a3,_a4,_a5,_a6).concat(this.addMouseListener(_a0,_a3,_a4,_a5,_a6));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.waiNames=["waiRole","waiState"];dijit.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(_a7,ns,_a9,_aa){if(dojo.isIE){_a7.setAttribute(this[ns].alias+":"+_a9,this[ns].prefix+_aa);}else{_a7.setAttributeNS(this[ns]["namespace"],_a9,this[ns].prefix+_aa);}},getAttr:function(_ab,ns,_ad){if(dojo.isIE){return _ab.getAttribute(this[ns].alias+":"+_ad);}else{return _ab.getAttributeNS(this[ns]["namespace"],_ad);}},removeAttr:function(_ae,ns,_b0){var _b1=true;if(dojo.isIE){_b1=_ae.removeAttribute(this[ns].alias+":"+_b0);}else{_ae.removeAttributeNS(this[ns]["namespace"],_b0);}return _b1;},onload:function(){var div=document.createElement("div");div.id="a11yTestNode";div.style.cssText="border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"left: -999px;"+"top: -999px;"+"background-image: url(\""+dojo.moduleUrl("dijit","form/templates/blank.gif")+"\");";dojo.body().appendChild(div);function check(){var cs=dojo.getComputedStyle(div);if(cs){var _b4=cs.backgroundImage;var _b5=(cs.borderTopColor==cs.borderRightColor)||(_b4!=null&&(_b4=="none"||_b4=="url(invalid-url:)"));dojo[_b5?"addClass":"removeClass"](dojo.body(),"dijit_a11y");}};check();if(dojo.isIE){setInterval(check,4000);}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_b6,_b7){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _b8=dojo.date.stamp._isoRegExp.exec(_b6);var _b9=null;if(_b8){_b8.shift();_b8[1]&&_b8[1]--;_b8[6]&&(_b8[6]*=1000);if(_b7){_b7=new Date(_b7);dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_ba){return _b7["get"+_ba]();}).forEach(function(_bb,_bc){if(_b8[_bc]===undefined){_b8[_bc]=_bb;}});}_b9=new Date(_b8[0]||1970,_b8[1]||0,_b8[2]||0,_b8[3]||0,_b8[4]||0,_b8[5]||0,_b8[6]||0);var _bd=0;var _be=_b8[7]&&_b8[7].charAt(0);if(_be!="Z"){_bd=((_b8[8]||0)*60)+(Number(_b8[9])||0);if(_be!="-"){_bd*=-1;}}if(_be){_bd-=_b9.getTimezoneOffset();}if(_bd){_b9.setTime(_b9.getTime()+_bd*60000);}}return _b9;};dojo.date.stamp.toISOString=function(_bf,_c0){var _=function(n){return (n<10)?"0"+n:n;};_c0=_c0||{};var _c3=[];var _c4=_c0.zulu?"getUTC":"get";var _c5="";if(_c0.selector!="time"){_c5=[_bf[_c4+"FullYear"](),_(_bf[_c4+"Month"]()+1),_(_bf[_c4+"Date"]())].join("-");}_c3.push(_c5);if(_c0.selector!="date"){var _c6=[_(_bf[_c4+"Hours"]()),_(_bf[_c4+"Minutes"]()),_(_bf[_c4+"Seconds"]())].join(":");var _c7=_bf[_c4+"Milliseconds"]();if(_c0.milliseconds){_c6+="."+(_c7<100?"0":"")+_(_c7);}if(_c0.zulu){_c6+="Z";}else{var _c8=_bf.getTimezoneOffset();var _c9=Math.abs(_c8);_c6+=(_c8>0?"-":"+")+_(Math.floor(_c9/60))+":"+_(_c9%60);}_c3.push(_c6);}return _c3.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");dojo.parser=new function(){var d=dojo;function val2type(_cb){if(d.isString(_cb)){return "string";}if(typeof _cb=="number"){return "number";}if(typeof _cb=="boolean"){return "boolean";}if(d.isFunction(_cb)){return "function";}if(d.isArray(_cb)){return "array";}if(_cb instanceof Date){return "date";}if(_cb instanceof d._Url){return "url";}return "object";};function str2obj(_cc,_cd){switch(_cd){case "string":return _cc;case "number":return _cc.length?Number(_cc):NaN;case "boolean":return typeof _cc=="boolean"?_cc:!(_cc.toLowerCase()=="false");case "function":if(d.isFunction(_cc)){_cc=_cc.toString();_cc=d.trim(_cc.substring(_cc.indexOf("{")+1,_cc.length-1));}try{if(_cc.search(/[^\w\.]+/i)!=-1){_cc=d.parser._nameAnonFunc(new Function(_cc),this);}return d.getObject(_cc,false);}catch(e){return new Function();}case "array":return _cc.split(/\s*,\s*/);case "date":switch(_cc){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_cc);}case "url":return d.baseUrl+_cc;default:return d.fromJson(_cc);}};var _ce={};function getClassInfo(_cf){if(!_ce[_cf]){var cls=d.getObject(_cf);if(!d.isFunction(cls)){throw new Error("Could not load class '"+_cf+"'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");}var _d1=cls.prototype;var _d2={};for(var _d3 in _d1){if(_d3.charAt(0)=="_"){continue;}var _d4=_d1[_d3];_d2[_d3]=val2type(_d4);}_ce[_cf]={cls:cls,params:_d2};}return _ce[_cf];};this._functionFromScript=function(_d5){var _d6="";var _d7="";var _d8=_d5.getAttribute("args");if(_d8){d.forEach(_d8.split(/\s*,\s*/),function(_d9,idx){_d6+="var "+_d9+" = arguments["+idx+"]; ";});}var _db=_d5.getAttribute("with");if(_db&&_db.length){d.forEach(_db.split(/\s*,\s*/),function(_dc){_d6+="with("+_dc+"){";_d7+="}";});}return new Function(_d6+_d5.innerHTML+_d7);};this._wireUpMethod=function(_dd,_de){var nf=this._functionFromScript(_de);var _e0=_de.getAttribute("event");if(_e0){var _e1=_de.getAttribute("type");if(_e1&&(_e1=="dojo/connect")){d.connect(_dd,_e0,null,nf);}else{_dd[_e0]=nf;}}else{nf.call(_dd);}};this.instantiate=function(_e2){var _e3=[];d.forEach(_e2,function(_e4){if(!_e4){return;}var _e5=_e4.getAttribute("dojoType");if((!_e5)||(!_e5.length)){return;}var _e6=getClassInfo(_e5);var _e7=_e6.cls;var ps=_e7._noScript||_e7.prototype._noScript;var _e9={};var _ea=_e4.attributes;for(var _eb in _e6.params){var _ec=_ea.getNamedItem(_eb);if(!_ec||(!_ec.specified&&(!dojo.isIE||_eb.toLowerCase()!="value"))){continue;}var _ed=_e6.params[_eb];_e9[_eb]=str2obj(_ec.value,_ed);}if(!ps){var _ee=d.query("> script[type='dojo/method'][event='preamble']",_e4).orphan();if(_ee.length){_e9.preamble=d.parser._functionFromScript(_ee[0]);}var _ef=d.query("> script[type^='dojo/']",_e4).orphan();}var _f0=_e7["markupFactory"];if(!_f0&&_e7["prototype"]){_f0=_e7.prototype["markupFactory"];}var _f1=_f0?_f0(_e9,_e4,_e7):new _e7(_e9,_e4);_e3.push(_f1);var _f2=_e4.getAttribute("jsId");if(_f2){d.setObject(_f2,_f1);}if(!ps){_ef.forEach(function(_f3){d.parser._wireUpMethod(_f1,_f3);});}});d.forEach(_e3,function(_f4){if(_f4&&(_f4.startup)&&((!_f4.getParent)||(!_f4.getParent()))){_f4.startup();}});return _e3;};this.parse=function(_f5){var _f6=d.query("[dojoType]",_f5);var _f7=this.instantiate(_f6);return _f7;};}();(function(){var _f8=function(){if(djConfig["parseOnLoad"]==true){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_f8);}else{dojo._loaders.unshift(_f8);}})();dojo.parser._anonCtr=0;dojo.parser._anon={};dojo.parser._nameAnonFunc=function(_f9,_fa){var jpn="$joinpoint";var nso=(_fa||dojo.parser._anon);if(dojo.isIE){var cn=_f9["__dojoNameCache"];if(cn&&nso[cn]===_f9){return _f9["__dojoNameCache"];}}var ret="__"+dojo.parser._anonCtr++;while(typeof nso[ret]!="undefined"){ret="__"+dojo.parser._anonCtr++;}nso[ret]=_f9;return ret;};}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.declare("dijit._Widget",null,{constructor:function(_ff,_100){this.create(_ff,_100);},id:"",lang:"",dir:"",srcNodeRef:null,domNode:null,create:function(_101,_102){this.srcNodeRef=dojo.byId(_102);this._connects=[];this._attaches=[];if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_101){dojo.mixin(this,_101);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this.domNode.setAttribute("widgetId",this.id);if(this.srcNodeRef&&this.srcNodeRef.dir){this.domNode.dir=this.srcNodeRef.dir;}}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef;},postCreate:function(){},startup:function(){},destroyRecursive:function(_103){this.destroyDescendants();this.destroy();},destroy:function(_104){this.uninitialize();dojo.forEach(this._connects,function(_105){dojo.forEach(_105,dojo.disconnect);});this.destroyRendering(_104);dijit.registry.remove(this.id);},destroyRendering:function(_106){if(this.bgIframe){this.bgIframe.destroy();delete this.bgIframe;}if(this.domNode){dojo._destroyElement(this.domNode);delete this.domNode;}if(this.srcNodeRef){dojo._destroyElement(this.srcNodeRef);delete this.srcNodeRef;}},destroyDescendants:function(){dojo.forEach(this.getDescendants(),function(_107){_107.destroy();});},uninitialize:function(){return false;},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){var list=dojo.query("[widgetId]",this.domNode);return list.map(dijit.byNode);},nodesWithKeyClick:["input","button"],connect:function(obj,_10a,_10b){var _10c=[];if(_10a=="ondijitclick"){var w=this;if(!this.nodesWithKeyClick[obj.nodeName]){_10c.push(dojo.connect(obj,"onkeydown",this,function(e){if(e.keyCode==dojo.keys.ENTER){return (dojo.isString(_10b))?w[_10b](e):_10b.call(w,e);}else{if(e.keyCode==dojo.keys.SPACE){dojo.stopEvent(e);}}}));_10c.push(dojo.connect(obj,"onkeyup",this,function(e){if(e.keyCode==dojo.keys.SPACE){return dojo.isString(_10b)?w[_10b](e):_10b.call(w,e);}}));}_10a="onclick";}_10c.push(dojo.connect(obj,_10a,this,_10b));this._connects.push(_10c);return _10c;},disconnect:function(_110){for(var i=0;i0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateNode:null,templateString:null,templatePath:null,widgetsInTemplate:false,containerNode:null,buildRendering:function(){var _121=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString);var node;if(dojo.isString(_121)){var _123=this.declaredClass,_124=this;var tstr=dojo.string.substitute(_121,this,function(_126,key){if(key.charAt(0)=="!"){_126=_124[key.substr(1)];}if(typeof _126=="undefined"){throw new Error(_123+" template:"+key);}return key.charAt(0)=="!"?_126:_126.toString().replace(/"/g,""");},this);node=dijit._Templated._createNodesFromText(tstr)[0];}else{node=_121.cloneNode(true);}this._attachTemplateNodes(node);if(this.srcNodeRef){dojo.style(this.styleNode||node,"cssText",this.srcNodeRef.style.cssText);if(this.srcNodeRef.className){node.className+=" "+this.srcNodeRef.className;}}this.domNode=node;if(this.srcNodeRef&&this.srcNodeRef.parentNode){this.srcNodeRef.parentNode.replaceChild(this.domNode,this.srcNodeRef);}if(this.widgetsInTemplate){var _128=dojo.parser.parse(this.domNode);this._attachTemplateNodes(_128,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_12b){var dest=this.containerNode;if(_12b&&dest){while(_12b.hasChildNodes()){dest.appendChild(_12b.firstChild);}}},_attachTemplateNodes:function(_12d,_12e){_12e=_12e||function(n,p){return n.getAttribute(p);};var _131=dojo.isArray(_12d)?_12d:(_12d.all||_12d.getElementsByTagName("*"));var x=dojo.isArray(_12d)?0:-1;for(;x<_131.length;x++){var _133=(x==-1)?_12d:_131[x];if(this.widgetsInTemplate&&_12e(_133,"dojoType")){continue;}var _134=_12e(_133,"dojoAttachPoint");if(_134){var _135,_136=_134.split(/\s*,\s*/);while(_135=_136.shift()){if(dojo.isArray(this[_135])){this[_135].push(_133);}else{this[_135]=_133;}}}var _137=_12e(_133,"dojoAttachEvent");if(_137){var _138,_139=_137.split(/\s*,\s*/);var trim=dojo.trim;while(_138=_139.shift()){if(_138){var _13b=null;if(_138.indexOf(":")!=-1){var _13c=_138.split(":");_138=trim(_13c[0]);_13b=trim(_13c[1]);}else{_138=trim(_138);}if(!_13b){_13b=_138;}this.connect(_133,_138,_13b);}}}var name,_13e=["waiRole","waiState"];while(name=_13e.shift()){var wai=dijit.wai[name];var _140=_12e(_133,wai.name);if(_140){var role="role";var val;_140=_140.split(/\s*,\s*/);while(val=_140.shift()){if(val.indexOf("-")!=-1){var _143=val.split("-");role=_143[0];val=_143[1];}dijit.wai.setAttr(_133,wai.name,role,val);}}}}}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_144,_145){var _146=dijit._Templated._templateCache;var key=_145||_144;var _148=_146[key];if(_148){return _148;}if(!_145){_145=dijit._Templated._sanitizeTemplateString(dojo._getText(_144));}_145=dojo.string.trim(_145);if(_145.match(/\$\{([^\}]+)\}/g)){return (_146[key]=_145);}else{return (_146[key]=dijit._Templated._createNodesFromText(_145)[0]);}};dijit._Templated._sanitizeTemplateString=function(_149){if(_149){_149=_149.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _14a=_149.match(/]*>\s*([\s\S]+)\s*<\/body>/im);if(_14a){_149=_14a[1];}}else{_149="";}return _149;};if(dojo.isIE){dojo.addOnUnload(function(){var _14b=dijit._Templated._templateCache;for(var key in _14b){var _14d=_14b[key];if(!isNaN(_14d.nodeType)){dojo._destroyElement(_14d);}_14b[key]=null;}});}(function(){var _14e={cell:{re:/^]/i,pre:"",post:"
    "},row:{re:/^]/i,pre:"",post:"
    "},section:{re:/^<(thead|tbody|tfoot)[\s\r\n>]/i,pre:"",post:"
    "}};var tn;dijit._Templated._createNodesFromText=function(text){if(!tn){tn=dojo.doc.createElement("div");tn.style.display="none";}var _151="none";var _152=text.replace(/^\s+/,"");for(var type in _14e){var map=_14e[type];if(map.re.test(_152)){_151=type;text=map.pre+text+map.post;break;}}tn.innerHTML=text;dojo.body().appendChild(tn);if(tn.normalize){tn.normalize();}var tag={cell:"tr",row:"tbody",section:"table"}[_151];var _156=(typeof tag!="undefined")?tn.getElementsByTagName(tag)[0]:tn;var _157=[];while(_156.firstChild){_157.push(_156.removeChild(_156.firstChild));}tn.innerHTML="";return _157;};})();dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit._Container"]){dojo._hasResource["dijit._Container"]=true;dojo.provide("dijit._Container");dojo.declare("dijit._Contained",null,{getParent:function(){for(var p=this.domNode.parentNode;p;p=p.parentNode){var id=p.getAttribute&&p.getAttribute("widgetId");if(id){var _15a=dijit.byId(id);return _15a.isContainer?_15a:null;}}return null;},_getSibling:function(_15b){var node=this.domNode;do{node=node[_15b+"Sibling"];}while(node&&node.nodeType!=1);if(!node){return null;}var id=node.getAttribute("widgetId");return dijit.byId(id);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");}});dojo.declare("dijit._Container",null,{isContainer:true,addChild:function(_15e,_15f){if(typeof _15f=="undefined"){_15f="last";}dojo.place(_15e.domNode,this.containerNode||this.domNode,_15f);if(this._started&&!_15e._started){_15e.startup();}},removeChild:function(_160){var node=_160.domNode;node.parentNode.removeChild(node);},_nextElement:function(node){do{node=node.nextSibling;}while(node&&node.nodeType!=1);return node;},_firstElement:function(node){node=node.firstChild;if(node&&node.nodeType!=1){node=this._nextElement(node);}return node;},getChildren:function(){return dojo.query("> [widgetId]",this.containerNode||this.domNode).map(dijit.byNode);},hasChildren:function(){var cn=this.containerNode||this.domNode;return !!this._firstElement(cn);}});}if(!dojo._hasResource["dijit.layout._LayoutWidget"]){dojo._hasResource["dijit.layout._LayoutWidget"]=true;dojo.provide("dijit.layout._LayoutWidget");dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");},startup:function(){if(this._started){return;}this._started=true;if(this.getChildren){dojo.forEach(this.getChildren(),function(_165){_165.startup();});}if(!this.getParent||!this.getParent()){this.resize();this.connect(window,"onresize",function(){this.resize();});}},resize:function(args){var node=this.domNode;if(args){dojo.marginBox(node,args);if(args.t){node.style.top=args.t+"px";}if(args.l){node.style.left=args.l+"px";}}var mb=dojo.mixin(dojo.marginBox(node),args||{});this._contentBox=dijit.layout.marginBox2contentBox(node,mb);this.layout();},layout:function(){}});dijit.layout.marginBox2contentBox=function(node,mb){var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var pb=dojo._getPadBorderExtents(node,cs);return {l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};};(function(){var _16e=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_171,dim){_171.resize?_171.resize(dim):dojo.marginBox(_171.domNode,dim);dojo.mixin(_171,dojo.marginBox(_171.domNode));dojo.mixin(_171,dim);};dijit.layout.layoutChildren=function(_173,dim,_175){dim=dojo.mixin({},dim);dojo.addClass(_173,"dijitLayoutContainer");dojo.forEach(_175,function(_176){var elm=_176.domNode,pos=_176.layoutAlign;var _179=elm.style;_179.left=dim.l+"px";_179.top=dim.t+"px";_179.bottom=_179.right="auto";dojo.addClass(elm,"dijitAlign"+_16e(pos));if(pos=="top"||pos=="bottom"){size(_176,{w:dim.w});dim.h-=_176.h;if(pos=="top"){dim.t+=_176.h;}else{_179.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_176,{h:dim.h});dim.w-=_176.w;if(pos=="left"){dim.l+=_176.w;}else{_179.left=dim.l+dim.w+"px";}}else{if(pos=="flood"||pos=="client"){size(_176,dim);}}}});};})();}if(!dojo._hasResource["dijit.form._FormWidget"]){dojo._hasResource["dijit.form._FormWidget"]=true;dojo.provide("dijit.form._FormWidget");dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated],{baseClass:"",value:"",name:"",id:"",alt:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,setDisabled:function(_17a){this.domNode.disabled=this.disabled=_17a;if(this.focusNode){this.focusNode.disabled=_17a;}if(_17a){this._hovering=false;this._active=false;}dijit.wai.setAttr(this.focusNode||this.domNode,"waiState","disabled",_17a);this._setStateClass();},_onMouse:function(_17b){var _17c=_17b.target;if(!this.disabled){switch(_17b.type){case "mouseover":this._hovering=true;var _17d,node=_17c;while(node.nodeType===1&&!(_17d=node.getAttribute("baseClass"))&&node!=this.domNode){node=node.parentNode;}this.baseClass=_17d||"dijit"+this.declaredClass.replace(/.*\./g,"");break;case "mouseout":this._hovering=false;this.baseClass=null;break;case "mousedown":this._active=true;var self=this;var _180=this.connect(dojo.body(),"onmouseup",function(){self._active=false;self._setStateClass();self.disconnect(_180);});break;}this._setStateClass();}},focus:function(){dijit.focus(this.focusNode);},_setStateClass:function(base){var _182=(this.styleNode||this.domNode).className;var base=this.baseClass||this.domNode.getAttribute("baseClass")||"dijitFormWidget";_182=_182.replace(new RegExp("\\b"+base+"(Checked)?(Selected)?(Disabled|Active|Focused|Hover)?\\b\\s*","g"),"");var _183=[base];function multiply(_184){_183=_183.concat(dojo.map(_183,function(c){return c+_184;}));};if(this.checked){multiply("Checked");}if(this.selected){multiply("Selected");}if(this.disabled){multiply("Disabled");}else{if(this._active){multiply("Active");}else{if(this._focused){multiply("Focused");}else{if(this._hovering){multiply("Hover");}}}}(this.styleNode||this.domNode).className=_182+" "+_183.join(" ");},onChange:function(_186){},postCreate:function(){this.setValue(this.value,true);this.setDisabled(this.disabled);this._setStateClass();},setValue:function(_187,_188){this._lastValue=_187;dijit.wai.setAttr(this.focusNode||this.domNode,"waiState","valuenow",this.forWaiValuenow());if((this.intermediateChanges||_188)&&_187!=this._lastValueReported){this._lastValueReported=_187;this.onChange(_187);}},getValue:function(){return this._lastValue;},undo:function(){this.setValue(this._lastValueReported,false);},_onKeyPress:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!e.shiftKey&&!e.ctrlKey&&!e.altKey){var v=this.getValue();var lv=this._lastValueReported;if(lv!=undefined&&v.toString()!=lv.toString()){this.undo();dojo.stopEvent(e);return false;}}return true;},forWaiValuenow:function(){return this.getValue();}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");} diff --git a/spring-faces/src/main/java/META-INF/dijit/dijit.js.uncompressed.js b/spring-faces/src/main/java/META-INF/dijit/dijit.js.uncompressed.js new file mode 100644 index 00000000..5ee67faa --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/dijit.js.uncompressed.js @@ -0,0 +1,2950 @@ +/* + Copyright (c) 2004-2007, The Dojo Foundation + All Rights Reserved. + + Licensed under the Academic Free License version 2.1 or above OR the + modified BSD license. For more information on Dojo licensing, see: + + http://dojotoolkit.org/community/licensing.shtml +*/ + +/* + This is a compiled version of Dojo, built for deployment and not for + development. To get an editable version, please visit: + + http://dojotoolkit.org + + for documentation and information on getting the source. +*/ + +if(!dojo._hasResource["dijit._base.focus"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit._base.focus"] = true; +dojo.provide("dijit._base.focus"); + +// summary: +// These functions are used to query or set the focus and selection. +// +// Also, they trace when widgets become actived/deactivated, +// so that the widget can fire _onFocus/_onBlur events. +// "Active" here means something similar to "focused", but +// "focus" isn't quite the right word because we keep track of +// a whole stack of "active" widgets. Example: Combobutton --> Menu --> +// MenuItem. The onBlur event for Combobutton doesn't fire due to focusing +// on the Menu or a MenuItem, since they are considered part of the +// Combobutton widget. It only happens when focus is shifted +// somewhere completely different. + +dojo.mixin(dijit, +{ + // _curFocus: DomNode + // Currently focused item on screen + _curFocus: null, + + // _prevFocus: DomNode + // Previously focused item on screen + _prevFocus: null, + + isCollapsed: function(){ + // summary: tests whether the current selection is empty + var _window = dojo.global; + var _document = dojo.doc; + if(_document.selection){ // IE + return !_document.selection.createRange().text; // Boolean + }else if(_window.getSelection){ + var selection = _window.getSelection(); + if(dojo.isString(selection)){ // Safari + return !selection; // Boolean + }else{ // Mozilla/W3 + return selection.isCollapsed || !selection.toString(); // Boolean + } + } + }, + + getBookmark: function(){ + // summary: Retrieves a bookmark that can be used with moveToBookmark to return to the same range + var bookmark, selection = dojo.doc.selection; + if(selection){ // IE + var range = selection.createRange(); + if(selection.type.toUpperCase()=='CONTROL'){ + bookmark = range.length ? dojo._toArray(range) : null; + }else{ + bookmark = range.getBookmark(); + } + }else{ + if(dojo.global.getSelection){ + selection = dojo.global.getSelection(); + if(selection){ + var range = selection.getRangeAt(0); + bookmark = range.cloneRange(); + } + }else{ + console.debug("No idea how to store the current selection for this browser!"); + } + } + return bookmark; // Array + }, + + moveToBookmark: function(/*Object*/bookmark){ + // summary: Moves current selection to a bookmark + // bookmark: this should be a returned object from dojo.html.selection.getBookmark() + var _document = dojo.doc; + if(_document.selection){ // IE + var range; + if(dojo.isArray(bookmark)){ + range = _document.body.createControlRange(); + dojo.forEach(bookmark, range.addElement); + }else{ + range = _document.selection.createRange(); + range.moveToBookmark(bookmark); + } + range.select(); + }else{ //Moz/W3C + var selection = dojo.global.getSelection && dojo.global.getSelection(); + if(selection && selection.removeAllRanges){ + selection.removeAllRanges(); + selection.addRange(bookmark); + }else{ + console.debug("No idea how to restore selection for this browser!"); + } + } + }, + + getFocus: function(/*Widget*/menu, /*Window*/ openedForWindow){ + // summary: + // Returns the current focus and selection. + // Called when a popup appears (either a top level menu or a dialog), + // or when a toolbar/menubar receives focus + // + // menu: + // the menu that's being opened + // + // openedForWindow: + // iframe in which menu was opened + // + // returns: + // a handle to restore focus/selection + + return { + // Node to return focus to + node: menu && dojo.isDescendant(dijit._curFocus, menu.domNode) ? dijit._prevFocus : dijit._curFocus, + + // Previously selected text + bookmark: + !dojo.withGlobal(openedForWindow||dojo.global, dijit.isCollapsed) ? + dojo.withGlobal(openedForWindow||dojo.global, dijit.getBookmark) : + null, + + openedForWindow: openedForWindow + }; // Object + }, + + focus: function(/*Object || DomNode */ handle){ + // summary: + // Sets the focused node and the selection according to argument. + // To set focus to an iframe's content, pass in the iframe itself. + // handle: + // object returned by get(), or a DomNode + + if(!handle){ return; } + + var node = "node" in handle ? handle.node : handle, // because handle is either DomNode or a composite object + bookmark = handle.bookmark, + openedForWindow = handle.openedForWindow; + + // Set the focus + // Note that for iframe's we need to use the ') + + '' + + ((dojo.isIE || dojo.isSafari) ? '':'') + : '', + + _nlsResources: null, // Needed for screen readers on FF2 + + focus: function(){ + // summary: Received focus, needed for the InlineEditBox widget + if(!this.disabled){ + this._changing(); // set initial height + } + if(dojo.isMozilla){ + dijit.focus(this.iframe); + }else{ + dijit.focus(this.focusNode); + } + }, + + setValue: function(/*String*/ value, /*Boolean, optional*/ priorityChange){ + var editNode = this.editNode; + if(typeof value == "string"){ + editNode.innerHTML = ""; // wipe out old nodes + if(value.split){ + var _this=this; + var isFirst = true; + dojo.forEach(value.split("\n"), function(line){ + if(isFirst){ isFirst = false; } + else { + editNode.appendChild(document.createElement("BR")); // preserve line breaks + } + editNode.appendChild(document.createTextNode(line)); // use text nodes so that imbedded tags can be edited + }); + }else{ + editNode.appendChild(document.createTextNode(value)); + } + if(this.iframe){ + this.sizeNode = document.createElement('div'); + editNode.appendChild(this.sizeNode); + } + }else{ + // blah
    blah --> blah\nblah + //

    blah

    blah

    --> blah\nblah + //
    blah
    blah
    --> blah\nblah + // &<> -->&< > + value = editNode.innerHTML; + if(this.iframe){ // strip sizeNode + value = value.replace(/
    <\/div>\r?\n?$/i,""); + } + value = value.replace(/\s*\r?\n|^\s+|\s+$| /g,"").replace(/>\s+<").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])
    /g,"$1\n").replace(/<\/p>\s*]*>|]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&/gi,"\&").replace(/</gi,"<").replace(/>/gi,">"); + } + this.formValueNode.value = value; + if(this.iframe){ + var newHeight = this.sizeNode.offsetTop; + if(editNode.scrollWidth > editNode.clientWidth){ newHeight+=16; } // scrollbar space needed? + if(this.lastHeight != newHeight){ // cache size so that we don't get a resize event because of a resize event + if(newHeight == 0){ newHeight = 16; } // height = 0 causes the browser to not set scrollHeight + dojo.contentBox(this.iframe, {h: newHeight}); + this.lastHeight = newHeight; + } + } + dijit.form.Textarea.superclass.setValue.call(this, value, priorityChange); + }, + + getValue: function(){ + return this.formValueNode.value; + }, + + postMixInProperties: function(){ + dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments); + // don't let the source text be converted to a DOM structure since we just want raw text + if(this.srcNodeRef && this.srcNodeRef.innerHTML != ""){ + this.value = this.srcNodeRef.innerHTML; + this.srcNodeRef.innerHTML = ""; + } + if((!this.value || this.value == "") && this.srcNodeRef && this.srcNodeRef.value){ + this.value = this.srcNodeRef.value; + } + if(!this.value){ this.value = ""; } + this.value = this.value.replace(/\r\n/g,"\n").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&"); + }, + + postCreate: function(){ + if(dojo.isIE || dojo.isSafari){ + this.domNode.style.overflowY = 'hidden'; + this.eventNode = this.focusNode = this.editNode; + this.connect(this.eventNode, "oncut", this._changing); + this.connect(this.eventNode, "onpaste", this._changing); + }else if(dojo.isMozilla){ + var w = this.iframe.contentWindow; + var d = w.document; + // In the case of Firefox an iframe is used and when the text gets focus, + // focus is fired from the document object. There isn't a way to put a + // waiRole on the document object and as a result screen readers don't + // announce the role. As a result screen reader users are lost. + // + // An additional problem is that the browser gives the document object a + // very cryptic accessible name, e.g. + // wyciwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html + // When focus is fired from the document object, the screen reader speaks + // the accessible name. The cyptic accessile name is confusing. + // + // A workaround for both of these problems is to give the iframe's + // document a title, the name of which is similar to a role name, i.e. + // "edit area". This will be used as the accessible name which will replace + // the cryptic name and will also convey the role information to the user. + // Because it is read directly to the user, the string must be localized. + this._nlsResources = dojo.i18n.getLocalization("dijit.form", "Textarea"); + d.open(); + d.write('' + + this._nlsResources.iframeTitle1 + // "edit area" + ''); + // body > br style is to remove the
    that gets added by FF + d.close(); + this.editNode = d.body; + this.iframe.style.overflowY = 'hidden'; + // resize is a method of window, not document + this.eventNode = d; + this.focusNode = this.editNode; + this.connect(w, "resize", this._changed); // resize is only on the window object + }else{ + this.focusNode = this.domNode; + } + if(this.eventNode){ + this.connect(this.eventNode, "keypress", this._onKeyPress); + this.connect(this.eventNode, "mousemove", this._changed); + this.connect(this.eventNode, "focus", this._focused); + this.connect(this.eventNode, "blur", this._blurred); + } + if(this.editNode){ + this.connect(this.editNode, "change", this._changed); // needed for mouse paste events per #3479 + } + this.inherited('postCreate', arguments); + }, + + // event handlers, you can over-ride these in your own subclasses + _focused: function(e){ + dojo.addClass(this.iframe||this.domNode, "dijitInputFieldFocused"); + this._changed(e); + }, + + _blurred: function(e){ + dojo.removeClass(this.iframe||this.domNode, "dijitInputFieldFocused"); + this._changed(e, true); + }, + + _onIframeBlur: function(){ + // Reset the title back to "edit area". + this.iframe.contentDocument.title = this._nlsResources.iframeTitle1; + }, + + _onKeyPress: function(e){ + if(e.keyCode == dojo.keys.TAB && !e.shiftKey && !e.ctrlKey && !e.altKey && this.iframe){ + // Pressing the tab key in the iframe (with designMode on) will cause the + // entry of a tab character so we have to trap that here. Since we don't + // know the next focusable object we put focus on the iframe and then the + // user has to press tab again (which then does the expected thing). + // A problem with that is that the screen reader user hears "edit area" + // announced twice which causes confusion. By setting the + // contentDocument's title to "edit area frame" the confusion should be + // eliminated. + this.iframe.contentDocument.title = this._nlsResources.iframeTitle2; + // Place focus on the iframe. A subsequent tab or shift tab will put focus + // on the correct control. + // Note: Can't use this.focus() because that results in a call to + // dijit.focus and if that receives an iframe target it will set focus + // on the iframe's contentWindow. + this.iframe.focus(); // this.focus(); won't work + dojo.stopEvent(e); + }else if(e.keyCode == dojo.keys.ENTER){ + e.stopPropagation(); + }else if(this.inherited("_onKeyPress", arguments) && this.iframe){ + // #3752: + // The key press will not make it past the iframe. + // If a widget is listening outside of the iframe, (like InlineEditBox) + // it will not hear anything. + // Create an equivalent event so everyone else knows what is going on. + var te = document.createEvent("KeyEvents"); + te.initKeyEvent("keypress", true, true, null, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.keyCode, e.charCode); + this.iframe.dispatchEvent(te); + } + this._changing(); + }, + + _changing: function(e){ + // summary: event handler for when a change is imminent + setTimeout(dojo.hitch(this, "_changed", e, false), 1); + }, + + _changed: function(e, priorityChange){ + // summary: event handler for when a change has already happened + if(this.iframe && this.iframe.contentDocument.designMode != "on"){ + this.iframe.contentDocument.designMode="on"; // in case this failed on init due to being hidden + } + this.setValue(null, priorityChange); + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js b/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js new file mode 100644 index 00000000..7e2b15f7 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js @@ -0,0 +1,112 @@ +if(!dojo._hasResource["dijit.form.TimeTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.form.TimeTextBox"] = true; +dojo.provide("dijit.form.TimeTextBox"); + +dojo.require("dojo.date"); +dojo.require("dojo.date.locale"); +dojo.require("dojo.date.stamp"); +dojo.require("dijit.form._TimePicker"); +dojo.require("dijit.form.ValidationTextBox"); + +dojo.declare( + "dijit.form.TimeTextBox", + dijit.form.RangeBoundTextBox, + { + // summary: + // A validating, serializable, range-bound date text box. + + // constraints object: min, max + regExpGen: dojo.date.locale.regexp, + compare: dojo.date.compare, + format: function(/*Date*/ value, /*Object*/ constraints){ + if(!value || value.toString() == this._invalid){ return null; } + return dojo.date.locale.format(value, constraints); + }, + parse: dojo.date.locale.parse, + serialize: dojo.date.stamp.toISOString, + + value: new Date(""), // NaN + _invalid: (new Date("")).toString(), // NaN + + _popupClass: "dijit.form._TimePicker", + + postMixInProperties: function(){ + dijit.form.RangeBoundTextBox.prototype.postMixInProperties.apply(this, arguments); + + var constraints = this.constraints; + constraints.selector = 'time'; + if(typeof constraints.min == "string"){ constraints.min = dojo.date.stamp.fromISOString(constraints.min); } + if(typeof constraints.max == "string"){ constraints.max = dojo.date.stamp.fromISOString(constraints.max); } + }, + + _onFocus: function(/*Event*/ evt){ + // open the calendar + this._open(); + }, + + setValue: function(/*Date*/ value, /*Boolean, optional*/ priorityChange){ + // summary: + // Sets the date on this textbox + this.inherited('setValue', arguments); + if(this._picker){ + // #3948: fix blank date on popup only + if(!value || value.toString() == this._invalid){value=new Date();} + this._picker.setValue(value); + } + }, + + _open: function(){ + // summary: + // opens the Calendar, and sets the onValueSelected for the Calendar + var self = this; + + if(!this._picker){ + var popupProto=dojo.getObject(this._popupClass, false); + this._picker = new popupProto({ + onValueSelected: function(value){ + + self.focus(); // focus the textbox before the popup closes to avoid reopening the popup + setTimeout(dijit.popup.close, 1); // allow focus time to take + + // this will cause InlineEditBox and other handlers to do stuff so make sure it's last + dijit.form.TimeTextBox.superclass.setValue.call(self, value, true); + }, + lang: this.lang, + constraints:this.constraints, + isDisabledDate: function(/*Date*/ date){ + // summary: + // disables dates outside of the min/max of the TimeTextBox + return self.constraints && (dojo.date.compare(self.constraints.min,date) > 0 || dojo.date.compare(self.constraints.max,date) < 0); + } + }); + this._picker.setValue(this.getValue() || new Date()); + } + if(!this._opened){ + dijit.popup.open({ + parent: this, + popup: this._picker, + around: this.domNode, + onClose: function(){ self._opened=false; } + }); + this._opened=true; + } + }, + + _onBlur: function(){ + // summary: called magically when focus has shifted away from this widget and it's dropdown + dijit.popup.closeAll(); + this.inherited('_onBlur', arguments); + // don't focus on . the user has explicitly focused on something else. + }, + + getDisplayedValue:function(){ + return this.textbox.value; + }, + + setDisplayedValue:function(/*String*/ value){ + this.textbox.value=value; + } + } +); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js b/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js new file mode 100644 index 00000000..fca9630b --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js @@ -0,0 +1,257 @@ +if(!dojo._hasResource["dijit.form.ValidationTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.form.ValidationTextBox"] = true; +dojo.provide("dijit.form.ValidationTextBox"); + +dojo.require("dojo.i18n"); + +dojo.require("dijit.form.TextBox"); +dojo.require("dijit.Tooltip"); + +dojo.requireLocalization("dijit.form", "validate", null, "zh-cn,ja,it,ROOT,fr,de"); + +dojo.declare( + "dijit.form.ValidationTextBox", + dijit.form.TextBox, + { + // summary: + // A subclass of TextBox. + // Over-ride isValid in subclasses to perform specific kinds of validation. + + // default values for new subclass properties + // required: Boolean + // Can be true or false, default is false. + required: false, + // promptMessage: String + // Hint string + promptMessage: "", + // invalidMessage: String + // The message to display if value is invalid. + invalidMessage: "", + // constraints: Object + // user-defined object needed to pass parameters to the validator functions + constraints: {}, + // regExp: String + // regular expression string used to validate the input + // Do not specify both regExp and regExpGen + regExp: ".*", + // regExpGen: Function + // user replaceable function used to generate regExp when dependent on constraints + // Do not specify both regExp and regExpGen + regExpGen: function(constraints){ return this.regExp; }, + + setValue: function(){ + this.inherited('setValue', arguments); + this.validate(false); + }, + + validator: function(value,constraints){ + // summary: user replaceable function used to validate the text input against the regular expression. + return (new RegExp("^(" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value)&&(!this.required||!this._isEmpty(value)); + }, + + isValid: function(/* Boolean*/ isFocused){ + // summary: Need to over-ride with your own validation code in subclasses + return this.validator(this.textbox.value, this.constraints); + }, + + _isEmpty: function(value){ + // summary: Checks for whitespace + return /^\s*$/.test(value); // Boolean + }, + + getErrorMessage: function(/* Boolean*/ isFocused){ + // summary: return an error message to show if appropriate + return this.invalidMessage; + }, + + getPromptMessage: function(/* Boolean*/ isFocused){ + // summary: return a hint to show if appropriate + return this.promptMessage; + }, + + validate: function(/* Boolean*/ isFocused){ + // summary: + // Called by oninit, onblur, and onkeypress. + // description: + // Show missing or invalid messages if appropriate, and highlight textbox field. + var message = ""; + var isValid = this.isValid(isFocused); + var className = isValid ? "Normal" : "Error"; + if(!dojo.hasClass(this.nodeWithBorder, "dijitInputFieldValidation"+className)){ + dojo.removeClass(this.nodeWithBorder, "dijitInputFieldValidation"+((className=="Normal")?"Error":"Normal")); + dojo.addClass(this.nodeWithBorder, "dijitInputFieldValidation"+className); + } + dijit.wai.setAttr(this.focusNode, "waiState", "invalid", (isValid? "false" : "true")); + if(isFocused){ + if(this._isEmpty(this.textbox.value)){ + message = this.getPromptMessage(true); + } + if(!message && !isValid){ + message = this.getErrorMessage(true); + } + } + this._displayMessage(message); + }, + + // currently displayed message + _message: "", + + _displayMessage: function(/*String*/ message){ + if(this._message == message){ return; } + this._message = message; + this.displayMessage(message); + }, + + displayMessage: function(/*String*/ message){ + // summary: + // User overridable method to display validation errors/hints. + // By default uses a tooltip. + if(message){ + dijit.MasterTooltip.show(message, this.domNode); + }else{ + dijit.MasterTooltip.hide(); + } + }, + + _onBlur: function(evt){ + this.validate(false); + this.inherited('_onBlur', arguments); + }, + + onfocus: function(evt){ + this.inherited('onfocus', arguments); + this.validate(true); + }, + + onkeyup: function(evt){ + this.onfocus(evt); + }, + + postMixInProperties: function(){ + if(this.constraints == dijit.form.ValidationTextBox.prototype.constraints){ + this.constraints = {}; + } + this.inherited('postMixInProperties', arguments); + this.constraints.locale=this.lang; + this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang); + dojo.forEach(["invalidMessage", "missingMessage"], function(prop){ + if(!this[prop]){ this[prop] = this.messages[prop]; } + }, this); + var p = this.regExpGen(this.constraints); + this.regExp = p; + // make value a string for all types so that form reset works well + } + } +); + +dojo.declare( + "dijit.form.MappedTextBox", + dijit.form.ValidationTextBox, + { + // summary: + // A subclass of ValidationTextBox. + // Provides a hidden input field and a serialize method to override + + serialize: function(val){ + // summary: user replaceable function used to convert the getValue() result to a String + return val.toString(); + }, + + toString: function(){ + // summary: display the widget as a printable string using the widget's value + var val = this.getValue(); + return (val!=null) ? ((typeof val == "string") ? val : this.serialize(val, this.constraints)) : ""; + }, + + validate: function(){ + this.valueNode.value = this.toString(); + this.inherited('validate', arguments); + }, + + postCreate: function(){ + var textbox = this.textbox; + var valueNode = (this.valueNode = document.createElement("input")); + valueNode.setAttribute("type", textbox.type); + valueNode.setAttribute("value", this.toString()); + dojo.style(valueNode, "display", "none"); + valueNode.name = this.textbox.name; + this.textbox.removeAttribute("name"); + + dojo.place(valueNode, textbox, "after"); + + this.inherited('postCreate', arguments); + } + } +); + +dojo.declare( + "dijit.form.RangeBoundTextBox", + dijit.form.MappedTextBox, + { + // summary: + // A subclass of MappedTextBox. + // Tests for a value out-of-range + /*===== contraints object: + // min: Number + // Minimum signed value. Default is -Infinity + min: undefined, + // max: Number + // Maximum signed value. Default is +Infinity + max: undefined, + =====*/ + + // rangeMessage: String + // The message to display if value is out-of-range + rangeMessage: "", + + compare: function(val1, val2){ + // summary: compare 2 values + return val1 - val2; + }, + + rangeCheck: function(/* Number */ primitive, /* Object */ constraints){ + // summary: user replaceable function used to validate the range of the numeric input value + var isMin = (typeof constraints.min != "undefined"); + var isMax = (typeof constraints.max != "undefined"); + if(isMin || isMax){ + return (!isMin || this.compare(primitive,constraints.min) >= 0) && + (!isMax || this.compare(primitive,constraints.max) <= 0); + }else{ return true; } + }, + + isInRange: function(/* Boolean*/ isFocused){ + // summary: Need to over-ride with your own validation code in subclasses + return this.rangeCheck(this.getValue(), this.constraints); + }, + + isValid: function(/* Boolean*/ isFocused){ + return this.inherited('isValid', arguments) && + ((this._isEmpty(this.textbox.value) && !this.required) || this.isInRange(isFocused)); + }, + + getErrorMessage: function(/* Boolean*/ isFocused){ + if(dijit.form.RangeBoundTextBox.superclass.isValid.call(this, false) && !this.isInRange(isFocused)){ return this.rangeMessage; } + else{ return this.inherited('getErrorMessage', arguments); } + }, + + postMixInProperties: function(){ + this.inherited('postMixInProperties', arguments); + if(!this.rangeMessage){ + this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang); + this.rangeMessage = this.messages.rangeMessage; + } + }, + + postCreate: function(){ + this.inherited('postCreate', arguments); + if(typeof this.constraints.min != "undefined"){ + dijit.wai.setAttr(this.domNode, "waiState", "valuemin", this.constraints.min); + } + if(typeof this.constraints.max != "undefined"){ + dijit.wai.setAttr(this.domNode, "waiState", "valuemax", this.constraints.max); + } + } + } +); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/form/_DropDownTextBox.js b/spring-faces/src/main/java/META-INF/dijit/form/_DropDownTextBox.js new file mode 100644 index 00000000..67b51f54 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/_DropDownTextBox.js @@ -0,0 +1,235 @@ +if(!dojo._hasResource["dijit.form._DropDownTextBox"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.form._DropDownTextBox"] = true; +dojo.provide("dijit.form._DropDownTextBox"); + +dojo.declare( + "dijit.form._DropDownTextBox", + null, + { + // summary: + // Mixin text box with drop down + + templateString:"\n
    \n\t\t\t
    \n\t\t
    \n\t
    \n", + + baseClass:"dijitComboBox", + + // hasDownArrow: Boolean + // Set this textbox to have a down arrow button + // Defaults to true + hasDownArrow:true, + + // _popupWidget: Widget + // link to the popup widget created by makePopop + _popupWidget:null, + + // _hasMasterPopup: Boolean + // Flag that determines if this widget should share one popup per widget prototype, + // or create one popup per widget instance. + // If true, then makePopup() creates one popup per widget prototype. + // If false, then makePopup() creates one popup per widget instance. + _hasMasterPopup:false, + + // _popupClass: String + // Class of master popup (dijit.form._ComboBoxMenu) + _popupClass:"", + + // _popupArgs: Object + // Object to pass to popup widget on initialization + _popupArgs:{}, + + // _hasFocus: Boolean + // Represents focus state of the textbox + _hasFocus:false, + + _arrowPressed: function(){ + if(!this.disabled&&this.hasDownArrow){ + dojo.addClass(this.downArrowNode, "dijitArrowButtonActive"); + } + }, + + _arrowIdle: function(){ + if(!this.disabled&&this.hasDownArrow){ + dojo.removeClass(this.downArrowNode, "dojoArrowButtonPushed"); + } + }, + + makePopup: function(){ + // summary: + // create popup widget on demand + var _this=this; + function _createNewPopup(){ + // common code from makePopup + var node=document.createElement("div"); + document.body.appendChild(node); + var popupProto=dojo.getObject(_this._popupClass, false); + return new popupProto(_this._popupArgs, node); + } + // this code only runs if there is no popup reference + if(!this._popupWidget){ + // does this widget have one "master" popup? + if(this._hasMasterPopup){ + // does the master popup not exist yet? + var parentClass = dojo.getObject(this.declaredClass, false); + if(!parentClass.prototype._popupWidget){ + // create the master popup for the first time + parentClass.prototype._popupWidget=_createNewPopup(); + } + // assign master popup to local link + this._popupWidget=parentClass.prototype._popupWidget; + }else{ + // if master popup is not being used, create one popup per widget instance + this._popupWidget=_createNewPopup(); + } + } + }, + + _onArrowClick: function(){ + // summary: callback when arrow is clicked + if(this.disabled){ + return; + } + this.focus(); + this.makePopup(); + if(this._isShowingNow){ + this._hideResultList(); + }else{ + // forces full population of results, if they click + // on the arrow it means they want to see more options + this._openResultList(); + } + }, + + _hideResultList: function(){ + if(this._isShowingNow){ + dijit.popup.close(); + this._arrowIdle(); + this._isShowingNow=false; + } + }, + + _openResultList:function(){ + // summary: + // any code that needs to happen before the popup appears. + // creating the popupWidget contents etc. + this._showResultList(); + }, + + onfocus:function(){ + this._hasFocus=true; + }, + + onblur:function(){ + this._arrowIdle(); + this._hasFocus=false; + // removeClass dijitInputFieldFocused + dojo.removeClass(this.nodeWithBorder, "dijitInputFieldFocused"); + // hide the Tooltip + this.validate(false); + }, + + onkeypress: function(/*Event*/ evt){ + // summary: generic handler for popup keyboard events + if(evt.ctrlKey || evt.altKey){ + return; + } + switch(evt.keyCode){ + case dojo.keys.PAGE_DOWN: + case dojo.keys.DOWN_ARROW: + if(!this._isShowingNow||this._prev_key_esc){ + this.makePopup(); + this._arrowPressed(); + this._openResultList(); + } + dojo.stopEvent(evt); + this._prev_key_backspace = false; + this._prev_key_esc = false; + break; + + case dojo.keys.PAGE_UP: + case dojo.keys.UP_ARROW: + case dojo.keys.ENTER: + // prevent default actions + dojo.stopEvent(evt); + // fall through + case dojo.keys.ESCAPE: + case dojo.keys.TAB: + if(this._isShowingNow){ + this._prev_key_backspace = false; + this._prev_key_esc = (evt.keyCode==dojo.keys.ESCAPE); + this._hideResultList(); + } + break; + } + }, + + compositionend: function(/*Event*/ evt){ + // summary: When inputting characters using an input method, such as Asian + // languages, it will generate this event instead of onKeyDown event + this.onkeypress({charCode:-1}); + }, + + _showResultList: function(){ + // Our dear friend IE doesnt take max-height so we need to calculate that on our own every time + this._hideResultList(); + var childs = this._popupWidget.getListLength ? this._popupWidget.getItems() : [this._popupWidget.domNode]; + + if(childs.length){ + var visibleCount = Math.min(childs.length,this.maxListLength); + with(this._popupWidget.domNode.style){ + // trick to get the dimensions of the popup + // TODO: doesn't dijit.popup.open() do this automatically? + display=""; + width=""; + height=""; + } + this._arrowPressed(); + // hide the tooltip + this._displayMessage(""); + var best=this.open(); + // #3212: only set auto scroll bars if necessary + // prevents issues with scroll bars appearing when they shouldn't when node is made wider (fractional pixels cause this) + var popupbox=dojo.marginBox(this._popupWidget.domNode); + this._popupWidget.domNode.style.overflow=((best.h==popupbox.h)&&(best.w==popupbox.w))?"hidden":"auto"; + dojo.marginBox(this._popupWidget.domNode, {h:best.h,w:Math.max(best.w,this.domNode.offsetWidth)}); + + } + }, + + getDisplayedValue:function(){ + return this.textbox.value; + }, + + setDisplayedValue:function(/*String*/ value){ + this.textbox.value=value; + }, + + uninitialize:function(){ + if(this._popupWidget){ + this._hideResultList(); + this._popupWidget.destroy() + }; + }, + + open:function(){ + this.makePopup(); + var self=this; + self._isShowingNow=true; + return dijit.popup.open({ + popup: this._popupWidget, + around: this.domNode, + parent: this + }); + }, + + _onBlur: function(){ + // summary: called magically when focus has shifted away from this widget and it's dropdown + this._hideResultList(); + }, + + postMixInProperties:function(){ + this.baseClass=this.hasDownArrow?this.baseClass:this.baseClass+"NoArrow"; + } + } +); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js b/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js new file mode 100644 index 00000000..a6b65258 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js @@ -0,0 +1,240 @@ +if(!dojo._hasResource["dijit.form._FormWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.form._FormWidget"] = true; +dojo.provide("dijit.form._FormWidget"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Templated"); + +dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], +{ + /* + Summary: + FormElement widgets correspond to native HTML elements such as or
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html new file mode 100644 index 00000000..506a639d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html @@ -0,0 +1,7 @@ + diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html new file mode 100644 index 00000000..fc531e98 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html @@ -0,0 +1,18 @@ + +
    +
    +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html new file mode 100644 index 00000000..b0516a80 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html @@ -0,0 +1,21 @@ + + + + +
    +
    + ${label} +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html new file mode 100644 index 00000000..9e770008 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html @@ -0,0 +1,11 @@ +
    + +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/HorizontalSlider.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/HorizontalSlider.html new file mode 100644 index 00000000..77198861 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/HorizontalSlider.html @@ -0,0 +1,37 @@ +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html new file mode 100644 index 00000000..059d075a --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html @@ -0,0 +1,11 @@ + diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/Spinner.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/Spinner.html new file mode 100644 index 00000000..42ba9588 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/Spinner.html @@ -0,0 +1,24 @@ + + + + + + + +
    +
    + diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/TextBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/TextBox.html new file mode 100644 index 00000000..e8ee33c0 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/TextBox.html @@ -0,0 +1,2 @@ + diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/TimePicker.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/TimePicker.html new file mode 100644 index 00000000..2b5d9a94 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/TimePicker.html @@ -0,0 +1,6 @@ +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/VerticalSlider.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/VerticalSlider.html new file mode 100644 index 00000000..4fb48e05 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/VerticalSlider.html @@ -0,0 +1,46 @@ +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/blank.gif b/spring-faces/src/main/java/META-INF/dijit/form/templates/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..e565824aafafe632011b281cba976baf8b3ba89a GIT binary patch literal 43 qcmZ?wbhEHbWMp7uXkcLY4+e@qSs1y10y+#p0Fq%~V)9{Rum%7ZWeN!Z literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/AccordionContainer.js b/spring-faces/src/main/java/META-INF/dijit/layout/AccordionContainer.js new file mode 100644 index 00000000..37184c13 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/AccordionContainer.js @@ -0,0 +1,194 @@ +if(!dojo._hasResource["dijit.layout.AccordionContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.AccordionContainer"] = true; +dojo.provide("dijit.layout.AccordionContainer"); + +dojo.require("dojo.fx"); + +dojo.require("dijit._Container"); +dojo.require("dijit._Templated"); +dojo.require("dijit.layout.StackContainer"); +dojo.require("dijit.layout.ContentPane"); + +dojo.declare( + "dijit.layout.AccordionContainer", + dijit.layout.StackContainer, + { + // summary: + // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, + // and switching between panes is visualized by sliding the other panes up/down. + // usage: + //
    + //
    + //
    ...
    + //
    + //
    + //

    This is some text

    + // ... + //
    + + // duration: Integer + // Amount of time (in ms) it takes to slide panes + duration: 250, + + _verticalSpace: 0, + + postCreate: function(){ + this.domNode.style.overflow="hidden"; + dijit.layout.AccordionContainer.superclass.postCreate.apply(this, arguments); + }, + + startup: function(){ + if(this._started){ return; } + dijit.layout.StackContainer.prototype.startup.apply(this, arguments); + if(this.selectedChildWidget){ + var style = this.selectedChildWidget.containerNode.style; + style.display = ""; + style.overflow = "auto"; + this.selectedChildWidget._setSelectedState(true); + } + }, + + layout: function(){ + // summary + // Set the height of the open pane based on what room remains + // get cumulative height of all the title bars, and figure out which pane is open + var totalCollapsedHeight = 0; + var openPane = this.selectedChildWidget; + dojo.forEach(this.getChildren(), function(child){ + totalCollapsedHeight += child.getTitleHeight(); + }); + var mySize = this._contentBox; + this._verticalSpace = (mySize.h - totalCollapsedHeight); + if(openPane){ + openPane.containerNode.style.height = this._verticalSpace + "px"; +/*** +TODO: this is wrong. probably you wanted to call resize on the SplitContainer +inside the AccordionPane?? + if(openPane.resize){ + openPane.resize({h: this._verticalSpace}); + } +***/ + } + }, + + _setupChild: function(/*Widget*/ page){ + // Summary: prepare the given child + return page; + }, + + _transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){ +//TODO: should be able to replace this with calls to slideIn/slideOut + var animations = []; + var paneHeight = this._verticalSpace; + if(newWidget){ + newWidget.setSelected(true); + var newContents = newWidget.containerNode; + newContents.style.display = ""; + + animations.push(dojo.animateProperty({ + node: newContents, + duration: this.duration, + properties: { + height: { start: "1", end: paneHeight } + }, + onEnd: function(){ + newContents.style.overflow = "auto"; + } + })); + } + if(oldWidget){ + oldWidget.setSelected(false); + var oldContents = oldWidget.containerNode; + oldContents.style.overflow = "hidden"; + animations.push(dojo.animateProperty({ + node: oldContents, + duration: this.duration, + properties: { + height: { start: paneHeight, end: "1" } + }, + onEnd: function(){ + oldContents.style.display = "none"; + } + })); + } + + dojo.fx.combine(animations).play(); + }, + + // note: we are treating the container as controller here + processKey: function(/*Event*/ evt){ + if(this.disabled || evt.altKey || evt.shiftKey || evt.ctrlKey){ + return dijit.layout.AccordionContainer.superclass._onKeyPress.apply(this, arguments); + } + var forward = true; + switch(evt.keyCode){ + case dojo.keys.LEFT_ARROW: + case dojo.keys.UP_ARROW: + forward = false; + // fallthrough + case dojo.keys.RIGHT_ARROW: + case dojo.keys.DOWN_ARROW: + // find currently focused button in children array + var children = this.getChildren(); + var index = dojo.indexOf(children, evt._dijitWidget); + // pick next button to focus on + index += forward ? 1 : children.length - 1; + var next = children[ index % children.length ]; + dojo.stopEvent(evt); + next._onTitleClick(); + } + } + } +); + +dojo.declare( + "dijit.layout.AccordionPane", + [dijit.layout.ContentPane, dijit._Templated, dijit._Contained], +{ + // summary + // AccordionPane is a box with a title that contains another widget (often a ContentPane). + // It's a widget used internally by AccordionContainer. + + templateString:"
    ${title}
    \n
    \n", + + postCreate: function(){ + dijit.layout.AccordionPane.superclass.postCreate.apply(this, arguments); + dojo.setSelectable(this.titleNode, false); + this.setSelected(this.selected); + }, + + getTitleHeight: function(){ + // summary: returns the height of the title dom node + return dojo.marginBox(this.titleNode).h; // Integer + }, + + _onTitleClick: function(){ + // summary: callback when someone clicks my title + var parent = this.getParent(); + parent.selectChild(this); + dijit.focus(this.focusNode); + }, + + _onKeyPress: function(/*Event*/ evt){ + evt._dijitWidget = this; + return this.getParent().processKey(evt); + }, + + _setSelectedState: function(/*Boolean*/ isSelected){ + this.selected = isSelected; + (isSelected ? dojo.addClass : dojo.removeClass)(this.domNode, "dijitAccordionPane-selected"); + this.focusNode.setAttribute("tabIndex",(isSelected)? "0":"-1"); + }, + + setSelected: function(/*Boolean*/ isSelected){ + // summary: change the selected state on this pane + this._setSelectedState(isSelected); + if(isSelected){ this.onSelected(); } + }, + + onSelected: function(){ + // summary: called when this pane is selected + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/ContentPane.js b/spring-faces/src/main/java/META-INF/dijit/layout/ContentPane.js new file mode 100644 index 00000000..40c7c4f6 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/ContentPane.js @@ -0,0 +1,371 @@ +if(!dojo._hasResource["dijit.layout.ContentPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.ContentPane"] = true; +dojo.provide("dijit.layout.ContentPane"); + +dojo.require("dijit._Widget"); +dojo.require("dojo.parser"); +dojo.require("dojo.string"); +dojo.requireLocalization("dijit", "loading", null, "ROOT"); + +dojo.declare( + "dijit.layout.ContentPane", + dijit._Widget, +{ + // summary: + // A widget that acts as a Container for other widgets, and includes a ajax interface + // description: + // A widget that can be used as a standalone widget + // or as a baseclass for other widgets + // Handles replacement of document fragment using either external uri or javascript + // generated markup or DOM content, instantiating widgets within that content. + // Don't confuse it with an iframe, it only needs/wants document fragments. + // It's useful as a child of LayoutContainer, SplitContainer, or TabContainer. + // But note that those classes can contain any widget as a child. + // usage: + // Some quick samples: + // To change the innerHTML use .setContent('new content') + // + // Or you can send it a NodeList, .setContent(dojo.query('div [class=selected]', userSelection)) + // please note that the nodes in NodeList will copied, not moved + // + // To do a ajax update use .setHref('url') + + // href: String + // The href of the content that displays now. + // Set this at construction if you want to load data externally when the + // pane is shown. (Set preload=true to load it immediately.) + // Changing href after creation doesn't have any effect; see setHref(); + href: "", + + // extractContent: Boolean + // Extract visible content from inside of .... + extractContent: false, + + // parseOnLoad: Boolean + // parse content and create the widgets, if any + parseOnLoad: true, + + // preventCache: Boolean + // Cache content retreived externally + preventCache: false, + + // preload: Boolean + // Force load of data even if pane is hidden. + preload: false, + + // refreshOnShow: Boolean + // Refresh (re-download) content when pane goes from hidden to shown + refreshOnShow: false, + + // loadingMessage: String + // Message that shows while downloading + loadingMessage: "${loadingState}", // TODO: consider a graphical representation for this state which does not require localization + + // errorMessage: String + // Message that shows if an error occurs + errorMessage: "${errorState}", // TODO: consider a graphical representation for this state which does not require localization + + // isLoaded: Boolean + // Tells loading status see onLoad|onUnload for event hooks + isLoaded: false, + + // class: String + // Class name to apply to ContentPane dom nodes + "class": "dijitContentPane", + + postCreate: function(){ + // remove the title attribute so it doesn't show up when i hover + // over a node + this.domNode.title = ""; + + if(this.preload){ + this._loadCheck(); + } + + var messages = dojo.i18n.getLocalization("dijit", "loading", this.lang); + this.loadingMessage = dojo.string.substitute(this.loadingMessage, messages); + this.errorMessage = dojo.string.substitute(this.errorMessage, messages); + + // for programatically created ContentPane (with tag), need to muck w/CSS + // or it's as though overflow:visible is set + dojo.addClass(this.domNode, this["class"]); + }, + + startup: function(){ + if(!this._started){ + this._loadCheck(); + this._started = true; + } + }, + + refresh: function(){ + // summary: + // Force a refresh (re-download) of content, be sure to turn off cache + + // we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane + return this._prepareLoad(true); + }, + + setHref: function(/*String|Uri*/ href){ + // summary: + // Reset the (external defined) content of this pane and replace with new url + // Note: It delays the download until widget is shown if preload is false + // href: + // url to the page you want to get, must be within the same domain as your mainpage + this.href = href; + + // we return result of _prepareLoad here to avoid code dup. in dojox.layout.ContentPane + return this._prepareLoad(); + }, + + setContent: function(/*String|DomNode|Nodelist*/data){ + // summary: + // Replaces old content with data content, include style classes from old content + // data: + // the new Content may be String, DomNode or NodeList + // + // if data is a NodeList (or an array of nodes) nodes are copied + // so you can import nodes from another document implicitly + + // clear href so we cant run refresh and clear content + // refresh should only work if we downloaded the content + if(!this._isDownloaded){ + this.href = ""; + this._onUnloadHandler(); + } + + this._setContent(data || ""); + + this._isDownloaded = false; // must be set after _setContent(..), pathadjust in dojox.layout.ContentPane + + if(this.parseOnLoad){ + this._createSubWidgets(); + } + + this._onLoadHandler(); + }, + + cancel: function(){ + // summary + // Cancels a inflight download of content + if(this._xhrDfd && (this._xhrDfd.fired == -1)){ + this._xhrDfd.cancel(); + } + + delete this._xhrDfd; // garbage collect + }, + + destroy: function(){ + // if we have multiple controllers destroying us, bail after the first + if(this._beingDestroyed){ + return; + } + // make sure we call onUnload + this._onUnloadHandler(); + this._beingDestroyed = true; + dijit.layout.ContentPane.superclass.destroy.call(this); + }, + + resize: function(size){ + dojo.marginBox(this.domNode, size); + }, + + _prepareLoad: function(forceLoad){ + // sets up for a xhrLoad, load is deferred until widget onShow + // cancels a inflight download + this.cancel(); + this.isLoaded = false; + this._loadCheck(forceLoad); + }, + + _loadCheck: function(forceLoad){ + // call this when you change onShow (onSelected) status when selected in parent container + // it's used as a trigger for href download when this.domNode.display != 'none' + + // sequence: + // if no href -> bail + // forceLoad -> always load + // this.preload -> load when download not in progress, domNode display doesn't matter + // this.refreshOnShow -> load when download in progress bails, domNode display !='none' AND + // this.open !== false (undefined is ok), isLoaded doesn't matter + // else -> load when download not in progress, if this.open !== false (undefined is ok) AND + // domNode display != 'none', isLoaded must be false + + var displayState = ((this.open !== false) && (this.domNode.style.display != 'none')); + + if(this.href && + (forceLoad || + (this.preload && !this._xhrDfd) || + (this.refreshOnShow && displayState && !this._xhrDfd) || + (!this.isLoaded && displayState && !this._xhrDfd) + ) + ){ + this._downloadExternalContent(); + } + }, + + _downloadExternalContent: function(){ + this._onUnloadHandler(); + + // display loading message + // TODO: maybe we should just set a css class with a loading image as background? + this._setContent( + this.onDownloadStart.call(this) + ); + + var self = this; + var getArgs = { + preventCache: (this.preventCache || this.refreshOnShow), + url: this.href, + handleAs: "text" + }; + if(dojo.isObject(this.ioArgs)){ + dojo.mixin(getArgs, this.ioArgs); + } + + var hand = this._xhrDfd = (this.ioMethod || dojo.xhrGet)(getArgs); + + hand.addCallback(function(html){ + try{ + self.onDownloadEnd.call(self); + self._isDownloaded = true; + self.setContent.call(self, html); // onload event is called from here + }catch(err){ + self._onError.call(self, 'Content', err); // onContentError + } + delete self._xhrDfd; + return html; + }); + + hand.addErrback(function(err){ + if(!hand.cancelled){ + // show error message in the pane + self._onError.call(self, 'Download', err); // onDownloadError + } + delete self._xhrDfd; + return err; + }); + }, + + _onLoadHandler: function(){ + this.isLoaded = true; + try{ + this.onLoad.call(this); + }catch(e){ + console.error('Error '+this.widgetId+' running custom onLoad code'); + } + }, + + _onUnloadHandler: function(){ + this.isLoaded = false; + this.cancel(); + try{ + this.onUnload.call(this); + }catch(e){ + console.error('Error '+this.widgetId+' running custom onUnload code'); + } + }, + + _setContent: function(cont){ + this.destroyDescendants(); + + try{ + var node = this.containerNode || this.domNode; + while(node.firstChild){ + dojo._destroyElement(node.firstChild); + } + if(typeof cont == "string"){ + // dijit.ContentPane does only minimal fixes, + // No pathAdjustments, script retrieval, style clean etc + // some of these should be available in the dojox.layout.ContentPane + if(this.extractContent){ + match = cont.match(/]*>\s*([\s\S]+)\s*<\/body>/im); + if(match){ cont = match[1]; } + } + node.innerHTML = cont; + }else{ + // domNode or NodeList + if(cont.nodeType){ // domNode (htmlNode 1 or textNode 3) + node.appendChild(cont); + }else{// nodelist or array such as dojo.Nodelist + dojo.forEach(cont, function(n){ + node.appendChild(n.cloneNode(true)); + }); + } + } + }catch(e){ + // check if a domfault occurs when we are appending this.errorMessage + // like for instance if domNode is a UL and we try append a DIV + var errMess = this.onContentError(e); + try{ + node.innerHTML = errMess; + }catch(e){ + console.error('Fatal '+this.id+' could not change content due to '+e.message, e); + } + } + }, + + _onError: function(type, err, consoleText){ + // shows user the string that is returned by on[type]Error + // overide on[type]Error and return your own string to customize + var errText = this['on' + type + 'Error'].call(this, err); + if(consoleText){ + console.error(consoleText, err); + }else if(errText){// a empty string won't change current content + this._setContent.call(this, errText); + } + }, + + _createSubWidgets: function(){ + // summary: scan my contents and create subwidgets + var rootNode = this.containerNode || this.domNode; + try{ + dojo.parser.parse(rootNode, true); + }catch(e){ + this._onError('Content', e, "Couldn't create widgets in "+this.id + +(this.href ? " from "+this.href : "")); + } + }, + + // EVENT's, should be overide-able + onLoad: function(e){ + // summary: + // Event hook, is called after everything is loaded and widgetified + }, + + onUnload: function(e){ + // summary: + // Event hook, is called before old content is cleared + }, + + onDownloadStart: function(){ + // summary: + // called before download starts + // the string returned by this function will be the html + // that tells the user we are loading something + // override with your own function if you want to change text + return this.loadingMessage; + }, + + onContentError: function(/*Error*/ error){ + // summary: + // called on DOM faults, require fault etc in content + // default is to display errormessage inside pane + }, + + onDownloadError: function(/*Error*/ error){ + // summary: + // Called when download error occurs, default is to display + // errormessage inside pane. Overide function to change that. + // The string returned by this function will be the html + // that tells the user a error happend + return this.errorMessage; + }, + + onDownloadEnd: function(){ + // summary: + // called when download is finished + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/LayoutContainer.js b/spring-faces/src/main/java/META-INF/dijit/layout/LayoutContainer.js new file mode 100644 index 00000000..61b87e8d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/LayoutContainer.js @@ -0,0 +1,71 @@ +if(!dojo._hasResource["dijit.layout.LayoutContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.LayoutContainer"] = true; +dojo.provide("dijit.layout.LayoutContainer"); + +dojo.require("dijit.layout._LayoutWidget"); + +dojo.declare( + "dijit.layout.LayoutContainer", + dijit.layout._LayoutWidget, +{ + // summary + // Provides Delphi-style panel layout semantics. + // + // details + // A LayoutContainer is a box with a specified size (like style="width: 500px; height: 500px;"), + // that contains children widgets marked with "layoutAlign" of "left", "right", "bottom", "top", and "client". + // It takes it's children marked as left/top/bottom/right, and lays them out along the edges of the box, + // and then it takes the child marked "client" and puts it into the remaining space in the middle. + // + // Left/right positioning is similar to CSS's "float: left" and "float: right", + // and top/bottom positioning would be similar to "float: top" and "float: bottom", if there were such + // CSS. + // + // Note that there can only be one client element, but there can be multiple left, right, top, + // or bottom elements. + // + // usage + // + //
    + //
    header text
    + //
    table of contents
    + //
    client area
    + //
    + // + // Lays out each child in the natural order the children occur in. + // Basically each child is laid out into the "remaining space", where "remaining space" is initially + // the content area of this widget, but is reduced to a smaller rectangle each time a child is added. + // + + layout: function(){ + dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); + }, + + addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + dijit._Container.prototype.addChild.apply(this, arguments); + if(this._started){ + dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); + } + }, + + removeChild: function(/*Widget*/ widget){ + dijit._Container.prototype.removeChild.apply(this, arguments); + if(this._started){ + dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); + } + } +}); + +// This argument can be specified for the children of a LayoutContainer. +// Since any widget can be specified as a LayoutContainer child, mix it +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget, { + // layoutAlign: String + // "none", "left", "right", "bottom", "top", and "client". + // See the LayoutContainer description for details on this parameter. + layoutAlign: 'none' +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/LinkPane.js b/spring-faces/src/main/java/META-INF/dijit/layout/LinkPane.js new file mode 100644 index 00000000..a22870f7 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/LinkPane.js @@ -0,0 +1,36 @@ +if(!dojo._hasResource["dijit.layout.LinkPane"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.LinkPane"] = true; +dojo.provide("dijit.layout.LinkPane"); + +dojo.require("dijit.layout.ContentPane"); +dojo.require("dijit._Templated"); + +dojo.declare("dijit.layout.LinkPane", + [dijit.layout.ContentPane, dijit._Templated], +{ + // summary + // LinkPane is just a ContentPane that loads data remotely (via the href attribute), + // and has markup similar to an anchor. The anchor's body (the words between
    and ) + // become the title of the widget (used for TabContainer, AccordionContainer, etc.) + // usage + // my title + + // I'm using a template because the user may specify the input as + // title, in which case we need to get rid of the + // because we don't want a link. + templateString: '
    ', + + postCreate: function(){ + + // If user has specified node contents, they become the title + // (the link must be plain text) + if(this.srcNodeRef){ + this.title += this.srcNodeRef.innerHTML; + } + + dijit.layout.LinkPane.superclass.postCreate.apply(this, arguments); + + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/SplitContainer.js b/spring-faces/src/main/java/META-INF/dijit/layout/SplitContainer.js new file mode 100644 index 00000000..acef3d87 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/SplitContainer.js @@ -0,0 +1,529 @@ +if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.SplitContainer"] = true; +dojo.provide("dijit.layout.SplitContainer"); + +// +// TODO +// make it prettier +// active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case) +// + +dojo.require("dojo.cookie"); +dojo.require("dijit.layout._LayoutWidget"); + +dojo.declare( + "dijit.layout.SplitContainer", + dijit.layout._LayoutWidget, +{ + // summary + // Contains multiple children widgets, all of which are displayed side by side + // (either horizontally or vertically); there's a bar between each of the children, + // and you can adjust the relative size of each child by dragging the bars. + // + // You must specify a size (width and height) for the SplitContainer. + + // activeSizing: Boolean + // If true, the children's size changes as you drag the bar; + // otherwise, the sizes don't change until you drop the bar (by mouse-up) + activeSizing: false, + + // sizerWidget: Integer + // Size in pixels of the bar between each child + // TODO: this should be a CSS attribute + sizerWidth: 15, + + // orientation: String + // either 'horizontal' or vertical; indicates whether the children are + // arranged side-by-side or up/down. + orientation: 'horizontal', + + // persist: Boolean + // Save splitter positions in a cookie + persist: true, + + postMixInProperties: function(){ + dijit.layout.SplitContainer.superclass.postMixInProperties.apply(this, arguments); + this.isHorizontal = (this.orientation == 'horizontal'); + }, + + postCreate: function(){ + dijit.layout.SplitContainer.superclass.postCreate.apply(this, arguments); + this.sizers = []; + dojo.addClass(this.domNode, "dijitSplitContainer"); + // overflow has to be explicitly hidden for splitContainers using gekko (trac #1435) + // to keep other combined css classes from inadvertantly making the overflow visible + if(dojo.isMozilla){ + this.domNode.style.overflow = '-moz-scrollbars-none'; // hidden doesn't work + } + + // create the fake dragger + if(typeof this.sizerWidth == "object"){ + try{ //FIXME: do this without a try/catch + this.sizerWidth = parseInt(this.sizerWidth.toString()); + }catch(e){ this.sizerWidth = 15; } + } + var sizer = this.virtualSizer = document.createElement('div'); + sizer.style.position = 'relative'; + + // #1681: work around the dreaded 'quirky percentages in IE' layout bug + // If the splitcontainer's dimensions are specified in percentages, it + // will be resized when the virtualsizer is displayed in _showSizingLine + // (typically expanding its bounds unnecessarily). This happens because + // we use position: relative for .dijitSplitContainer. + // The workaround: instead of changing the display style attribute, + // switch to changing the zIndex (bring to front/move to back) + + sizer.style.zIndex = 10; + sizer.className = this.isHorizontal ? 'dijitSplitContainerVirtualSizerH' : 'dijitSplitContainerVirtualSizerV'; + this.domNode.appendChild(sizer); + dojo.setSelectable(sizer, false); + }, + + startup: function(){ + if(this._started){ return; } + dojo.forEach(this.getChildren(), function(child, i, children){ + // attach the children and create the draggers + this._injectChild(child); + + if(i < children.length-1){ + this._addSizer(); + } + }, this); + + if(this.persist){ + this._restoreState(); + } + dijit.layout._LayoutWidget.prototype.startup.apply(this, arguments); + this._started = true; + }, + + _injectChild: function(child){ + child.domNode.style.position = "absolute"; + dojo.addClass(child.domNode, "dijitSplitPane"); + }, + + _addSizer: function(){ + var i = this.sizers.length; + + // TODO: use a template for this!!! + var sizer = this.sizers[i] = document.createElement('div'); + sizer.className = this.isHorizontal ? 'dijitSplitContainerSizerH' : 'dijitSplitContainerSizerV'; + + // add the thumb div + var thumb = document.createElement('div'); + thumb.className = 'thumb'; + sizer.appendChild(thumb); + + var self = this; + var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })(); + dojo.connect(sizer, "onmousedown", handler); + + this.domNode.appendChild(sizer); + dojo.setSelectable(sizer, false); + }, + + removeChild: function(widget){ + // Remove sizer, but only if widget is really our child and + // we have at least one sizer to throw away + if(this.sizers.length && dojo.indexOf(this.getChildren(), widget) != -1){ + var i = this.sizers.length - 1; + dojo._destroyElement(this.sizers[i]); + this.sizers.length--; + } + + // Remove widget and repaint + dijit._Container.prototype.removeChild.apply(this, arguments); + if(this._started){ + this.layout(); + } + }, + + addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + dijit._Container.prototype.addChild.apply(this, arguments); + + if(this._started){ + // Do the stuff that startup() does for each widget + this._injectChild(child); + var children = this.getChildren(); + if(children.length > 1){ + this._addSizer(); + } + + // and then reposition (ie, shrink) every pane to make room for the new guy + this.layout(); + } + }, + + layout: function(){ + // summary: + // Do layout of panels + + // base class defines this._contentBox on initial creation and also + // on resize + this.paneWidth = this._contentBox.w; + this.paneHeight = this._contentBox.h; + + var children = this.getChildren(); + if(!children.length){ return; } + + // + // calculate space + // + + var space = this.isHorizontal ? this.paneWidth : this.paneHeight; + if(children.length > 1){ + space -= this.sizerWidth * (children.length - 1); + } + + // + // calculate total of SizeShare values + // + var outOf = 0; + dojo.forEach(children, function(child){ + outOf += child.sizeShare; + }); + + // + // work out actual pixels per sizeshare unit + // + var pixPerUnit = space / outOf; + + // + // set the SizeActual member of each pane + // + var totalSize = 0; + dojo.forEach(children.slice(0, children.length - 1), function(child){ + var size = Math.round(pixPerUnit * child.sizeShare); + child.sizeActual = size; + totalSize += size; + }); + + children[children.length-1].sizeActual = space - totalSize; + + // + // make sure the sizes are ok + // + this._checkSizes(); + + // + // now loop, positioning each pane and letting children resize themselves + // + + var pos = 0; + var size = children[0].sizeActual; + this._movePanel(children[0], pos, size); + children[0].position = pos; + pos += size; + + // if we don't have any sizers, our layout method hasn't been called yet + // so bail until we are called..TODO: REVISIT: need to change the startup + // algorithm to guaranteed the ordering of calls to layout method + if(!this.sizers){ + return; + } + + dojo.some(children.slice(1), function(child, i){ + // error-checking + if(!this.sizers[i]){ + return true; + } + // first we position the sizing handle before this pane + this._moveSlider(this.sizers[i], pos, this.sizerWidth); + this.sizers[i].position = pos; + pos += this.sizerWidth; + + size = child.sizeActual; + this._movePanel(child, pos, size); + child.position = pos; + pos += size; + }, this); + }, + + _movePanel: function(panel, pos, size){ + if(this.isHorizontal){ + panel.domNode.style.left = pos + 'px'; // TODO: resize() takes l and t parameters too, don't need to set manually + panel.domNode.style.top = 0; + var box = {w: size, h: this.paneHeight}; + if(panel.resize){ + panel.resize(box); + }else{ + dojo.marginBox(panel.domNode, box); + } + }else{ + panel.domNode.style.left = 0; // TODO: resize() takes l and t parameters too, don't need to set manually + panel.domNode.style.top = pos + 'px'; + var box = {w: this.paneWidth, h: size}; + if(panel.resize){ + panel.resize(box); + }else{ + dojo.marginBox(panel.domNode, box); + } + } + }, + + _moveSlider: function(slider, pos, size){ + if(this.isHorizontal){ + slider.style.left = pos + 'px'; + slider.style.top = 0; + dojo.marginBox(slider, { w: size, h: this.paneHeight }); + }else{ + slider.style.left = 0; + slider.style.top = pos + 'px'; + dojo.marginBox(slider, { w: this.paneWidth, h: size }); + } + }, + + _growPane: function(growth, pane){ + if(growth > 0){ + if(pane.sizeActual > pane.sizeMin){ + if((pane.sizeActual - pane.sizeMin) > growth){ + + // stick all the growth in this pane + pane.sizeActual = pane.sizeActual - growth; + growth = 0; + }else{ + // put as much growth in here as we can + growth -= pane.sizeActual - pane.sizeMin; + pane.sizeActual = pane.sizeMin; + } + } + } + return growth; + }, + + _checkSizes: function(){ + + var totalMinSize = 0; + var totalSize = 0; + var children = this.getChildren(); + + dojo.forEach(children, function(child){ + totalSize += child.sizeActual; + totalMinSize += child.sizeMin; + }); + + // only make adjustments if we have enough space for all the minimums + + if(totalMinSize <= totalSize){ + + var growth = 0; + + dojo.forEach(children, function(child){ + if(child.sizeActual < child.sizeMin){ + growth += child.sizeMin - child.sizeActual; + child.sizeActual = child.sizeMin; + } + }); + + if(growth > 0){ + var list = this.isDraggingLeft ? children.reverse() : children; + dojo.forEach(list, function(child){ + growth = this._growPane(growth, child); + }, this); + } + }else{ + dojo.forEach(children, function(child){ + child.sizeActual = Math.round(totalSize * (child.sizeMin / totalMinSize)); + }); + } + }, + + beginSizing: function(e, i){ + var children = this.getChildren(); + this.paneBefore = children[i]; + this.paneAfter = children[i+1]; + + this.isSizing = true; + this.sizingSplitter = this.sizers[i]; + + if(!this.cover){ + this.cover = dojo.doc.createElement('div'); + this.domNode.appendChild(this.cover); + var s = this.cover.style; + s.position = 'absolute'; + s.zIndex = 1; + s.top = 0; + s.left = 0; + s.width = "100%"; + s.height = "100%"; + }else{ + this.cover.style.zIndex = 1; + } + this.sizingSplitter.style.zIndex = 2; + + // TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet + this.originPos = dojo.coords(children[0].domNode, true); + if(this.isHorizontal){ + var client = (e.layerX ? e.layerX : e.offsetX); + var screen = e.pageX; + this.originPos = this.originPos.x; + }else{ + var client = (e.layerY ? e.layerY : e.offsetY); + var screen = e.pageY; + this.originPos = this.originPos.y; + } + this.startPoint = this.lastPoint = screen; + this.screenToClientOffset = screen - client; + this.dragOffset = this.lastPoint - this.paneBefore.sizeActual - this.originPos - this.paneBefore.position; + + if(!this.activeSizing){ + this._showSizingLine(); + } + + // + // attach mouse events + // + this.connect(document.documentElement, "onmousemove", "changeSizing"); + this.connect(document.documentElement, "onmouseup", "endSizing"); + + dojo.stopEvent(e); + }, + + changeSizing: function(e){ + if(!this.isSizing){ return; } + this.lastPoint = this.isHorizontal ? e.pageX : e.pageY; + this.movePoint(); + if(this.activeSizing){ + this._updateSize(); + }else{ + this._moveSizingLine(); + } + dojo.stopEvent(e); + }, + + endSizing: function(e){ + if(!this.isSizing){ return; } + if(this.cover){ + this.cover.style.zIndex = -1; + } + if(!this.activeSizing){ + this._hideSizingLine(); + } + + this._updateSize(); + + this.isSizing = false; + + if(this.persist){ + this._saveState(this); + } + }, + + movePoint: function(){ + + // make sure lastPoint is a legal point to drag to + var p = this.lastPoint - this.screenToClientOffset; + + var a = p - this.dragOffset; + a = this.legaliseSplitPoint(a); + p = a + this.dragOffset; + + this.lastPoint = p + this.screenToClientOffset; + }, + + legaliseSplitPoint: function(a){ + + a += this.sizingSplitter.position; + + this.isDraggingLeft = !!(a > 0); + + if(!this.activeSizing){ + var min = this.paneBefore.position + this.paneBefore.sizeMin; + if(a < min){ + a = min; + } + + var max = this.paneAfter.position + (this.paneAfter.sizeActual - (this.sizerWidth + this.paneAfter.sizeMin)); + if(a > max){ + a = max; + } + } + + a -= this.sizingSplitter.position; + + this._checkSizes(); + + return a; + }, + + _updateSize: function(){ + //FIXME: sometimes this.lastPoint is NaN + var pos = this.lastPoint - this.dragOffset - this.originPos; + + var start_region = this.paneBefore.position; + var end_region = this.paneAfter.position + this.paneAfter.sizeActual; + + this.paneBefore.sizeActual = pos - start_region; + this.paneAfter.position = pos + this.sizerWidth; + this.paneAfter.sizeActual = end_region - this.paneAfter.position; + + dojo.forEach(this.getChildren(), function(child){ + child.sizeShare = child.sizeActual; + }); + + if(this._started){ + this.layout(); + } + }, + + _showSizingLine: function(){ + + this._moveSizingLine(); + + dojo.marginBox(this.virtualSizer, + this.isHorizontal ? { w: this.sizerWidth, h: this.paneHeight } : { w: this.paneWidth, h: this.sizerWidth }); + + this.virtualSizer.style.display = 'block'; + }, + + _hideSizingLine: function(){ + this.virtualSizer.style.display = 'none'; + }, + + _moveSizingLine: function(){ + var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position; + this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; + }, + + _getCookieName: function(i){ + return this.id + "_" + i; + }, + + _restoreState: function(){ + dojo.forEach(this.getChildren(), function(child, i){ + var cookieName = this._getCookieName(i); + var cookieValue = dojo.cookie(cookieName); + if(cookieValue){ + var pos = parseInt(cookieValue); + if(typeof pos == "number"){ + child.sizeShare = pos; + } + } + }, this); + }, + + _saveState: function(){ + dojo.forEach(this.getChildren(), function(child, i){ + dojo.cookie(this._getCookieName(i), child.sizeShare); + }, this); + } +}); + +// These arguments can be specified for the children of a SplitContainer. +// Since any widget can be specified as a SplitContainer child, mix them +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget, { + // sizeMin: Integer + // Minimum size (width or height) of a child of a SplitContainer. + // The value is relative to other children's sizeShare properties. + sizeMin: 10, + + // sizeShare: Integer + // Size (width or height) of a child of a SplitContainer. + // The value is relative to other children's sizeShare properties. + // For example, if there are two children and each has sizeShare=10, then + // each takes up 50% of the available space. + sizeShare: 10 +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/StackContainer.js b/spring-faces/src/main/java/META-INF/dijit/layout/StackContainer.js new file mode 100644 index 00000000..a0199b3d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/StackContainer.js @@ -0,0 +1,436 @@ +if(!dojo._hasResource["dijit.layout.StackContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.StackContainer"] = true; +dojo.provide("dijit.layout.StackContainer"); + +dojo.require("dijit._Templated"); +dojo.require("dijit.layout._LayoutWidget"); +dojo.require("dijit.form.Button"); + +dojo.declare( + "dijit.layout.StackContainer", + dijit.layout._LayoutWidget, + + // summary + // A container that has multiple children, but shows only + // one child at a time (like looking at the pages in a book one by one). + // + // Publishes topics -addChild, -removeChild, and -selectChild + // + // Can be base class for container, Wizard, Show, etc. +{ + // doLayout: Boolean + // if true, change the size of my currently displayed child to match my size + doLayout: true, + + _started: false, + + startup: function(){ + if(this._started){ return; } + + var children = this.getChildren(); + + // Setup each page panel + dojo.forEach(children, this._setupChild, this); + + // Figure out which child to initially display + dojo.some(children, function(child){ + if(child.selected){ + this.selectedChildWidget = child; + } + return child.selected; + }, this); + + // Default to the first child + if(!this.selectedChildWidget && children[0]){ + this.selectedChildWidget = children[0]; + this.selectedChildWidget.selected = true; + } + if(this.selectedChildWidget){ + this._showChild(this.selectedChildWidget); + } + + // Now publish information about myself so any StackControllers can initialize.. + dojo.publish(this.id+"-startup", [{children: children, selected: this.selectedChildWidget}]); + + dijit.layout._LayoutWidget.prototype.startup.apply(this, arguments); + this._started = true; + }, + + _setupChild: function(/*Widget*/ page){ + // Summary: prepare the given child + + page.domNode.style.display = "none"; + + // since we are setting the width/height of the child elements, they need + // to be position:relative, or IE has problems (See bug #2033) + page.domNode.style.position = "relative"; + + return page; + }, + + addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + dijit._Container.prototype.addChild.apply(this, arguments); + child = this._setupChild(child); + + if(this._started){ + // in case the tab titles have overflowed from one line to two lines + this.layout(); + + dojo.publish(this.id+"-addChild", [child]); + + // if this is the first child, then select it + if(!this.selectedChildWidget){ + this.selectChild(child); + } + } + }, + + removeChild: function(/*Widget*/ page){ + + dijit._Container.prototype.removeChild.apply(this, arguments); + + // If we are being destroyed than don't run the code below (to select another page), because we are deleting + // every page one by one + if(this._beingDestroyed){ return; } + + if(this._started){ + // this will notify any tablists to remove a button; do this first because it may affect sizing + dojo.publish(this.id+"-removeChild", [page]); + + // in case the tab titles now take up one line instead of two lines + this.layout(); + } + + if(this.selectedChildWidget === page){ + this.selectedChildWidget = undefined; + if(this._started){ + var children = this.getChildren(); + if(children.length){ + this.selectChild(children[0]); + } + } + } + }, + + selectChild: function(/*Widget*/ page){ + // summary + // Show the given widget (which must be one of my children) + + page = dijit.byId(page); + + if(this.selectedChildWidget != page){ + // Deselect old page and select new one + this._transition(page, this.selectedChildWidget); + this.selectedChildWidget = page; + dojo.publish(this.id+"-selectChild", [page]); + } + }, + + _transition: function(/*Widget*/newWidget, /*Widget*/oldWidget){ + if(oldWidget){ + this._hideChild(oldWidget); + } + this._showChild(newWidget); + + // Size the new widget, in case this is the first time it's being shown, + // or I have been resized since the last time it was shown. + // page must be visible for resizing to work + if(this.doLayout && newWidget.resize){ + newWidget.resize(this._containerContentBox || this._contentBox); + } + }, + + forward: function(){ + // Summary: advance to next page + var children = this.getChildren(); + var index = dojo.indexOf(children, this.selectedChildWidget); + this.selectChild(children[ (index + 1) % children.length ]); + }, + + back: function(){ + // Summary: go back to previous page + var children = this.getChildren(); + var index = dojo.indexOf(children, this.selectedChildWidget); + this.selectChild(children[ (index + children.length - 1) % children.length ]); + }, + + // TODO: move this logic into controller? + _onKeyPress: function(e){ + // summary + // Keystroke handling for keystrokes on the tab panel itself (that were bubbled up to me) + // Ctrl-w: close tab + if (e.ctrlKey){ + switch(e.keyCode){ + case dojo.keys.PAGE_DOWN: + case dojo.keys.PAGE_UP: + case dojo.keys.TAB: + if ((e.keyCode == dojo.keys.PAGE_DOWN) || + (e.keyCode == dojo.keys.TAB && !e.shiftKey)){ + this.forward(); + }else{ + this.back(); + } + dijit.focus(this.selectedChildWidget.domNode); + dojo.stopEvent(e); + return false; + break; + default: + if((e.keyChar == "w") && + (this.selectedChildWidget.closable)){ + this.closeChild(this.selectedChildWidget); + dojo.stopEvent(e); + } + } + } + }, + + layout: function(){ + // Summary: called when any page is shown, to make it fit the container correctly + if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){ + this.selectedChildWidget.resize(this._contentBox); + } + }, + + _showChild: function(/*Widget*/ page){ + var children = this.getChildren(); + page.isFirstChild = (page == children[0]); + page.isLastChild = (page == children[children.length-1]); + page.selected = true; + + page.domNode.style.display=""; + if(page._loadCheck){ + page._loadCheck(); // trigger load in ContentPane + } + if(page.onShow){ + page.onShow(); + } + }, + + _hideChild: function(/*Widget*/ page){ + page.selected=false; + page.domNode.style.display="none"; + if(page.onHide){ + page.onHide(); + } + }, + + closeChild: function(/*Widget*/ page){ + // summary + // callback when user clicks the [X] to remove a page + // if onClose() returns true then remove and destroy the childd + var remove = page.onClose(this, page); + if(remove){ + this.removeChild(page); + // makes sure we can clean up executeScripts in ContentPane onUnLoad + page.destroy(); + } + }, + + destroy: function(){ + this._beingDestroyed = true; + dijit.layout.StackContainer.superclass.destroy.apply(this, arguments); + } +}); + + +dojo.declare( + "dijit.layout.StackController", + [dijit._Widget, dijit._Templated, dijit._Container], + { + // summary + // Set of buttons to select a page in a page list. + // Monitors the specified StackContainer, and whenever a page is + // added, deleted, or selected, updates itself accordingly. + + templateString: "", + + // containerId: String + // the id of the page container that I point to + containerId: "", + + // buttonWidget: String + // the name of the button widget to create to correspond to each page + buttonWidget: "dijit.layout._StackButton", + + postCreate: function(){ + dijit.wai.setAttr(this.domNode, "waiRole", "role", "tablist"); + + this.pane2button = {}; // mapping from panes to buttons + this._subscriptions=[ + dojo.subscribe(this.containerId+"-startup", this, "onStartup"), + dojo.subscribe(this.containerId+"-addChild", this, "onAddChild"), + dojo.subscribe(this.containerId+"-removeChild", this, "onRemoveChild"), + dojo.subscribe(this.containerId+"-selectChild", this, "onSelectChild") + ]; + }, + + onStartup: function(/*Object*/ info){ + // summary: called after StackContainer has finished initializing + dojo.forEach(info.children, this.onAddChild, this); + this.onSelectChild(info.selected); + }, + + destroy: function(){ + dojo.forEach(this._subscriptions, dojo.unsubscribe); + dijit.layout.StackController.superclass.destroy.apply(this, arguments); + }, + + onAddChild: function(/*Widget*/ page){ + // summary + // Called whenever a page is added to the container. + // Create button corresponding to the page. + + // add a node that will be promoted to the button widget + var refNode = document.createElement("span"); + this.domNode.appendChild(refNode); + // create an instance of the button widget + var cls = dojo.getObject(this.buttonWidget); + var button = new cls({label: page.title, closeButton: page.closable}, refNode); + this.addChild(button); + this.pane2button[page] = button; + page.controlButton = button; // this value might be overwritten if two tabs point to same container + + var _this = this; + dojo.connect(button, "onClick", function(){ _this.onButtonClick(page); }); + dojo.connect(button, "onClickCloseButton", function(){ _this.onCloseButtonClick(page); }); + if(!this._currentChild){ // put the first child into the tab order + button.focusNode.setAttribute("tabIndex","0"); + this._currentChild = page; + } + }, + + onRemoveChild: function(/*Widget*/ page){ + // summary + // Called whenever a page is removed from the container. + // Remove the button corresponding to the page. + if(this._currentChild === page){ this._currentChild = null; } + var button = this.pane2button[page]; + if(button){ + // TODO? if current child { reassign } + button.destroy(); + } + this.pane2button[page] = null; + }, + + onSelectChild: function(/*Widget*/ page){ + // Summary + // Called when a page has been selected in the StackContainer, either by me or by another StackController + + if(!page){ return; } + + if(this._currentChild){ + var oldButton=this.pane2button[this._currentChild]; + oldButton.setChecked(false); + oldButton.focusNode.setAttribute("tabIndex", "-1"); + } + + var newButton=this.pane2button[page]; + newButton.setChecked(true); + this._currentChild = page; + newButton.focusNode.setAttribute("tabIndex", "0"); + }, + + onButtonClick: function(/*Widget*/ page){ + // summary + // Called whenever one of my child buttons is pressed in an attempt to select a page + var container = dijit.byId(this.containerId); // TODO: do this via topics? + container.selectChild(page); + }, + + onCloseButtonClick: function(/*Widget*/ page){ + // summary + // Called whenever one of my child buttons [X] is pressed in an attempt to close a page + var container = dijit.byId(this.containerId); + container.closeChild(page); + var b = this.pane2button[this._currentChild]; + if(b){ + dijit.focus(b.focusNode || b.domNode); + } + }, + + // TODO: this is a bit redundant with forward, back api in StackContainer + adjacent: function(/*Boolean*/ forward){ + // find currently focused button in children array + var children = this.getChildren(); + var current = dojo.indexOf(children, this.pane2button[this._currentChild]); + // pick next button to focus on + var offset = forward ? 1 : children.length - 1; + return children[ (current + offset) % children.length ]; + }, + + onkeypress: function(/*Event*/ evt){ + // summary: + // Handle keystrokes on the page list, for advancing to next/previous button + // and closing the current page. + + if(this.disabled || evt.altKey || evt.shiftKey || evt.ctrlKey){ return; } + var forward = true; + switch(evt.keyCode){ + case dojo.keys.LEFT_ARROW: + case dojo.keys.UP_ARROW: + forward=false; + // fall through + case dojo.keys.RIGHT_ARROW: + case dojo.keys.DOWN_ARROW: + this.adjacent(forward).onClick(); + dojo.stopEvent(evt); + break; + case dojo.keys.DELETE: + if (this._currentChild.closable){ + this.onCloseButtonClick(this._currentChild); + dojo.stopEvent(evt); // so we don't close a browser tab! + } + default: + return; + } + } + } +); + +dojo.declare( + "dijit.layout._StackButton", + dijit.form.ToggleButton, +{ + // summary + // Internal widget used by StackContainer. + // The button-like or tab-like object you click to select or delete a page + + onClick: function(/*Event*/ evt) { + // this is for TabContainer where the tabs are rather than button, + // so need to set focus explicitly (on some browsers) + dijit.focus(this.focusNode); + + // ... now let StackController catch the event and tell me what to do + }, + + onClickCloseButton: function(/*Event*/ evt){ + // summary + // StackContainer connects to this function; if your widget contains a close button + // then clicking it should call this function. + evt.stopPropagation(); + } +}); + +// These arguments can be specified for the children of a StackContainer. +// Since any widget can be specified as a StackContainer child, mix them +// into the base widget class. (This is a hack, but it's effective.) +dojo.extend(dijit._Widget, { + // title: String + // Title of this widget. Used by TabContainer to the name the tab, etc. + title: "", + + // selected: Boolean + // Is this child currently selected? + selected: false, + + // closable: Boolean + // True if user can close (destroy) this child, such as (for example) clicking the X on the tab. + closable: false, // true if user can close this tab pane + + onClose: function(){ + // summary: Callback if someone tries to close the child, child will be closed if func returns true + return true; + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/TabContainer.js b/spring-faces/src/main/java/META-INF/dijit/layout/TabContainer.js new file mode 100644 index 00000000..6e337891 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/TabContainer.js @@ -0,0 +1,152 @@ +if(!dojo._hasResource["dijit.layout.TabContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout.TabContainer"] = true; +dojo.provide("dijit.layout.TabContainer"); + +dojo.require("dijit.layout.StackContainer"); +dojo.require("dijit._Templated"); + +dojo.declare( + "dijit.layout.TabContainer", + [dijit.layout.StackContainer, dijit._Templated], +{ + // summary + // A TabContainer is a container that has multiple panes, but shows only + // one pane at a time. There are a set of tabs corresponding to each pane, + // where each tab has the title (aka title) of the pane, and optionally a close button. + // + // Publishes topics -addChild, -removeChild, and -selectChild + // (where is the id of the TabContainer itself. + + // tabPosition: String + // Defines where tabs go relative to tab content. + // "top", "bottom", "left-h", "right-h" + tabPosition: "top", + + templateString: null, // override setting in StackContainer + templateString:"
    \n\t
    \n\t
    \n
    \n", + + postCreate: function(){ + dijit.layout.TabContainer.superclass.postCreate.apply(this, arguments); + // create the tab list that will have a tab (a.k.a. tab button) for each tab panel + this.tablist = new dijit.layout.TabController( + { + id: this.id + "_tablist", + tabPosition: this.tabPosition, + doLayout: this.doLayout, + containerId: this.id + }, this.tablistNode); + }, + + _setupChild: function(tab){ + dojo.addClass(tab.domNode, "dijitTabPane"); + dijit.layout.TabContainer.superclass._setupChild.apply(this, arguments); + return tab; + }, + + startup: function(){ + if(this._started){ return; } + + // wire up the tablist and its tabs + this.tablist.startup(); + dijit.layout.TabContainer.superclass.startup.apply(this, arguments); + + if(dojo.isSafari){ + // sometimes safari 3.0.3 miscalculates the height of the tab labels, see #4058 + setTimeout(dojo.hitch(this, "layout"), 0); + } + }, + + layout: function(){ + // Summary: Configure the content pane to take up all the space except for where the tabs are + if(!this.doLayout){ return; } + + // position and size the titles and the container node + var titleAlign=this.tabPosition.replace(/-h/,""); + var children = [ + {domNode: this.tablist.domNode, layoutAlign: titleAlign}, + {domNode: this.containerNode, layoutAlign: "client"} + ]; + dijit.layout.layoutChildren(this.domNode, this._contentBox, children); + + // Compute size to make each of my children. + // children[1] is the margin-box size of this.containerNode, set by layoutChildren() call above + this._containerContentBox = dijit.layout.marginBox2contentBox(this.containerNode, children[1]); + + if(this.selectedChildWidget){ + this._showChild(this.selectedChildWidget); + if(this.doLayout && this.selectedChildWidget.resize){ + this.selectedChildWidget.resize(this._containerContentBox); + } + } + }, + + destroy: function(){ + this.tablist.destroy(); + dijit.layout.TabContainer.superclass.destroy.apply(this, arguments); + } +}); + +//TODO: make private? +dojo.declare( + "dijit.layout.TabController", + dijit.layout.StackController, + { + // summary + // Set of tabs (the things with titles and a close button, that you click to show a tab panel). + // Lets the user select the currently shown pane in a TabContainer or StackContainer. + // TabController also monitors the TabContainer, and whenever a pane is + // added or deleted updates itself accordingly. + + templateString: "
    ", + + // tabPosition: String + // Defines where tabs go relative to the content. + // "top", "bottom", "left-h", "right-h" + tabPosition: "top", + + doLayout: true, + + // buttonWidget: String + // the name of the tab widget to create to correspond to each page + buttonWidget: "dijit.layout._TabButton", + + postMixInProperties: function(){ + this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout"); + dijit.layout.TabController.superclass.postMixInProperties.apply(this, arguments); + } + } +); + +dojo.declare( + "dijit.layout._TabButton", dijit.layout._StackButton, +{ + // summary + // A tab (the thing you click to select a pane). + // Contains the title of the pane, and optionally a close-button to destroy the pane. + // This is an internal widget and should not be instantiated directly. + + baseClass: "dijitTab", + + templateString: "
    " + +"
    " + +"${!label}" + +"" + +"x" + +"" + +"
    " + +"
    ", + + postCreate: function(){ + if(this.closeButton){ + dojo.addClass(this.innerDiv, "dijitClosable"); + } else { + this.closeButtonNode.style.display="none"; + } + dijit.layout._TabButton.superclass.postCreate.apply(this, arguments); + dojo.setSelectable(this.containerNode, false); + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/_LayoutWidget.js b/spring-faces/src/main/java/META-INF/dijit/layout/_LayoutWidget.js new file mode 100644 index 00000000..37b4caec --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/_LayoutWidget.js @@ -0,0 +1,181 @@ +if(!dojo._hasResource["dijit.layout._LayoutWidget"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.layout._LayoutWidget"] = true; +dojo.provide("dijit.layout._LayoutWidget"); + +dojo.require("dijit._Widget"); +dojo.require("dijit._Container"); + +dojo.declare("dijit.layout._LayoutWidget", + [dijit._Widget, dijit._Container, dijit._Contained], + { + // summary + // Mixin for widgets that contain a list of children like SplitContainer. + // Widgets which mixin this code must define layout() to lay out the children + + isLayoutContainer: true, + + postCreate: function(){ + dojo.addClass(this.domNode, "dijitContainer"); + }, + + startup: function(){ + // summary: + // Called after all the widgets have been instantiated and their + // dom nodes have been inserted somewhere under document.body. + // + // Widgets should override this method to do any initialization + // dependent on other widgets existing, and then call + // this superclass method to finish things off. + // + // startup() in subclasses shouldn't do anything + // size related because the size of the widget hasn't been set yet. + + if(this._started){ return; } + this._started=true; + + if(this.getChildren){ + dojo.forEach(this.getChildren(), function(child){ child.startup(); }); + } + + // If I am a top level widget + if(!this.getParent || !this.getParent()){ + // Do recursive sizing and layout of all my descendants + // (passing in no argument to resize means that it has to glean the size itself) + this.resize(); + + // since my parent isn't a layout container, and my style is width=height=100% (or something similar), + // then I need to watch when the window resizes, and size myself accordingly + // (passing in no argument to resize means that it has to glean the size itself) + this.connect(window, 'onresize', function(){this.resize();}); + } + }, + + resize: function(args){ + // summary: + // Explicitly set this widget's size (in pixels), + // and then call layout() to resize contents (and maybe adjust child widgets) + // + // args: Object? + // {w: int, h: int, l: int, t: int} + + var node = this.domNode; + + // set margin box size, unless it wasn't specified, in which case use current size + if(args){ + dojo.marginBox(node, args); + + // set offset of the node + if(args.t){ node.style.top = args.t + "px"; } + if(args.l){ node.style.left = args.l + "px"; } + } + // If either height or width wasn't specified by the user, then query node for it. + // But note that setting the margin box and then immediately querying dimensions may return + // inaccurate results, so try not to depend on it. + var mb = dojo.mixin(dojo.marginBox(node), args||{}); + + // Save the size of my content box. + this._contentBox = dijit.layout.marginBox2contentBox(node, mb); + + // Callback for widget to adjust size of it's children + this.layout(); + }, + + layout: function(){ + // summary + // Widgets override this method to size & position their contents/children. + // When this is called this._contentBox is guaranteed to be set (see resize()). + // + // This is called after startup(), and also when the widget's size has been + // changed. + } + } +); + +dijit.layout.marginBox2contentBox = function(/*DomNode*/ node, /*Object*/ mb){ + // summary: + // Given the margin-box size of a node, return it's content box size. + // Functions like dojo.contentBox() but is more reliable since it doesn't have + // to wait for the browser to compute sizes. + var cs = dojo.getComputedStyle(node); + var me=dojo._getMarginExtents(node, cs); + var pb=dojo._getPadBorderExtents(node, cs); + return { + l: dojo._toPixelValue(node, cs.paddingLeft), + t: dojo._toPixelValue(node, cs.paddingTop), + w: mb.w - (me.w + pb.w), + h: mb.h - (me.h + pb.h) + }; +}; + +(function(){ + var capitalize = function(word){ + return word.substring(0,1).toUpperCase() + word.substring(1); + }; + + var size = function(widget, dim){ + // size the child + widget.resize ? widget.resize(dim) : dojo.marginBox(widget.domNode, dim); + + // record child's size, but favor our own numbers when we have them. + // the browser lies sometimes + dojo.mixin(widget, dojo.marginBox(widget.domNode)); + dojo.mixin(widget, dim); + }; + + dijit.layout.layoutChildren = function(/*DomNode*/ container, /*Object*/ dim, /*Object[]*/ children){ + /** + * summary + * Layout a bunch of child dom nodes within a parent dom node + * container: + * parent node + * dim: + * {l, t, w, h} object specifying dimensions of container into which to place children + * children: + * an array like [ {domNode: foo, layoutAlign: "bottom" }, {domNode: bar, layoutAlign: "client"} ] + */ + + // copy dim because we are going to modify it + dim = dojo.mixin({}, dim); + + dojo.addClass(container, "dijitLayoutContainer"); + + // set positions/sizes + dojo.forEach(children, function(child){ + var elm = child.domNode, + pos = child.layoutAlign; + + // set elem to upper left corner of unused space; may move it later + var elmStyle = elm.style; + elmStyle.left = dim.l+"px"; + elmStyle.top = dim.t+"px"; + elmStyle.bottom = elmStyle.right = "auto"; + + dojo.addClass(elm, "dijitAlign" + capitalize(pos)); + + // set size && adjust record of remaining space. + // note that setting the width of a
    may affect it's height. + if(pos=="top" || pos=="bottom"){ + size(child, { w: dim.w }); + dim.h -= child.h; + if(pos=="top"){ + dim.t += child.h; + }else{ + elmStyle.top = dim.t + dim.h + "px"; + } + }else if(pos=="left" || pos=="right"){ + size(child, { h: dim.h }); + dim.w -= child.w; + if(pos=="left"){ + dim.l += child.w; + }else{ + elmStyle.left = dim.l + dim.w + "px"; + } + }else if(pos=="flood" || pos=="client"){ + size(child, dim); + } + }); + }; + +})(); + +} diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/templates/AccordionPane.html b/spring-faces/src/main/java/META-INF/dijit/layout/templates/AccordionPane.html new file mode 100644 index 00000000..f3303b9c --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/templates/AccordionPane.html @@ -0,0 +1,12 @@ +
    ${title}
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/templates/TabContainer.html b/spring-faces/src/main/java/META-INF/dijit/layout/templates/TabContainer.html new file mode 100644 index 00000000..615dd53a --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/templates/TabContainer.html @@ -0,0 +1,4 @@ +
    +
    +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/layout/templates/TooltipDialog.html b/spring-faces/src/main/java/META-INF/dijit/layout/templates/TooltipDialog.html new file mode 100644 index 00000000..7a751427 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/layout/templates/TooltipDialog.html @@ -0,0 +1,7 @@ +
    +
    +
    +
    + +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/common.js b/spring-faces/src/main/java/META-INF/dijit/nls/common.js new file mode 100644 index 00000000..157771d0 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/common.js @@ -0,0 +1,5 @@ +({ + buttonOk: "OK", + buttonCancel: "Cancel", + buttonSave: "Save" +}) diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/de/common.js b/spring-faces/src/main/java/META-INF/dijit/nls/de/common.js new file mode 100644 index 00000000..cb28c3a2 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/de/common.js @@ -0,0 +1,3 @@ +({ + buttonCancel: "Abbrechen" +}) diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ROOT.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ROOT.js new file mode 100644 index 00000000..26c57a70 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ROOT.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_ROOT");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ROOT");dojo.nls.colors.ROOT={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ROOT");dijit.nls.loading.ROOT={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ROOT");dijit._editor.nls.commands.ROOT={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ROOT");dojo.cldr.nls.number.ROOT={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ROOT");dijit.form.nls.validate.ROOT={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ROOT");dijit.form.nls.ComboBox.ROOT={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ROOT");dojo.cldr.nls.currency.ROOT={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "GBP_symbol": "£", "JPY_displayName": "JPY", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ROOT");dojo.cldr.nls.gregorian.ROOT={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ROOT");dijit.nls.common.ROOT={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.ROOT");dijit.form.nls.Textarea.ROOT={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de-de.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de-de.js new file mode 100644 index 00000000..34cdda33 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de-de.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_de-de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de_de");dojo.nls.colors.de_de={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de_de");dijit.nls.loading.de_de={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de_de");dijit._editor.nls.commands.de_de={"undo": "Rückgängig", "formatBlock": "Paragraph Stil", "selectAll": "Alles auswählen", "plainFormatBlock": "Paragraph Stil", "subscript": "Tiefgestellt", "delete": "Löschen", "justifyRight": "Rechtsbündig", "superscript": "Hochgestellt", "copy": "Kopieren", "createLink": "Link erstellen", "bold": "Fett", "removeFormat": "Formatierung löschen", "unlink": "Link löschen", "fontName": "Schriftart", "outdent": "Ausrücken", "paste": "Einfügen", "redo": "Wiederholen", "indent": "Einrücken", "justifyFull": "Blocksatz", "foreColor": "Textfarbe", "underline": "Unterstrichen", "justifyCenter": "Zentiert", "justifyLeft": "Linksbündig", "italic": "Kursiv", "insertUnorderedList": "Auflistung", "insertOrderedList": "Nummerierung", "insertHorizontalRule": "Horizontale Linie", "strikethrough": "Durchgestrichen", "insertImage": "Bild einfügen", "cut": "Ausschneiden", "hiliteColor": "Hintergrundfarbe", "fontSize": "Schriftgröße", "insertTable": "Insert/Edit Table", "htmlToggle": "HTML Source", "tableProp": "Table Property", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "toggleTableBorder": "Toggle Table Border", "deleteTable": "Delete Table", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x."};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de_de");dojo.cldr.nls.number.de_de={"currencyFormat": "#,##0.00 ¤", "group": ".", "decimal": ",", "percentFormat": "#,##0 %", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de_de");dijit.form.nls.validate.de_de={"rangeMessage": "* Der Wert liegt außerhalb des gültigen Bereichs.", "invalidMessage": "* Der eingegebene Wert ist ungültig.", "missingMessage": "* Der Wert wird benötigt."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de_de");dijit.form.nls.ComboBox.de_de={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de_de");dojo.cldr.nls.currency.de_de={"HKD_displayName": "Hongkong Dollar", "CHF_displayName": "Schweizer Franken", "CHF_symbol": "SFr.", "CAD_displayName": "Kanadischer Dollar", "AUD_displayName": "Australischer Dollar", "JPY_displayName": "Yen", "USD_displayName": "US Dollar", "GBP_displayName": "Pfund Sterling", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de_de");dojo.cldr.nls.gregorian.de_de={"months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["v. Chr.", "n. Chr."], "days-standAlone-narrow": ["S", "M", "D", "M", "D", "F", "S"], "timeFormat-full": "H:mm' Uhr 'z", "eraAbbr": ["v. Chr.", "n. Chr."], "dateFormat-medium": "dd.MM.yyyy", "months-format-abbr": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], "am": "vorm.", "dateFormat-full": "EEEE, d. MMMM yyyy", "days-format-abbr": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], "quarters-format-wide": ["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], "pm": "nachm.", "dateFormat-short": "dd.MM.yy", "months-format-wide": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], "dateFormat-long": "d. MMMM yyyy", "days-format-wide": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de_de");dijit.nls.common.de_de={"buttonCancel": "Abbrechen", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.de_de");dijit.form.nls.Textarea.de_de={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de.js new file mode 100644 index 00000000..8ba83f27 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_de.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_de");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.de");dojo.nls.colors.de={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.de");dijit.nls.loading.de={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.de");dijit._editor.nls.commands.de={"undo": "Rückgängig", "formatBlock": "Paragraph Stil", "selectAll": "Alles auswählen", "plainFormatBlock": "Paragraph Stil", "subscript": "Tiefgestellt", "delete": "Löschen", "justifyRight": "Rechtsbündig", "superscript": "Hochgestellt", "copy": "Kopieren", "createLink": "Link erstellen", "bold": "Fett", "removeFormat": "Formatierung löschen", "unlink": "Link löschen", "fontName": "Schriftart", "outdent": "Ausrücken", "paste": "Einfügen", "redo": "Wiederholen", "indent": "Einrücken", "justifyFull": "Blocksatz", "foreColor": "Textfarbe", "underline": "Unterstrichen", "justifyCenter": "Zentiert", "justifyLeft": "Linksbündig", "italic": "Kursiv", "insertUnorderedList": "Auflistung", "insertOrderedList": "Nummerierung", "insertHorizontalRule": "Horizontale Linie", "strikethrough": "Durchgestrichen", "insertImage": "Bild einfügen", "cut": "Ausschneiden", "hiliteColor": "Hintergrundfarbe", "fontSize": "Schriftgröße", "insertTable": "Insert/Edit Table", "htmlToggle": "HTML Source", "tableProp": "Table Property", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "toggleTableBorder": "Toggle Table Border", "deleteTable": "Delete Table", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x."};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.de");dojo.cldr.nls.number.de={"group": ".", "decimal": ",", "percentFormat": "#,##0 %", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.de");dijit.form.nls.validate.de={"rangeMessage": "* Der Wert liegt außerhalb des gültigen Bereichs.", "invalidMessage": "* Der eingegebene Wert ist ungültig.", "missingMessage": "* Der Wert wird benötigt."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.de");dijit.form.nls.ComboBox.de={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.de");dojo.cldr.nls.currency.de={"HKD_displayName": "Hongkong Dollar", "CHF_displayName": "Schweizer Franken", "CHF_symbol": "SFr.", "CAD_displayName": "Kanadischer Dollar", "AUD_displayName": "Australischer Dollar", "JPY_displayName": "Yen", "USD_displayName": "US Dollar", "GBP_displayName": "Pfund Sterling", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.de");dojo.cldr.nls.gregorian.de={"months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["v. Chr.", "n. Chr."], "days-standAlone-narrow": ["S", "M", "D", "M", "D", "F", "S"], "timeFormat-full": "H:mm' Uhr 'z", "eraAbbr": ["v. Chr.", "n. Chr."], "dateFormat-medium": "dd.MM.yyyy", "months-format-abbr": ["Jan", "Feb", "Mrz", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], "am": "vorm.", "dateFormat-full": "EEEE, d. MMMM yyyy", "days-format-abbr": ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], "quarters-format-wide": ["1. Quartal", "2. Quartal", "3. Quartal", "4. Quartal"], "pm": "nachm.", "dateFormat-short": "dd.MM.yy", "months-format-wide": ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], "dateFormat-long": "d. MMMM yyyy", "days-format-wide": ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.de");dijit.nls.common.de={"buttonCancel": "Abbrechen", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.de");dijit.form.nls.Textarea.de={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-gb.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-gb.js new file mode 100644 index 00000000..53c46f5a --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-gb.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_en-gb");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_gb");dojo.nls.colors.en_gb={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_gb");dijit.nls.loading.en_gb={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_gb");dijit._editor.nls.commands.en_gb={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_gb");dojo.cldr.nls.number.en_gb={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_gb");dijit.form.nls.validate.en_gb={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_gb");dijit.form.nls.ComboBox.en_gb={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_gb");dojo.cldr.nls.currency.en_gb={"HKD_displayName": "Hong Kong Dollar", "CHF_displayName": "Swiss Franc", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "Canadian Dollar", "USD_symbol": "US$", "JPY_displayName": "Japanese Yen", "AUD_displayName": "Australian Dollar", "CAD_symbol": "Can$", "USD_displayName": "US Dollar", "GBP_displayName": "British Pound Sterling", "AUD_symbol": "$A", "EUR_displayName": "Euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_gb");dojo.cldr.nls.gregorian.en_gb={"dateFormat-short": "dd/MM/yyyy", "dateFormat-medium": "d MMM yyyy", "dateFormat-long": "d MMMM yyyy", "timeFormat-long": "HH:mm:ss z", "timeFormat-medium": "HH:mm:ss", "timeFormat-full": "HH:mm:ss z", "dateFormat-full": "EEEE, d MMMM yyyy", "timeFormat-short": "HH:mm", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["Before Christ", "Anno Domini"], "days-standAlone-narrow": ["S", "M", "T", "W", "T", "F", "S"], "field-dayperiod": "AM/PM", "months-format-wide": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "months-format-abbr": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "eraAbbr": ["BC", "AD"], "days-format-wide": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "quarters-format-wide": ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], "days-format-abbr": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_gb");dijit.nls.common.en_gb={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.en_gb");dijit.form.nls.Textarea.en_gb={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-us.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-us.js new file mode 100644 index 00000000..972107d9 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en-us.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_en-us");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en_us");dojo.nls.colors.en_us={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en_us");dijit.nls.loading.en_us={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en_us");dijit._editor.nls.commands.en_us={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en_us");dojo.cldr.nls.number.en_us={"currencyFormat": "¤#,##0.00;(¤#,##0.00)", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en_us");dijit.form.nls.validate.en_us={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en_us");dijit.form.nls.ComboBox.en_us={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en_us");dojo.cldr.nls.currency.en_us={"USD_symbol": "$", "HKD_displayName": "Hong Kong Dollar", "CHF_displayName": "Swiss Franc", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "Canadian Dollar", "JPY_displayName": "Japanese Yen", "AUD_displayName": "Australian Dollar", "CAD_symbol": "Can$", "USD_displayName": "US Dollar", "GBP_displayName": "British Pound Sterling", "AUD_symbol": "$A", "EUR_displayName": "Euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en_us");dojo.cldr.nls.gregorian.en_us={"dateFormat-medium": "MMM d, yyyy", "timeFormat-full": "h:mm:ss a v", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["Before Christ", "Anno Domini"], "days-standAlone-narrow": ["S", "M", "T", "W", "T", "F", "S"], "timeFormat-medium": "h:mm:ss a", "dateFormat-long": "MMMM d, yyyy", "field-dayperiod": "AM/PM", "dateFormat-short": "M/d/yy", "months-format-wide": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "timeFormat-short": "h:mm a", "months-format-abbr": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "timeFormat-long": "h:mm:ss a z", "eraAbbr": ["BC", "AD"], "days-format-wide": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "quarters-format-wide": ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], "dateFormat-full": "EEEE, MMMM d, yyyy", "days-format-abbr": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en_us");dijit.nls.common.en_us={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.en_us");dijit.form.nls.Textarea.en_us={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en.js new file mode 100644 index 00000000..b0e8c924 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_en.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_en");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.en");dojo.nls.colors.en={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.en");dijit.nls.loading.en={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.en");dijit._editor.nls.commands.en={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.en");dojo.cldr.nls.number.en={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.en");dijit.form.nls.validate.en={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.en");dijit.form.nls.ComboBox.en={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.en");dojo.cldr.nls.currency.en={"HKD_displayName": "Hong Kong Dollar", "CHF_displayName": "Swiss Franc", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "Canadian Dollar", "USD_symbol": "US$", "JPY_displayName": "Japanese Yen", "AUD_displayName": "Australian Dollar", "CAD_symbol": "Can$", "USD_displayName": "US Dollar", "GBP_displayName": "British Pound Sterling", "AUD_symbol": "$A", "EUR_displayName": "Euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.en");dojo.cldr.nls.gregorian.en={"dateFormat-medium": "MMM d, yyyy", "timeFormat-full": "h:mm:ss a v", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["Before Christ", "Anno Domini"], "days-standAlone-narrow": ["S", "M", "T", "W", "T", "F", "S"], "timeFormat-medium": "h:mm:ss a", "dateFormat-long": "MMMM d, yyyy", "field-dayperiod": "AM/PM", "dateFormat-short": "M/d/yy", "months-format-wide": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], "timeFormat-short": "h:mm a", "months-format-abbr": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], "timeFormat-long": "h:mm:ss a z", "eraAbbr": ["BC", "AD"], "days-format-wide": ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], "quarters-format-wide": ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"], "dateFormat-full": "EEEE, MMMM d, yyyy", "days-format-abbr": ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.en");dijit.nls.common.en={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.en");dijit.form.nls.Textarea.en={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es-es.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es-es.js new file mode 100644 index 00000000..a1c932af --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es-es.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_es-es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es_es");dojo.nls.colors.es_es={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es_es");dijit.nls.loading.es_es={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es_es");dijit._editor.nls.commands.es_es={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es_es");dojo.cldr.nls.number.es_es={"currencyFormat": "#,##0.00 ¤", "group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es_es");dijit.form.nls.validate.es_es={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es_es");dijit.form.nls.ComboBox.es_es={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es_es");dojo.cldr.nls.currency.es_es={"HKD_displayName": "dólar de Hong Kong", "CHF_displayName": "franco suizo", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "dólar canadiense", "USD_symbol": "US$", "JPY_displayName": "yen japonés", "AUD_displayName": "dólar australiano", "CAD_symbol": "Can$", "USD_displayName": "dólar estadounidense", "GBP_displayName": "libra esterlina británica", "AUD_symbol": "$A", "EUR_displayName": "euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es_es");dojo.cldr.nls.gregorian.es_es={"dateFormat-short": "dd/MM/yy", "dateFormat-medium": "dd/MM/yyyy", "timeFormat-medium": "H:mm:ss", "timeFormat-short": "H:mm", "field-weekday": "día de la semana", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "field-second": "segundo", "field-week": "semana", "pm": "p.m.", "timeFormat-full": "HH'H'mm''ss\" z", "months-standAlone-narrow": ["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am": "a.m.", "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "field-year": "año", "field-minute": "minuto", "field-hour": "hora", "dateFormat-long": "d' de 'MMMM' de 'yyyy", "field-day": "día", "field-dayperiod": "periodo del día", "field-month": "mes", "months-format-wide": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], "field-era": "era", "months-format-abbr": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], "eraAbbr": ["a.C.", "d.C."], "days-format-wide": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"], "quarters-format-wide": ["1er trimestre", "2º trimestre", "3er trimestre", "4º trimestre"], "dateFormat-full": "EEEE d' de 'MMMM' de 'yyyy", "field-zone": "zona", "days-format-abbr": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-long": "HH:mm:ss z", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es_es");dijit.nls.common.es_es={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.es_es");dijit.form.nls.Textarea.es_es={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es.js new file mode 100644 index 00000000..d69afd86 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_es.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_es");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.es");dojo.nls.colors.es={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.es");dijit.nls.loading.es={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.es");dijit._editor.nls.commands.es={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.es");dojo.cldr.nls.number.es={"currencyFormat": "¤#,##0.00;(¤#,##0.00)", "group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.es");dijit.form.nls.validate.es={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.es");dijit.form.nls.ComboBox.es={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.es");dojo.cldr.nls.currency.es={"HKD_displayName": "dólar de Hong Kong", "CHF_displayName": "franco suizo", "CHF_symbol": "SwF", "HKD_symbol": "HK$", "CAD_displayName": "dólar canadiense", "USD_symbol": "US$", "JPY_displayName": "yen japonés", "AUD_displayName": "dólar australiano", "CAD_symbol": "Can$", "USD_displayName": "dólar estadounidense", "GBP_displayName": "libra esterlina británica", "AUD_symbol": "$A", "EUR_displayName": "euro", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.es");dojo.cldr.nls.gregorian.es={"field-weekday": "día de la semana", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "dateFormat-medium": "dd-MMM-yy", "field-second": "segundo", "field-week": "semana", "pm": "p.m.", "timeFormat-full": "HH'H'mm''ss\" z", "months-standAlone-narrow": ["E", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "am": "a.m.", "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "field-year": "año", "field-minute": "minuto", "field-hour": "hora", "dateFormat-long": "d' de 'MMMM' de 'yyyy", "field-day": "día", "field-dayperiod": "periodo del día", "field-month": "mes", "dateFormat-short": "d/MM/yy", "months-format-wide": ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"], "field-era": "era", "months-format-abbr": ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"], "eraAbbr": ["a.C.", "d.C."], "days-format-wide": ["domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado"], "quarters-format-wide": ["1er trimestre", "2º trimestre", "3er trimestre", "4º trimestre"], "dateFormat-full": "EEEE d' de 'MMMM' de 'yyyy", "field-zone": "zona", "days-format-abbr": ["dom", "lun", "mar", "mié", "jue", "vie", "sáb"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.es");dijit.nls.common.es={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.es");dijit.form.nls.Textarea.es={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr-fr.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr-fr.js new file mode 100644 index 00000000..ccdd53bb --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr-fr.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_fr-fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr_fr");dojo.nls.colors.fr_fr={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr_fr");dijit.nls.loading.fr_fr={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr_fr");dijit._editor.nls.commands.fr_fr={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr_fr");dojo.cldr.nls.number.fr_fr={"group": " ", "percentFormat": "#,##0 %", "currencyFormat": "#,##0.00 ¤", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr_fr");dijit.form.nls.validate.fr_fr={"rangeMessage": "* Cette valeur est hors limites.", "invalidMessage": "* La valeur saisie est incorrecte.", "missingMessage": "* Cette valeur est obligatoire."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr_fr");dijit.form.nls.ComboBox.fr_fr={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr_fr");dojo.cldr.nls.currency.fr_fr={"HKD_displayName": "dollar de Hong Kong", "CHF_displayName": "franc suisse", "CHF_symbol": "sFr.", "CAD_displayName": "dollar canadien", "AUD_displayName": "dollar australien", "JPY_displayName": "yen", "USD_displayName": "dollar des États-Unis", "GBP_displayName": "livre sterling", "EUR_displayName": "euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr_fr");dojo.cldr.nls.gregorian.fr_fr={"months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["av. J.-C.", "ap. J.-C."], "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "timeFormat-full": "HH' h 'mm z", "eraAbbr": ["av. J.-C.", "apr. J.-C."], "dateFormat-medium": "d MMM yy", "months-format-abbr": ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."], "dateFormat-full": "EEEE d MMMM yyyy", "days-format-abbr": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], "quarters-format-wide": ["1er trimestre", "2e trimestre", "3e trimestre", "4e trimestre"], "dateFormat-short": "dd/MM/yy", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], "dateFormat-long": "d MMMM yyyy", "days-format-wide": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr_fr");dijit.nls.common.fr_fr={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.fr_fr");dijit.form.nls.Textarea.fr_fr={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr.js new file mode 100644 index 00000000..72b6b795 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_fr.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_fr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.fr");dojo.nls.colors.fr={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.fr");dijit.nls.loading.fr={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.fr");dijit._editor.nls.commands.fr={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.fr");dojo.cldr.nls.number.fr={"group": " ", "percentFormat": "#,##0 %", "currencyFormat": "#,##0.00 ¤", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.fr");dijit.form.nls.validate.fr={"rangeMessage": "* Cette valeur est hors limites.", "invalidMessage": "* La valeur saisie est incorrecte.", "missingMessage": "* Cette valeur est obligatoire."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.fr");dijit.form.nls.ComboBox.fr={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.fr");dojo.cldr.nls.currency.fr={"HKD_displayName": "dollar de Hong Kong", "CHF_displayName": "franc suisse", "CHF_symbol": "sFr.", "CAD_displayName": "dollar canadien", "AUD_displayName": "dollar australien", "JPY_displayName": "yen", "USD_displayName": "dollar des États-Unis", "GBP_displayName": "livre sterling", "EUR_displayName": "euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.fr");dojo.cldr.nls.gregorian.fr={"months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "eraNames": ["av. J.-C.", "ap. J.-C."], "days-standAlone-narrow": ["D", "L", "M", "M", "J", "V", "S"], "timeFormat-full": "HH' h 'mm z", "eraAbbr": ["av. J.-C.", "apr. J.-C."], "dateFormat-medium": "d MMM yy", "months-format-abbr": ["janv.", "févr.", "mars", "avr.", "mai", "juin", "juil.", "août", "sept.", "oct.", "nov.", "déc."], "dateFormat-full": "EEEE d MMMM yyyy", "days-format-abbr": ["dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam."], "quarters-format-wide": ["1er trimestre", "2e trimestre", "3e trimestre", "4e trimestre"], "dateFormat-short": "dd/MM/yy", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"], "dateFormat-long": "d MMMM yyyy", "days-format-wide": ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.fr");dijit.nls.common.fr={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.fr");dijit.form.nls.Textarea.fr={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it-it.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it-it.js new file mode 100644 index 00000000..0686dcb4 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it-it.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_it-it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it_it");dojo.nls.colors.it_it={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it_it");dijit.nls.loading.it_it={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it_it");dijit._editor.nls.commands.it_it={"undo": "Annulla", "formatBlock": "Stile Paragrafo", "selectAll": "Seleziona Tutto", "htmlToggle": "Sorgente HTML", "plainFormatBlock": "Stile Paragrafo", "subscript": "Pedice", "delete": "Elimina", "justifyRight": "Allinea a Destra", "superscript": "Apice", "copy": "Copia", "createLink": "Crea collegamento", "bold": "Grassetto", "removeFormat": "Rimuovi Formato", "unlink": "Rimuovi Collegamento", "fontName": "Nome Font", "redo": "Ripeti", "paste": "Incolla", "outdent": "Riduci Rientro", "indent": "Aumenta Rientro", "justifyFull": "Giustifica", "foreColor": "Colore Primo Piano", "underline": "Sottolineato", "justifyCenter": "Allinea al Centro", "justifyLeft": "Allinea a Sinistra", "italic": "Corsivo", "insertUnorderedList": "Lista Puntata", "insertOrderedList": "Lista Numerata", "insertHorizontalRule": "Righello Orizzontale", "strikethrough": "Barrato", "insertImage": "Inserisci Immagine", "cut": "Taglia", "hiliteColor": "Colore Sfondo", "fontSize": "Dimensioni Font", "insertTable": "Insert/Edit Table", "tableProp": "Table Property", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "toggleTableBorder": "Toggle Table Border", "deleteTable": "Delete Table", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x."};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it_it");dojo.cldr.nls.number.it_it={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it_it");dijit.form.nls.validate.it_it={"rangeMessage": "* Questo valore è al di fuori dell'intervallo consentito", "invalidMessage": "* Il valore inserito non è valido.", "missingMessage": "* Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it_it");dijit.form.nls.ComboBox.it_it={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it_it");dojo.cldr.nls.currency.it_it={"HKD_displayName": "Dollaro di Hong Kong", "CHF_displayName": "Franco Svizzero", "CHF_symbol": "SFr.", "CAD_displayName": "Dollaro Canadese", "AUD_displayName": "Dollaro Australiano", "JPY_displayName": "Yen Giapponese", "USD_displayName": "Dollaro Statunitense", "GBP_displayName": "Sterlina Inglese", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it_it");dojo.cldr.nls.gregorian.it_it={"timeFormat-long": "H:mm:ss z", "field-weekday": "giorno della settimana", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "dateFormat-medium": "dd/MMM/yy", "field-second": "secondo", "field-week": "settimana", "pm": "p.", "months-standAlone-narrow": ["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], "am": "m.", "days-standAlone-narrow": ["D", "L", "M", "M", "G", "V", "S"], "field-year": "anno", "field-minute": "minuto", "field-hour": "ora", "dateFormat-long": "dd MMMM yyyy", "field-day": "giorno", "field-dayperiod": "periodo del giorno", "field-month": "mese", "dateFormat-short": "dd/MM/yy", "months-format-wide": ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], "field-era": "era", "months-format-abbr": ["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], "eraAbbr": ["aC", "dC"], "days-format-wide": ["domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"], "quarters-format-wide": ["1o trimestre", "2o trimestre", "3o trimestre", "4o trimestre"], "dateFormat-full": "EEEE d MMMM yyyy", "field-zone": "zona", "days-format-abbr": ["dom", "lun", "mar", "mer", "gio", "ven", "sab"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it_it");dijit.nls.common.it_it={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.it_it");dijit.form.nls.Textarea.it_it={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it.js new file mode 100644 index 00000000..04bb789c --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_it.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_it");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.it");dojo.nls.colors.it={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.it");dijit.nls.loading.it={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.it");dijit._editor.nls.commands.it={"undo": "Annulla", "formatBlock": "Stile Paragrafo", "selectAll": "Seleziona Tutto", "htmlToggle": "Sorgente HTML", "plainFormatBlock": "Stile Paragrafo", "subscript": "Pedice", "delete": "Elimina", "justifyRight": "Allinea a Destra", "superscript": "Apice", "copy": "Copia", "createLink": "Crea collegamento", "bold": "Grassetto", "removeFormat": "Rimuovi Formato", "unlink": "Rimuovi Collegamento", "fontName": "Nome Font", "redo": "Ripeti", "paste": "Incolla", "outdent": "Riduci Rientro", "indent": "Aumenta Rientro", "justifyFull": "Giustifica", "foreColor": "Colore Primo Piano", "underline": "Sottolineato", "justifyCenter": "Allinea al Centro", "justifyLeft": "Allinea a Sinistra", "italic": "Corsivo", "insertUnorderedList": "Lista Puntata", "insertOrderedList": "Lista Numerata", "insertHorizontalRule": "Righello Orizzontale", "strikethrough": "Barrato", "insertImage": "Inserisci Immagine", "cut": "Taglia", "hiliteColor": "Colore Sfondo", "fontSize": "Dimensioni Font", "insertTable": "Insert/Edit Table", "tableProp": "Table Property", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "toggleTableBorder": "Toggle Table Border", "deleteTable": "Delete Table", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x."};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.it");dojo.cldr.nls.number.it={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.it");dijit.form.nls.validate.it={"rangeMessage": "* Questo valore è al di fuori dell'intervallo consentito", "invalidMessage": "* Il valore inserito non è valido.", "missingMessage": "* Questo valore è obbligatorio."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.it");dijit.form.nls.ComboBox.it={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.it");dojo.cldr.nls.currency.it={"HKD_displayName": "Dollaro di Hong Kong", "CHF_displayName": "Franco Svizzero", "CHF_symbol": "SFr.", "CAD_displayName": "Dollaro Canadese", "AUD_displayName": "Dollaro Australiano", "JPY_displayName": "Yen Giapponese", "USD_displayName": "Dollaro Statunitense", "GBP_displayName": "Sterlina Inglese", "EUR_displayName": "Euro", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.it");dojo.cldr.nls.gregorian.it={"field-weekday": "giorno della settimana", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "dateFormat-medium": "dd/MMM/yy", "field-second": "secondo", "field-week": "settimana", "pm": "p.", "months-standAlone-narrow": ["G", "F", "M", "A", "M", "G", "L", "A", "S", "O", "N", "D"], "am": "m.", "days-standAlone-narrow": ["D", "L", "M", "M", "G", "V", "S"], "field-year": "anno", "field-minute": "minuto", "field-hour": "ora", "dateFormat-long": "dd MMMM yyyy", "field-day": "giorno", "field-dayperiod": "periodo del giorno", "field-month": "mese", "dateFormat-short": "dd/MM/yy", "months-format-wide": ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"], "field-era": "era", "months-format-abbr": ["gen", "feb", "mar", "apr", "mag", "giu", "lug", "ago", "set", "ott", "nov", "dic"], "eraAbbr": ["aC", "dC"], "days-format-wide": ["domenica", "lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato"], "quarters-format-wide": ["1o trimestre", "2o trimestre", "3o trimestre", "4o trimestre"], "dateFormat-full": "EEEE d MMMM yyyy", "field-zone": "zona", "days-format-abbr": ["dom", "lun", "mar", "mer", "gio", "ven", "sab"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.it");dijit.nls.common.it={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.it");dijit.form.nls.Textarea.it={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja-jp.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja-jp.js new file mode 100644 index 00000000..66598026 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja-jp.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_ja-jp");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja_jp");dojo.nls.colors.ja_jp={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja_jp");dijit.nls.loading.ja_jp={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja_jp");dijit._editor.nls.commands.ja_jp={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja_jp");dojo.cldr.nls.number.ja_jp={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja_jp");dijit.form.nls.validate.ja_jp={"rangeMessage": "* 入力した数値は選択範囲外です。", "invalidMessage": "* 入力したデータに該当するものがありません。", "missingMessage": "* 入力が必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja_jp");dijit.form.nls.ComboBox.ja_jp={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja_jp");dojo.cldr.nls.currency.ja_jp={"HKD_displayName": "香港ドル", "CHF_displayName": "スイス フラン", "JPY_symbol": "¥", "CAD_displayName": "カナダ ドル", "AUD_displayName": "オーストラリア ドル", "JPY_displayName": "日本円", "USD_displayName": "米ドル", "GBP_displayName": "英国ポンド", "EUR_displayName": "ユーロ", "USD_symbol": "$", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja_jp");dojo.cldr.nls.gregorian.ja_jp={"days-format-wide": ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], "eraNames": ["紀元前", "西暦"], "timeFormat-full": "H'時'mm'分'ss'秒'z", "timeFormat-medium": "H:mm:ss", "eraAbbr": ["紀元前", "西暦"], "dateFormat-medium": "yyyy/MM/dd", "months-format-abbr": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "am": "午前", "dateFormat-full": "yyyy'年'M'月'd'日'EEEE", "days-format-abbr": ["日", "月", "火", "水", "木", "金", "土"], "timeFormat-long": "H:mm:ss:z", "quarters-format-wide": ["第 1 四半期", "第 2 四半期", "第 3 四半期", "第 4 四半期"], "pm": "午後", "timeFormat-short": "H:mm", "months-format-wide": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "dateFormat-long": "yyyy'年'M'月'd'日'", "days-standAlone-narrow": ["日", "月", "火", "水", "木", "金", "土"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja_jp");dijit.nls.common.ja_jp={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.ja_jp");dijit.form.nls.Textarea.ja_jp={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja.js new file mode 100644 index 00000000..000f722b --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ja.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_ja");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ja");dojo.nls.colors.ja={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ja");dijit.nls.loading.ja={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ja");dijit._editor.nls.commands.ja={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ja");dojo.cldr.nls.number.ja={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ja");dijit.form.nls.validate.ja={"rangeMessage": "* 入力した数値は選択範囲外です。", "invalidMessage": "* 入力したデータに該当するものがありません。", "missingMessage": "* 入力が必須です。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ja");dijit.form.nls.ComboBox.ja={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ja");dojo.cldr.nls.currency.ja={"HKD_displayName": "香港ドル", "CHF_displayName": "スイス フラン", "JPY_symbol": "¥", "CAD_displayName": "カナダ ドル", "AUD_displayName": "オーストラリア ドル", "JPY_displayName": "日本円", "USD_displayName": "米ドル", "GBP_displayName": "英国ポンド", "EUR_displayName": "ユーロ", "USD_symbol": "$", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ja");dojo.cldr.nls.gregorian.ja={"days-format-wide": ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"], "eraNames": ["紀元前", "西暦"], "timeFormat-full": "H'時'mm'分'ss'秒'z", "timeFormat-medium": "H:mm:ss", "eraAbbr": ["紀元前", "西暦"], "dateFormat-medium": "yyyy/MM/dd", "months-format-abbr": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "am": "午前", "dateFormat-full": "yyyy'年'M'月'd'日'EEEE", "days-format-abbr": ["日", "月", "火", "水", "木", "金", "土"], "timeFormat-long": "H:mm:ss:z", "quarters-format-wide": ["第 1 四半期", "第 2 四半期", "第 3 四半期", "第 4 四半期"], "pm": "午後", "timeFormat-short": "H:mm", "months-format-wide": ["1 月", "2 月", "3 月", "4 月", "5 月", "6 月", "7 月", "8 月", "9 月", "10 月", "11 月", "12 月"], "dateFormat-long": "yyyy'年'M'月'd'日'", "days-standAlone-narrow": ["日", "月", "火", "水", "木", "金", "土"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ja");dijit.nls.common.ja={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.ja");dijit.form.nls.Textarea.ja={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko-kr.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko-kr.js new file mode 100644 index 00000000..93b3f1c6 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko-kr.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_ko-kr");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko_kr");dojo.nls.colors.ko_kr={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko_kr");dijit.nls.loading.ko_kr={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko_kr");dijit._editor.nls.commands.ko_kr={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko_kr");dojo.cldr.nls.number.ko_kr={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko_kr");dijit.form.nls.validate.ko_kr={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko_kr");dijit.form.nls.ComboBox.ko_kr={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko_kr");dojo.cldr.nls.currency.ko_kr={"HKD_displayName": "홍콩 달러", "CHF_displayName": "스위스 프랑달러", "JPY_symbol": "¥", "CAD_displayName": "캐나다 달러", "USD_symbol": "US$", "AUD_displayName": "호주 달러", "JPY_displayName": "일본 엔화", "USD_displayName": "미국 달러", "GBP_displayName": "영국령 파운드 스털링", "EUR_displayName": "유로화", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko_kr");dojo.cldr.nls.gregorian.ko_kr={"timeFormat-medium": "a h:mm:ss", "timeFormat-short": "a h:mm", "dateFormat-medium": "yyyy. MM. dd", "pm": "오후", "timeFormat-full": "a hh'시' mm'분' ss'초' z", "months-standAlone-narrow": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "am": "오전", "days-standAlone-narrow": ["일", "월", "화", "수", "목", "금", "토"], "eraNames": ["서력기원전", "서력기원"], "dateFormat-long": "yyyy'년' M'월' d'일'", "dateFormat-short": "yy. MM. dd", "months-format-wide": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "months-format-abbr": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "timeFormat-long": "a hh'시' mm'분' ss'초'", "eraAbbr": ["기원전", "서기"], "days-format-wide": ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], "dateFormat-full": "yyyy'년' M'월' d'일' EEEE", "days-format-abbr": ["일", "월", "화", "수", "목", "금", "토"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko_kr");dijit.nls.common.ko_kr={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.ko_kr");dijit.form.nls.Textarea.ko_kr={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko.js new file mode 100644 index 00000000..b793787a --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_ko.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_ko");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.ko");dojo.nls.colors.ko={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.ko");dijit.nls.loading.ko={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.ko");dijit._editor.nls.commands.ko={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.ko");dojo.cldr.nls.number.ko={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.ko");dijit.form.nls.validate.ko={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.ko");dijit.form.nls.ComboBox.ko={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.ko");dojo.cldr.nls.currency.ko={"HKD_displayName": "홍콩 달러", "CHF_displayName": "스위스 프랑달러", "JPY_symbol": "¥", "CAD_displayName": "캐나다 달러", "USD_symbol": "US$", "AUD_displayName": "호주 달러", "JPY_displayName": "일본 엔화", "USD_displayName": "미국 달러", "GBP_displayName": "영국령 파운드 스털링", "EUR_displayName": "유로화", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.ko");dojo.cldr.nls.gregorian.ko={"dateFormat-medium": "yyyy. MM. dd", "pm": "오후", "timeFormat-full": "a hh'시' mm'분' ss'초' z", "months-standAlone-narrow": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "am": "오전", "days-standAlone-narrow": ["일", "월", "화", "수", "목", "금", "토"], "eraNames": ["서력기원전", "서력기원"], "timeFormat-medium": "a hh'시' mm'분'", "dateFormat-long": "yyyy'년' M'월' d'일'", "dateFormat-short": "yy. MM. dd", "months-format-wide": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "timeFormat-short": "a hh'시' mm'분'", "months-format-abbr": ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], "timeFormat-long": "a hh'시' mm'분' ss'초'", "eraAbbr": ["기원전", "서기"], "days-format-wide": ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], "dateFormat-full": "yyyy'년' M'월' d'일' EEEE", "days-format-abbr": ["일", "월", "화", "수", "목", "금", "토"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.ko");dijit.nls.common.ko={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.ko");dijit.form.nls.Textarea.ko={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt-br.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt-br.js new file mode 100644 index 00000000..25f9909f --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt-br.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_pt-br");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt_br");dojo.nls.colors.pt_br={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt_br");dijit.nls.loading.pt_br={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt_br");dijit._editor.nls.commands.pt_br={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt_br");dojo.cldr.nls.number.pt_br={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt_br");dijit.form.nls.validate.pt_br={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt_br");dijit.form.nls.ComboBox.pt_br={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt_br");dojo.cldr.nls.currency.pt_br={"EUR_displayName": "Euro", "CAD_displayName": "Dólar canadense", "CHF_displayName": "Franco suíço", "AUD_displayName": "Dólar australiano", "GBP_displayName": "Libra esterlina britânica", "HKD_displayName": "Dólar de Hong Kong", "JPY_displayName": "Iene japonês", "USD_displayName": "Dólar norte-americano", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt_br");dojo.cldr.nls.gregorian.pt_br={"field-hour": "Hora", "field-dayperiod": "Período do dia", "field-minute": "Minuto", "timeFormat-full": "HH'h'mm'min'ss's' z", "field-weekday": "Dia da semana", "field-week": "Semana", "field-second": "Segundo", "dateFormat-medium": "dd/MM/yyyy", "field-day": "Dia", "timeFormat-long": "H'h'm'min's's' z", "field-month": "Mês", "field-year": "Ano", "dateFormat-short": "dd/MM/yy", "field-zone": "Fuso", "months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["D", "S", "T", "Q", "Q", "S", "S"], "eraAbbr": ["a.C.", "d.C."], "months-format-abbr": ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], "dateFormat-full": "EEEE, d' de 'MMMM' de 'yyyy", "days-format-abbr": ["dom", "seg", "ter", "qua", "qui", "sex", "sáb"], "quarters-format-wide": ["1º trimestre", "2º trimestre", "3º trimestre", "4º trimestre"], "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], "dateFormat-long": "d' de 'MMMM' de 'yyyy", "days-format-wide": ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "eraNames": ["BCE", "CE"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "timeFormat-short": "HH:mm", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt_br");dijit.nls.common.pt_br={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.pt_br");dijit.form.nls.Textarea.pt_br={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt.js new file mode 100644 index 00000000..94062361 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_pt.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_pt");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.pt");dojo.nls.colors.pt={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.pt");dijit.nls.loading.pt={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.pt");dijit._editor.nls.commands.pt={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.pt");dojo.cldr.nls.number.pt={"group": ".", "decimal": ",", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.pt");dijit.form.nls.validate.pt={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.pt");dijit.form.nls.ComboBox.pt={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.pt");dojo.cldr.nls.currency.pt={"EUR_displayName": "Euro", "CAD_displayName": "Dólar canadense", "CHF_displayName": "Franco suíço", "AUD_displayName": "Dólar australiano", "GBP_displayName": "Libra esterlina britânica", "HKD_displayName": "Dólar de Hong Kong", "JPY_displayName": "Iene japonês", "USD_displayName": "Dólar norte-americano", "USD_symbol": "$", "GBP_symbol": "£", "JPY_symbol": "¥", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.pt");dojo.cldr.nls.gregorian.pt={"months-standAlone-narrow": ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], "days-standAlone-narrow": ["D", "S", "T", "Q", "Q", "S", "S"], "timeFormat-full": "HH'H'mm'm'ss's' z", "eraAbbr": ["a.C.", "d.C."], "dateFormat-medium": "d/MMM/yyyy", "months-format-abbr": ["jan", "fev", "mar", "abr", "mai", "jun", "jul", "ago", "set", "out", "nov", "dez"], "dateFormat-full": "EEEE, d' de 'MMMM' de 'yyyy", "days-format-abbr": ["dom", "seg", "ter", "qua", "qui", "sex", "sáb"], "quarters-format-wide": ["1º trimestre", "2º trimestre", "3º trimestre", "4º trimestre"], "dateFormat-short": "dd-MM-yyyy", "quarters-format-abbreviated": ["T1", "T2", "T3", "T4"], "months-format-wide": ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"], "dateFormat-long": "d' de 'MMMM' de 'yyyy", "days-format-wide": ["domingo", "segunda-feira", "terça-feira", "quarta-feira", "quinta-feira", "sexta-feira", "sábado"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateTimeFormats-appendItem-Era": "{0} {1}"};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.pt");dijit.nls.common.pt={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.pt");dijit.form.nls.Textarea.pt={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_xx.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_xx.js new file mode 100644 index 00000000..78ffd492 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_xx.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_xx");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.xx");dojo.nls.colors.xx={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.xx");dijit.nls.loading.xx={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.xx");dijit._editor.nls.commands.xx={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.xx");dojo.cldr.nls.number.xx={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.xx");dijit.form.nls.validate.xx={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.xx");dijit.form.nls.ComboBox.xx={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.xx");dojo.cldr.nls.currency.xx={"USD_symbol": "$", "EUR_displayName": "EUR", "GBP_displayName": "GBP", "GBP_symbol": "£", "JPY_displayName": "JPY", "JPY_symbol": "¥", "EUR_symbol": "€", "USD_displayName": "USD"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.xx");dojo.cldr.nls.gregorian.xx={"dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "months-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "days-standAlone-narrow": ["1", "2", "3", "4", "5", "6", "7"], "eraAbbr": ["BCE", "CE"], "dateFormat-long": "yyyy MMMM d", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "months-format-abbr": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "days-format-abbr": ["1", "2", "3", "4", "5", "6", "7"], "pm": "PM", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "am": "AM", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "months-format-wide": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"], "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"], "days-format-wide": ["1", "2", "3", "4", "5", "6", "7"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.xx");dijit.nls.common.xx={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.xx");dijit.form.nls.Textarea.xx={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-cn.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-cn.js new file mode 100644 index 00000000..69c35629 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-cn.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_zh-cn");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_cn");dojo.nls.colors.zh_cn={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_cn");dijit.nls.loading.zh_cn={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_cn");dijit._editor.nls.commands.zh_cn={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_cn");dojo.cldr.nls.number.zh_cn={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_cn");dijit.form.nls.validate.zh_cn={"rangeMessage": "* 输入数据超出值域。", "invalidMessage": "* 非法的输入值。", "missingMessage": "* 此值是必须的。"};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_cn");dijit.form.nls.ComboBox.zh_cn={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_cn");dojo.cldr.nls.currency.zh_cn={"HKD_displayName": "港元", "CHF_displayName": "瑞士法郎", "JPY_symbol": "JP¥", "CAD_displayName": "加拿大元", "HKD_symbol": "HK$", "USD_symbol": "US$", "AUD_displayName": "澳大利亚元", "JPY_displayName": "日元", "USD_displayName": "美元", "GBP_displayName": "英磅", "EUR_displayName": "欧元", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_cn");dojo.cldr.nls.gregorian.zh_cn={"dateFormat-short": "yy-M-d", "dateFormat-medium": "yyyy-M-d", "dateFormat-long": "yyyy'年'M'月'd'日'", "timeFormat-long": "ahh'时'mm'分'ss'秒'", "timeFormat-medium": "ahh:mm:ss", "timeFormat-full": "ahh'时'mm'分'ss'秒' z", "dateFormat-full": "yyyy'年'M'月'd'日'EEEE", "timeFormat-short": "ah:mm", "days-standAlone-narrow": ["日", "一", "二", "三", "四", "五", "六"], "eraAbbr": ["公元前", "公元"], "months-format-abbr": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "am": "上午", "days-format-abbr": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], "pm": "下午", "months-format-wide": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "months-standAlone-narrow": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], "days-format-wide": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "field-zone": "Zone", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_cn");dijit.nls.common.zh_cn={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.zh_cn");dijit.form.nls.Textarea.zh_cn={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-tw.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-tw.js new file mode 100644 index 00000000..2cf7dd82 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh-tw.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_zh-tw");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh_tw");dojo.nls.colors.zh_tw={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh_tw");dijit.nls.loading.zh_tw={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh_tw");dijit._editor.nls.commands.zh_tw={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh_tw");dojo.cldr.nls.number.zh_tw={"currencyFormat": "¤#,##0.00", "scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh_tw");dijit.form.nls.validate.zh_tw={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh_tw");dijit.form.nls.ComboBox.zh_tw={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh_tw");dojo.cldr.nls.currency.zh_tw={"HKD_displayName": "港元", "CHF_displayName": "瑞士法郎", "JPY_symbol": "JP¥", "CAD_displayName": "加拿大元", "HKD_symbol": "HK$", "USD_symbol": "US$", "AUD_displayName": "澳大利亚元", "JPY_displayName": "日元", "USD_displayName": "美元", "GBP_displayName": "英磅", "EUR_displayName": "欧元", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh_tw");dojo.cldr.nls.gregorian.zh_tw={"days-standAlone-narrow": ["日", "一", "二", "三", "四", "五", "六"], "eraAbbr": ["公元前", "公元"], "months-format-abbr": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "am": "上午", "days-format-abbr": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], "pm": "下午", "months-format-wide": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "months-standAlone-narrow": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], "days-format-wide": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "dateFormat-long": "yyyy MMMM d", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh_tw");dijit.nls.common.zh_tw={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.zh_tw");dijit.form.nls.Textarea.zh_tw={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh.js b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh.js new file mode 100644 index 00000000..05f07ce7 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/dijit-all_zh.js @@ -0,0 +1 @@ +dojo.provide("dijit.nls.dijit-all_zh");dojo.provide("dojo.nls.colors");dojo.nls.colors._built=true;dojo.provide("dojo.nls.colors.zh");dojo.nls.colors.zh={"lightsteelblue": "light steel blue", "orangered": "orange red", "midnightblue": "midnight blue", "cadetblue": "cadet blue", "seashell": "seashell", "slategrey": "slate gray", "coral": "coral", "antiquewhite": "antique white", "darkturquoise": "dark turquoise", "mediumspringgreen": "medium spring green", "salmon": "salmon", "darkgrey": "dark gray", "ivory": "ivory", "greenyellow": "green-yellow", "mistyrose": "misty rose", "lightsalmon": "light salmon", "silver": "silver", "dimgrey": "dim gray", "orange": "orange", "white": "white", "navajowhite": "navajo white", "royalblue": "royal blue", "deeppink": "deep pink", "lime": "lime", "oldlace": "old lace", "chartreuse": "chartreuse", "darkcyan": "dark cyan", "yellow": "yellow", "olive": "olive", "linen": "linen", "gold": "gold", "tan": "tan", "lawngreen": "lawn green", "darkviolet": "dark violet", "lightyellow": "light yellow", "lightslategrey": "light slate gray", "grey": "gray", "darkkhaki": "dark khaki", "green": "green", "deepskyblue": "deep sky blue", "aqua": "aqua", "sienna": "sienna", "mintcream": "mint cream", "rosybrown": "rosy brown", "mediumslateblue": "medium slate blue", "magenta": "magenta", "lightseagreen": "light sea green", "cyan": "cyan", "olivedrab": "olive drab", "darkgoldenrod": "dark goldenrod", "slateblue": "slate blue", "mediumaquamarine": "medium aquamarine", "lavender": "lavender", "mediumseagreen": "medium sea green", "maroon": "maroon", "darkslategray": "dark slate gray", "mediumturquoise": "medium turquoise", "ghostwhite": "ghost white", "darkblue": "dark blue", "brown": "brown", "lightgray": "light gray", "sandybrown": "sandy brown", "pink": "pink", "firebrick": "fire brick", "mediumvioletred": "medium violet-red", "indigo": "indigo", "snow": "snow", "darkorchid": "dark orchid", "turquoise": "turquoise", "chocolate": "chocolate", "springgreen": "spring green", "moccasin": "moccasin", "navy": "navy", "lemonchiffon": "lemon chiffon", "teal": "teal", "floralwhite": "floral white", "cornflowerblue": "cornflower blue", "paleturquoise": "pale turquoise", "purple": "purple", "gainsboro": "gainsboro", "plum": "plum", "red": "red", "blue": "blue", "forestgreen": "forest green", "darkgreen": "dark green", "honeydew": "honeydew", "darkseagreen": "dark sea green", "lightcoral": "light coral", "palevioletred": "pale violet-red", "mediumpurple": "medium purple", "saddlebrown": "saddle brown", "darkmagenta": "dark magenta", "thistle": "thistle", "whitesmoke": "white smoke", "wheat": "wheat", "violet": "violet", "lightskyblue": "light sky blue", "goldenrod": "goldenrod", "mediumblue": "medium blue", "skyblue": "sky blue", "crimson": "crimson", "darksalmon": "dark salmon", "darkred": "dark red", "darkslategrey": "dark slate gray", "peru": "peru", "lightgrey": "light gray", "lightgoldenrodyellow": "light goldenrod yellow", "blanchedalmond": "blanched almond", "aliceblue": "alice blue", "bisque": "bisque", "slategray": "slate gray", "palegoldenrod": "pale goldenrod", "darkorange": "dark orange", "aquamarine": "aquamarine", "lightgreen": "light green", "burlywood": "burlywood", "dodgerblue": "dodger blue", "darkgray": "dark gray", "lightcyan": "light cyan", "powderblue": "powder blue", "blueviolet": "blue-violet", "orchid": "orchid", "dimgray": "dim gray", "beige": "beige", "fuchsia": "fuchsia", "lavenderblush": "lavender blush", "hotpink": "hot pink", "steelblue": "steel blue", "tomato": "tomato", "lightpink": "light pink", "limegreen": "lime green", "indianred": "indian red", "papayawhip": "papaya whip", "lightslategray": "light slate gray", "gray": "gray", "mediumorchid": "medium orchid", "cornsilk": "cornsilk", "black": "black", "seagreen": "sea green", "darkslateblue": "dark slate blue", "khaki": "khaki", "lightblue": "light blue", "palegreen": "pale green", "azure": "azure", "peachpuff": "peach puff", "darkolivegreen": "dark olive green", "yellowgreen": "yellow green"};dojo.provide("dijit.nls.loading");dijit.nls.loading._built=true;dojo.provide("dijit.nls.loading.zh");dijit.nls.loading.zh={"loadingState": "Loading...", "errorState": "Sorry, an error occurred"};dojo.provide("dijit._editor.nls.commands");dijit._editor.nls.commands._built=true;dojo.provide("dijit._editor.nls.commands.zh");dijit._editor.nls.commands.zh={"removeFormat": "Remove Format", "copy": "Copy", "paste": "Paste", "selectAll": "Select All", "insertOrderedList": "Numbered List", "insertTable": "Insert/Edit Table", "underline": "Underline", "foreColor": "Foreground Color", "htmlToggle": "HTML Source", "formatBlock": "Paragraph Style", "insertHorizontalRule": "Horizontal Rule", "delete": "Delete", "insertUnorderedList": "Bullet List", "tableProp": "Table Property", "insertImage": "Insert Image", "superscript": "Superscript", "subscript": "Subscript", "createLink": "Create Link", "pasteErrorFF": "Paste action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+v.", "undo": "Undo", "italic": "Italic", "justifyLeft": "Align Left", "fontName": "Font Name", "unlink": "Remove Link", "toggleTableBorder": "Toggle Table Border", "fontSize": "Font Size", "indent": "Indent", "redo": "Redo", "strikethrough": "Strikethrough", "justifyFull": "Justify", "justifyCenter": "Align Center", "hiliteColor": "Background Color", "outdent": "Outdent", "cut": "Cut", "deleteTable": "Delete Table", "plainFormatBlock": "Paragraph Style", "bold": "Bold", "copyErrorFF": "Copy action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+c.", "cutErrorFF": "Cut action is only available in Firefox via keyboard shortcut due to its design decision: please use ctrl+x.", "justifyRight": "Align Right"};dojo.provide("dojo.cldr.nls.number");dojo.cldr.nls.number._built=true;dojo.provide("dojo.cldr.nls.number.zh");dojo.cldr.nls.number.zh={"scientificFormat": "#E0", "currencySpacing-afterCurrency-currencyMatch": "[:letter:]", "infinity": "∞", "list": ";", "percentSign": "%", "minusSign": "-", "currencySpacing-beforeCurrency-surroundingMatch": "[:digit:]", "currencySpacing-afterCurrency-insertBetween": " ", "nan": "NaN", "nativeZeroDigit": "0", "currencySpacing-afterCurrency-surroundingMatch": "[:digit:]", "currencyFormat": "¤ #,##0.00", "perMille": "‰", "currencySpacing-beforeCurrency-currencyMatch": "[:letter:]", "group": ",", "percentFormat": "#,##0%", "plusSign": "+", "decimalFormat": "#,##0.###", "decimal": ".", "patternDigit": "#", "currencySpacing-beforeCurrency-insertBetween": " ", "exponential": "E"};dojo.provide("dijit.form.nls.validate");dijit.form.nls.validate._built=true;dojo.provide("dijit.form.nls.validate.zh");dijit.form.nls.validate.zh={"rangeMessage": "* This value is out of range.", "invalidMessage": "* The value entered is not valid.", "missingMessage": "* This value is required."};dojo.provide("dijit.form.nls.ComboBox");dijit.form.nls.ComboBox._built=true;dojo.provide("dijit.form.nls.ComboBox.zh");dijit.form.nls.ComboBox.zh={"previousMessage": "Previous choices", "nextMessage": "More choices"};dojo.provide("dojo.cldr.nls.currency");dojo.cldr.nls.currency._built=true;dojo.provide("dojo.cldr.nls.currency.zh");dojo.cldr.nls.currency.zh={"HKD_displayName": "港元", "CHF_displayName": "瑞士法郎", "JPY_symbol": "JP¥", "CAD_displayName": "加拿大元", "HKD_symbol": "HK$", "USD_symbol": "US$", "AUD_displayName": "澳大利亚元", "JPY_displayName": "日元", "USD_displayName": "美元", "GBP_displayName": "英磅", "EUR_displayName": "欧元", "GBP_symbol": "£", "EUR_symbol": "€"};dojo.provide("dojo.cldr.nls.gregorian");dojo.cldr.nls.gregorian._built=true;dojo.provide("dojo.cldr.nls.gregorian.zh");dojo.cldr.nls.gregorian.zh={"days-standAlone-narrow": ["日", "一", "二", "三", "四", "五", "六"], "eraAbbr": ["公元前", "公元"], "months-format-abbr": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "am": "上午", "days-format-abbr": ["周日", "周一", "周二", "周三", "周四", "周五", "周六"], "pm": "下午", "months-format-wide": ["一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"], "months-standAlone-narrow": ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], "days-format-wide": ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"], "dateTimeFormats-appendItem-Second": "{0} ({2}: {1})", "field-dayperiod": "Dayperiod", "field-minute": "Minute", "eraNames": ["BCE", "CE"], "field-weekday": "Day of the Week", "dateTimeFormats-appendItem-Year": "{0} {1}", "field-era": "Era", "field-hour": "Hour", "timeFormat-full": "HH:mm:ss z", "dateTimeFormats-appendItem-Timezone": "{0} {1}", "dateTimeFormats-appendItem-Week": "{0} ({2}: {1})", "dateTimeFormats-appendItem-Month": "{0} ({2}: {1})", "dateFormat-long": "yyyy MMMM d", "field-zone": "Zone", "timeFormat-medium": "HH:mm:ss", "dateTimeFormats-appendItem-Minute": "{0} ({2}: {1})", "dateFormat-medium": "yyyy MMM d", "quarters-format-abbreviated": ["Q1", "Q2", "Q3", "Q4"], "dateTimeFormat": "{1} {0}", "field-year": "Year", "dateTimeFormats-appendItem-Day": "{0} ({2}: {1})", "field-week": "Week", "timeFormat-long": "HH:mm:ss z", "timeFormat-short": "HH:mm", "field-month": "Month", "dateTimeFormats-appendItem-Quarter": "{0} ({2}: {1})", "field-second": "Second", "field-day": "Day", "dateTimeFormats-appendItem-Day-Of-Week": "{0} {1}", "dateTimeFormats-appendItem-Hour": "{0} ({2}: {1})", "dateFormat-short": "yy/MM/dd", "dateFormat-full": "EEEE, yyyy MMMM dd", "dateTimeFormats-appendItem-Era": "{0} {1}", "quarters-format-wide": ["Q1", "Q2", "Q3", "Q4"]};dojo.provide("dijit.nls.common");dijit.nls.common._built=true;dojo.provide("dijit.nls.common.zh");dijit.nls.common.zh={"buttonCancel": "Cancel", "buttonSave": "Save", "buttonOk": "OK"};dojo.provide("dijit.form.nls.Textarea");dijit.form.nls.Textarea._built=true;dojo.provide("dijit.form.nls.Textarea.zh");dijit.form.nls.Textarea.zh={"iframeTitle1": "edit area", "iframeTitle2": "edit area frame"}; diff --git a/spring-faces/src/main/java/META-INF/dijit/nls/loading.js b/spring-faces/src/main/java/META-INF/dijit/nls/loading.js new file mode 100644 index 00000000..fe85bad9 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/nls/loading.js @@ -0,0 +1,4 @@ +({ + loadingState: "Loading...", + errorState: "Sorry, an error occurred" +}) diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/Calendar.html b/spring-faces/src/main/java/META-INF/dijit/templates/Calendar.html new file mode 100644 index 00000000..2c1333c0 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/templates/Calendar.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + +
    + - + +
    +
    +
    +
    +
    +
    +

    + + + +

    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/ColorPalette.html b/spring-faces/src/main/java/META-INF/dijit/templates/ColorPalette.html new file mode 100644 index 00000000..8e997840 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/templates/ColorPalette.html @@ -0,0 +1,5 @@ +
    +
    + +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/Dialog.html b/spring-faces/src/main/java/META-INF/dijit/templates/Dialog.html new file mode 100644 index 00000000..4f1bd5ee --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/templates/Dialog.html @@ -0,0 +1,10 @@ +
    +
    + ${title} + + x + +
    +
    + +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/ProgressBar.html b/spring-faces/src/main/java/META-INF/dijit/templates/ProgressBar.html new file mode 100644 index 00000000..97cc4702 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/templates/ProgressBar.html @@ -0,0 +1,9 @@ +
     
     
    diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/TitlePane.html b/spring-faces/src/main/java/META-INF/dijit/templates/TitlePane.html new file mode 100644 index 00000000..63d1fbfa --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/templates/TitlePane.html @@ -0,0 +1,14 @@ +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/Tooltip.html b/spring-faces/src/main/java/META-INF/dijit/templates/Tooltip.html new file mode 100644 index 00000000..87396480 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/templates/Tooltip.html @@ -0,0 +1,4 @@ +
    +
    +
    +
    diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/blank.gif b/spring-faces/src/main/java/META-INF/dijit/templates/blank.gif new file mode 100644 index 0000000000000000000000000000000000000000..e565824aafafe632011b281cba976baf8b3ba89a GIT binary patch literal 43 qcmZ?wbhEHbWMp7uXkcLY4+e@qSs1y10y+#p0Fq%~V)9{Rum%7ZWeN!Z literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/buttons/bg-fade.png b/spring-faces/src/main/java/META-INF/dijit/templates/buttons/bg-fade.png new file mode 100644 index 0000000000000000000000000000000000000000..5d74aad603e28eac545fd100d240af2c3035e7dd GIT binary patch literal 177 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/dijit.css b/spring-faces/src/main/java/META-INF/dijit/themes/dijit.css new file mode 100644 index 00000000..65859d35 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/dijit.css @@ -0,0 +1,1355 @@ +/* + Essential styles that themes can inherit. + In other words, works but doesn't look great. +*/ + + + +/**** + GENERIC PIECES + ****/ + +.dijitReset { + /* Use this style to null out padding, margin, border in your template elements + so that page specific styles don't break them. + - Use in all TABLE, TR and TD tags. + - If there is more than one class on the tag, place this first so other classes override. + */ + margin:0px; + border:0px; + padding:0px; + line-height:normal; +} + +.dijitInline { + /* MOW: similar to InlineBox below, but this has fewer side-effects in Moz. + Also, apparently works on a DIV as well as a FIELDSET. + Consider abandoning inlineBox in favor of this. ??? + */ + display:-moz-inline-box; /* gecko */ + display:inline-block; /* webkit */ + border:0px; + padding:0px; + vertical-align:middle; +} +.dj_ie .dijitInline { + display:inline; + zoom: 1; +} + +.dijitInlineBox { + /* To inline block elements, surround them with
    */ + display:inline-block; /* webkit */ + display: -moz-inline-stack; /* gecko */ + #display:inline; /* MSIE */ + border:0px; + padding:0px; + vertical-align:middle; +} + +.dijitTeeny { + font-size:1px; + line-height:1px; +} + +/* + * Popup items have a wrapper div (dijitPopup) + * with the real popup inside, and maybe an iframe too + */ +.dijitPopup { + position: absolute; + background-color: transparent; + margin: 0; + border: 0; + padding: 0; +} +.dijit_a11y .dijitPopup, +.dijit_ally .dijitPopup div, +.dijit_a11y .dijitPopup table { + opacity: 1 !important; + background-color: white !important; +} +.dj_ie .dijit_a11y .dijitPopup * { + filter: none; +} + +.dijitPositionOnly { + /* Null out all position-related properties */ + padding: 0px !important; + border: 0px !important; + background-color: transparent !important; + background-image: none !important; + height: auto !important; + width: auto !important; +} + +.dijitNonPositionOnly { + /* Null position-related properties */ + float: none !important; + position: static !important; + margin: 0px 0px 0px 0px !important; + vertical-align: middle !important; +} + +.dijitBackgroundIframe { + /* + * iframe used for FF2 in high-contrast mode to prevent menu + * being transparent + */ + position: absolute; + left: 0px; + top: 0px; + width: 100%; + height: 100%; + z-index: -1; + border: 0; + padding: 0; + margin: 0; +} + +.dijitClickableRegion { + /* a region we expect the user to click on */ + cursor : pointer; +} + + +.dijitDisplayNone { + /* hide something. Use this as a class rather than element.style so another class can override */ + display:none !important; +} + +.dijitContainer { + /* for all layout containers */ + overflow: hidden; /* need on IE so something can be reduced in size, and so scrollbars aren't temporarily displayed */ +} + +/**** + A11Y + ****/ +.dijit_a11y * { + background-image:none !important; + background-color:transparent !important; +} + +.dijit_a11y .dijitCalendarIncrementControl .dijitA11ySideArrow { + padding-left:.2em; + visibility:visible !important; +} + +.dijitToolbar .dijitDropDownButton .dijitA11yDownArrow{ + /*make the arrow smaller in toolbar*/ + padding:0; + margin:0; +} +.dj_ie6 .dijitToolbar .dijitDropDownButton .dijitA11yDownArrow{ + /*vertical-align: middle does not place the arrow in the middle of the toolbar in IE*/ + vertical-align: bottom; +} + +.dijitA11ySideArrow { + vertical-align:top; + margin-right:0em; + margin-left:.2em; + line-height:2em; + text-align:center; +} + +.dj_ie .dijitA11yDownArrow, +.dj_ie .dijitA11yUpArrow { + font-size:.8em; + vertical-align:middle; + margin-right:.5em; +} + + + + +.dijit_a11y .dijitButton .dijitButtonNode, +.dijit_a11y .dijitDropDownButton .dijitButtonNode, +.dijit_a11y .dijitComboButton .dijitButtonNode, +.dijit_a11y .dijitComboBox .dijitComboBoxInput, +.dijit_a11y .dijitComboBox .dijitButtonNode { + border:1px solid black !important; + background:white !important; + color:black !important; +} + +.dijit_a11y .dijitButtonDisabled .dijitButtonNode, +.dijit_a11y .dijitDropDownButtonDisabled .dijitButtonNode, +.dijit_a11y .dijitComboButtonDisabled .dijitButtonNode, +.dijit_a11y .dijitComboBoxDisabled .dijitComboBoxInput, +.dijit_a11y .dijitComboBoxDisabled .dijitButtonNode, +.dijit_a11y .dijitSpinnerDisabled .dijitButtonNode, +.dijit_a11y .dijitSpinnerDisabled .dijitSpinnerInput { + border:1px dotted #999999 !important; + color:#999999 !important; +} + +.dijit_a11y .dijitComboButton .dijitDownArrowButton, +.dijit_a11y .dijitComboBox .dijitDownArrowButton { + border-left:0px !important; +} + + + + +/**** + 3-element borders: ( dijitLeft + dijitStretch + dijitRight ) + ****/ + +.dijitLeft { + /* Left part of a 3-element border */ + background-position:left top; + background-repeat:no-repeat; +} + +.dijitStretch { + /* Middle (stretchy) part of a 3-element border */ + white-space:nowrap; /* MOW: move somewhere else */ + background-repeat:repeat-x; +} + +.dijitRight { + /* Right part of a 3-element border */ + #display:inline; /* IE7 sizes to outer size w/o this */ + background-position:right top; + background-repeat:no-repeat; +} + + +/**** + Right-to-left rules + ****/ +.dijitRTL .dijitRightArrow { + /* it becomes a left arrow for LTR locales */ + /* MOW: TODO... */ + margin-left:-2.1em; +} + + + + + +/**** + dijit.form.Button + dijit.form.DropDownButton + dijit.form.ComboButton + dijit.form.ComboBox (partial) + ****/ +.dijitButton, +.dijitDropDownButton, +.dijitComboButton, +.dijitComboBox { + /* outside of button */ + margin:.2em; +} + +.dijitButtonNode { + /* Node that is acting as a button -- may or may not be a BUTTON element */ + border:1px solid gray; + margin:0px; + padding:.2em .2em .1em .2em; + overflow:visible; + line-height:normal; + font-family:inherit; + font-size:inherit; + color: inherit; + cursor:pointer; + vertical-align:middle; + text-align:center; + white-space: nowrap; +} + +.dijitDownArrowButton, +.dijitUpArrowButton { + /* Node that is acting as a arrow button -- drop down (spinner has its own treatment). Also gets dijitButtonNode */ + /* place AFTER dijitButtonNode so it overrides */ + padding:0em .4em; + margin:0px; +} + + +.dijitButtonContents { + color:inherit; +} + +.dijitDropDownButton .dijitA11yDownArrow { + margin-left:.8em; +} + +.dijitComboButton TABLE { + /* each cell in a combo-table should have its own separate border */ + border-collapse: separate; + border:0px; + padding:0px; + margin:0px; +} + +.dijitComboButton .dijitButtonContents { + border-right-width:0px !important; +} + + +table .dijitButton .dijitButtonNode, +table .dijitComboButton .dijitButtonNode { + #overflow:hidden; /* visible messes up if the button is inside a table on IE */ +} + + + +.dijitButtonNode IMG { + /* make text and images line up cleanly */ + vertical-align:middle; + margin-bottom:.2em; +} + + +/**** + dijit.form.NumberSpinner (template: form/templates/Spinner.html) + + Note: works differently than other TextBox types: + The outer fieldset element is the one that shows the border, etc. + rather than the actual INPUT element. + + ****/ + +.dijitSpinner { + /* outer element - also has .dijitInline */ + vertical-align:middle; + padding:0px !important; + width:auto !important; + height:auto !important; +} + +.dijitSpinner TABLE { + border-collapse: collapse; +} +.dijitSpinner .dijitButtonNode { + padding: 0; +} + +.dijitSpinnerInput { + /* container for the input element */ + font-family:inherit; + font-size:inherit; + font-weight:inherit; + border:1px inset gray; + padding:.1em .2em .2em .2em; +} + +.dijitSpinner INPUT { + /* The .style assigned to the spinner dijit is actually copied + on to the INPUT element as well as the outer element. + The below turns off things on the input that should apply to the outer element. + */ + display:inline; + position:static !important; + /* turn off the border on the actual input element */ + border:0px !important; + + padding:0px; + margin:0px; + vertical-align:middle !important; + padding:0px !important; + margin:auto !important; + border:0px !important; + visibility:visible !important; + font-size:100% !important; + background-color:transparent !important; + background-image:none !important; +} + +.dijitSpinner .dijitDownArrowButton, +.dijitSpinner .dijitUpArrowButton { + padding: 0 .4em; + border: 1px solid; + line-height: .769em; + /* TODO: as we use border-collapse, is this necessary? */ + border-left-style: none; +} +.dj_ie .dijitSpinner .dijitDownArrowButton, +.dj_ie .dijitSpinner .dijitUpArrowButton { + padding: 0 .2em!important; + text-align: center; +} +.dijitSpinner .dijitDownArrowButton div, +.dijitSpinner .dijitUpArrowButton div { + text-align: center; + font-size: .769em; + line-height: 1em; + vertical-align: baseline; + margin: 0 auto; +} + +/**** + dijit.form.ComboBox + + Note: these works differently than other TextBox types: + The outer fieldset element is the one that shows the border, etc. + rather than the actual INPUT element. + + ****/ +.dijitComboBox { + /* Allow user to specify width without messing up defaults; other attributes are put on parent node */ + width:auto !important; +} + +.dijitComboBox TABLE { + /* each cell in a combo-table should have its own separate border */ + border-collapse: separate; + border:0px; + padding:0px; + margin:0px; +} + +.dijitComboBoxInput { + /* container for the input element */ + font-family:inherit; + font-size:inherit; + font-weight:inherit; + border:1px inset gray; + padding:.1em .2em .2em .2em; + border-right-width:0px !important; +} + +.dijitComboBox INPUT { + /* turn off the border on the actual input element */ + border:0px !important; + background-color:transparent; +} + +.dijitComboBoxNoArrow .dijitDownArrowButton { + display:none; +} + +.dijitComboBoxNoArrow table { + padding:0px; + margin:0px; +} + +.dijitComboBoxNoArrow INPUT { + border:0px !important; + background-color:transparent; +} + +.dijitComboBoxNoArrow .dijitComboBoxInput { + border-right-width:1px !important; +} + +/* +.dj_safari .dijitComboBoxInput { + padding:0px; + border:0px !important; +} +*/ + +.dj_safari .dijitComboBox INPUT { + margin:-2px -4px -3px -3px; + line-height:2em; + font-size:1em; +} + + +/**** + dijit.form.CheckBox + & + dijit.form.RadioButton + ****/ + +.dijitCheckBox, +.dijitRadio, +.dijitCheckBoxInput { + padding: 0; + border: 0; + width: 16px; + height: 15px; + overflow:hidden; +} + +.dijitCheckBox INPUT, +.dijitRadio INPUT { + margin: 0; + padding: 0; +} + +.dijitCheckBoxInput { + /* place the actual input on top, but all-but-invisible */ + opacity: 0.01; +} + +.dj_ie .dijitCheckBoxInput { + filter: alpha(opacity=0); +} + +.dijit_a11y .dijitCheckBox, +.dijit_a11y .dijitRadio { + width: auto; + height: auto; +} +.dijit_a11y .dijitCheckBoxInput { + opacity: 1; + filter: none; + width: auto; + height: auto; +} + + +/**** + dijit.ProgressBar + ****/ + +.dijitProgressBarEmpty{ + /* outer container and background of the bar that's not finished yet*/ + position:relative;overflow:hidden; + border:1px solid black; /* a11y: border necessary for high-contrast mode */ + z-index:0; /* establish a stacking context for this progress bar */ +} + +.dijitProgressBarFull { + /* outer container for background of bar that is finished */ + position:absolute; + overflow:hidden; + z-index:-1; + top:0; + width:100%; + height:100%; +} + +.dijitProgressBarTile{ + /* inner container for finished portion */ + position:absolute; + overflow:hidden; + top:0px; + left:0px; + bottom:0px; + right:0px; + margin:0px; + padding:0px; + width:auto; + height:auto; + background-color:#aaa; + background-attachment: fixed; +} + +.dijit_a11y .dijitProgressBarTile{ + /* a11y: The border provides visibility in high-contrast mode */ + border-width:4px; + border-style:solid; + background-color:transparent !important; +} + +.dj_iequirks .dijitProgressBarTile{ + width:100%; + height:100%; +} + +.dj_ie6 .dijitProgressBarTile{ + /* width:auto works in IE6 with position:static but not position:absolute */ + position:static; + /* height:auto does not work in IE6 */ + height:100%; +} + +.dijitProgressBarIndeterminate .dijitProgressBarLabel{ + visibility:hidden; +} + +.dijitProgressBarIndeterminate .dijitProgressBarTile{ + /* animated gif for 'indeterminate' mode */ +} + +.dijitProgressBarIndeterminateHighContrastImage{ + display:none; +} + +.dijit_a11y .dijitProgressBarIndeterminate .dijitProgressBarIndeterminateHighContrastImage{ + display:block; + position:absolute; + top:0; + bottom:0; + margin:0; + padding:0; + width:100%; + height:auto; +} + +.dijitProgressBarLabel{ + display:block; + position:static; + width:100%; + text-align:center; + background-color:transparent; +} + +/* progress bar in vertical mode - TODO: remove? no longer supported? */ +.dijitProgressBarVertical .dijitProgressBarFull{ + bottom:0px; /* start at the bottom */ +} + +.dj_ie6 .dijitProgressBarVertical .dijitProgressBarTile{ + position:absolute; + /* can't use position:static here -- need absolute positioning to place + the bar at the bottom of a vertical progressbar */ + width:100%; +} + + +/**** + dijit.Tooltip + ****/ + +.dijitTooltip { + position: absolute; + z-index: 2000; + display: block; + /* make visible but off screen */ + left: 50%; + top: -10000px; + overflow: visible; +} +.dijitTooltipDialog { + position: relative; +} +.dijitTooltipContainer { + border: solid black 2px; + background: #b8b5b5; + color: black; + font-size: small; +} + +.dijitTooltipFocusNode { + padding: 2px 2px 2px 2px; +} + +.dijitTooltipConnector { + position: absolute; +} + +/* MOW: using actual images at this time +/* draw an arrow with CSS only * / +.dijitTooltipConnector { + /* the border on the triangle * / + font-size: 0px; line-height: 0%; width: 0px; + border-top: none; + border-bottom: 14px solid black; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + top: -14px; + left: 3px; + z-index: 2; +} + +.dijitTooltipConnector div { + /* the background of the triangle * / + font-size: 0px; line-height: 0%; width: 0px; + position: absolute; + border-bottom: 10px solid #b8b5b5; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + top: 6px; + left: -5px; + z-index: 3; +} + +*/ + + + +/* Layout widgets. This is essential CSS to make layout work (it isn't "styling" CSS) + make sure that the position:absolute in dijitAlign* overrides other classes */ + +.dijitLayoutContainer{ + position: relative; + display: block; + overflow: hidden; +} + +body .dijitAlignTop, +body .dijitAlignBottom, +body .dijitAlignLeft, +body .dijitAlignRight { + position: absolute; + overflow: hidden; +} + +body .dijitAlignClient { position: absolute; } + +.dijitAlignClient { overflow: auto; } + + + +/* SplitContainer + + 'V' == container that splits vertically (up/down) + 'H' = horizontal (left/right) +*/ +.dijitSplitContainer{ + position: relative; + overflow: hidden; + display: block; +} + +.dijitSplitPane{ + position: absolute; +} + +.dijitSplitContainerSizerH, +.dijitSplitContainerSizerV { + position:absolute; + font-size: 1px; + cursor: move; + cursor: w-resize; + background-color: ThreeDFace; + border: 1px solid; + border-color: ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight; + margin: 0; +} + +.dijitSplitContainerSizerV { + cursor: n-resize; +} + +.dijitSplitContainerSizerH .thumb { + position:absolute; + top:49%; +} + +.dijitSplitContainerSizerV .thumb { + position:absolute; + left:49%; +} + +.dijitSplitContainerVirtualSizerH, +.dijitSplitContainerVirtualSizerV { + font-size: 1px; + cursor: move; + cursor: w-resize; + background-color: ThreeDShadow; + -moz-opacity: 0.5; + opacity: 0.5; + filter: Alpha(Opacity=50); + margin: 0; +} + +.dijitSplitContainerVirtualSizerV { + cursor: n-resize; +} + + +/* ContentPane */ + +.dijitContentPane { + display: block; + overflow: auto; /* if we don't have this (or overflow:hidden), then Widget.resizeTo() doesn't make sense for ContentPane */ +} +/* TitlePane */ +.dijitTitlePane { + display: block; + overflow: hidden; +} + +/* Color Palette */ +.dijitPaletteImg { + width: 16px; /*This is the width of one color in the provided palettes. */ + height: 13px; /* Height of one color in the provided palettes. */ + position: absolute; + overflow: hidden; + cursor: default; + z-index: 10; + border-style: solid; + border-bottom-width: 1px; + border-right-width: 1px; + border-color: #000000; +} + +.dijitPaletteImgHighlight { + width: 14px; /*This is the width of one color in the provided palettes. */ + height: 12px; /* Height of one color in the provided palettes. */ + position: absolute; + overflow: hidden; + cursor: default; + z-index: 10; +} + +.dijitPaletteImg:hover, +.dijitPaletteImgHighlight { + width: 14px; /*This is the width of one color in the provided palettes. */ + height: 12px; /* Height of one color in the provided palettes. */ + border-style: solid; + border-width: 2px; + border-color: #ffffff; +} + + +.dijitColorPaletteCell { + width:16px; + height:16px; + border: 1px solid; +} + +.dijitColorPaletteCell:hover { + border-style: solid; +} + +/* Accordion */ + +.dijitAccordionPane { + overflow: hidden !important; /* prevent spurious scrollbars */ +} + +.dijitAccordionPane .dijitAccordionBody { + overflow: auto; +} + +.dijitAccordionPane .dijitAccordionTitle:hover { + cursor: pointer; +} + +.dijitAccordionPane .dijitAccordionTitle .dijitAccordionArrow { + float: right; +} + +/* images off, high-contrast mode styles */ +.dijitAccordionPane .dijitAccordionTitle .arrowTextUp, +.dijitAccordionPane .dijitAccordionTitle .arrowTextDown { + display: none; + float: right; + font-size: 0.65em; + font-weight: normal !important; +} + +.dijit_a11y .dijitAccordionPane .dijitAccordionTitle .arrowTextUp { + display: inline; +} + +.dijit_a11y .dijitAccordionPane-selected .dijitAccordionTitle .arrowTextDown { + display: inline; +} + +.dijit_a11y .dijitAccordionPane-selected .dijitAccordionTitle .arrowTextUp { + display: none; +} + +/* Calendar */ + +.dijitCalendarContainer thead tr th, .dijitCalendarContainer thead tr td, .dijitCalendarContainer tbody tr td, .dijitCalendarContainer tfoot tr td { + padding: 0; +} + +.dijitCalendarNextYear { + margin:0 0 0 0.55em; +} + +.dijitCalendarPreviousYear { + margin:0 0.55em 0 0; +} + +.dijitCalendarIncrementControl { + cursor:pointer; + cursor:hand; + width:1em; +} + +.dijitCalendarDisabledDate { + color:gray !important; +} + +.dijitCalendarBodyContainer tbody tr td { + cursor:pointer; + cursor:hand; +} + +.dijitCalendarPreviousMonthDisabled { + cursor:default !important +} + +.dijitCalendarCurrentMonthDisabled { + cursor:default !important +} + +.dijitCalendarNextMonthDisabled { + cursor:default !important; +} + +.dijitCalendarDateTemplate { + cursor:pointer; +} + +.dijitCalendarSelectedYear { + cursor:pointer; +} +.dijitCalendarNextYear, +.dijitCalendarPreviousYear { + cursor:pointer; +} + +.dijitCalendarMonthLabelSpacer { + /* don't display it, but make it affect the width */ + position: relative; + height: 1px; + overflow: hidden; + visibility: hidden; +} + + +/* Menu */ + +.dijitMenu { + border:1px solid black; + background-color:white; +} +.dijitMenuTable { + margin:1px 0px; + border-collapse:collapse; + border-width:0px; + background-color:white; +} + +.dijitMenuItem{ + white-space: nowrap; + padding:.1em .2em; +} + +.dijitMenuItemHover { + cursor:pointer; + cursor:hand; + background-color:black; + color:white; +} + +.dijitMenuItemIcon { + position: relative; + background-position: center center; + background-repeat: no-repeat; +} + +.dijitMenuItemDisabled * { + /* for a disabled menu item, just set it to mostly transparent */ + opacity:0.3; + cursor:default; +} +.dj_ie .dijitMenuItemDisabled * { + filter: alpha(opacity=30); +} + +.dijitMenuItemLabel { + position: relative; + vertical-align: middle; +} + +.dijit_a11y .dijitMenuItemHover .dijitMenuItemLabel { + border-width: 1px; + border-style: solid; +} + +/* separator can be two pixels -- set border of either one to 0px to have only one */ +.dijitMenuSeparatorTop { + height: 50%; + margin: 0px; + margin-top:3px; + font-size: 1px; +} + +.dijitMenuSeparatorBottom { + height: 50%; + margin: 0px; + margin-bottom:3px; + font-size: 1px; +} + + + +/* Tab */ + + +.dijitTabContainer .dijitAlignTop { +/* position the tab labels row down by 1 px, and on top of the dijitTabPaneWrapper + so the buttons can overlay the tab pane properly */ + top:1px !important; + z-index:10; +} + +.dijitTabContainer .dijitAlignBottom { +/* position the tab labels row up by 1 px so they overlap */ + margin-top:-1px !important; + z-index:10; +} + +.dijitTabContainer .dijitAlignLeft { +/* position the tab labels left by 1 px so they overlap */ + margin-right:-1px !important; + z-index:10; +} + +.dijitTabContainer .dijitAlignRight { +/* position the tab labels row up by 1 px, and on top of the dijitTabPaneWrapper + so the buttons can overlay the tab pane properly */ + margin-left:-1px !important; + z-index:10; +} + +.dijitTabPaneWrapper { + z-index:0; + overflow: hidden; +} + +.dijitTab { + position:relative; + float:left; + cursor:pointer; + white-space:nowrap; + z-index:3; +} + +.dijitTabContainer .dijitAlignLeft .dijitTab, +.dijitTabContainer .dijitAlignRight .dijitTab { + float:none; +} + +.dijitTabInnerDiv { + position:relative; +} + +.dijitTab .close { + display: inline-block; + cursor: default; + font-size: small; +} + +/* images off, high-contrast mode styles */ +.dijitTab .closeText { + display:none; + padding: 0px 2px; + margin: 0px 2px; + border-left:thin solid; + border-right:thin solid; +} +.dijit_a11y .dijitTab .closeImage { + padding: 0px !important; + margin: 0px !important; + top: 0px !important; + bottom: 0px !important; +} +.dijit_a11y .closeText { + display:inline; + margin-left:6px; +} +.dijit_a11y .closeText:hover { + border:thin solid; +} + + + +.dijitInlineEditor { + /* span around an inline-editable value when in edit mode */ + position:relative; + vertical-align:bottom; +} +.dj_ie .dijitInlineEditor { + vertical-align:middle; +} + +.dijitInlineValue { + /* span around an inline-editable value when NOT in edit mode */ +} + +.dijitInlineEditor .dijitButtonContainer { + /* div around the buttons -- makes them float below the field */ + position:absolute; + right:0px; + overflow:visible; +} + +.dijitInlineEditor .saveButton, +.dijitInlineEditor .cancelButton { +} + +/* Tree */ + +.dijitTreeExpando { + float: left; + display: inline; + clear:both; +} + +.dijitTreeExpand { + float: left; + display: inline; +} + +.dijitTreeContent { + cursor: default; + /* can't make inline - multiline bugs */ +} + +.dijitExpandoText { + display: none; +} + +.dijit_a11y .dijitExpandoText { + float: left; + display: inline; + padding-right: 3px; + font: 0.75em Arial; +} + +/* Dialog */ + +.dijitDialog { + position: absolute; + z-index: 999; + padding: 1px; +} + +.dijitDialogUnderlayWrapper { + position: absolute; + left: 0px; + top: 0px; + z-index: 998; + display: none; + background: transparent; +} + +.dijitDialogUnderlay { + background: #eeeeee; + opacity: 0.5; +} + +.dj_ie .dijitDialogUnderlay { + filter: alpha(opacity=50); +} + +/* images off, high-contrast mode styles */ +.dijit_a11y .dijitDialog { + opacity: 1 !important; + background-color: white !important; +} + +.dijitDialog .closeText { + display:none; + position:absolute; +} + +.dijit_a11y .dijitDialog .closeText { + display:inline; +} + +.dijitSliderMoveable { + z-index:99; + position:absolute !important; + display:block; + vertical-align:middle; +} + +.dijitHorizontalSliderMoveable { + right:0px; +} + +.dijit_a11y div.dijitSliderImageHandle, +.dijitSliderImageHandle { + margin:0px; + padding:0px; + position:absolute !important; + border:8px solid gray; + width:0px; + height:0px; +} + +.dijitVerticalSliderImageHandle { + top:-8px; + left:-6px; +} + +.dijitHorizontalSliderImageHandle { + left:-8px; + top:-5px; + vertical-align:top; +} + +.dijitSliderBar { + border-style:solid; + border-color:black; +} + +.dijitHorizontalSliderBar { + height:4px; + border-width:1px 0px; +} + +.dijitVerticalSliderBar { + width:4px; + border-width:0px 1px; +} + +.dijitSliderProgressBar { + background-color:red; + #z-index:0; +} + +.dijitVerticalSliderProgressBar { + position:static !important; + height:0%; + vertical-align:top; + text-align:left; +} + +.dijitHorizontalSliderProgressBar { + position:absolute !important; + width:0%; + vertical-align:middle; + overflow:visible; +} + +.dijitSliderRemainingBar { + overflow:hidden; + background-color:transparent; + #z-index:-1; +} + +.dijitVerticalSliderRemainingBar { + height:100%; + text-align:left; +} + +.dijitHorizontalSliderRemainingBar { + width:100% !important; +} + +/* the slider bumper is the space consumed by the slider handle when it hangs over an edge */ +.dijitSliderBumper { + overflow:hidden; + #z-index:-1 +} + +.dijitVerticalSliderBumper { + width:4px; + height:8px; + border-width:0px 1px; +} + +.dijitHorizontalSliderBumper { + width:8px; + height:4px; + border-width:1px 0px; +} + +.dijitVerticalSliderBottomBumper, +.dijitHorizontalSliderLeftBumper { + background-color:red; +} + +.dijitVerticalSliderTopBumper, +.dijitHorizontalSliderRightBumper { + background-color:transparent; +} + +.dijitHorizontalSliderDecoration { + text-align:center; +} + +.dijitSlider .dijitSliderButton { + font-family:monospace; + margin:0px; + padding:0px; + display:block; +} + +.dijitSlider .dijitVerticalSliderTopButton { + vertical-align:bottom; +} + +.dijitSlider .dijitVerticalSliderBottomButton { + vertical-align:top; +} + +.dijitSliderButtonContainer { + text-align:center; + height:0px; +} + +.dijitSlider .dijitButtonNode { + padding:0px; + display:block; +} + +.RuleContainer { + position:relative; + overflow:visible; +} + +.VerticalRuleContainer { + height:100%; + line-height:0px; + float:left; + text-align:left; +} + +.dj_opera .VerticalRuleContainer { + line-height:2%; +} + +.dj_ie .VerticalRuleContainer { + line-height:normal; +} + +.dj_gecko .VerticalRuleContainer { + margin:0px 0px 1px 0px; /* mozilla bug workaround for float:left,height:100% block elements */ +} + +.RuleMark { + position:absolute; + border:1px solid black; + line-height:0px; + height:100%; +} + +.HorizontalRuleMark { + width:0px; + border-top-width:0px !important; + border-bottom-width:0px !important; + border-left-width:0px !important; +} + +.RuleLabelContainer { + position:absolute; +} + +.HorizontalRuleLabelContainer { + text-align:center; + display:inline-block; +} + +.HorizontalRuleLabel { + position:relative; + left:-50%; +} + +.VerticalRuleMark { + height:0px; + border-right-width:0px !important; + border-bottom-width:0px !important; + border-left-width:0px !important; + width:100%; + left:0px; +} + +.dj_ie .VerticalRuleLabelContainer { + margin-top:-.55em; +} + +/* Toolbar A11y */ +.dijit_a11y .dijitButtonContents .dijitButtonText { + display: block !important; +} + +.dj_ie .dijitTextArea p { + margin-top:0px; + margin-bottom:0px; +} + +/* Editor */ +.IEFixedToolbar { + position:absolute; + /* top:0; */ + top: expression(eval((document.documentElement||document.body).scrollTop)); +} diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/dijit_rtl.css b/spring-faces/src/main/java/META-INF/dijit/themes/dijit_rtl.css new file mode 100644 index 00000000..c63456c3 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/dijit_rtl.css @@ -0,0 +1,57 @@ +/* Tree */ + +.dijitRtl .dijitTreeContainer .dijitTreeExpando { + float:right; +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpand { + float:right; +} + +/* can't specify .dijitRtl and .dijit_a11y on this rule, since they are on the same node */ +.dijitRtl .dijitExpandoText { + float: right; + padding-left: 3px; + padding-right: 0; +} + +/* ComboBox */ + +.dijitRtl .dijitComboBoxInput { + border-right-width:1px !important; + border-left-width:0px !important; +} + +/* Calendar */ + +.dijitRtl .dijitCalendarNextYear { + margin:0 0.55em 0 0; +} + +.dijitRtl .dijitCalendarPreviousYear { + margin:0 0 0 0.55em; +} + +.dijitRtl .dijitProgressBarFull .dijitProgressBarLabel { + right:0px; /* FF workaround */ +} + +/* Button */ + +.dijitRtl .dijitComboButton .dijitButtonContents { + border-right-width:1px !important; +} + +/* A11y */ +.dijitRtl .dijitA11ySideArrow { + margin-left:1em; + margin-right:0; +} + +/* AccordionPane */ + +.dijitRtl .dijitAccordionPane .dijitAccordionTitle .dijitAccordionArrow, +.dijitRtl .dijitAccordionPane .dijitAccordionTitle .arrowTextUp, +.dijitRtl .dijitAccordionPane .dijitAccordionTitle .arrowTextDown { + float: left; +} diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-left.png new file mode 100644 index 0000000000000000000000000000000000000000..055e00647e2d836f4cb5159d2c9f386c2e63abe5 GIT binary patch literal 771 zcmV+e1N{7nP)YPxuW!x2j~M-s%UEOuKS1cH8IMIA$Fys`7>&-b&2X-Ty#p&60-UoA8V!f1*sfqL4q#ap`Myv2 zg9EZ{n@9)}k0TEU16v635x-yXbFEsXMzcwka+&h^ym2BJgl&raMQc6dgY9;knvDh( z5z%%WvH)->26?T)gMObQ&MK7(^}1cE*Xt%t1~f8+Q%W<9SMU71*PCFwD3wa|?Bs;% zwHnz-Q7T0mwhE=oz=#3`=o&)UPmhl&2m+!MOrmY7ij#Od=Q11}9#QZlKt!8lBuQ~Z zPCBOTFz)ldR4h`p8jzE7D3Z|<+>q)T+-bMF*e9H->v^PbP({%{adtG3g9ER)_-rhY zPC%Uz)xgl`rRTboLmgSwFeynEn8IBLwd8hVb%_;D(%p>$M!OwyuW}Tbh_tOVo8Y2F zWYm>>-xS;jMxWYzLnReOmc)J2sQbY`W32;;+H${}5+(2JKJX8u97IStUR8J>7UfI%mT|eC5NY#)!_7B2Mp}vCJ46kH_CEVND#K7Pe)C z*0IhM+)2dwtYS4Gi9x3^qqxU8lRfUtjd6nv?vZ|nyUk9>Sr%|-M1T*W$mqm@=X z1eVz>%f=42nU#9E`+j!|_7lvA=6ZP3ayj!K3%UvZZ*C9zgX?m+{JMzALMZ#g?+02e z78HgdMXN*N@#y7M@C$D}&-;b_onP?H*MY}U_$MSO<=S`>+q!8wot|QTUtz+u_yfRY zWJjxC43X7}A1*J?FdS#>#C6>+bnq-VVfe2A0|1`Hq8-ODH&*}v002ovPDHLkV1mX* BU=RQR literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-right.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5c172630fb2ca164cdc7bebdc040c5a797d320 GIT binary patch literal 835 zcmV-J1HAl+P)^U5+p@O493Ouh34XD?9Ww}Q6amoped_gk)Hy$=ZnsN5-VtQavF)8thlk-X zSe896VFj2sGx}+OPKSPDBgjiX2>8RTVX)Tk_lY+HI9(1Pr6k93s9Y{n1;I66XP*O$N{>l?A-C?ZV=f@Zo=EK;#h;OCc+xqJZ*xIklehyX&)fu1`i@A{Vc`8 ziGa&*_V@2)0yBHW0iZuEq^@br%-}SA_CXY@8a$AG7VseT2(0|Qa-2UX_w7^bN% z4cisLer8KM>8oOew@HK3p!qBlGjj_tVl=6%YTy|GPOoH6UCm4;c0Qjc7n{?@IvRhg zgsQPRCD`4ZOFVV*Zk~0YZftCPm*KcuHAt6rTF_akcr;O|AZ?qA^;X^I;k1XZ9}R$9 zVGp3G>1oA`l+RG7&kD>&A7Kdvl%^!F?9ps}mS$#V$aUQiE_=Mbz8;PQC)N`fI}TN= zRcbUEG=FEFJh0-oy;iGrdNF#VFjDDia1DF!Z>}109Z(Q(xyVw~7$I@t)}<}a{v9tWS1I@S zsQ4)Ef#Kl;@5RwKg#!{fo44$rjF6*2UngB5> BP5l4> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d4c945f37c8934dc6c8d3af7d15f2674d0fe9e GIT binary patch literal 565 zcmV-50?Pe~P)&4m@$*08*~wm(ST4^q=Y8z0o%$enAANhFq9;) zs~Dtpdd_mn%Wk*LmVMRC?txZ9;+PY8tY$qKL}W(y6k+(n-w4E(4?r0VplvpTRnA+M zJowZpnl<$;2f$^9Q)ihA2ob1ER8)4~DyJH18*0B$u990@9jd#U?H@o@9xvIg7;ams zZ^XHquw&o?#`)<~&6(Y}HTDH7ziIE-9W!QgB%5c=4;1P6dpg8?!Jeuotr=Vek)8Pi zVU!zcI(JBkcZWNwS_eRtx%{RuDt1GqKV zjnl-6gTc5``n*7hz-6iwd4d$K0%=YB0Dc1#6E!~LHV`lfoF+mJNDv65(avOMcK3Xi ztlSS-%IoS&Oj0}l50$*dk@k2w4~8jT(W zKkxS+fI+{YnF;a8d;k9O>dLqGRV-~aZ*)LJ?~tg+%VGPqMej|{JUf?}oxJJq?0mTA z`|0*}E@q)s1(wZKm3PkVUDS0QnE7SSD98@ah>jmWzu4V%3g%>(oFTFUB%RTt*ak~^ zRRktt0Lhx;7xN2QztxzxHaGJzw=y5&Hc!^pjJ0;F;y8+cATi4D--eI|Hrx1=pWWH_%Bc2Bj{KfVLqR)tj0e91^@<;iiM!g RxzPXs002ovPDHLkV1hMuAt3+& literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1f2ca7e4ddb42f52b6a71e73c837ad649b3ec6 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq9{)n$B>F!Zzf;lbx`DBK4>xLoqf+Ng+1m+YfZ`;y{jJ- z^Eh8Re@`GYaY;vmN2R{&s!7VB%Vape99gS=!}DVBzWSpVgtrP}Ae8-o$FYbFU|5@%L zAcngv49kiA&3|Tgc2Tk{qeH`dc<5qHPYBV3wM3THG9idLWgiUa6w_4-C`l5EqKIO) zIHnZODL8!>8jnVrrt6pRejZ`r%Jax}9I`EoR;v|-K|t&*dkQ8+`2_F10E-rj1x*Zt z=9nEgU@*?Xf8fFW{U!41`A{%Tlg8sQ&1W<6@SLP66}j@*f`8uKb)b44_&ym>8x96E zolYqTLz&|yR169KxVh0(O}j?8+6+p=;gAd{`*4)9Vjkx1kT4dUp$IM8w(0li7nz1h zuH&u?gO_~ogHhEF5yImzjfqK?ZON^9D%36bYro&d+;Lr(CV=OUkLx`1aOpr3=}>%w zMxf<#NsIZMd^q7o5GAS-#(uuy#SC-Kg=!fnVLu4kA@XC8L+4yY9`0e3Vc&lN2NGn} z%?_dpaE<%7=-UFODzN8y8jSpvPaJ-l7A;r-hN=bC<0uL#;p4_zw60bqpJnwQLvT5JWigUTw{96pr*r#rppxAij=l;-W(zm z@1X9+N&H@k6sgW8)7Wva_wS}&ub<+#D_FA#eK&litfIA}qb@G{9=z)}zn5(I-)lFQ!h?(NL(%#Poi zojo?k-DMxV%+B6^@8|bk#GkV>2O-w7EE8+(peTw{t<+JPrpJ%h*J+W6pC>1PL4pD2 z9~~KE$iN5;Y(3rB_%Rp!rPp)Slb{Z?D<#QpmpV|EBF`zyvcot@_Fivq+a_54JwKmb zI-QPJ2?KXmR_G2+0fS2G-84z=xRb+jtx74HOePe^F%7S-XgD0wXf&b>?~JuC z-ya-&xB<4vZB~(M6)r&VNV(Qz@lI#i?z{c{wJ8`DX^|E%lmo=dcbr|7WxcmMJH8;& z6o!@w=ZyAEPm>p`PKamt>8mvMcCaXgKfwdiMb4>hS75UoT(_}{E?9tBQT?^&o0|_? zf!V7An90KhEw~28JZTMPWhp~3L7YdjXajCAki%w&nNq9mJU8<8Z3ISZ{XjAy+7!%J zo53MxF!Elju-Uf=VHY`=rgPF@U@Omc!7MaKpS4y@-_h+khbpsI7e*BMGFAVz3p<3& zeOA?cvynk7&+NMl+~!I1U}O4AJ&XE8mFumNq$&59ug8n0O86RACy2obPbL{9m~U6Q z{>A0RFKHJ|RS37HCHHn5kNviReDw3&47>ht_Rgb-ElT6@n2R>Rt8X66MVLd03MhCG zO7ATiMf}VkzqpRB?Obr}t==5mQ})PVF!Z>}109Z(Q(xyVxV|8=CN!n9>Zy}PU@Sugn^ zP^kZ5Mq z>mylIJwI<%fAhTP(uIa4QQ9g~mpcSy_fCvsWMe2;A3i0)N5cSUHG`+CpUXO@geCx) Cd`kcT literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c0817c82f14e2918eeb1470a92ac27d2cec11957 GIT binary patch literal 713 zcmV;)0yh1LP)~0ef2-K<- z7zC*d234*Mc>q5^Kq&*M@(d|br3@JS0(pa!hPX3n-I!oyC2OsJ?XR@j%{gO@BFmO` z7iNFwn{)5EcSq%UE{BeOuXlzy?JUb07)M#2SMn?qa%vy!Jv^L>QWvY$s*$FtEEWq{ zax9mEcY=k)*@b$pYuk?V1&e;>nH>OePcY zJWoc$q4>Tpd}lyL{0#28E*0BR6v^Q6k2zc` z7zh_KIcjK2Oe_DnyR$9Jy2R@C7@_vMT@5l{f?ClKTLxZ^RQOWHlwg=5#00000NkvXXu0mjfYHL4& literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-right.png new file mode 100644 index 0000000000000000000000000000000000000000..3346947182678f78517190e761986bc314fad1ef GIT binary patch literal 694 zcmV;n0!jUeP)mJkF5H_eu}KkdYn;La0(k>NAk~6N7YHoaq_H1hu~!<6q>;}V zX%<~3vu|6U4zKR+-1O&A0cDJ4-Dx+{(4Stg0r$M<)42k-XwiYBaXZ*CSh zAs}uAa5x;wU@(CBKoG+IJdW4!%5D=55u^AGnUbcdK&s4UGq>SUG@g~#zWs7^G=2nA z^Riu7E2%M}wH6D*48dgC{^#*{V*xW!T^ru2RFEPssK5sYGfAtK_fFWAE=e}tk47()=>s!4QB>6(N;MJ* zBd--=kRGm`cW%SZ1B|-AR4hjy*}jPiD5cssj@MP%*K;kMAk`x7=l$V2X@-ph2F>$K z={~U3Fk=RsB$~q_y*vj#Zo*D-%wd_W^c=L3MrU!7ur{hbE3?OI{W6}Vk>jj31eM!!XEIy*_xD07z!phDE{`FDjp6P3Urm!&c3>N zZcbIxTRT>NJVC(}kA6DXpAub?DL1QnnMU~X8yInr>Vn!}?c^BXWO4K^1AL4G-2n*M zSl<91JUX|V3G<(wy!u*566U1^@s6 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..53cebb513240c2c39f2bcfa15e512fd8fcdca720 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqC!s>$B>F!Z?5g;JYc}%8mO7^pOIIsH+WasA3?vlta*xS zSo!#CC)~5-4hqX|T{1;T#dfK~q}|S!#8&v2rQD3to@4U7WywL$z0N`M&69Tc%=j|T zCtc~^?C!V1>aKg9-jFX0%x{^os_k`fwrFVdQ&MBb@ E0M%AWpa1{> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/close.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9f7d471132f3243e8fab9e28cdae38f0002963d7 GIT binary patch literal 644 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 Hu0mjf+d+<# literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4b76849a9e63fe4649500973bae7fd328fe85e GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqI^#m$B>F!Z>}109Z(Q(xyVxV|8=CN!n9>Zy}PU@Sugn^ zP^kZ5Mq z>mylIJwI<%fAhTP(uIa4QQ9g~mpcSy_fCvsWMe2;A3i0)N5cSUHG`+CpUXO@geCx) Cd`kcT literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-left.png new file mode 100644 index 0000000000000000000000000000000000000000..19b8040161e8860184ead2be71f2f1ac90a710fa GIT binary patch literal 742 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..2b20d64b248cd3a5a4752ea8d82c627941e611cc GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq5@AB$B>F!Z>}109Z(Q(xyZ5d&7S`U*Qf}17c&%=tCV|u zRD2Zo!0_;aw$)RZcYe;~om6ygLdkV5&tx8tN!BVmT|AGa9#Xk~sr+PE&iS0Z-!}ME zSJy|fsCvHMs{ZDA(WNUbOYT`Kw@wjKIVvIfQZ#`gHf>% zFL7Ziih@`u1PWaVeE?se*kwyseTJ^PEC_u8-=MgVF052)r4SXYwbCNdN{zZm=Gyc9 z$+Y%nrayelBs1qb=ev%vy0U^OiqLAc@b&Z*dwY9$x3z_j2M6e!dD?nH5zvjnL6pm7eJvCUa2y9pDVPF2Yc%j-e;;o*HzD^t&qZdM3^UWys8lK%D6FYe zN-Ho7Lz_A}I>PqO4(jzfI*g0OViC9I=5Uk1{{DW=76ZaC#E+N{n3#PsGigeJyN7`Mdvg0WbWlanZqjUi8&q=Nqspa$3L$CMH+NEynbqZl0? zMj=mN1o)nh>yEm(yb#HcMQ*87(iw#Tc)o{jM+IRx#cOq7V4xi%Yv{4|lANw!(%#GE zawzup>IR6IP2cOzs==(=?OZmCEX`oyJpz-k#^9+`r)#9g-Gr<$c*tg)!YX|(4ibae zqj~959V@}XHFf<1Y#62`wF!a{uA5wP2aHA(g?*mq65RSwKjGk<4jcO>h|RtO`uY`~Tc18w5ys#!y&Aue#PQ|LHX$U4Tg zJ1Zla$z&iZM4c#MVt*RJO6FH$lQ@Nu*9RQW%aoIPn9JsL-DO~0wy#_T80SL8vP7aV zG2p;X*^lUCnGTkyU|c=`@mJ!Pr62DrNe=g!o@<9M^L~~7D+JB+_aax-c-nEM=rm(? c9DEmG0Gy+It;ZBxsQ>@~07*qoM6N<$g8D;=+5i9m literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-right.png new file mode 100644 index 0000000000000000000000000000000000000000..20e11417da83b2ec4c22c7d5550d7253217c2c0a GIT binary patch literal 1699 zcmV;U23+}xP)DRp3R);c)1)RQ zCg$hm{blCOZ_l}N?{xAU^Mg0sck|xN+&Qdi(n1z<~o&EEdJX!kf*e)arGqRjabOxhdGSS}ZmI z2nKT$(2HQt#&ZR9HiCB?=UTndxcueCi(z(M``EE#uVtmXr$>6w%K%2i4S-l*Uze9l zOR|Qs4nPFrXMnWN!_IJWj*k zwTJ@-mY0`hVPQemR#&Bo??D)D)k>T%KhDWsDwPy4Xh|`Q_Wie4u3S#<`|Z}PEi*6_ z`w^0U0O4q1XWab~*qD3vOjcG_xHF}Zoj~M)B2!!g!e(eg%>UtcSFcVgCP}gB+$m#S z0y9PIg2F_6_|0Mq{5ZaVKJBkcT+vFJL^&2KJUQi8I5&)>pIp#w24 z+A13;%37@^i}TNAc?m%3jYOzaP`rCa+Sws1W(+)kG`6fyap@P^^S$)OvQ-wVSilpa z7~#zf%hJnbsn)70mG>H&T>V6ehNztu)YdSG#V;IYn4i(6AD&) z$Qw1LJhWrh!Q3BwcK-ah&Ac~hXpD-#F{T?E8?wH(CJsPRKhYbql4U2xdYp%ez_}6r zk8DqaQ7OlZ00Ea&Bf(HJh7|*3etuq=p0CBo^rjz;jgG2?Oq+W0M5-`GV-*81(7}TT zQ_ZkNTHKJuIlHC7aId_H3sCi>k3bkI0*;KuMwzI2C`moSjhYlrR zG^48sEA=olGb4v^?VZ!7Wq5d40eSNDsY(nhqnjY{8`{Ni3Wl_KSlB_h$PgXZ)Ext+ zUAUz9AZVxF$S95RUl=1n^`fAjL~%WS{J5%Z|4dIS{h5ucY$6z~8Q|!(TP+=?nCa~D zPEeQZ(%EzrLt$tve=8V*Wa_h^((1_;wbO->HIJbosAUZ@BjLo2(dl!$C7+;mr260>C^%pN*$RI*O5GPKYkO72`AP9`1e*E~c@|5;k6)I@}NXumg zSJN;N03A3(o6?XHv(BW~`3tKznIl6KwyA5J>)yS4lIl{2NLdNfTOTP{Ua;0enoSBV zV(2A@pyc30RzqcLT(~mo0upHOb|?N0b_i|GiWssj>cnlYEO|hv;!LB zD>%$Zx7Q)!DS-M!y8|$O26TWlRn`n_}*l)hMKA1 zlt%!S^$JoD71y&8P&_YNIe-iZJx3HLrs=gjF-KegxsI3LuiDqO&%SqdTbdazR&Umy zM~@!K?Ch)pX+rh7aG6l2r6g(7=wH+u^*?e$`qRyu+onfBmkFjdL9OBij_&&4{(W_d tGuf7x%4iPy-x|aXyhU#N;{Trj0|1JnA(%&)`?&xB002ovPDHLkV1mnCC*J@7 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..ec26b8f8d6970081e338c7b3e776dae1f5dfadcf GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqC!s>$B>F!Z>DYJJz&7WBCKhBWbVxag>41jrU<&3AJWh;|%VlmelPUW9XehJ^_6o1-V zUH!dI<;^?Y%F{dF`%MfA>3i@guHM>Zmv^E^a04U5n-uq;u%`lLK+73CUHx3vIVCg! E0FU5HHvj+t literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a5cd568d2064d5c8263aa3d774ce019228061792 GIT binary patch literal 792 zcmV+z1LypSP)ux|RbC;X%hFXL&==^kyV6ymd4R66ENN1Fi|yEwEnAoV z|3qV}h1eQ6Xe`fn{&Uk9@6OI7m&-}1RFWsPnpAgo)ZX6Ql&ocmVHmHXC~AgbScmP0 zQM46>q2QfZ*=$xFe!9CWHNXnAZ81&r8019|1a;r{Wj341oHm~e-U%FuRVWk`RMU#K zZJL&K4)3Qt?7FUuMkBeuzZchW#Pd9%GX+`J*Tg&a(2u=}0UbJN$ zj9i~h08rI|D*L=H*Cp&YTbv-ahR=CCNsEI#quDFwjkX5lH z-LjDD4T@A@q0lx3ODf$5_zKm2!HRRLnDe^+E?|5Jmw-+<7+!o+q-m3aF^*puDox)K zX+Q;|ML%))5>O-g-KH86jw9B4fQ=-WN|{y0`V5sTUakCruT0rm<+wlrz&Eh(*qa1# zyC?^%mdUG^3IKn@Y=r+Zd0>?Ta~l_+{ty6ugFVOoFqywj<9{=YxOS7(g?#~7!ShI0 zKjB>c)@JPO?JYpvZ}u9`W4yb7)st%fgsqj6f5y*W06#$C2OQx literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-right.png new file mode 100644 index 0000000000000000000000000000000000000000..4e4e40d1460ac34ce3295ce41285d7b956341e36 GIT binary patch literal 1794 zcmV+d2mSboP)YKil3VkYCP>Nz3?5j_OzDoNbg+l)Wq0kqF& z@`ZvdE-c8>;-V~IESJl2{P=MhK5|4_TU#ZWOzQoOAc*GRe|`^wpjfZh$Ewxpc*XN> zy?f%s9oe8ce~pfs85-dv1X8cd%F2q&&&|ow(vqZ~Jdw%CN%{EnY552}0RT0C^?hHe z?A5A*uM-UCiH&wn-d_W#QmJ&|v$JRaYzpSr+qWZTxElf~6pP}4fv3-&$v+Psh=c1R zBO@|AJS;vIUMZE7v3xG4ps{ORtYHBVjN?cGJ?XmQ0z5asM(|+wCf2z6^~HxXPz8@L68iD5oj@booA}b6JS^D(M z8993Ns9+Z|GczOUi3uT-S%imStO7W65Ovi}lg?`z9&CVf`FO65-zw$umFw58os7T` zHGy!XAT!wYEW$8|uzYyxlxEL-CL_-Pa2CukRAi5#v7HRPOy|AS96P^bOkz_%e|!0I zG73{*sHP}qo%L!mOTjrGH_VftdzT+@yITH3WoaFL3y=OChybKs8aC9UIm8#EB zUQ{p|Z(LxC5(vXGc=)hv-@aX$Vu%*;yT>?Fu*O4Pt1;z4K%G{Cj=4{sKX>kJm+>P) zdJB6SLi6U{y$Xs<(Rs`GoyHctCM$7v8UWKUPS3d!{!d&|PaRO{%#h9 zN?TSe5V|p0s~Ryfy?5Zb;h`a2$hNUZk0gi8W7#0n-QC^NvujtR87)0V+}QjH*EgBr z8T0Dw>XH^bTmmoxVX6~wU@aaK^zPZClaomTwi{x$_4M@UBD4bboiNS5{rjcAzh5^w z1)rictV1(QN`~hRxt;~X1#uy1Y@6aG5PN;C!?t&Hs5`&0dv^#1yW=x7OzL3*p0pd+ z-Z^$m`uh45$fL)PHT+IYH=6cgQSNgi&%j79Y@D1SvvtRUSu0#pybH9`rx-H&)03x9 z6;x+uryM~oJ9zM*vYi?qSN&N5Yc>&#(G1q?bUm*UR$#LrKNAFdd8I5B0IS!n<*x=q zkWBsF-d?qOvPJE5U_5Z(fQE*k<_yS~gcS_KRQ2J+6<^mum^>8}?U@VGwpoXG(f32U zxAm)8O7r@27-bJaLJ$K31JaG~5d?uT)DKYkE$fljP%m_S_)G;Dux`$!aFr1{F~*89 zKMfaa3hRr>r1kuT)thsWAqtzK-3pD6<UOdZk(85g^I_pVw%Gt*Nrn9~c-Hv~22k_k>iX2<}AODCrK zZOXn37&f|f$JVWy-hbb}uSbq%K*&vCY7_lU!PIK^lo`jMBr{}#yHx!cARMj7Y}Otl zYiI{F#usqd5m{tUeLMv)8fbT1E^dpKJ^xZOZqf~f%^uXlDs8IuW-UFDmS#wt@E;0g zp!2LCTPg5H(72ab$o#8dR(XdxVDb3C9R#*GQh2XZlT3JQ8Q{A4LSCI8?MFS&SZ3m( z;>gn+Q`KgYJ%qhVk&M@=_;;>BV`RC(d}H|O_vmo7_Cb3yOGCXDUQZ-(xONgczA`Ds z7wiy;^> z5xEI{-izK2;*(ksw03(gCJ0)#SN8OC(oL$k?Q2N0a73wNj;8!mASgX#oP=OIzkr>q zt6o*&0*;HzE=B8Ti{E7^ z)}z$B>F!Z?5g;JYc}%8mO7^pOIIsH+WasA3?vlta*xS zSo!#CC)~5-4hqX|T{1;T#dfK~q}|S!#8&v2rQD3to@4U7WywL$z0N`M&69Tc%=j|T zCtc~^?C!V1>aKg9-jFX0%x{^os_k`fwrFVdQ&MBb@ E0M%AWpa1{> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b8720f35ac9e3db350196fcc15f20e14d64a831f GIT binary patch literal 615 zcmV-t0+{`YP)(MVZq100D|28^Z}9Do_TVdD|EMPNKo-KZB+Vp)5E2!X(^(r3lX5RrlM^9N&+h~oic59fQaKiVBV{H? zLe}p5u&wFi6+W=WqFxSzR+E#Rfkc%I{Q52EJ@%IXMIZkqWux2e_SixU`3ZQ2 zgMG|v>AN+FKV;$H9R|0UUoqp8q6%OYs0lv;3;>30rFq}aEwumu002ovPDHLkV1m2S B5v2eC literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..42314522cde75442208bd2fbefe0132e44b9f692 GIT binary patch literal 889 zcmV-<1BU#GP)}e1Ni~H z3VKlr#aar|Q+n?oCe?ghWV4NJ!F{nd$q? z&TLGymPU6MCNsM`nR(`UpZ8tjKOwD8l~TK3_xAR0n=GDfZpH~_`Z|?L zZGAsDIJgna%w zbSlMwyp=#D&5Uz#Xa>EMqlAjH@^;0e4SO|3P;Mp8zi< za|Ex2_4wJNnVAWgUIF{VL%6xIv_aH*i-{)ynaN}*olev5!GPSJ!UE!GjPX*S^lXy3 zyu74rHft8dV%WgBER8oX<9t4E=C<2yk^nfxvI-CM;7*$9_xm(AH)m+a<_;8kTwr2x zaglPl9JN|48ZawY^OXY&Q%WK7cLIa|_If>I0>&#a3kC@0fR#xN+r(+v z1Y>uOGb5OXTZ&om!hB9^FHkbk! zY*wjM%&D)H6xbKycIiQ>%Du&z;c#e}DHIAuD`2QxE}Q2!);92&@PghiwyOUQmK>0sJ(#^w=YJ9!~3 zTA{w7(%Jdh&qTAfO93G)-=I;-1jqL#sw=)!PKS!(La4k}v55>>@&y7{zE;dFW5|i~9CNC7@$K<4*4YnR|mn zJ0KspdvmQUnfPP8`Y@ljJbu+^G``(fBgL%OKDS>M#BQ_My!FHXj{pMzNe2~$m2HsX P00000NkvXXu0mjfDF32{ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1f2ca7e4ddb42f52b6a71e73c837ad649b3ec6 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq9{)n$B>F!Zzf;lbx`DBK4>xLoqf+Ng+1m+YfZ`;y{jJ- z^Eh8Re@`GYaY;vmN2R{&s!7VB%Vape99gS=!}DVBzWS}m!_s9YNC@&GMU?%e*c*n zt3^$E;OERaobUhs`xx&I50TI3QLR?7vA&MR+M50@E-hgpmxEy#FXA}fS4wSCwp1LK zVx_=4Id3Ylv4I?7~UTwDb0{7CKlQ$89D z1~~6_(dRy*0s#goP=l*vE0@bypx-fYMDzAtGW2>qbUGdMFE26XIgBD?zRJ?zQmLc^ z##4)o2UFKYmu&6RQ(RnJVCs3=$J?N6<>;gA7R~uYuyskMcDs!(nO!Q1gfTVq-<2~B zQy%Ow2wTJ95Wjz&q1Wxf897N{#F-fPgH^1+sJ``So|xG^@4+70IyLv1dIwD4Hj~$K z90%tF_ph!JKT~t@05Ac2-b)q&uCK2#==b4Li4=mG!K%T`=Z-uUu=t#@&H`$%JDqNO z^iP0dy7;P6b03Ea*ma*!fd&fe?Fzyi;F8pDR<{`#^MJ?Wu|)$X0xe3M2Si(ER|g{Q<4o@OEPsldsAi)lnIfkg3LjXq-|0f0;!$dp1?>{$ bj{pMz_)xz}dIss%00000NkvXXu0mjf4aPWfF9r-m{s2B1eZydcXe45TZ<_dG3@;`U{Q>?ABsKC-d5}vxgU=dXMB!ukXeDyafU35#ZymlZ@Rm6G|zMfu?Tc{z9PoWuZt@A$qi74}L+!Pf|e zz#5*R*(l$y;>BXIc>Us~OFy*)^ZT7UbxN=ksn%*z02{9B%F}1h~DV0isUF%|@1wb&4BQf-NA|VNY=LXma9_&u#3x%_vUA^izf=O^e zv5b&v^dc6Ro12q=A3l`6-d>r!c~eG?AD03^tgWp{CY_d5Jo5lVAe9CnjV*>vuqOa0 z+1@T~csc;+dfw?`q3{o08QTJe6xV4o$g?XeGBYzH-Fx=P7uT-I@Udf(-`tdCgl!Sw zVh#~7S=^ErKLeEhD4@4RyPoo{a3 z__Pj2l|!WX5%VO2U8ge{866#!_mQkrPXeLYR8$#5V>=nzP3ODJId*>L6Px<^ ztLxX38YY5ZTuFDnP=taqnsD!(eOEd=IwZHTAxrZMvYZBxd?89yY9!n~EIY~_pFD!R-@!W0MmmVb9aAq`SOPeCK&UE zVCWfLot<*%&>{W2fe_L3%1Amg7rZ7bjqHR>4de8j8xi^>!KC7j$p{m(cmICbyLYb| z8^KUrmK6(RetuqAtC(bDzU|w$PZ{Mxwmp3GNODjf%LbY5>+6&L0|)9kqeg3z8=Ieq zz!+=imt9?5(uN-w!3=>EC`F6~*5Wb2;K74BIb2i$>u)g!)z;tNuZz$M*!N>|Lx&H` z@bIv1asfU?sauD(N-n$ZfF>|^XkC=1#Kz<$5ZB1K*FCFi_tJf0IR6nGdt@ zqydb*dFqr3fcLydOdoVcX;0BE;rOruQ9 zJ$;TA z^!>>0b=T0Lcp*DznuefW&$xhxl9!b+B4 zh?F5>QnL9bm#mVu^A}ccGDn7(*i70z$PqF=H8rJkHhPTKA5;iij z29s+?$=5@Z$@Z6d%Q`l|-S#3s5(pU=yL_T>#|xn@e<9;-Uz*s=Mlxbc#_Cgn^5Ab`|t#}ZxGx;j) z*pr=J48aJ)gzxUb(|)Pn4h*{g&lxP1@q{kU&+W-}$$DATDp$XYC*nG8uOY3%QJ0Qk zng0}s>uGo>2yEvG*g3Q1s$vr8g{+V3#VdxpPMcag?@KOh+wr3@9d}v)vLKA|$gJKz zQGaOtCT!EV{J!0cKf#RNj$RuY9*#OXJ9I}hD4L-S)pp@hA@Eq)kOmYH`q%kF{>PSU zqPXo!9<+E?=D0a7u(!HJHrF7u5_%T>HttM2Ui|+PU;wRQ!qO98H>Usq002ovPDHLk FV1k7sRPq1- literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4b76849a9e63fe4649500973bae7fd328fe85e GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqI^#m$B>F!Z>}109Z(Q(xyVxV|8=CN!n9>Zy}PU@Sugn^ zP^kZ5Mq z>mylIJwI<%fAhTP(uIa4QQ9g~mpcSy_fCvsWMe2;A3i0)N5cSUHG`+CpUXO@geCx) Cd`kcT literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-center.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-center.png new file mode 100644 index 0000000000000000000000000000000000000000..52e81c3c522a135abb261557de0a899b9499894a GIT binary patch literal 1238 zcmV;{1S$K8P)2BW@K?E=O4yK)vUB9>4g+ z7BIzPks95kl%#1I8HPcjP)GrCi^aFzJbrxPv#F_x4L7}i@?=0wYRnX~RAq`KWm(qq zA5Kor@Pp>Dz?x)!sYC({NibwZA{4eP9ZY@x!KqWaV$gFvYGxBcK;VJur7p>k#$YI9 zzKXxjNzZRSm})~*QJ@L*+B;=1UUR`z5RnFB*O}-6@Y%^TXZHOsV3?f}1A=}6=!k*o znl@B3nDtw?$Xi;XJm#&lC=ns?Sd3B!4j>$~jd6cny-NATMY0jr>2R3#Mx*4UQuIqA zp}F?fNHD-B!p0aoEQnzi> zK>&RrohA>-bqZkleWK#35?JA9m9d2wteF`eo$2hPBiQv*Nbd}$fJGNqR_NxvdsH+{ zTD)OaF3^Mgtl9=&sSmJx3th}aDjz|*j?9_ zm#H*2M+*Sg1-HD^(Lw!S%19>Z8@P2Ym)jy>72;enFqgH1{1dO)P1Uvln?`DX9hA z8+Ajd%!UDt%wwbHpdS|b_Gn^5eo?HbUWk?d9NKfRZ?W(za9ILCLJ+Hj3$ytBQ$${2 z`(`Uq#NljU16)M8JOJFEkL{+-?N^wI9UenQ6xs*U<28PH5!n5nk&h^XK1+@YTzKHM2c zrDrBWuqfPW!`Mw|7wTTMFWrAYyCD(f50YTVj@ZPf%%~k@-OP-Qjr}J5W>xKqdsrtX zbkf@DP!geUSz#9MN9sJ|Hn31`J}yuN2uF|u5FLB=C}!ZIS?Kn>0>g!>;iOQxLd%dO zC*e?UPcL<%OxU)K6coHMIy&k%1xz{B3mh{oN+Smi3=B~Jll|m?75sO4WMpJ!!Ti&2}ij{P7MzaPi(nGFw#2v1lbiSUg{LFA{1+h zL8wV;d!mifsk91b0R0$ur}2MXX%0PesP3$=@g1p})M7YJL~t8Gw#{J3+e1S`KkRtF zVpZ2&C#neQU`OUdhH(uMlL5f90P)C+|33l@0MdQ@DR5Cypa1{>07*qoM6N<$f;00? A=Kufz literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-left.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebfd08eee85c18f67b4ed1c546f7f9ecd1e669a GIT binary patch literal 769 zcmV+c1OEJpP)Os>B2IkRwt!B5{K91{^qXM5@#m;0-udqW5y@1MmPyC=`2l%{Pl3 zB_)Zy(r6uJzMXHrnVq%LG^Ks(*<^BtZ2`Y7_7hlW5Wrcxz?1R#6x$`N%RaVkQxF8? z9vqMmg2=MSc?cShM#8eJ4*psN1b+? zLPQjfLpA`+lYzW8Xpe?Nj`+UOXwabFr&g zqj7FpsSQxR3~fY#0(1o-#FOJ=ilT^+97%wXf&pw3*2zvg=Q11}9#QltB4G=Xi6q4l znRH6K!N})LEexsIjL4}tl*r^Ca0}H9@JX-N$3A1Kp6`=_qe_w$UE0$`4jf)^@!16O z)EQ70L^WV&^xXG6sz6y*HHI^Ti-0+}@1T}k5>}U3;k>4_e>rHkL+(|MA~TV8m1Y|_ zw26$mlJm`hWx(iD!5J#4D6u8-&7+nB|4g-xBx=k3Zc3Eh*D~NApd2NjoUSWe1`NA{ zP{WwP9J-`fIrv6Nd7hv_m^a_qyw1g7%lgXBrpAcQlOoOYE?DM1Pp8vwwq?&8o)*G3 zLhDo)3hrd$d{U{Jk;I_Wm{Hv0%%nul+!$ZL;12XpxZ6ZFc2vOut1&bhj%N72=B9By z7m-;9xmP?p|G52rd!w}a2s5I2K5km2V*cX;n8ic;Z|H-;RlQz+8Dg>!%6|X*o|elc z#c@o@`jA)&wzjH4^_B1Yzp%d!s)2bOcr3+#Vv2BW@K?E=O4yK)vUB9>4g+ z7BIzPks95kl%#1I8HPcjP)GrCi^aFzJbrxPv#F_x4L7}i@?=0wYRnX~RAq`KWm(qq zA5Kor@Pp>Dz?x)!sYC({NibwZA{4eP9ZY@x!KqWaV$gFvYGxBcK;VJur7p>k#$YI9 zzKXxjNzZRSm})~*QJ@L*+B;=1UUR`z5RnFB*O}-6@Y%^TXZHOsV3?f}1A=}6=!k*o znl@B3nDtw?$Xi;XJm#&lC=ns?Sd3B!4j>$~jd6cny-NATMY0jr>2R3#Mx*4UQuIqA zp}F?fNHD-B!p0aoEQnzi> zK>&RrohA>-bqZkleWK#35?JA9m9d2wteF`eo$2hPBiQv*Nbd}$fJGNqR_NxvdsH+{ zTD)OaF3^Mgtl9=&sSmJx3th}aDjz|*j?9_ zm#H*2M+*Sg1-HD^(Lw!S%19>Z8@P2Ym)jy>72;enFqgH1{1dO)P1Uvln?`DX9hA z8+Ajd%!UDt%wwbHpdS|b_Gn^5eo?HbUWk?d9NKfRZ?W(za9ILCLJ+Hj3$ytBQ$${2 z`(`Uq#NljU16)M8JOJFEkL{+-?N^wI9UenQ6xs*U<28PH5!n5nk&h^XK1+@YTzKHM2c zrDrBWuqfPW!`Mw|7wTTMFWrAYyCD(f50YTVj@ZPf%%~k@-OP-Qjr}J5W>xKqdsrtX zbkf@DP!geUSz#9MN9sJ|Hn31`J}yuN2uF|u5FLB=C}!ZIS?Kn>0>g!>;iOQxLd%dO zC*e?UPcL<%OxU)K6coHMIy&k%1xz{B3mh{oN+Smi3=B~Jll|m?75sO4WMpJ!!Ti&2}ij{P7MzaPi(nGFw#2v1lbiSUg{LFA{1+h zL8wV;d!mifsk91b0R0$ur}2MXX%0PesP3$=@g1p})M7YJL~t8Gw#{J3+e1S`KkRtF zVpZ2&C#neQU`OUdhH(uMlL5f90P)C+|33l@0MdQ@DR5Cypa1{>07*qoM6N<$f;00? A=Kufz literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..44bfe5cc0d0dbae8b62c2f6663afccf661316cf5 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqC8I*$B>F!Z>}109Z(Q(xyVw~7$I@t)}<}a{v9tWS1I@S zsQ4)Ef#Kl;@5RwKg#!{fo44$rjF6*2UngB5> BP5l4> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-center.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-center.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9533f80f1abcce1abd8f7b499e676fa1c0ef67 GIT binary patch literal 893 zcmV-@1A_dCP)(0*Zq{ZUd`g)RJM%%Ge zYUBIf-riU+k5^X{2P4dnh)1o|mXvaH|L{-_t_ym-UV6M(Kw9g!O6wv|H-;WRER}Sc zU>Hd>^*r)@|K0wW+E^Q%H!?_fn-2We}rL(M;_BfX?7jCDY{n5=gW^z z*4BKZ85UEz#E{jEfUp%QPc1S-FZkBy)WMi&!oWY0XP#u2dEzy|h~=fFbTu;o%Ib!) znG6H+mIIYGGcLrT8H`er@_oJ~%7NB*BgTLiq8}NE0yah?c6!)E%2=@c<`nQcj99B} z&Jk=6Hu?UeshA0vS^?j~D0erPHi6nmF}VaA&&M{QSHDf;C{}wuWut zw2Xqa|H?BxxQBa&S@5D-V}O9Md_GSo!sqomjSCVZU{^R{M~L=Rni*nyV5D1I;}=Lm+VkVqEDGG(cwy`dxCJ{ zwfjmQU)E|h88MTvo8rhB8Eui>;>Zi*0!%suzlcaBMlsr*KJ=&hd3|%}G@uhe!&c0fMx@aERhWay8{>cf2A^88h!(fBs@oRqL$yWD?S5ZldWbK-~p9{~mct3Vfn Tmy6^?00000NkvXXu0mjf%6+bg literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d5d1b1ad99d0f235d58f144488a8bbe6d39c51 GIT binary patch literal 576 zcmV-G0>Axk7RCwBymCb4bF%*T9>ZagA1Xrc5 z1VQMwFko@v4{GhM4^XiCuKElvx+-*2DEI<>gDwm88GL}QTy;A$x#_tvnFc%K#KB$lu{JJ;=aOa zaUAbJ3*{x&C=Uk%UgwHIqX;nZ6om)seV7#8qU-P)4G3jLN@&s^P@qht9$0~)B!OMU zApH$5sD1HAR;q*U=oHe{X!tNTmoe4uES6r_M4@AVi=tQAOFhRZcb3Hq?Hg+#t8NI#hR;?QcL0UN6~F47aV+ z265pMb_{%ib*`PNIkS6TjYGl8AKE*1$E?|$=hk`a3zI~CO^292v8U=;YX)~gWHVn9 z=18JI-qCHa-VWKl4z|s$*=$C*HlHC^C{oID+uXL>?Ha(7``qe)tjqoE*6a0^6!I=; zpL3qwBhxQ}9ox_aKUuV|aL~t^&EHLF!ipLu8DWxzorJ%4r|#Xa00RK2pF3pdwpLsK O0000(0*Zq{ZUd`g)RJM%%Ge zYUBIf-riU+k5^X{2P4dnh)1o|mXvaH|L{-_t_ym-UV6M(Kw9g!O6wv|H-;WRER}Sc zU>Hd>^*r)@|K0wW+E^Q%H!?_fn-2We}rL(M;_BfX?7jCDY{n5=gW^z z*4BKZ85UEz#E{jEfUp%QPc1S-FZkBy)WMi&!oWY0XP#u2dEzy|h~=fFbTu;o%Ib!) znG6H+mIIYGGcLrT8H`er@_oJ~%7NB*BgTLiq8}NE0yah?c6!)E%2=@c<`nQcj99B} z&Jk=6Hu?UeshA0vS^?j~D0erPHi6nmF}VaA&&M{QSHDf;C{}wuWut zw2Xqa|H?BxxQBa&S@5D-V}O9Md_GSo!sqomjSCVZU{^R{M~L=Rni*nyV5D1I;}=Lm+VkVqEDGG(cwy`dxCJ{ zwfjmQU)E|h88MTvo8rhB8Eui>;>Zi*0!%suzlcaBMlsr*KJ=&hd3|%}G@uhe!&c0fMx@aERhWay8{>cf2A^88h!(fBs@oRqL$yWD?S5ZldWbK-~p9{~mct3Vfn Tmy6^?00000NkvXXu0mjf%6+bg literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1f2ca7e4ddb42f52b6a71e73c837ad649b3ec6 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq9{)n$B>F!Zzf;lbx`DBK4>xLoqf+Ng+1m+YfZ`;y{jJ- z^Eh8Re@`GYaY;vmN2R{&s!7VB%Vape99gS=!}DVBzWSO?{vbMax`OnPmI3i6`+BD3Yn{%u=l~V4)9>_Emsg%T=SO)_-!*r2Ixf91Rg<(h$ zTNF`(`vjb^3U#ipOS)k+;QeKYh11D|Y{wznvS>P;QsDc<&eFSJ5~2z32R;^!MkDHV zyEMe?zyX6%2L1!LTdgn1>%fD8X`0mObZ9sj&;<8!l2D#2k0to$<>d)f4}H(0F4TUt z+tly($qxdR<03Q^+*x7pQQvhis`@5GcpPT8XOd-GYHRKabqW65XdGiMyRJ(;z{A_yS)N(AwBZmL zP<)GnK;!Y4M#CX_aKZ;cZc$Y*_VWcVW|(u%Rkwi(_I&?wfczNb&^cF`g}WJL*z@ke zfdW}|@dQx;Sn&DH&utD<5qJWS&6|3};U`Ic1Pj1WO`$5nFrb**jkjo4twPEHLch=L z$06sHE(ANSI|zbcUo|=QJ6>pl?Xcr~!}jd+7BTo=uw_}F0KASekmn+MJa5UPS4TFK z%baf_lUWyK-Lz4ee|+Ej2*r0YZw4U>6-+7D>-7>;9aw4h8WW^x+Sc6Xuijd%c9O)& z2fo&HjWnUDxe&~wTCMU6@KD!vG7N)w<|x>ltJBq6WvfLu;nQ&6>M?H zR6c|H*C>vji%=+aHkHPTgSCG*l}hCd&n{p)dFZR*i)|HsR4$+6Wq*pxUD(6LXMY74 Y02|#z^}%Efr~m)}07*qoM6N<$f>7{TJ^%m! literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right-06.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right-06.png new file mode 100644 index 0000000000000000000000000000000000000000..93370e4c4ed58d0b3132b4166b59902180867ab6 GIT binary patch literal 1097 zcmV-P1h)H$P)q$gGRCwCNS4&S5Q4~JYPKy@Gv$bp> zKuEv@6B8qmg}=baAHbE-ody@8kq}v9aN~lFi9~;ZKZ6jAEN~@{A|fwaq%YcekLSBH z)075Cz)n5M>2w}<=DX*7=R5aGn;RQ8)!1y?7H(OVZJK6D*Y&ijD08=lhiA?kCw*C5 ztUVY9kps#FXBY+{dL|oY{lQ3JTvY&ls-HZTu3I96z6+4hK8uSyITNRU0cKKoitVO24jIiRn;r9;V9vS4dLzJ zutV;Vvi<#i`mwboK((~A(DlJV>h0~Nmey9DSyj^MpZOG|=N)fyw3 zBFfucQZQdond+s}RB1F-&(%2}< z`|I*D9dN0i1q89N+}?yvF2ESZa!n%R*&0_3OS=%pQ*n4lt|D*MSK#Vnjlt>1ns@EZ zeiqsYosFFB08vzt9@8=rt96df$ccTEOQ70=aDK?Loh5?C{Rh(TrftO{ z>vr`}8I1PB+`Tqc(EyF`Rlbmad)gQoIrOWPT`RJu+2?rAbneFguK)u8se{BrClvCu P00000NkvXXu0mjf%J~A7 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..93370e4c4ed58d0b3132b4166b59902180867ab6 GIT binary patch literal 1097 zcmV-P1h)H$P)q$gGRCwCNS4&S5Q4~JYPKy@Gv$bp> zKuEv@6B8qmg}=baAHbE-ody@8kq}v9aN~lFi9~;ZKZ6jAEN~@{A|fwaq%YcekLSBH z)075Cz)n5M>2w}<=DX*7=R5aGn;RQ8)!1y?7H(OVZJK6D*Y&ijD08=lhiA?kCw*C5 ztUVY9kps#FXBY+{dL|oY{lQ3JTvY&ls-HZTu3I96z6+4hK8uSyITNRU0cKKoitVO24jIiRn;r9;V9vS4dLzJ zutV;Vvi<#i`mwboK((~A(DlJV>h0~Nmey9DSyj^MpZOG|=N)fyw3 zBFfucQZQdond+s}RB1F-&(%2}< z`|I*D9dN0i1q89N+}?yvF2ESZa!n%R*&0_3OS=%pQ*n4lt|D*MSK#Vnjlt>1ns@EZ zeiqsYosFFB08vzt9@8=rt96df$ccTEOQ70=aDK?Loh5?C{Rh(TrftO{ z>vr`}8I1PB+`Tqc(EyF`Rlbmad)gQoIrOWPT`RJu+2?rAbneFguK)u8se{BrClvCu P00000NkvXXu0mjf%J~A7 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4b76849a9e63fe4649500973bae7fd328fe85e GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqI^#m$B>F!Z>}109Z(Q(xyVxV|8=CN!n9>Zy}PU@Sugn^ zP^kZ5Mq z>mylIJwI<%fAhTP(uIa4QQ9g~mpcSy_fCvsWMe2;A3i0)N5cSUHG`+CpUXO@geCx) Cd`kcT literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-center.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-center.png new file mode 100644 index 0000000000000000000000000000000000000000..41c1863f6242a8a8b42df4f399bd00cfdeb85e88 GIT binary patch literal 1103 zcmV-V1hD&wP)C8pqz+~T1<_T=B0{i2#L`vP)<9wL4{Exz zGqcWY-}l>@Wn4C4ZFha}nAu_GH=lj)``-JF6kJ}8QHCuRiwQSPbKfwG#b`7d&{TEw zqR%&R)N|6e>FJEaSVVCsoSHZq2M5GZ;c&R8qqFlNO7ug`GaFR!hxQr2Jq!7c;DF`Q>I6w{SSwR+7mD= zv|Kr&5f`%&mkO%QrR)0h2ZMtyp_v1yJeMXxGpr*411Me7+HkQOKVP2+46(3rE|`-q@fb^qA^`0%|EPrmC76`T^%&BU!F&5&6o>=yG*68I_gv3Q+t$ zp&P3y8psT1M^ThESxYlAY{AAxx`KtzDT;v6P_kQFTl5PZR>$?w+#I!)lu%cFJ+;); zk>vH#cqBqw_PaPLR;n0;vjg2U91Dh@m@F@+>sYK1Y2tLvBU1jQB?pon#3M7}gA6A`z8`Cmky?iFCoo5t(iPQ~>NM#MuC$ax~l(74#cX8edrv zB2TU+p&Nz~DN=ZN?jAcbw)x@juxK}`#tRS+#44k@{^0sER9-l#KqP1Lvx)~N#LMYg%m@tIN33%isp^7oM;8|8 z=lXi;QQ$aYP;!3}Fqi~WvYuw2Im%v!LbQSxd`SV~1hQdx6!Bh%VPF#(g<+fg$Ij6P zu+MoEaEcfP5t_orYwl#GHgC4jo6vR13dR$$pULLbc19yvEB1C25n9BhHv-1qb>$)& z_BT~DK8qNNUw#Wv0z%FeL^6mKgb{#DB|cS>AIQenrL7SL5gT%(3HAaY1BbqwGO3wV zk+3&V{2oWKJcZv+eqOd}JS)+NIlcre3&493kq@b!%l00a|LMF1F$#zyKm7j+FaQ#$ V1m(eL-<$vd002ovPDHLkV1hi<^;rM_ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c0817c82f14e2918eeb1470a92ac27d2cec11957 GIT binary patch literal 713 zcmV;)0yh1LP)~0ef2-K<- z7zC*d234*Mc>q5^Kq&*M@(d|br3@JS0(pa!hPX3n-I!oyC2OsJ?XR@j%{gO@BFmO` z7iNFwn{)5EcSq%UE{BeOuXlzy?JUb07)M#2SMn?qa%vy!Jv^L>QWvY$s*$FtEEWq{ zax9mEcY=k)*@b$pYuk?V1&e;>nH>OePcY zJWoc$q4>Tpd}lyL{0#28E*0BR6v^Q6k2zc` z7zh_KIcjK2Oe_DnyR$9Jy2R@C7@_vMT@5l{f?ClKTLxZ^RQOWHlwg=5#00000NkvXXu0mjfYHL4& literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-right.png new file mode 100644 index 0000000000000000000000000000000000000000..41c1863f6242a8a8b42df4f399bd00cfdeb85e88 GIT binary patch literal 1103 zcmV-V1hD&wP)C8pqz+~T1<_T=B0{i2#L`vP)<9wL4{Exz zGqcWY-}l>@Wn4C4ZFha}nAu_GH=lj)``-JF6kJ}8QHCuRiwQSPbKfwG#b`7d&{TEw zqR%&R)N|6e>FJEaSVVCsoSHZq2M5GZ;c&R8qqFlNO7ug`GaFR!hxQr2Jq!7c;DF`Q>I6w{SSwR+7mD= zv|Kr&5f`%&mkO%QrR)0h2ZMtyp_v1yJeMXxGpr*411Me7+HkQOKVP2+46(3rE|`-q@fb^qA^`0%|EPrmC76`T^%&BU!F&5&6o>=yG*68I_gv3Q+t$ zp&P3y8psT1M^ThESxYlAY{AAxx`KtzDT;v6P_kQFTl5PZR>$?w+#I!)lu%cFJ+;); zk>vH#cqBqw_PaPLR;n0;vjg2U91Dh@m@F@+>sYK1Y2tLvBU1jQB?pon#3M7}gA6A`z8`Cmky?iFCoo5t(iPQ~>NM#MuC$ax~l(74#cX8edrv zB2TU+p&Nz~DN=ZN?jAcbw)x@juxK}`#tRS+#44k@{^0sER9-l#KqP1Lvx)~N#LMYg%m@tIN33%isp^7oM;8|8 z=lXi;QQ$aYP;!3}Fqi~WvYuw2Im%v!LbQSxd`SV~1hQdx6!Bh%VPF#(g<+fg$Ij6P zu+MoEaEcfP5t_orYwl#GHgC4jo6vR13dR$$pULLbc19yvEB1C25n9BhHv-1qb>$)& z_BT~DK8qNNUw#Wv0z%FeL^6mKgb{#DB|cS>AIQenrL7SL5gT%(3HAaY1BbqwGO3wV zk+3&V{2oWKJcZv+eqOd}JS)+NIlcre3&493kq@b!%l00a|LMF1F$#zyKm7j+FaQ#$ V1m(eL-<$vd002ovPDHLkV1hi<^;rM_ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..53cebb513240c2c39f2bcfa15e512fd8fcdca720 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqC!s>$B>F!Z?5g;JYc}%8mO7^pOIIsH+WasA3?vlta*xS zSo!#CC)~5-4hqX|T{1;T#dfK~q}|S!#8&v2rQD3to@4U7WywL$z0N`M&69Tc%=j|T zCtc~^?C!V1>aKg9-jFX0%x{^os_k`fwrFVdQ&MBb@ E0M%AWpa1{> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndCopy.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..660ca4fb10fc1a0a26bd6235a45395031d7e634e GIT binary patch literal 814 zcmV+}1JV46P)P}>M7A(51bsWI_m(WQiniHU*6AJCmEV`AdMUtm&QxDr?p zR^4G@6A_F_jnPtDzN`&G%UC{2A<*e`X5RC4N}A$|JDK-p^3FZ?o_pWr@V~Xf2OB~z zuhZ}Bbh;=d*py{?YhgQzJ%rgCYlL$R-y*JJ`oZJ-fxAPuku9%dqnJZkD}!SwE4AX+ z=im4i`4K@J4;fx-BoHx(`0KZ?`cirdscZ@rQb8fL2hGr7@d!{=h8HN#iyip#=IbJf z5pR`*H{Ds}s`FfN7Au=8AcUZ~)Pkkwt4P1dz^1lBH#C%v6vVfGqU({T4+EI4y7I8Y zHxdj4mRRK7g8~d=~mgU)(J|wV*Xc&RigsR)F>BOZQ2pCbPhWFIW=o)E-n>e=k2g+5~L=nPGH-& z!BKEP;CZYctV3-lP}w7O3x00!Nk6?jd7@NzzGIQl``B; zH%@Ck7kUB8T4(_*J9~NAEp)p+uFc}v{8KoZoKTtGZhH?#dPhu$spJ%r+ewJLh;$*1 zx%4N1DYOvCmRw>ddSg@w@`S@=a?&i+VfhI6x`yfmaqo7kzE+QVn#AesBLFUK+9i5U4+rmXF2h?Z6nK3qOI&i@1$0P;;ggN~w;y#N3J07*qoM6N<$f)S>15&!@I literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndMove.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndMove.png new file mode 100644 index 0000000000000000000000000000000000000000..74af29c08938f718f4238fb5c4f09f6750ae56dc GIT binary patch literal 785 zcmV+s1Md8ZP)7j^8B~!ytm5eA`Qiz4Q=^ARmoN zP$MF=^-@`wf2T=GrHG1(HOKDe{@%OWckgvNtB20v+;cgc-|su;eBU9mEF&xXtVD56 zz7n2BXLYmXU|pFKSlF0b8z27ePcFij`X-McM@W`{5W?@jik{n-Z@JyB8(6|JRuW4P zWf4X$A0?6rAKwkiU432sp=W4gI7!8+A0B*Z8wot^cx@Xe69|MR!7)|97J~&x47GT( zIRK+RAGTBtIy>5DR-Z@?g@hE{1f&i0yV@_fIm#iGNy2KZ!9Cl3$V}a%=b_W-)G8%O zQva*PDm?Cd&==~JFVU?*daAAUiaVZ4AQ;<3Ie$n6XGMrd5RWHRi^QX8!Jr zuOufaHOn5`nG*~gL=h>5&+#aCMvNc~A)#4#+efwp=?#!WOQu`bYuemE0IK$Sp*4&<$~+M^#ZZf?C>@s;2lGK!SOxGQ^GiMi%?n+*nxy+K|x$2 z#Ex$J-MZ^DE3=>r6qDZ39TFv(-l2cBAzNjYlzWJ7ieK=BN5TNR>Wn3W25-}DI|{B! z1E_Xb^GYuH0f=kxQQ3sy<$=|gYBJp=2_-|jy6^!TjiXkXZIjt@eTO^IdiXN^>cTuX(K-S9|!A|4M=9mq! zlPB0RiE{eSZ3JxWyq|EQ7#`MpGmJ2+CC9LidH4~84-NQ?x7vUe`7OWzEFUyg!Q)dC P00000NkvXXu0mjf^aNqO literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoCopy.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..87f3aa0d544d937aca0d0971ca6473536067f8d2 GIT binary patch literal 756 zcmVW|B!}-t*2l8Dntah0FUq_nvp}c??~41&Bw0nRA>c2K@er zq`h6kD6R^TE&z)wz>CiNtYfat0L#~-gUPY@1X|nMsFzBxT21GYR8@Q^f5THNqkaEgmuy!ASo|^uZ?Qzs7~59U5$>MI_UsDf86kB zONTnk-iC}(ik8RI4YC|%JgG|4VIkX3aK{FDnKIvkm}+!=CeLn?JkNm790N-b*~ss# mtVmxu{T^cRe%E*YCBOj0;UPPkN^gAt0000q8Rp>%+=~@^5fVvbB9~hxA zLP1-LA_(?fG=kllgs|? zK>u!iP3O9BgCPyyzbzErSf!DVz`zwDo})&XAAm8YUj|FJCp%K{bA7<{TkzQr5Zr+h zs)vX~F*o#3Je_%&>4)ehoKwNc&sIP`4`rg~!leXz@(9b*Q-G>MI1U0^V$fR?C=U-q z3$BLKoIqwMJJ|;(DTAop)IujXfI=Xl^7+gxit=} zTm}o)!I+w?%@J$@SwF3ca&K>%7NQzs+X$=eQuHqK{R|KcqUp=$6=2FNb`Yytk$HJn zAA-wmv@o?xTdV1jrG>9(`BB0@rCQqGM@lYtIAjSlAq<66HEf$G-nxVT7272YCDeus zt;p?phpCb5$!;7$8iC#uD=wQiZljiia0M(Byc zgQ)b8&H|%Kp4xMcbI3~jLHy@1&ldI6@K$-ZKsrZQg$!el9p@hN9DWd<%fY-}rSGdB zl#^1Y+@)o#V&4O-ItWZ00(J)I?0T1753pfl7{$dRG!OiMCgma^TiMp+J86(ivL`Jd z-3A1Ww(gao#Mu6X>j?7fA+XV4e~-LIDOk gfM<&}3H>F&0BIT?88b(KE&u=k07*qoM6N<$f*0#WY5)KL literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/images.css b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/images.css new file mode 100644 index 00000000..cd317aa3 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/images.css @@ -0,0 +1,103 @@ + +/* dijit.form.Button */ +.noir .dijitButton { background-image:url('buttonEnabled-left.png'); } +.noir .dijitButton .dijitRight { background-image:url('buttonEnabled-right.png'); } +.noir .dijitButton .dijitStretch { background-image:url('buttonEnabled-stretch.png'); } + +.noir .dijitButtonHover { background-image:url('buttonHover-left.png'); } +.noir .dijitButtonHover .dijitRight { background-image:url('buttonHover-right.png'); } +.noir .dijitButtonHover .dijitStretch { background-image:url('buttonHover-stretch.png'); } + +.noir .dijitButtonActive { background-image:url('buttonActive-left.png'); } +.noir .dijitButtonActive .dijitRight { background-image:url('buttonActive-right.png'); } +.noir .dijitButtonActive .dijitStretch { background-image:url('buttonActive-stretch.png'); } + +.noir .dijitButtonDisabled { background-image:url('buttonDisabled-left.png'); } +.noir .dijitButtonDisabled .dijitRight { background-image:url('buttonDisabled-right.png'); } +.noir .dijitButtonDisabled .dijitStretch { background-image:url('buttonDisabled-stretch.png'); } + + + +/* dijit.form.ComboButton */ +.noir .dijitComboButton { background-image:url('comboButtonEnabled-left.png'); } +.noir .dijitComboButton .dijitRight { background-image:url('comboButtonEnabled-right.png'); } +.noir .dijitComboButton .dijitStretch { background-image:url('comboButtonEnabled-stretch.png'); } + +.noir .dijitComboButtonHover { background-image:url('comboButtonBtnHover-left.png'); } +.noir .dijitComboButtonHover .dijitRight { background-image:url('comboButtonBtnHover-right.png'); } +.noir .dijitComboButtonHover .dijitStretch { background-image:url('comboButtonBtnHover-stretch.png'); } + +.noir .dijitComboButtonActive { background-image:url('comboButtonBtnActive-left.png'); } +.noir .dijitComboButtonActive .dijitRight { background-image:url('comboButtonBtnActive-right.png'); } +.noir .dijitComboButtonActive .dijitStretch { background-image:url('comboButtonBtnActive-stretch.png'); } + + +.noir .dijitComboButtonDownArrowHover { background-image:url('comboButtonArrowHover-left.png'); } +.noir .dijitComboButtonDownArrowHover .dijitRight { background-image:url('comboButtonArrowHover-right.png'); } +.noir .dijitComboButtonDownArrowHover .dijitStretch { background-image:url('comboButtonArrowHover-stretch.png'); } + +.noir .dijitComboButtonDownArrowActive { background-image:url('comboButtonArrowActive-left.png'); } +.noir .dijitComboButtonDownArrowActive .dijitRight { background-image:url('comboButtonArrowActive-right.png'); } +.noir .dijitComboButtonDownArrowActive .dijitStretch{ background-image:url('comboButtonArrowActive-stretch.png'); } + +.noir .dijitComboButtonDisabled { background-image:url('comboButtonDisabled-left.png') !important; } +.noir .dijitComboButtonDisabled .dijitRight { background-image:url('comboButtonDisabled-right.png') !important; } +.noir .dijitComboButtonDisabled .dijitStretch { background-image:url('comboButtonDisabled-stretch.png') !important; } + + +/* dijit.form.DropDownButton */ +.noir .dijitDropDownButton { background-image:url('ddButtonEnabled-left.png'); } +.noir .dijitDropDownButton .dijitRight { background-image:url('ddButtonEnabled-right.png'); } +.noir .dijitDropDownButton .dijitStretch { background-image:url('ddButtonEnabled-stretch.png'); } + +.noir .dijitDropDownButtonHover { background-image:url('ddButtonHover-left.png'); } +.noir .dijitDropDownButtonHover .dijitRight { background-image:url('ddButtonHover-right.png'); } +.noir .dijitDropDownButtonHover .dijitStretch { background-image:url('ddButtonHover-stretch.png'); } + +.noir .dijitDropDownButtonActive { background-image:url('ddButtonActive-left.png'); } +.noir .dijitDropDownButtonActive .dijitRight { background-image:url('ddButtonActive-right.png'); } +.noir .dijitDropDownButtonActive .dijitStretch { background-image:url('ddButtonActive-stretch.png'); } + +.noir .dijitDropDownButtonDisabled { background-image:url('ddButtonDisabled-left.png'); } +.noir .dijitDropDownButtonDisabled .dijitRight { background-image:url('ddButtonDisabled-right.png'); } +.noir .dijitDropDownButtonDisabled .dijitStretch { background-image:url('ddButtonDisabled-stretch.png'); } + + + +/* dijit.form.ComboBox */ + +.noir .dijitComboBox { background-image:url('selectEnabled-left.png'); } +.noir .dijitComboBox .dijitRight { background-image:url('selectEnabled-right.png'); } +.noir .dijitComboBox .dijitStretch { background-image:url('selectEnabled-stretch.png'); } + +.noir .dijitComboBoxHover { background-image:url('selectHover-left.png'); } +.noir .dijitComboBoxHover .dijitRight { background-image:url('selectHover-right.png'); } +.noir .dijitComboBoxHover .dijitStretch { background-image:url('selectHover-stretch.png'); } + +.noir .dijitComboBoxActive { background-image:url('selectActive-left.png'); } +.noir .dijitComboBoxActive .dijitRight { background-image:url('selectActive-right.png'); } +.noir .dijitComboBoxActive .dijitStretch { background-image:url('selectActive-stretch.png'); } + +.noir .dijitComboBoxDisabled { background-image:url('selectDisabled-left.png'); } +.noir .dijitComboBoxDisabled .dijitRight { background-image:url('selectDisabled-right.png'); } +.noir .dijitComboBoxDisabled .dijitStretch { background-image:url('selectDisabled-stretch.png'); } + + + +/* dijit.form.Spinner */ + +.noir .dijitSpinner .dijitLeft { background-image:url('spinnerEnabled-left.png') } +.noir .dijitSpinner .dijitUpArrowButton { background-image:url('spinnerEnabled-top.png'); } +.noir .dijitSpinner .dijitDownArrowButton { background-image:url('spinnerEnabled-bottom.png'); } +.noir .dijitSpinner .dijitStretch { background-image:url('spinnerEnabled-stretch.png'); } + +.noir .dijitSpinnerUpArrowHover .dijitUpArrowButton { background-image:url('spinnerHover-top.png'); } +.noir .dijitSpinnerDownArrowHover .dijitDownArrowButton { background-image:url('spinnerHover-bottom.png'); } + +.noir .dijitSpinnerUpArrowActive .dijitUpArrowButton { background-image:url('spinnerActive-top.png'); } +.noir .dijitSpinnerDownArrowActive .dijitDownArrowButton{ background-image:url('spinnerActive-bottom.png'); } + +.noir .dijitSpinnerDisabled .dijitLeft { background-image:url('spinnerDisabled-left.png'); } +.noir .dijitSpinnerDisabled .dijitUpArrowButton { background-image:url('spinnerDisabled-top.png'); } +.noir .dijitSpinnerDisabled .dijitDownArrowButton { background-image:url('spinnerDisabled-bottom.png'); } +.noir .dijitSpinnerDisabled .dijitStretch { background-image:url('spinnerDisabled-stretch.png'); } diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a1daf35f1dae137b691352ecbde32a43b4c6996e GIT binary patch literal 624 zcmV-$0+0QPP)?XA- zsgi<{s#&BoRiI_T3W;qcHuNcY0wmTf`T{%&?7J)Kl4aWmpqof!gEF3NCrLtaqd}D@qA&;+AXGmy z^mucVhQlFkwcFGHD5az@3_Tbej7B5u-#eWSy*xUi!C*k^P^?rc6hJK~6rpw;$1&~n z`}Aac+ou&m(B;(?E!7xB(W_RgMOm8CTD3~f82WU2O5ZLnmcS4xcDeAiT8#qK^W)~` z9^^qOL>fg^5`e6+G@VXq)e51~6ykSh+Gxu2d^K1M)>uoq);?B(d@>f0VMr;`Wr_^h zLJd&<5Xg{%+6yu4Ojv2 zT|YD)R{fizbn{bTh`;Fafjjq0YgS}9_xnmk80M$3rpDb$DNx1&Y&M%zxKv`BpvEn3 zB7_Abyi&!N-s|-!%d#cAUK?%pc+esg-b{xt4ha^aIEn9EDDmLjI{Vgtv>3d90OKi? zGMP*k&A@SA`3Kv8PzS3z>o5tN7#b@g;9~cm?SDb4<8HT0$$H{n;Mv~0QiK%mH`0x> z>`~Tlvy+AaRCHH`|nOpQrs3F0lvmq#_+fhfD7j#{r)t3lJUE|}%=1^&Ko==xGRoxVhwrBVq82M5^M-NpX?{)>iT%$AD9o0)8O%Io!7F1H(Pe8=PQ zFaivXgWf~DG))t_Vc?)pKz?Tj+uPeH6bhg6USxM~?|Q4x2c;Bzd`JDBNE{sy@cYr* z+xx$Pxapyfd2aD~;SU7R*4Ac&U{pRN$jss4;gm#3p3?;QzhD07#tmF^C@uAXgia^CQIsoVxx*hr0?HH$E8a(kn{6ceeeJ=*8W9;d!3|4cQ@`14x}lRiJh2JzS6d3TZYM<{LWGDcEY$2F2KVMnzy0-3yrhKKBr5^~`t=fk)RsasoHP-fY5)TlHX z`RE7)1L*GRMl2S?X*Q>DBrNy7LZ;HOo%Le5&+SzsQouR z|GZQzeUi)Ou)MO2wbeD`S-NWc{J3KP>fZZU=K;F!NhTMrr!U}62%Io|`DEXBd3j$xO>SbEo3pF% zv)W+|3D(64B0Wuk23#3@5O#^6acMkbM4qe&Y3e#wJEf kCi^}T68f@{Q{e!^^mRO2w!Tlc1KPyk>FVdQ&MBb@0B8P3xBvhE literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..6d488d0f40325552a5a310f34590e51c5a96c5a6 GIT binary patch literal 507 zcmVJNRCwBalg~=SKoG{0HZ24KLVFhq zo(kT)c=c4B>A4Dcy%r7_?lT>h!3~GdP(!BQ;TDz-k7n^IoSJfTn3$BQg*hp<7%p z7Uw#z0M&JE1`yxUs{rEhEJyOt@n7jxZ4QTg!vV-4NA`*Vr4(Js&z^T7*+-7^ z3xy?fbaS;-jss4#CpB<-euSlL^9(sAs}}y&Q&al=;3HKd^q2Rt>uIoIQDlSR&*C}p3H?MjP9&i=ppJxDC^Sn{D x_r6M==bah2-EKd0x={E|=Vx^gobmV-U;u+`7$H7{-dg|w002ovPDHLkV1jAp;pG4T literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-right.png new file mode 100644 index 0000000000000000000000000000000000000000..285e48a29d3e2c82fe3a1863b1793941a4899d03 GIT binary patch literal 970 zcmV;*12z1KP)D?q`lZE{O zo`irN1;Kw1?}BGh@Tiv@{0*K2uR*VZC$9m~)BXTK2;>x4Nc56*mu$?=bX%{cdcHCw zEOt8d)?}u)>h-Hv)wAaD?yje}W6ll_$@?Sc+mRUypKk@y>V*B^vB655h z@O+^2DbJ%MNnWJJeD@sOwE-;R1CU|l!@%BU`;CLY^Qca&F78v>+9>(@Au>D0RqIea~wbY!1F#=MQ%Mxqc(Cz<*kiN0;vuRz&LV=+exi` zk|yaV>qCBc_IT(0UXR+KV(0)-41aLuDany)^NMd*07NWm+qD`+2kIL-$au1S#Cp3| z0`NttNbu+kgmQ#`Sgrt80z|*tNP$$NAa z5XB$gdss1`yLbAqYgiU1O4TdKaGh%@hwmGdGGDK)tw}|p-3OmWLF5dQuXk+7cj;Ii zbqyRUC{wJ3130bscXcY)!{JcYPN!4K0jkBOD>iYb!GOPk0gT0BK^q$zLMZ|UAh~u_ z?09>7n+Agcot>T0MeVFHx={gv?;10-b!y5TT>}8m&d<+<-T)kf8w>TggtxY~BskV! z_e~v|swp9L?8{QE3P>y9rYgvE4f+O{2*JV3=H@2hfctfNdPU44!f-gjhcVMi1DgBm zG|*rI9g{5rLY!a(01#j@naJ+C+A--_qfAd$)?0q?L4fKvXZuVom1T%liUtA||1W@2@hz(Y$Lskxh~3Wq z%;Ntb@P#${N4~7IkNVr7tOV=HN2NJ{kpCriS>Es2ylx!-0MPhi{Cr~^@%2l#U)vp5 sQg91DMHW1NYT$h|o32I|=05=j0JFKG^kKrxEC2ui07*qoM6N<$f*NJV&;S4c literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..feb2e105bef1e8fc065754a664e49436e28405c2 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqD)U0$B>F!Z!TZtZBXE8c_>zss(+(iSWz&UF@Ej?|C|?0 z@p{)UPui?derK=qrB=^0HqT-nkE#tmTTMNpii0jiMc=wqzEjRPv3kLyshebR%%U3Dbhe`47KEt*--cf z%!;C*{eJI|rYZ4DC*u9x-Ib7X$qKvOj#jIcBNlm1#@ds0sI^|gl9K0VN7`<;q@ZjY zr4tc1KkzIuTSgIOSw&@mwIuf;h$HON{LI=zR2l{?}O%IQc)Ga8g5v!zsQ)d}R z@f#ACRH_){MNWC15!5NoQaV>smt~&`1%RHn>O8T;L$|qrL2nS`ydspC%*nYoUPTZb z8nRc>G=!G)-x)1~iOuSnH7z|#H!XY{Q!i<+Z zE6*1M0rh%4n$PDn9*=5F}m`CzHtqtZ&iJx<~YlBG(9o4gXqM`w^G#fuKwL aC%^zyzw>3sO8EN#0000ZYd634dnwH)fr@v$TVAV9$f58?BD9Pc}h^A!Nq(&_XgH8Aiyrr3@nhG7t> z2BFs0)+Dik2d6O8N{LFRC54GGZ(G)HmT5i(D^FaTFB!#Gc%)UCy=8MSf30v0Hy$S0MT2zHGePz zQF%Q$IFK^v=EC#y^HM@;xG=%Ap_A3sRqgqAY60_)X`v37W*0!L#+6-gakStF>V-^D zoD^OGIp@7AD=YF&lMB_)=rzL@0hn~tUMvIl73;t$+`ycuWEPe|{bSaGd2U*Mawq4X7QZRTr!O ztQ{SpehKMs!!f7<{Q5k;4%i=Finq76C2n;ictbPtG`;8N9W7FHNbU#zP#3pSTB%8O z!;t!@1k?M?R#Un`^gqzX25h4@B!h#4GKF$WD{=dLou(7_ot9*=IypHZ%T=7Z3-`Ec z5oMDX5da$p?R9#3di~(T!b1u?*V9qg8+Cr>uJ~apopQ68tf&GMtSc1gXXM-?_7{-r zuwaC$r|0=>rU2)jf`R2it^n&|$6Wci;wRVi10U;cH(q-2uBoYK;NavZoPWs3nd(e7 zBPtX`G7AT9;`u?lwNUR_cEgnXh#lg0+@k05x!x|>KnYEZf$+bfesJHYVSa=8D;H;GmodKbq40000< KMNUMnLSTY0x=XMC literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8c9e42616409729d24b0e4ea601b63ea124a3f GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqIgdi$B>F!Z?0|RJ)pqj5;);fxRdwr*B z7G3?z8do{}eU$K$*K>tcrUp3#y_Qv(TkLR2LfP<`MDm;On^rYlyL-lAQpbY08 m?QUMORotVCqvs2!0RzJ)nfz7fFU$a1#o+1c=d#Wzp$P!1v_z}` literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c8776286663864a6347a1c452a893b94ae64e709 GIT binary patch literal 579 zcmV-J0=)f+P)v3F%*W+To&z0+Le?d z32zui}{@9h#(9p1)NK%6y4{+pk>>3C&u90Y)0epSb;n#XEhDxS=LEm|FK-s zbULLOU=49vI!70IoMsqY0$lq378(wRv_Ys)l=7HugVl;6Kx}o}?b2hvPrJ>=>Z%bE zUmNQzI! z&lF*{=EVRIMV>}$wGj$?GbmWGP!$ZCaug9(8><{e%+|5lTIH$j|65E_l*w4fs3^2n zHr8>o2(c}V5sWr%Q}n;UFbsWGuBti%xSZr$qj`WNW?{u6*EgZdyj zjzjHsn;MOV>ML-uSlk1+(1*#gEUMLNR4SDSZsfYI8nZmlYXN-FN0SF}e1GMrZVD*e z!M>vgcyn}FZ zioy~Ve|2YPW_Nb;eb*V;tkV>6JaC!udgq?+e&;*qo;8-=yeUcuRxB3vC=?3+x~{vJ z%jHtGWesOCnbDn{9pTv9+Y{SyB%jOawKTQ0wI!k10f-uG-B&0U``mo~4&GBL8Xb(q zVt--}{r3Q~0aorC z07VdLZGHXlf}=h*6`v>TbZ7g%*KW!5YiT~d9J2L znp<1tueLVL0*8Y=asYt3(0>E~Q-bxn+!ANc%IElSA2ofAALG4xdt2Ov1#x?N^qS4( zW!X-pq$`n-{`z{k*3u#_()tmAINqK*3}Bcno2J>Tf-V(1fC1X_nKN=7o1HgJ4Zud8 z^DcRdV&h;wJv%GCwY72!Vm{Z=Ax1JOBPd2&+|MgK3GTtv)&4FDB)G7x|hPzOF{57TK` z!NxDjoR@;|0kF)YPt*Wlqrs*4m;h*F0iBia)PL6*2KosAOiW^K_7DIY26ivZ(^I(( zy>1EB&p+VLx^?S7#iG?g!96Ic1hTridSYkge>3*f7Ecc*7BTgNJ);^J7|@GqQ9|2r zVa!8FVf2ZmKy)j1Q2Pmln}3J@yX--fCk9Om>-xmRL}-r7oqGp+fHBFwgCRH21r@`- z`~6=%bV%nE9zy{8ji;yM1a3?|)k(XbpcDH|2lp-!^e-6qsIfTi4$`k%K|cgxotn=w z4W%%C!1#mCtE;Q^4;BI^E9w;bKb~mLb3Dvq!$~@2+B03?E`FkorbjQ{`u M07*qoM6N<$f=5m|u>b%7 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..ae1fb1380a19c05e713986e8dcdef298c379c1ed GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq9{)n$B>F!Z>}10F&J{VTx9tsQKj(yKIzopr0K79l(*OVf literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-bottom.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..b86242d9faa057d4e095fb4efb8b46a4dd416474 GIT binary patch literal 1147 zcmV->1cdvEP)6-H zcf0XnBm$ka_Y;}zaIct|pzRKa@f1)82M5pI$Vi`v`^>t>_s+0pXvJ&S@WJ6B-fK1u zAYICLOqLEQUC(aE;p4}+K>(jI`G$w6sn=OIcDkRLP1?PNBgv%W}M|@+q&H@)}4Z_-?tv>JWG}C5VMl5Fss;0El*ER z4K@Ubb^$~>=vB+pAF_@Xxh}xHA8{TeSd_wog>8Aj^*!5!NkSq{|zQ>oJytO=P*j$ylLFX zqVwCB>>WA_e$c4bJLyd3`;TwmzDF=9bM)u-_KaF&$DqR&ms)%wzyPm%>gJ_`?l%Ac N002ovPDHLkV1iuuAO-*c literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-top.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-top.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8aa68a263c7b13390c1d11c5637b659498b3d9 GIT binary patch literal 1090 zcmV-I1ikx-P)6^R3Ce?brM7dRj;2ysJ5Tu{$Q1S(O90u7~7(|{BS zOG%CDkc8$tj_qCVuKUc!Mlo4hDs`mMuI2ZgdFGjCW)lGo4N&8jT_p3i+-U7Z(EqwLln#;a`&He=^>8 z97n5GD)F($kH5*J(`WPf{H5ZH7w0|C^W%4Pbog<7AcaC9FitX=L^6>;A1mn1=aJz1 zyX9~A?z%2&wHh`yHn6g~igLNEO-@dp%Vo2tbfpI8U%j$4T}O&{!r?H~OsNzYFdmB` zl}ce(PY-groDb}utS~-~{=y=6kV5s4to7Kk3=@i>;3mr<=&cj>zR zyi%zQ2xEMQD$UHiz8GP@x_0jL-<^8huc+PxVOv%ph}mKhKM+Jh(@=Ww02wCj86Ms) zUM5SBWsUD^Yz5=?yN+|tvaE}As4G{mwq5w_*fD%^^eAirvV{>VfRW1jI&NLR4uh5N zCe3^33-|7!!9?l7!FKI5U6CPSrpi06=UrG`Tf0oQEcIsa-zO&U;gKV#6NuXaA&6DD z?VLxDqc?8Apdg34y6^#+Oc1~n!A;-23y-~zXLA8!_P~Kfgn(?jt~+-9n(Me{)Yg8= zn09w}Z?=R$T5O2=sr0shzudl!+UzVorI^3izaJ`-fk(h5TTmm&KSxL5oHzlavvb>6 zH=0jP3o$WHc@6JOTXYePj8Y4Pv_@J~BN%;)MvBj#;U#^9EPUSE3nQC_Eqi8R0VV$pE+E_{BO+9} z=n#B6OYA{>-+Pc#e%nlC9{M^V~Z*Cfvgv@)wupk8GdQEJjQip&p>g zir2J36|@;8u^g18e1p90QD-}wD2@8Dm~$#9r4 z)8Ad1uIVc1V?P)Q zk#p+=2#|RRiaVfo0?Y{z1@m6SyyS{V)*%o!gbf@EkJzc$N=D{*JXU(HHn49tn`XD$8Atxu z9yUQN^8Y)&@X%i!F)FJBVEg@^ouRB63|bRWV36T(XvX8QIUEi=08ZLmR*epPQWE#E z2B`zkz}y~a+>u5blI@n?D-hTy7~G@mqtVC=1_QR;zr4`5t{4UbrRe})5Uau8ph^Vfo{1X^X^>Hq z`q`k8I{}nCR}wYcBaqYS#MyQ!Aih-)oleJeyIp?&^!QkS1PGm)(6{#o0`irC0KEbM zvCdR_&Ctoz+}a;U3TCM6XahKdWe6aU<#Jh&ToOP&%geT;c!#002ovPDHLkV1lm#T224} literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e3864aa74150d57f5db809179a1bf5cdf469c2a2 GIT binary patch literal 504 zcmVPFs@&rmAfT(#w${-_Q`*xW*-$sXXVWsuix3jae>$_Z4GumdexyrNb z1+RD5xyV!ti_uCCTCZ=gykUFJponA+u5ck3?tutyvCIkRx~_NUJdlaxEgx2^d#p=> z+P3vhAiuR|=}RN)nOS6Lo5lmhO2$BJ-g>qG@+FxF*4RpjzNGLr=web`*B+=bP@J4O zY`P90hh|&{_BMc`@rby}A?So`J)>_!^{8~g(hg-EXUK8jduXKxP+I`#U@QlqMl3d# zB%|-tSP2Z{IRYA!|5dS{(&(&o{8t8D`+$Kg;Rq-}qgclTr5KIL&Yn#nIY){0g~pN^ z&5bRkaU_ZHq>QJ>sc6yb3>uSNtF$;Zh20PNr|WO%o0zt^>#C{_QrPtlALntmTxYXc zHXe`vH1i%e!*?>#;{9SenbtS~Pu7Ut0N$Af7q0o~J!f#SSbQRTndf>6<`3KOcf;bYuyh30000F!Z!TZtZBXE8c_>zss(+(iSWz&UF@Ej?|C|?0 z@p{)UPui?derK=qrB=^0HqT-nkE#tmTTMNpii0jiMc=wqzEjRPv3k9N7G2@scn z7^DRW5|ZT#h!YSHZUEUHV96mR;TmLY#zBlN*}H4cm-lMB#x>rV5r~#b{h8{jSFfsi z{F~F$#tjVbeP`b^gQ~p)+9fWn>$?6@mgT3SC|psN4tpAF^?qJny0G8v1`Q=i(gD%j zF8&2efINbH#QihaJ4?O)Ok4Glop3V(B&4a#ywpT-3g|C~zonLQzuyW+Vp_ z%AztS4DI)>jBRSAGBeW%oqM=;F6pw}kcHqTlSvnd1q5lLkO>9B=s~lr^{hJ57tw&Q z=642N7WsQgOru9jzA!Q#l=O$<8iDdlNcKt!_Ll*K6hOi;_9#`XaO$9U)XjBmQ_Ka zkcTmBXuI83kanxp2kAW#NWkl^#BDd5Fv}*gxt#k42p4U6AaxnY*6a1)N`I=x%`s-J zTE+GCHHxK@{iq_%Mnipb90xt=*=!b7ncVGm(Xnj}7MY#J#>R#Q_gnhx43$a+!O2O? z%*yA-`;S zPnBttB_IOT5=A1Sq;2eqmuyp0QwqVVpoa`>%i^4DGZ%({6bc2szS!ErtW*yZG%Qs@ zYg4HdS}cFBny4(})x|zS_U@H_Cl1(rZ%_%^!CoqrkjZ3z%gD0j1i238$Y9Ie-f9BB z-rIvAHZcyBVEMv3wl(2JH6~_-dBJnZb-&1~PZU5w(&F{71IIte{O*hZVY|G#Qaj$r zC*tt%5H~kB59ZT4mTQCO5+Q(7dH$C96$}RNK{#mC=~u7SHHh7{`(BS~M@QfEyK(yS z)U!gWt>@@`=EZ=uKP1*3RSbnfFpT?p2}p9eqd+*&Kg@dnc*MKjH))89U3vFjt{(_7 zEtN(!xX!th{-cWMY}twX{~tUqZb__<9)wmW^TN+fKlU#H1^}|wTnGyo($fF{002ov JPDHLkV1gp$vxooy literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..96d72fee72239572b5b95afc8d57f25e7c1cdafa GIT binary patch literal 575 zcmV-F0>J%=P)ttJ=gjs z*SadDq{(-Jlmk{;8^!SD`MKx&{$YyFuhEDGgMk5gl43Ors-ig0VgEgy(r`GW z5nu~(S~kZJd7KpJoC2Ii(Gu$S`?Nr)RMh%_ZR6RD1R%D$y1u4|$46RkK2}!|NPLFi z37@dugbawm9k!D~7~2_?w>1U>2_?4W8glJi;8M*LI?uO*tj1v`0M1yt{3y)oQDw5Jk}kfISB7K?;I^ zy4@}{8jY3WWHPx2aAXgY=Xum@HmOpnP#A`U6S}wnI-O1r;H^EH4BEl7!#;?Wj5Ar*M;vE#L=H{^X%^K|4&U(GxhUz6I9OLi4w;}l>zyPDhWT^ N002ovPDHLkV1m~Q2KxX2 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..4ede92668e0811e04bd5d2cd7fc8f42dae26d5ab GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq9{)n$B>F!Z>||~F&J{VTx1dR_J8!3UwA_9q)WG)TIM7z zk9ZdQAldZX^;!oTK}M~$TOF2eHeYe&?t)8p=>md+7oRU%)pYId83$EC#;G#j4u^@Z hm@>0|_e(AV2Gf-?y^Wpv`+&AEc)I$ztaD0e0sti$K_CDC literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-top.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-top.png new file mode 100644 index 0000000000000000000000000000000000000000..f5a1aa124e068a6317a4c28313830c463ed357fa GIT binary patch literal 991 zcmV<510ei~P)Yns?@zXP%kW_I7tYx?*XXMp`67o(B_bxn8rpz|M7Ds#dFxZQEx?rSh&^ zE-#&(oe}R+sYIq_5k89T%cUh!$H&K4I#o&u7&eB}-+-=1;{$>V*Ymoojqmr%4O30Dz9otTF@9XjIOjOm_ih zQ|bDs*o8nsYML!OsG$WAyuE;t%j*YN{j$DJcc!Q5_UPyz-y;AN1sDd#C4n|>c}jiK zb$yl@7a;jUp>`nF(n3Am-L+>v#N}`RmI3qq<@NLEh(52aQ40cP4-P1qOj2K8UxQ6G z@WJKca#Xq0j`N_kwe>09y$_jbNb&L996g+!tpVe57=|H?xPe&1RjE|y!^#RfrLN9S z>gwteO{Is18WIY1!`~u77c$$pHxh|Na&dXtR+lr}*xaQ1Gc&b1GY~#xahd8EVRk;Q zu1bJmXoG{d062Hy9`wRNJHXE6aUei&FAZQ>t?>UEkFQj{5ogrf+bc#jS^93s@_l>T*A)_By`;b{+n%1DQaq86 zl7ym^`2k-HyaN3}gD;u`!Q2SZGjbEgJWH5zc04sTMS}wak~zdCWjH-Kkux1A5xYBgJ9~dhtaX>VxUNZf$+r z`s?`Df+5FRtdz?<24bq&4=V&xu9T&Y3`C>riD^yDKve{V|F($f^1QIbQ#*{)R9|HZDcBWs` z>3HsAh7>Jm3^%#V3?se4OMoi$$crKrIPBK<2Y#0Ya1JI@_CfG7I&B|+TD$w>1jo` zZwKq^sOEBr=sGTSbYP;Z3-P`_EJdR}64YunWHK4$Mbpf+WaOkZe9Hd@V6h7QHIvPe?g-ZYN5h+a&D9?2@65yNRrJ*D=VmbE!Di~6P86A27wS% zg^WZ^)3o(zQ9P}K>J|`1_D*^z+OVYngKbh-ZvkYD`!9L+E=3t9h!BOTb8RqYet8)s z>d2oaVOH{46nCC2X&f^>#}3%?UKb{$9pYJ1nc@VT&?sXo0et!z`Q4T%!Z2eW#A47W zR)?*6ytITv(hu+2R)Qz1BFuv5LhdEk{lHf*ga8F3NtL&{aQutRcjpWsV(&=xW!?vO zDAFgZt5`ccJQXjkm2oY}y(A!j@7$ja5_mgxrGUtxvu;1jv{VwiZmWdn+0)b}e$;Hd z-${F|;IuUy6)(DIYV8;1nrS0*VG3N=kLN{;#bWMRK;)o*nKl0Lig&%=q!ujJ`R*Z~ z^8%uicag9mbv8FQ&u2tM^Gn?S|G|^u26HWXAk=hQ53y1^LE)~fn<>n zBVSP}OoRj^0V0IN1S>2pj6Ko9k|voW!t(8PiU8X^rs6bNwz4J04}%fin0 z&Uo(InRS6(vG64?^Yz}n=bm%!8)YMv@~O;F6onL3CEv#qOnJRv_`y2Q^C*|gxsKzc zO~ZJp>-uCmohF`{OolAmCVZ4@pG;1Y*x%nT8&n7(!SG@P{R8M?G;rV`D&UGhp zo;R)uF&>RZUtkiR$l&k4qq~>k=xHRr>$J4ECs)NK68Zs<RPAWy0+uKPAu>gRE$*eL1kw`@D zgG@I8W=Uw;b-6AC5>iuYIDv*XK=AYfM$V2OD=YMMZjRjEUTW;=Irm)!pa{S)FqQ<~ z=yVjKCEghsq2ZyS0x*`tG)>8f7nn61mafys>1k3S zU2A0}wIveLA5K>niRR{WzTxWCpbMF8+?$C+qGn=h$`NNP{Is-0w+03ZIx`U7WV1{~ zj4(S(Gc%Mxbv^a<)DI@B;DglhF{PH5$wcK^5xe1WAc5dsHh^u%5dRq-pNir|$z+lm z8XDxH0<8eTAe@kqpgmIy3q*&9G}PEgcduO|QCmwMn2EDQ*zCO zE6ZadCXD;&6c8RTk90RPQ0x(wg}Wv+>fXi%Wi~gd4;7ELwNV9RF!{_mIG{MLSF5UI zvMsQi?(8HV$G|C87zpAz`6j4&I5u`$lW38q(G6Yd$UqeOPoqd4?oKPuxbjKs6OI z3f-iLNRV{dCQ7BQD)j)pK@QMWquiips8p$k>83dW>*fNmjy>bPH`vG|p-e{_je+my z_x+oXpePE|*X_*>mdhpn+}|Sz0)6$7`j1E`)IXV?j`alcn;?JZmqqR;cPa; zI86~#F^nQK2*~9!90c{4-<+RI@pdp6U@@O#G#WWKWnpEGe>Vb?KX~>S!MNs#)1!l6+DkvOO-^~g)&^#6#rfk+wEArDwVuU(!SC> zf!S)YnoZfw6>kOlz%*_u#yrnm(_34qdcXxisT#tW8eb(U@9SaZ5|*;-<1*7;uqj=B zV7&F)V z*{n2LTk&tcnJ=@pda<(;=zfhku0send7gj$b9MELo>=P5-rgL>g>#OqwX!Eka?{H5 z!=IOzzaNB8Pfh|LRwK{Atg2`_oznRBmL`)4ReaA$z7(z2#~&9LZV@*9jg321h7nM# zngru9{pH{!XO*>h@Nf~ZkM`iYq&n+Heb(S3xggB#|f0yWYUz1cAHv7kz`r+?bG>rB0by6(vyD& ztFs%jo5WCR((NqE-||o2jdjc6X0huOwBlVK16Ci7jsh)PoB;i&Sw>}9!aU;gpBp&5 zoK@tJfctNZOtjvQhMNT=eGm^`nkojaO9uoo>_MsRIOQ6~09hWUAOlU$3~pi!LjqqP z8uZN>dQoLV8!!yR^WFzUvXU~UO~%*r^znQ|^-Q(fP_}jHs35ZJ`#}LHFjpL>yZ|>x z*TyP0BO*Q5WedFQR5dg#Q_8b4KqtF#F1~DxDV)Yh6t}AtW?R*U$$QRENVuhQIy+SX@LjB0SyO3Nnmzg?XFaImtVu3PDefn rW^-#R(y+UQk3pMX!)<<#{S#mS9vE?4OnM}v00000NkvXXu0mjfSz{yG literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..44bfe5cc0d0dbae8b62c2f6663afccf661316cf5 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqC8I*$B>F!Z>}109Z(Q(xyVw~7$I@t)}<}a{v9tWS1I@S zsQ4)Ef#Kl;@5RwKg#!{fo44$rjF6*2UngB5> BP5l4> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-left.png new file mode 100644 index 0000000000000000000000000000000000000000..aaab23a39ddda87b90e938782b1e29ce5be27883 GIT binary patch literal 496 zcmV03s7Og6@Z#5M8`mMG-LP3osYecux^yEGo8 zIaqFf!6qO~?z+ywL3MC-Z@a1Mn}Pt^2vn;fWSr>_byc0D{K|C!wYF^s&_mOO4a(K^ zT1fc;=oAI)B1MWoJB1CKHz^17=s;0s!(@$(fCXh^_yY=nx=!peKr>FCvFzaI^Z6+C z9&J_rVuSD*k3aCC>kD=%%!lJcV}x;>38ufd|W z1Kg`+Jb==olm&WVe{NY-lWpT|!S?9h+Em@4XVXPQgF)HVa%v1Y3InWp^9;B3Kjuu_{tv^EBLob&+%x~)#p9sy;>21I~oj}_kJ88 zh$WD~89TaA6#9tf0b=~SAl$a+wC#XaKC@MB0Hm2y-Vy#Vu%R-wLFC>upPDN-bB-2i zWrclw5Nx2;zpV(;BN&zOb((wiO`J3A1bN5V_2Zmo(x*Tu-kURMqSv5c84_W{X^G@(xKmmW7ABUJ-7o_PVgnb08$!)Ed;c#M*si-07*qoM6N<$f`&cjIsgCw literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-stretch.png new file mode 100644 index 0000000000000000000000000000000000000000..4b1f2ca7e4ddb42f52b6a71e73c837ad649b3ec6 GIT binary patch literal 184 zcmeAS@N?(olHy`uVBq!ia0vp^%0Mi~!2~2V;|*$olw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6Jlq9{)n$B>F!Zzf;lbx`DBK4>xLoqf+Ng+1m+YfZ`;y{jJ- z^Eh8Re@`GYaY;vmN2R{&s!7VB%Vape99gS=!}DVBzWSlkIn-2i-}h$Tj3uSSX1h2)N4wodYkwcl9S4?Wy`wcJWm&$a-Yum(kYx$xtZn%F%?Yv zu-z={3q?OkXwhsogYUWsXk1bN2J;&H%l4q(Kc&1r$E4tS9!8@Pg6R}1nioPq=gRE? z{O$Vsm{fa79NR9b{TK`|nM{zRsmgH^x;M#_tIJFKnQdQ@-R_i>`nR{>0C5~cuwrd< zyQ!RM!3WxeZWxC6HT((B^$;ziYGdeAzsF$O)sGq3W1Ft;VG%CW(d@GN0RGzR9np9k zMG<_0gS)#b&)O~?0ToP&@2Ll)A3!!XKRWP0B8(z#X=d4wmKn))ylplj^ zopUW~yZ=TBj+5jS9|?o3x>-R@&7q<=;F{HSt6`YHr2K;GI7w2ZWLXGZf(9_>n6lk0 ztJ00RIB5oG0rm@^;% O0000NFxHDUsO@bKQ#ElETK?dCU4X)e;`~txsm~{pw-7{V9^4#j`Nl(y8O~IkM zXXe~@5{@GMT`(a>%ISJt^K8y`uuD%`9@oo_;GOo8deSv(_!Q>3Lazzx_|KM=;&z?nN=gmY#wf?&MW~-LZd81~RMt1M18ra-2 zA=n^XZ|`yGeRF!Z>}109Z(Q(xyVxV|8=CN!n9>Zy}PU@Sugn^ zP^kZ5Mq z>mylIJwI<%fAhTP(uIa4QQ9g~mpcSy_fCvsWMe2;A3i0)N5cSUHG`+CpUXO@geCx) Cd`kcT literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-left.png new file mode 100644 index 0000000000000000000000000000000000000000..562c682abbbdfa649382a7d8146cc1570b7e83e4 GIT binary patch literal 650 zcmV;50(Jd~P)%Ae-e=KKxi5? zGZ?&pfJYexya4aO3-BnA9e53a>?RYFfypE@BVs9%QM>i;uhi&zkek;NRWu zxoqF^Eb{^Zd%Ye;VF+GiV$@LGOTxc89nW>$pK|-@csxe;;Q_!-(^xus>Y%!b>16m1xxoF6Jo;HNvlmK!3GxPw~RB26C}Eu%8jZ8oQj)-(=^eo zsNX8=md|*ZBqojauO8kBYe?$KU23kCt>J8=X!iP(+Y7Us>SkM}XD}Z^)t0u(gg7O* z(`;2WOwbtNzi(b023HTla=CcL^6N@^B07#e%(=|bGm;T|h|79in k)oLl$*MNt({YQWS07QpOtbj{&Y5)KL07*qoM6N<$f)X$?;s5{u literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-right.png new file mode 100644 index 0000000000000000000000000000000000000000..de7e879d42ea28bd2d65adae3e00e5e7b76714b0 GIT binary patch literal 600 zcmV-e0;m0nP)`qdo30S4N zt;H>cfNvmT=^JPvSXhZ%YcUw{5yVCWpTWvjd;vkZjXproZ02Kk*8iF8tgEP*9XL#8 z$nX5m*R1&e^i*OIn{)21D2fMb?W0!ed}TPip2_ugU=*9QGp5iJeTR)9v+* zjoWYGtINwW91~_1<>2%;; z5K`EmX4w+{vfYFeJ%+{M!9ht2R#0bnHk*0Fox=gs6YxgWy5lW%x?ODmUSz4cIjQ8ES?U3)gpp!Jupda=77TiGIId mw#_+oNc4KWX!z@T7hnM7s*=-3fX(p$0000$B>F!Z?5g;JYc}%8mO7^pOIIsH+WasA3?vlta*xS zSo!#CC)~5-4hqX|T{1;T#dfK~q}|S!#8&v2rQD3to@4U7WywL$z0N`M&69Tc%=j|T zCtc~^?C!V1>aKg9-jFX0%x{^os_k`fwrFVdQ&MBb@ E0M%AWpa1{> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.css b/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.css new file mode 100644 index 00000000..9610bc24 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.css @@ -0,0 +1,200 @@ +@import url("../dijit.css"); +@import url(images/images.css); + +.noir .dijit { + font-family:Tahoma; + font-size:14px; +} + +.noir .dijitUpArrowButton, +.noir .dijitDownArrowButton { + background-repeat:no-repeat; +} + +.noir .dijitA11yUpArrow, +.noir .dijitA11yDownArrow { + display:none; +} + + +.noir .dijitButtonNode { + border:0px !important; +} + +.noir .dijitButton, +.noir .dijitComboButton, +.noir .dijitDropDownButton, +.noir .dijitComboBox { + height:30px; + padding:0px; + border-width:0px; + background-color:transparent; + background-repeat:no-repeat; + margin:5px; +} + +.noir .dijitButton .dijitRight { + height:30px; + margin-left:15px; + padding-right:15px; +} +.dj_ie .noir .dijitButton .dijitRight { + padding-right:11px; +} + +.noir .dijitButton .dijitButtonNode, +.noir .dijitComboButton .dijitButtonNode, +.noir .dijitDropDownButton .dijitButtonNode { + /* generic styles */ + vertical-align:top; + height:30px; + font-family:inherit; + font-size:inherit; + background-color:transparent; + padding:0px !important; + line-height:25px; /* Safari only */ + + /* enabled-specific styles */ + color:#cccccc; +} + + + +.noir .dijitButtonHover .dijitButtonNode, +.noir .dijitComboButtonHover .dijitButtonNode, +.noir .dijitDropDownButtonHover .dijitButtonNode { + /* hover styles */ + color:#fa4242; +} + +.noir .dijitButtonActive .dijitButtonNode, +.noir .dijitComboButtonActive .dijitButtonNode, +.noir .dijitDropDownButtonActive .dijitButtonNode { + /* active (down) styles */ + color:#31d397; +} + +.noir .dijitButtonDisabled .dijitButtonNode, +.noir .dijitComboButtonDisabled .dijitButtonNode, +.noir .dijitDropDownButtonDisabled .dijitButtonNode { + /* disabled styles */ + color:#3f3f3f; +} + + +/* drop-down-button specific */ + +.noir .dijitDropDownButton .dijitRight { + height:30px; + margin-left:15px; + padding-right:31px; +} + +.noir .dijitDropDownButton .dijitA11yDownArrow { + display:none; +} + + +/* combo-specific */ +.noir .dijitComboButton TABLE { + margin-left:15px; +} +.noir .dijitComboButton .dijitRight, +.noir .dijitComboButton .dijitDownArrowButton div { + height:30px; + width:35px; + + /* don't display arrow text; just use background image */ + font-size: 0px; +} + + + + +/**** + dijit.form.ComboBox + ****/ +.noir .dijitComboBox TABLE { + margin-left:10px; +} + +.noir .dijitComboBox .dijitStretch { + height:30px; + #margin-top:0px; +} + +.noir .dijitComboBox .dijitRight, +.noir .dijitComboBox .dijitRightSpacer { + height:30px; + width:32px; +} + +.noir .dijitComboBox .dijitDownArrowButton { + padding:0px !important; + width:32px; +} + +.noir .dijitComboBox .dijitButtonNode { + font-family:inherit; + font-size:inherit; + background-color:transparent; +} + + +.noir .dijitComboBoxInput, +.noir .dijitSpinnerInput { + border:0px; + margin:0px; + + /* IE7 HACK: get things to line up + #top:-1px; + #left:10px; + #padding-top:6px; + */ + /* SAFARI HACK: get things to line up (a little better) * / + top:4px; + margin-right:-10px; + */ +} + +.noir .dijitComboBox INPUT, +.noir .dijitSpinner INPUT { + color:white; + background:black; +} + +.noir .dijitComboBoxDisabled INPUT, +.noir .dijitSpinnerDisabled INPUT{ + color:#3f3f3f; +} + + + + +/* dijit.form.NumberSpinner */ +.noir .dijitSpinner TABLE { + padding-left:10px; +} + +.noir .dijitSpinner .dijitStretch { + height:30px; + #margin-top:0px; +} + +.noir .dijitSpinner .dijitUpArrowButton, +.noir .dijitSpinner .dijitDownArrowButton{ + height:15px; + width:34px; + padding:0px !important; +} + +/* DnD avatar-specific settings */ +/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */ +.noir .dojoDndAvatar {font-size: 75%; color: black;} +.noir .dojoDndAvatarHeader td {padding-left: 20px; padding-right: 4px;} +.noir .dojoDndAvatarHeader {background: #ccc;} +.noir .dojoDndAvatarItem {background: #eee;} +.noir.dojoDndMove .dojoDndAvatarHeader {background-image: url(images/dndNoMove.png); background-repeat: no-repeat;} +.noir.dojoDndCopy .dojoDndAvatarHeader {background-image: url(images/dndNoCopy.png); background-repeat: no-repeat;} +.noir.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndMove.png); background-repeat: no-repeat;} +.noir.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndCopy.png); background-repeat: no-repeat;} diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.html b/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.html new file mode 100644 index 00000000..17ca9d2d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.html @@ -0,0 +1,249 @@ + + + + + + + + + + + +
    + + + + + + + + + + + + + +

    Noir

    Tundra

    a11y

    + + +
    + +
    +  +
    + +
    + +

    + + + +
    +
    +  + +
    + +
    + +

    + + + + + + + + +
      + ${label} + +
    +  +
    + +

    + + + + + +
     
    + + + + + +
    + + diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.psd b/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.psd new file mode 100644 index 0000000000000000000000000000000000000000..c6bd56f790d8de335e214ae3c20d426329d3c040 GIT binary patch literal 728219 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�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ℜ8ocpI_$kiv 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­xD$(^8i!^^SBk?91tmy-Ii>;ZRHOW_&s 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/arrows.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..17b7daf54d7f89e3a435cc808fd458b381a78157 GIT binary patch literal 3640 zcmV-84#)9{P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ}u1Q2eRCwBA{Qv(y!zdUyP&NI~fJT5a$E^YN|J@&I z18RSJmOUeguAFx8KRNnffKvTaW-lX2e@ApQ-+ zKY;ir5dVXU$D^qm)la5=Lwy~hBaD@qi9uh1li~dR?+ll(-DLRr^CwCAk-@bax52cj zu^G{Ne*FB-uy@}<26uO7hO5_aG5q@Rl_dSh;NsP*;7}Q8|AR8Wu7N270}~rCc78!5 z39vzWkPA7#^!459~Lal^Iiuf&OJ}{iUbdy1b@iMpo`}_Y7K|LQnd|+6$dJDt5 zx33whD@(xz7_0!4l#(FH{+BOaF`U1Anc?~eX|VfERrv|(VPpQwAj;3mz|6$RFk{0d zhS%@E!~IW;eq?ar-e;iuAq6P7@B;#7Rt}={{{8&}OkchLiEfzwNJ~zl^e;dD9j;%R z^(lk2q!^eV;O$J5{ta9Ag6XHvUx8^#^gsPA4R^n_8XHmikKX!);(rhzwE#VS;uN?L z9OxDxKmZ}P0Ot{@2UJij2jXxv@sY0oG?Ds2sq6v}3!r4GzyI)R;$i#E;G)6Cz`@GI z@bTLphRos17n~0&K)?L>Pf`I2(gSTZ4rogdAb?m#N8wO`XKckB z2`L$d`JFi_$m03!%jev>c9CKG;*J!2`sc3L7Q)LXz!2tTwFX&y)BXz~uU|f6NRIGY zgS7x4P=Z*fumcM}+NG6$cvAmAVBx%W-4<}+M?3rR%Zmvxf(t)zFO-RN{e-}8A`1@~ zV4|}BfBpJJky=Xi{~;m#u&Je_03ApG5I{_{wji!z)*M~CfH~yowF%6e1H$C!1=$I* zn^b+$a!L%_H!NUqiO7TN&F@$_XUm$|3~ygQBdDKWK$zji)iVsUmTn9|6n+;&u3b9G z@a@Yd+==SW+7n1v*zWT&4W6dd=6o9xeXw2{Vv*%!Sl2Vck!NGpO79(nE z{|{_~k%F;hDqL8Uj}hGR1%Ws3zcB3BwVx#Y*f75EfAi)o!wPR5> zA^jm9=48WS5|i{R;_aU_NJJWQOx) zg;*I>#F^oR-?UXn7?|1l7&J5t7;fLWPql>b7iu5aVZhc93kwU-EzArz@7!a!aN#mo zTu4}yAvnkfEJtb=n%Gtatd;iTqZACCxwf`%lD|Nl_h0z~rv zi5>G8?%zDmprmI9=7ZQfR`xSEhvXr~F<6*s)&iWja2dnpi{}{}92_BIZ9w+)nX?!Y z6Jo(>16x;@lolX1{m9|BW94Lq0ssL7 zYXN=(;=4fn5`+z{yf73ZiGc<$Kq>DHk~E5bP^(SL+6PzRM^HZye*qPq$OS2>`r%_& zKsSKgg4B}4tN+4-??PJ_v`1*^TQXcZf0SX@<|Pb_z&_XILmRUR=zj~upWlD|%b67J zxl~+Ip5f)w2Mo8bonv5NWMn8zkAoF{pc&zJX!;p`0~4?~KMO;U2?v9{1{;_U>H0!4 z8fe^a;f50o|CxChB;~ajSXrn)dU5C8Lxx3**D!3|4ryWi{PmOJ*ip#PCTQF*D9{6I z;YXDM7?>%z*ccd;L>U>R1sQ?e?%!ZBF+NC%`0d*_h66{>0t-KG24!^}1`akh4E>~F zi~L_gi{vAXG zAV2`YQu9Zo!h>N^N17I}<#Y{JfN}E*g2eQpnHSOPK>!r}IKXLQ^#i-E*N_WO5F6B; z1-Xj?`$6CsA^l=}OrXBrw?DuBGB7g&>jxlaV+Rj#pFVK?yS{@a=Q$kuKZ6)N984hk z7iip!k&zKR#>>LO3X*#K_RC*MVIJnEP(3K4?$#Py40>`9A$~3f20h8241ZZTfNU0U zrdhP%7{l|oUl~+%^>DOcC~JWoIB*2s(gV%%9yq|sASNaRW`ls8gB=402M5l9_J0)G zFC~EJ=5qjpi~Zkc22Nffc-ME!k=qQPesVJCs;i;26sgs!KyE>aNGdRVxqSuIead
    -B@AlM2u zd}F#8ZbHhLxcvX~_kU1!z*&I}#TFny0O738f!#(eV9V(mj7^H6N7hf*g0|d{3$owD z>OX&M8xFBFl0672yh(Atlo0zj&)AA(b3@S2^nN4e5NroTL z!IB-v?l9bX_?AIhSs$KRfB#`Z8^ouq05UYxWqA4O4Lsw)3PTVuFwkXCQIaQmmXRFr z=pC@a`174XL=ZB=tgavmFVxRpf5Pzc%|`}ZT^(QsWMe?;ts-^dDeMCOh8V!cCB&el zVE}INefa|ENJvO4Flgx*p{TuEsNey$ z=CBoL_`u~u8?-3(7--BA)NMy=H4+4%!td7AlMI}|g74Ddby_g7s}~M4*au}?JGgEJ zUh_bO-|Lr;fh`4ghN7&59+=q6XZIOqELvBR5f_BD5CpX@)*SoEpeOyB!OL0&+7e;{ zkNa&ubeVxyK$w9AXeJ^9q7{G?_AA)g*}>y`M~<98Df~d=eijxc3_pJSz@MooTnF<5 z*Z{lsf{B6m#S;cYO&M5a0-p3Za{eBJxClQ3D+fOV%=_rQ$loLufav;v{QL=L3rcA) z_{SA6Jb(NE&IgtK$ZCiw)Nrf)hqq8NH??3;Qc_~Lckdnp8wWRox~dX`0KX7i%|9$% z=zsr6DF89`BNu9x7FGY254 zbIG4SxT{H6<~sM7iQ&txiwr*Yx(rf869NNfi1(1j4R;CuJ+CtBsoL{y=MZ@d#XAi2%yn*fM@_z*dg;}#kj$x z-rf~`L=~u@!Va0w#=-<1TuO_^-Tei3A$}nW$ICA`7~X8V!k{3=#c=b^Ee0_aI}~~B ziHfok0C^TzT3VXH&CQ zm}w}@RJs}p4CgN2MiG1Y<~I(tsu*JXuK#7QS0`>}_~1><@Vs*K0fUaZ0#PltYquVe zq#qq%)Bp0rF9uP5)QKf#=!6$~(t7>z7ey`L!2|#T2)O`k2jWU1^?}rW#3DA5^?QQK zPhxx8KztUZ1^DA9u%=}Nc5xw@?#W+PhFeeGFmMVefW<-bklGlb1~mavuK)y(`$$ND z@n0eb*Zxsh0-=|u|5^AM9)4m1cYQg4EozYQOpL_qCl-LVW5MiD<4S6pxCHi6R$5yZr2Y@#7Q+gNxY%ef50C_Jkx%y#yfd|U}4apXxr@>I@e)wS$ zqzq9(3($ey3k(oIjHAb44J;Tv4r_26hcyZ)1LPK<16}?A1Q-A$JM!z=K|F&10000< KMNUMnLSTaOYO%rq literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/checkmark.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..4e10f67af34d4189033209df3b6a218a2bcae9f6 GIT binary patch literal 2292 zcmeHH`8(U`7JnrgK{U~YU}|~F+?lB=OjdCvJf=l$WF_dTEUd6Qk8&#S3u zs{jDhoJd4>IWpvqLnGxe!V=P!gK{XzD+~bD{kyIJvUBnBL&ZS5OLhRf{WV(bmM+ir zuaev^0dUU<0Eh~JNG3-C0O6(p%u@h3lLdh0t*1UMjsPHm>qU=qiAl)`FKXY^a_WcR znVFf5jg5{m_*w1J8<2?PS+hPbG0$2&Zo=h z-FeYFI0N6$ZkkyVRkD^N{te}nwv3K`f?l?NsH?pe5Ogp7okS`d<--&6a5uXvhrY)A z2!9+I`A^RlZxJqSTOOX6UtATxYaZQ!rB7co7e24OW(q3%qz~VWrB=>u?MPBe$Ed%J z(VIFtSnYYtwfx4-q=J_6_T{m$F>-K152rh&Y+3`abL)0EXA+(ktON!B+`y=h${QM+ zhsXKbHND#wj$VNYmHcIqy#w)mZS~)?a6(ZZb7d&~TSAiZMn6CdVq*zY;(^uDED z-d6kQW=CiH=#((CtXH@xY4{ty^|Y0H!mk6r?|Lv^Y@mesAo)>Ois@K z?H`_i`Fi#%`4yl$?#|!I8Tls-SnT;WP%h~{C!(E4~V8oOXGRZCn^Aul)$rz3rpH!&TY%ST1_cT+qU_#q@jnHNlW|IHfE9@Q{If{qWQEn zQeWal41MeH${{baZP}3iibEF1N)czv0E@9JRpm~r1)|$~U8RPjEB|}lB zZ5^Uj^v$LrMQxuRx(F|oTqR@XG>}JSzp*iMGD(|otNhT}T-n+&S4<`wJ{Dw^tB1aA z`TIkFK=T>oujbHU*C+0KbrFS%7wA)xMr5Jp;f}WoZ?!WdTv|*7-8c@5@PTSHnM+4e z`_Nm2kQIe}E@_Rg(5f*;aWZcl9+c=J(E1w0BvFZM7FW#+szTA!&({sD z(Ikg{Gizv?K?;d3Iw7*hH8}tU#dXL!e(iE5FP^7vtZ_NkwT+0!MA{&=3P`tgw75G5 zYqd`O_0mzuWR7GjQQ8i81rcA^;i?rj|rhBIA2ri{c)v+T*@$u+ZAf}kjGrOnfhSw36Uq` zPvP?v-Z2(oQJ2hO=rh9NnE`HnowOF5wI%idwL6d;xIvAb%Cc$-J~sdm7Zen693(c= zeUvf<|yQl2hZjl(cdf81!TUL+<*D7pq~GN;eyk8>52wMh`UA(J^LtKdg>x^x?1D;4nIseyE9thhGga3`iK_+l>rd<(E1RhOVR|L z<0<6A!UklXaVqm-S|x^XB#;nI@ovH?e4~{%9cfnvW?zQO?D0~Q?kmQai&q2Fro$mJ zmi$B9tMMH|;~BiS+8(`OQwm`wkl#uc~b}CKd z$<7tW`k!ojeky+UoIj%zy(4?7pVL8a@Isr{ar8f=OEJ zUuL1@xd{ZaJ8Pxj>v$TJ{Xoky#+iLhIAMI>>1+lM@xzx&D|9o{q^Ly-POMt$cTm0W z0>$&VX~=Q&TMU#~(S`WpD&i^CEafyOEaJq@hf^Jy5s_gdKZf)#q^!_j!VUA4P zgSi#EeFp0?5R#Y_`=_Av;0M6Js z7N=uo`ib-tmT2Pc1~?fp5!#TY^xPSt?v{#Es2$ZyW`ikD zOGM=>Ji|GmMqLHk)l$CFUOdg;^e$Z_2GkWVt$h9|LnTwhTTsHdL}YonRw!RnN%FmK zxMRfeQ^V`2oUnaN^C+rTEjgMV-xcV$t&_kdAcL*$NNr9ZkjV0N{h&zsHsOPNwSBg= z!}42o8d|?NB}pE*`B>_}Bghx}@KR3y0BTpqrl7)_`nk?6EPwa2cRJ@xEVHM?{TBv* B^Zx(< literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndCopy.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..660ca4fb10fc1a0a26bd6235a45395031d7e634e GIT binary patch literal 814 zcmV+}1JV46P)P}>M7A(51bsWI_m(WQiniHU*6AJCmEV`AdMUtm&QxDr?p zR^4G@6A_F_jnPtDzN`&G%UC{2A<*e`X5RC4N}A$|JDK-p^3FZ?o_pWr@V~Xf2OB~z zuhZ}Bbh;=d*py{?YhgQzJ%rgCYlL$R-y*JJ`oZJ-fxAPuku9%dqnJZkD}!SwE4AX+ z=im4i`4K@J4;fx-BoHx(`0KZ?`cirdscZ@rQb8fL2hGr7@d!{=h8HN#iyip#=IbJf z5pR`*H{Ds}s`FfN7Au=8AcUZ~)Pkkwt4P1dz^1lBH#C%v6vVfGqU({T4+EI4y7I8Y zHxdj4mRRK7g8~d=~mgU)(J|wV*Xc&RigsR)F>BOZQ2pCbPhWFIW=o)E-n>e=k2g+5~L=nPGH-& z!BKEP;CZYctV3-lP}w7O3x00!Nk6?jd7@NzzGIQl``B; zH%@Ck7kUB8T4(_*J9~NAEp)p+uFc}v{8KoZoKTtGZhH?#dPhu$spJ%r+ewJLh;$*1 zx%4N1DYOvCmRw>ddSg@w@`S@=a?&i+VfhI6x`yfmaqo7kzE+QVn#AesBLFUK+9i5U4+rmXF2h?Z6nK3qOI&i@1$0P;;ggN~w;y#N3J07*qoM6N<$f)S>15&!@I literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndMove.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndMove.png new file mode 100644 index 0000000000000000000000000000000000000000..74af29c08938f718f4238fb5c4f09f6750ae56dc GIT binary patch literal 785 zcmV+s1Md8ZP)7j^8B~!ytm5eA`Qiz4Q=^ARmoN zP$MF=^-@`wf2T=GrHG1(HOKDe{@%OWckgvNtB20v+;cgc-|su;eBU9mEF&xXtVD56 zz7n2BXLYmXU|pFKSlF0b8z27ePcFij`X-McM@W`{5W?@jik{n-Z@JyB8(6|JRuW4P zWf4X$A0?6rAKwkiU432sp=W4gI7!8+A0B*Z8wot^cx@Xe69|MR!7)|97J~&x47GT( zIRK+RAGTBtIy>5DR-Z@?g@hE{1f&i0yV@_fIm#iGNy2KZ!9Cl3$V}a%=b_W-)G8%O zQva*PDm?Cd&==~JFVU?*daAAUiaVZ4AQ;<3Ie$n6XGMrd5RWHRi^QX8!Jr zuOufaHOn5`nG*~gL=h>5&+#aCMvNc~A)#4#+efwp=?#!WOQu`bYuemE0IK$Sp*4&<$~+M^#ZZf?C>@s;2lGK!SOxGQ^GiMi%?n+*nxy+K|x$2 z#Ex$J-MZ^DE3=>r6qDZ39TFv(-l2cBAzNjYlzWJ7ieK=BN5TNR>Wn3W25-}DI|{B! z1E_Xb^GYuH0f=kxQQ3sy<$=|gYBJp=2_-|jy6^!TjiXkXZIjt@eTO^IdiXN^>cTuX(K-S9|!A|4M=9mq! zlPB0RiE{eSZ3JxWyq|EQ7#`MpGmJ2+CC9LidH4~84-NQ?x7vUe`7OWzEFUyg!Q)dC P00000NkvXXu0mjf^aNqO literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoCopy.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..87f3aa0d544d937aca0d0971ca6473536067f8d2 GIT binary patch literal 756 zcmVW|B!}-t*2l8Dntah0FUq_nvp}c??~41&Bw0nRA>c2K@er zq`h6kD6R^TE&z)wz>CiNtYfat0L#~-gUPY@1X|nMsFzBxT21GYR8@Q^f5THNqkaEgmuy!ASo|^uZ?Qzs7~59U5$>MI_UsDf86kB zONTnk-iC}(ik8RI4YC|%JgG|4VIkX3aK{FDnKIvkm}+!=CeLn?JkNm790N-b*~ss# mtVmxu{T^cRe%E*YCBOj0;UPPkN^gAt0000q8Rp>%+=~@^5fVvbB9~hxA zLP1-LA_(?fG=kllgs|? zK>u!iP3O9BgCPyyzbzErSf!DVz`zwDo})&XAAm8YUj|FJCp%K{bA7<{TkzQr5Zr+h zs)vX~F*o#3Je_%&>4)ehoKwNc&sIP`4`rg~!leXz@(9b*Q-G>MI1U0^V$fR?C=U-q z3$BLKoIqwMJJ|;(DTAop)IujXfI=Xl^7+gxit=} zTm}o)!I+w?%@J$@SwF3ca&K>%7NQzs+X$=eQuHqK{R|KcqUp=$6=2FNb`Yytk$HJn zAA-wmv@o?xTdV1jrG>9(`BB0@rCQqGM@lYtIAjSlAq<66HEf$G-nxVT7272YCDeus zt;p?phpCb5$!;7$8iC#uD=wQiZljiia0M(Byc zgQ)b8&H|%Kp4xMcbI3~jLHy@1&ldI6@K$-ZKsrZQg$!el9p@hN9DWd<%fY-}rSGdB zl#^1Y+@)o#V&4O-ItWZ00(J)I?0T1753pfl7{$dRG!OiMCgma^TiMp+J86(ivL`Jd z-3A1Ww(gao#Mu6X>j?7fA+XV4e~-LIDOk gfM<&}3H>F&0BIT?88b(KE&u=k07*qoM6N<$f*0#WY5)KL literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/editor.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/editor.gif new file mode 100644 index 0000000000000000000000000000000000000000..7fe7052c1d60600c6879a9faf3459c5998c0a332 GIT binary patch literal 4360 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientBottomBg.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientBottomBg.png new file mode 100644 index 0000000000000000000000000000000000000000..72f5dc84fbeef1d87071437159eea32efc59fbd5 GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^%s_0!!3HE}@+EEuQk(@Ik;M!Q+`=Ht$S`Y;1W=GA z-O<;Pfnj4`&F{d;K)ynu9Iea(4jM8I3{DS$a$M{R z4FMJmj4g*4iB__a!O*w|*${4#W=5dlCxGU49Oilqq`HiN=1;_CBvavy1eoR6RVnaU xgH1O=chyl=pokL8;y^YeZzvZ%V&*VlxV4GhnD2_tJ76daE9KynVFfI|VB1H(Z{21b_j5i77UWPQzHjwGP} zxqUbQUQE^6eJ3$(jBI`!sfZ`5p63l6E%exq% pj>a0rTbZGj;&gN#AH?T83^i}q)fiT<(E}zs22WQ%mvv4FO#mR7k;(u7 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseTopBg.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseTopBg.png new file mode 100644 index 0000000000000000000000000000000000000000..971a267c591095330f29698500bb336785e9bea8 GIT binary patch literal 717 zcmeAS@N?(olHy`uVBq!ia0vp^OhDYg!3HE1&+YgQq&N#aB8wRqxP?KOkzv*x37{ZL zx}&cn1H;C?n%{wwfqaEzk04(LhALH{=4J+lpZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpu-9?CIhdQgJJ3P1MIKHf8|^76ER7|Ez`#OdLmkuqOezF)RuV4|p0Fnv8*B=NLE? zESQl5^7tGW4!UBK0V&;42GrLLG-M8=fI|TrP^lyXBTG0BkRym>;tnZfWt!MHU{@#s zHH$L>jpcw^dh7>3&?t}wZ$_vkD7s-brlUInCZKSvUI64BkjWsi7%nIW#Tu|zL>w3l t|NZ9|O91*yjZFhRATUB^#0W4mSgdespPkS;8<_MMJYD@<);T3K0RXuUrs)6x literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientTopBg.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientTopBg.png new file mode 100644 index 0000000000000000000000000000000000000000..29e733bddca3c00523fdc5d8b9c485e2d5c162d2 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^%s_0!!3HE}@+EEuQk(@Ik;M!Q+`=Ht$S`Y;1W=GA z-O<;Pfnj4`&F{d;K)yn0 zIB1*#%Db{bBw7wJawv%KIWRO@*eA*~FgQ(w@)s5WRe_c3F#uIa0;L`T4eT<4GGHcy z4G?(F-vct)2y9a;$N{dB4h#!VAUWa4kp>o+ksymerlA-Das|Rxf=Ut?8Z8y)r_PsO Q1`G!VPgg&ebxsLQ0P~Ys^Z)<= literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/preciseSliderThumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/preciseSliderThumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0e06640a2565bd1e82bc3f55bacf6255fa9a18da GIT binary patch literal 290 zcmV+-0p0$IP)5r0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy#7RU!RCwCdlfeyxAQXllO{ef;f(w8i zyts}_;Q|igRb&B8n8N^-m(psh#*|Yz5dH_>mq!9b2;m@N-2GJ7^-plqG;o8+fgKoQ zFmzpa3971UE12gQLs^!W1mXNkV6Bb2f^+WQ1#R16$g&KIqBsTmzK3xf--0AbNC?XY zwvy-hE-a-)c+HT{_LtY?d?%dqO??;!gqK%K)^)OXe=nhw0%HubQVOPN`hpJyL6W8^ ouC>;?@Tnk3o}Y~zop}f_0O_<_AH%dK-T(jq07*qoM6N<$f++fRrvLx| literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/progressBarAnim.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/progressBarAnim.gif new file mode 100644 index 0000000000000000000000000000000000000000..167a3e0d5d6052990938d0dedf9aff5d37a7cd26 GIT binary patch literal 1676 zcmcJNM^h7F0ERcs&_YO1ilP`rupm-Y0*Hth0*DleqM(9*LauQ2SLrA-2+~3VA#JnC zW?L#Djgx+L#sfLJmpyFxo_U|gK0a#g`&`Z#7=dBjY&@DMa!SF+#l%ETOco;XVo*r` zItU5LGd`9Lh*>FF2ugV=RowMN_dNWzn>!9CgM8xqmY0=t$C0$lF9rDIk8R(^e$dA$ zK^eSXV8s(YQRL&rNW2hMz<*AKMBW=oaZ299CH>L#_95?K-;?7ZI_b}|^Pn_OpNX`YNoGYLN#2hPTB64PZH^>U9 z^}V2!DtNiX5gX&gv=GnwqM0Ku8Im&lUWt$ALkf7R90tU&l#V6}PM`d9$L|+1UOvq$ zr(&}B+Z|?QK%0-oa}nkA+oqTKpO@uN<&@1aH!?h9>+a~(sK8m4Gp)7)+}q)~P!pqH zS#9dPI&+~}bwRB*d^9{%m6u<4v_5@y$+A#gt?T_zSvfeZ8?9=&ar5PT&!;Nz{qVcG zfmanv6OSL=ZkxPyP2chUx!%k$=COwHxfk}KsW--YO>M2F+jysJ@yXpQv#)E~Z6o*k z?pwQR${Lq1zI|ZoH(g#kpM|0{Q4}>raZnT;MX91FT8gqnQS=mLjG`DRN*P75QIy6K zEM%3YPO^&HKvr?Il2vrQWR!h(P)EC`swf`BP32$;fxfT`(V$jfG^iCAO$ip5E$SC$ zi~5DxqJCkvs9%^Z>KA5<`i0q|eqpw#UzjcG7iNq4h1sHhVYaAWm@VqJ1PeuJrYI_k zVxcI56lI>G)KQc+iejcHc8a2*D6NPbvV2)3t2C>~DqqPcmIX4(;4~R!zK4ub zH$X;dnW7?CZm9L@F><5U#et;<5U#et;<5TiV+Q^Lm^jZ2 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/sliderThumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/sliderThumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5dd6fb0516d085bbce000e1588c4caa910da1 GIT binary patch literal 243 zcmV5r0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyl}SWFRCwBAoHc8fJp%(n7Z95NM3U}%_wJeP-Me=M6Oc`^W)OhtkpQ`X;qTwSV8J6tju55U#>NKD z1{?7E_ir%A+}xZf17Pam2K@W?kAYkOHsJsN|3lq?VGstCdg1Bg$B(7O#l=a|`10jT t5cL#fK+5UUr{{yxHHntL0OvI4A002ovPDHLkV1n&iW*7hf literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH-thumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..4a40a531be9e7990d982d687bbf20bc21a7f630d GIT binary patch literal 607 zcmV-l0-*hgP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-)k#D_RCwBA{Qv(y12zBzyJIf z0%C?ge||Ik`Td6nNLvB~5Yw+e4A+1PfBpIU2Q2aT@1MUwa0eiOn6zcsp8o#xH|5Xo z-%o*JFaG`go9k(*Z~-8I7(lK9;j2%63Z1?8T@=O#2p}e~t6u!B`}gnv+rR%9ULC#m zVFE}DAb=R}zWAl}>+k=oKvw}>^qb-5kM9h>fB&`u2p}e)Q$;~8`u*o0!|z|e7=ZQw z@gGru00O$||EZsU{@;PRhym!j7k~f#JqQp$j3A3n-1;K@>(|eGpvTyL|Nb@6-CXWI zKmak~3M+sB!WmWo0faNG00IbSSOEkO&aeUqAe>0mK9hQDb26*aIaYuKM%a z;Lo2wt^fhV1a#)#U(i5=Nc;f>;xB*zV$zUiI}4Q91a>M=5a_Cd|Nj5m2M|DTR~@?Y t*7f&Kpnbo8?e?&c{|gX6IGqa+U;u79i}u_wk;wo6002ovPDHLkV1nU_7Cry~ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH.png new file mode 100644 index 0000000000000000000000000000000000000000..e2600677949a9a42d0297ec1b9254f16ff08459e GIT binary patch literal 181 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRT!3HFG4z<*R1PVMNiy0WWg+Z8+Vb&Z8pdd@S zqpu?a!^Xav-+_~Xe1&9>AYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxu^_H=O!skoJNr~d8pdNDCKHZe6dHnT9bw)+47jQ{-PKJx#c;h&$(iOeh#3<^Jm V+E=V9d<@ja;OXk;vd$@?2>?%;GK&BJ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV-thumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d1f409de44259fd99790f289613b54430e3edb26 GIT binary patch literal 536 zcmV+z0_XjSP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-j!8s8RCwBA{Qv(y0|?xD{!8M=@Bj8ce*HUZrowrL z0SazB{blz3_kZc1zkcttP~-Us6UU|g&dc9yKY#ys`u^+Ruiw9aAGB2G{RcQfFVd8(G;$S^sIe-8HTlDh}L)q^?e?EdV0wsR|gQ-A6 zitXvI-~XE+VnF=&&;7su{AYTTCDpdxChGqtapZ|gMO9qBg0|tgy2@DKYGZ+}e^C!h0 zbpxvP@^ogTe~DWM4f+b=pa literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabClose.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabClose.png new file mode 100644 index 0000000000000000000000000000000000000000..7b84982f1dcd17cdf10f6a374e116b5b5338a826 GIT binary patch literal 726 zcmV;{0xA88P)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;Oi4sRRCwBAT)h9)|0`E6GH`NoF%S#BfB(jyqodCN z5I`)KFJE9#R8nP-mXRY`^V27f7(n^}0*Hy5n}K-+;PGcYhRh=|KD+_-X@VZ(~44A(B40n;EpNE{>&QU_8G0ssNT0`kjW zC`VXKiXkMfm|^p(sSG!-o?*Ci{Tx_M-^8B5H!Pb$KuCn)&!0bFwIF=}0fgl2{|vu= z{bCRjlVq@P3}9de`uoTCuVDX!_#knRJWMS}A3y*xfx_|6-+y5IpMja-`O`-X$M$Ui zJB@>r2V^ps4-yB-Bh>z900D!~zcfzyF{DjKC0;1WSMd2kff9zks%jf#v@H|Bs>;Ab?nY{`d||RnHhW zd4-A37@yxVfb;_en+(Ce?ZrO^Z^7I0Q&z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;FG)l}RCwBATyylz|36=!GqAF3kB1rT;l0P5|*1BK`wVhzZfAw{* z0Ad20_#cEB89oCw9@w#p;q=iR44*%LWME-s2GbxuNE{>&QuiO?5C(t%f@lWX{O|ui zumBIx#^+D&Gn_lQhvDfX2o2(c#2LV@`v+DJ0ssNT@*gSyatjZiAcLv32g8L^d%+rB zK6?ms`acFaMGXc6GiL@a9$tojfB!=L&%gi>Kuiq(Va{e?`1|J%*k8(;MnJzZG5r4Z z6YPHwA0!Tvhp7eW0|+1{Q0V;ynhwJM8JHM80HfjdwR2#nfkG7MEHED=4w6Tx{m%dp zKrA2={y{_F^M^MKmrn0vcm;H>l)Nf~vW5}Ey&LBko<6(@bj1$_JyRzJZe9Tfn7aW2 zhy@%7pr`^y0mzWAUp_L3NXjv28#yrW0t1PYi;v+a(D@*7kUYfM5X%4p2(B4q6bC0S zgQ=ZAFwPml?4Lh=Ft7t@U1KM(GeKg1|NeugG=KntXof``P!kuo0N9{EfB!(D21s*q z^MU2S=?kuwfdL?ZSpNR~4Ng^T96Us)?O#8>Fo5&{1Q5%Uk8BK5|35JN{Qj9}&7fra f>=PRUK!5=N0vjOg%gwGY00000NkvXXu0mjf;+73L literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tooltips.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tooltips.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7a881f0aa7886762724151a37bd6961b99711b GIT binary patch literal 1963 zcmV;c2UPfpP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ@AxT6*RCwBAoV@m6I2Q}^wj@96FANL}{~1UG@7}#5 zTF=KHe;KYkczNRCi+2-pg6vk3Vo!a29h0D@lZ>z+PaPW@bBLaz1iv^RJA;sr5F$8FTaRCVdGr3u7EpkbYLB*dC=)j~yN##-m!YzhFgM8acmdNNmj8_Z`G5ZV&-3jU z6C*BV00G3Jqabc^i-r|&<`PF{cL?zcbO zTXBN@1Eq(sFGDtE0W)S@P^B)ID&-?59p74L?Sq1cD>E-(`o`3rJ7d3Vn85w{9$^c4Lz^rw@ zAk=}VLK9dXv9tX89U#WbS?QoHYY6l_6Dir|%U4D@9!_Q@c`;rFMF~MEVLp!ZpMQP? z_isMRfvgT7fCw7O#m@Slm6_=o7dzX=zyFxeFt9P+V&eG!?CsaTpF#4CjZOc;!gT+< z{VTlg$?H#TXKz2f@E-_Jk{J`@eFlbqcbWe)y(h-;{i_cs{`mQ=l%17jqNcpK0V5EQ z;`y%C$GJJ#nU(oC+1VNX{bdjr;9{`Ul+jcaSKrwB*50096s-CeAb{|ufNKw5UjF{;cL6&a zS7%|U!=3*SkK;_jz?$O|BRlK%_g}vE0R!&+_uv2jzXke;g^B4burS40atm=Y^Zxt6 zDE;@xKXss!&A$Eo74rArKlz`(|1vTI{m%%)M0mb;%|13p1{PHgHg-7{P>}&ljG*-R z{nsA`el9jf9YqNhMG=lN0j76R)8=jE1PCCkDd6+3fB(+ietP-Ur*EAM?5tZeJ&nH+ z8~VAP=3jvMclDQV-xRJtd>s$+2s0D&g?}7>f8o-@!_M>rXu$`@zYKpE7@58Toju|8 z$8X{<-rqO)^Y5RryqMr0U`#4X3h^+A3Gn>m1m-1NvB1H^&cnjOXe=(kqrlJ2!2q-$ zF82?}7U5xM&{dF7y~X;b=rxC^BtQUR1i<@me;9y;*&ASfUhtRc@Ad*un@^-B!8Bjv zpTK;)^wH~29H7_)M&8S}m#jZCcw$!%s!gVBI{F31e{;$D{C~4kyi7kB*}nW?`}^bR zD<5FXM)~!Jug1Kb@6A=Eg@t6r1i-ZyGT3tbHXAU-n~LyrTT2LVv9kly{-3{p;qsuA zzzD3#B?LHu$yh||&)?V800G4K_U&7EV1D@i_urXYPhPzI@VV^mAK}%&eEo}o0?@Pm zm?kJm17r0Xkb5RCz~(MM&13&=5Q^12aU;n)R@a4*PjjLZz5C^08D&<>Q2-vV2y@BaK_z47(Kw->*D{W`@4 z0D#r>E#E7|!^Iw@CM)74CB(x9sx*K9#cm!jl`yaYQ-?gT$_EG_7Fc`!&a*eafByV? z>C2a&ho0P6{UG>K6b2 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_loading.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6d53b9da82fc5aad2019f6760448a07a7de1206 GIT binary patch literal 1081 zcmeIx?K9H>0KoCzrm!6~?4rAhg;HF{T~}PLTpl`iT;6o&g}bbhE^l%kdJ!>9Kg-$( zk>R(Su`%|5Hs@&@^GqVTqgMY^0ik7?+^MAwnX0;V*|l>e%%!5nd9}{eIb-2YnRJK8q;?r?*fR8U zht#1Va}?&|6C!85L3F4$S}S?-QkIO+rt11}Y_-{Qs8W3MieOS(-lb_CvlY^%gf?XX zebHh)0b5qur>#b_?Q7p&dB-M^tn4hS^I>kao7SfS4O3}x_%vF#PE?N?;KNu z%w^ezp^~p{5F2o`h4<72GH?9@Q@*ut=1iMegBv~5TWM)&Y{_PAzmCFJ6g4ffCynf> z<0^qR7n-L@%(;|tlf^c&uuEjE)b#91=697!C1=w3mNF-r-L4lNZ0jwvtNJRw+F-Ia zN{&F5a!qX%i^Y_F{jcq#3a-4aS6khq`@~k1w95Ds8X{K>vQ#y_dR&wI^uK>vAPD&5 z?+bvl9e^P&1tdflx}5R2W=M`1B!$NoC2}FM0(~)FSQ-#q0D8J+-Gsk>4wVwoH=G%M z9Jr$^J}#N1oux(+eZBlNneHi0B9CldLVASZoX=h7@~eq%${`^ls5rbD*$jt}4!oBs zAy|dW=Rd5*pnH`5@CaYV3f`6nAHQNyvmXMidMnq7(r71rFRMf3q#Fz>izx3FQL;xiw=`*Uw&k_~Fx+qv!9wdH3n# z=dW+S{JVDN+4t{1UcdYJ?fZ{suin3T|LMrNJ1<_pzy09F+xMRyKYx4V?45uA{y%;B zu6EXuyN_P|`1!M8&e401U)_25^81e;pFV$WoO9&kr!QA-KfV9t_3z)mfByV=>E@Ha z|NiegdGqS+r~6OdeEs(0nJW)3-+BUc*^?J-EjwQ0 zsn*K&Hu@r-ypAkWHJnX#ocOtT3|F@?3ON|4Z{m?-+t$ixsmgqenTd^+d#VS!ikgvv zFssX%?d+mT(tK{LoUR937!{>V_$&lCIjr=i%1gNGnhSDh%4koWJh|_0Pa}gh0HC{w Aw*UYD literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus_rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..b0687e5d8b3bd6349984e5bafae4e034f3539a7c GIT binary patch literal 550 zcmZ?wbhEHb6k-r!c*Xz%mD3KoxVTtaS~ku(`sdG|U%!4mdiLi3|9}7f{eAc0bK~5j zpTB&2|MAP$Z{J_O`S9n@?|*;)p1Siw=`*Uw&k_~Fx+qv!9wdH3n# z=dW+S{JVDN+4t{1UcdYJ?fZ{suin3T|LMrNJ1<_pzy09F+xMRyKYx4V?45uA{y%;B zu6EXuyN_P|`1!M8&e401U)_25^81e;pFV$WoO9&kr!QA-KfV9t_3z)mfByV=>E@Ha z|NiegdGqS+r~6OdeEs(0nJW)3-+BUc*^?Jlhut+T1k}shMpA%r+@{YiIn0EZ5d4tL33Sq3HcinfA;``xQU68!5RQf C`im|A literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cfbb252712bb16e5d97c1a08f180c13f14794ea GIT binary patch literal 547 zcmZ?wbhEHb6k-r!c*Xz%mD3KoxVTtaS~ku(`sdG|U%!6+|NrmNvp4_#{cW6k^z)Z* z?>~Nd_u=!Y%Mbqj{rmCr*Imc1|NQmq&!6AVU%mhE>C4gcch6jTc=qbUw_pBUyYuYL zyH8JFy!-zB$Ln_=zkUDl?A7}>?>`+mcjv|H_qQLsc>Dg-0Ce7JJ^>ED0PynO4)m#^Pmzx{aY{)>M=AD-T}1{rK}I&7d7V1vTWO08I4q!k1;c`v2smy+mKS1mI~Nd_u=!Y%Mbqj{rmCr*Imc1|NQmq&!6AVU%mhE>C4gcch6jTc=qbUw_pBUyYuYL zyH8JFy!-zB$Ln_=zkUDl?A7}>?>`+mcjv|H_qQLsc>Dg-0Ce7JJ^>ED0PynO4)m#^Pmzx{aY{)>M=AD-T}1{rK}I&+m>e8cRutSqn~TW3lIPlQFOo zSF)Yg%A(KBYszeB=BmD`g@sLa9kZH?9pAQQE><=s=HtvNMhBa?oLGhAnN^iJ9M9CV wICHYPGYKe)aNN)~XXg~wHL;XdxS=Jf!Om}?XCo?iW8&`~U|2UXF)~;K08)X9@Bjb+ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/soria.css b/spring-faces/src/main/java/META-INF/dijit/themes/soria/soria.css new file mode 100644 index 00000000..f6669faa --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/soria/soria.css @@ -0,0 +1,1282 @@ +/* + Soria theme - not in solid state right now. Not ready for production ... +` please feel free to add styles for new widgets should they appear, + or fix classnames you would fix in tundra.css if you change a widget + template classname. +*/ + +@import url("../dijit.css"); + +.dj_safari .soria .dijitPopup { + /* -webkit-border-radius: 5px; */ + -webkit-box-shadow: 0px 3px 7px #adadad; +} + +/* Control opacity of popups */ +.soria .dijitPopup div, +.soria .dijitPopup table { + opacity: 0.95; +} + +/* + dijit.form.Button + dijit.form.DropDownButton + dijit.form.ComboButton + dijit.form.ComboBox (partial) +*/ +.soria .dijitButtonNode { + /* enabled state - inner */ + /* border:1px outset #a0a0a0; */ + border:1px solid #4f8ce5; + /* border-top:0; */ + padding:.3em .4em .2em .4em; + background:#b7cdee url("images/gradientTopBg.png") repeat-x top; + background-position:0px -1px; +} +.dj_ie6 .soria .dijitButtonNode { + position:relative; +} + + +.soria .dijitButtonDisabled .dijitButtonNode, +.soria .dijitToggleButtonDisabled .dijitButtonNode, +.soria .dijitDropDownButtonDisabled .dijitButtonNode, +.soria .dijitComboButtonDisabled .dijitButtonNode, +.soria .dijitComboBoxDisabled .dijitDownArrowButton, +.soria .dijitComboBoxDisabled .dijitComboBoxInput, +.soria .dijitSpinnerDisabled .dijitSpinnerInput, +.soria .dijitSpinnerDisabled .dijitButtonNode { + /* disabled state - inner */ + border: 1px solid #d5d5d5; + /*color:#b4b4b4;*/ + background:#ccc url("images/gradientTopBg.png") repeat-x top left; + background-position:0px -1px; + opacity: 0.50; /* Safari, Opera and Mozilla */ +} +.soria .dijitButtonDisabled .dijitButtonNode *, +.soria .dijitToggleButtonDisabled .dijitButtonNode *, +.soria .dijitDropDownButtonDisabled .dijitButtonNode *, +.soria .dijitComboButtonDisabled .dijitButtonNode *, +.soria .dijitSpinnerDisabled .dijitButtonNode * { + filter: gray() alpha(opacity=50); /* IE */ +} + +.soria .dijitButtonHover .dijitButtonNode, +.soria .dijitToggleButtonHover .dijitButtonNode, +.soria .dijitDropDownButtonHover .dijitButtonNode, +.soria .dijitComboButtonHover .dijitButtonContents, +.soria .dijitComboButtonDownArrowHover .dijitDownArrowButton, +.soria .dijitComboBoxHover .dijitDownArrowButton, +.soria .dijitSpinnerUpArrowHover .dijitUpArrowButton, +.soria .dijitSpinnerDownArrowHover .dijitDownArrowButton { + /* hover state - inner */ + /* TODO: change from Hover to Selected so that button is still highlighted while drop down is being used */ + border-color:#333; + color:#fff; + background:#4f8ce5 url("images/gradientTopBg.png") repeat-x top left; + background-position:0px -1px; +} + +.soria .dijitButtonActive .dijitButtonNode, +.soria .dijitToggleButtonActive .dijitButtonNode, +.soria .dijitDropDownButtonActive .dijitButtonNode, +.soria .dijitComboButtonActive .dijitButtonContents, +.soria .dijitDownArrowActive .dijitDownArrowButton, +.soria .dijitComboBoxActive .dijitDownArrowButton { + /* active state - inner (for when you are pressing a normal button, or + * when a toggle button is in a depressed state + */ + border-color:#4f8ce5; + background: #cbdcf7 url("images/gradientBottomBg.png") bottom repeat-x; +} + + +.soria .dijitToolbar { + border: 1px solid #9b9b9b; + background:#b7cdee url("images/gradientTopBg.png") repeat-x top; +} + +.soria .dijitToolbar * { + padding: 0px; + margin: 0px; + #margin-top: -1px; /*IE*/ +} + +.dj_ie .soria .dijitToolbar { + padding-bottom: 1px; +} + +.soria .dijitToolbar .dijitButtonNode { + padding: 0px; + margin: 0px; + border: 1px solid transparent; + background: none; +} + +.soria .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode { + background-color:#C1D2EE; + border:1px solid #316AC5; +} + +.soria .dijitToolbar .dijitToggleButtonCheckedHover .dijitButtonContents { + border-color: #366dba; + background-color:transparent; +} +.dj_ie6 .soria .dijitToolbar .dijitButtonNode { + /* workaround no transparent border support in IE6*/ + border-color: #e9e9e9; +} + +.soria .dijitToolbar .dijitButtonHover .dijitButtonNode, +.soria .dijitToolbar .dijitToggleButtonHover .dijitButtonNode, +.soria .dijitToolbar .dijitDropDownButtonHover .dijitButtonNode { + /* TODO: change this from Hover to Selected so that button is still highlighted while drop down is being used */ + border-color: #366dba; +} +.dijitToolbarSeparator { + background: url('images/editor.gif'); + height: 18px; + width: 5px; + padding: 0px 1px 0px 1px; + margin: 0px; +} + +.soria .dijitToolbar .dijitToolbarSeparator { + background: url('images/editor.gif'); +} + +/* ComboBox-icon-specific */ +.soria .dijitComboBox .dijitDownArrowButtonChar { + /* visibility:hidden; */ + display:none; +} +.soria .dijitComboBox .dijitDownArrowButtonInner { + width:16px; + height:16px; + background:url("images/arrows.png") no-repeat center center; + background-position:0px 0px; +} +.dj_ie6 .soria .dijitComboBox .dijitDownArrowButtonInner { + background-image:url("images/arrows.gif"); +} +.soria .dijitComboBoxHover .dijitDownArrowButtonInner { + /* TODO: url("images/arrowDownHover.png") but in IE6 it flickers some? */ +} + + +/***** + dijit.form.NumberSpinner + override for the shorter stacked buttons + *****/ + +.soria .dijitSpinner .dijitButtonNode { + padding: 0 .4em 0 .4em; +} + + +/**** + dijit.form.TextBox + dijit.form.ValidationTextBox + dijit.form.SerializableTextBox + dijit.form.RangeBoundTextBox + dijit.form.NumberTextBox + dijit.form.CurrencyTextBox + dijit.form.NumberSpinner + dijit.form.ComboBox (partial) + ****/ + +.soria .dijitComboBox { + /* put margin on the outer element of the autocompleter rather than the input */ + margin:.0em .1em .2em .1em; +} + +.soria .dijitInputField, +.soria .dijitInlineEditor input, +.soria .dijitTextaArea, +.soria .dijitComboBoxInput, +.soria .dijitSpinnerInput { + /* For all except dijit.form.NumberSpinner: the actual input element. + For dijit.form.NumberSpinner: the outer fieldset that contains the input. + */ + font-size: inherit; + background:#fff url("images/gradientInverseTopBg.png") repeat-x top left; + background-position:0 -32px; + border:1px solid #333; + line-height: normal; + padding: 0.2em 0.3em; +} + +.soria .dijitComboBoxFocused .dijitComboBoxInput { + /* input field when focused (eg: typing affects it) */ + border-color:#333; + border-style:inset; +} + +.soria .dijitComboBoxDisabled .dijitComboBoxInput { + /* input field when disabled (also set above) */ +} + +.soria .dijitComboBoxHover .dijitComboBoxInput { + /* input field when hovered over */ + border-color:#4f8ce5; +} + +.soria .dijitComboBoxActive .dijitComboBoxInput { + /* input field when mouse is down (?) */ +} + +/* Dojo Input Field */ + +.soria .dijitInputFieldValidationNormal { + +} + +.soria .dijitInputFieldValidationWarning { + border:1px solid #f3d118; + background-image:none; + background-color:#ff6; /* FIXME: better yellow? */ + +} + +.soria .dijitInputFieldValidationError { + border:1px solid #f3d118; + background-color::#f9f7ba; + background-image:none; +} + +.soria .dijitInputFieldFocused { + border:1px solid #666; +} + +.soria .dijitInputFieldValidationError:hover, +.soria .dijitInputFieldValidationError:focus { + background-color:#ff6; + background-image:none; +} + +/* + * CheckBox and Radio Widgets, + * and the CSS to embed a checkbox or radio icon inside a ToggleButton. + * + * Order of images in the default sprite (from L to R, checkbox and radio in same image): + * checkbox normal - checked + * - unchecked + * disabled - checked + * - unchecked + * hover - checked + * - unchecked + * + * radio normal - checked + * - unchecked + * disabled - checked + * - unchecked + * hover - checked + * - unchecked +*/ + +.soria .dijitToggleButton .dijitCheckBox, +.soria .dijitToggleButton .dijitRadio, +.soria .dijitToggleButton .dijitCheckBoxIcon, +.soria .dijitToggleButton .dijitRadioIcon { + background-image: url('images/checkmarkNoBorder.gif'); +} + +.soria .dijitCheckBox, +.soria .dijitRadio, +.soria .dijitCheckBoxIcon, /* inside a toggle button */ +.soria .dijitRadioIcon { /* inside a toggle button */ + background-image: url('images/checkmark.png'); /* checkbox sprite image */ + background-repeat: no-repeat; + width: 16px; + height: 16px; + overflow:hidden; + margin:0; padding:0; +} + + + +.soria .dijitCheckBox, +.soria .dijitToggleButton .dijitCheckBoxIcon { + /* unchecked */ + background-position: -16px 0px; +} + +.soria .dijitCheckBoxChecked, +.soria .dijitToggleButtonChecked .dijitCheckBoxIcon { + /* checked */ + background-position: 0px 0px; +} + +.soria .dijitCheckBoxDisabled { + /* disabled */ + background-position: -48px 0px; +} + +.soria .dijitCheckBoxCheckedDisabled { + /* disabled but checked */ + background-position: -32px 0px; +} + +.soria .dijitCheckBoxHover, +.soria .dijitCheckBoxFocused { + /* hovering over an unchecked enabled checkbox */ + background-position: -80px 0px; +} + +.soria .dijitCheckBoxCheckedHover, + .soria .dijitCheckBoxCheckedFocused { + /* hovering over a checked enabled checkbox */ + background-position: -64px 0px; +} + +.soria .dijitRadio, +.soria .dijitToggleButton .dijitRadioIcon { + /* unselected */ + background-position: -112px -1px; +} + +.soria .dijitRadioChecked, +.soria .dijitToggleButtonChecked .dijitRadioIcon { + /* selected */ + background-position: -96px -1px; +} + +.soria .dijitRadioCheckedDisabled { + /* selected but disabled */ + background-position: -128px -1px; +} + +.soria .dijitRadioDisabled { + /* unselected and disabled */ + background-position: -144px -1px; +} + +.soria .dijitRadioHover, +.soria .dijitRadioFocused { + /* hovering over an unselected enabled radio button */ + background-position: -176px -1px; +} + +.soria .dijitRadioCheckedHover, +.soria .dijitRadioCheckedFocused { + /* hovering over a selected enabled radio button */ + background-position: -160px -1px; +} + +/* Menu */ +.soria .dijitMenu { + border: 1px solid #333; + margin: 0px; + padding: 0px; +} + +.soria .dijitMenuItem { + background-color: #b7cdee; + font: menu; + margin: 0; +} + +.soria .dijitMenuItem TD { + padding:2px; + outline:0; /* FIXME: may break a11y? */ +} + +.soria .dijitMenuItemHover { + background-color: #4f8ce5; /* #555555; #aaaaaa; #646464; #60a1ea; */ + color:#fff; +} + +.soria .dijitMenuItemIcon { + width: 16px; + height: 16px; + /* padding-right: 3px; */ +} + +.soria .dijitMenuExpand { + display:none; +} +.soria .dijitMenuExpandEnabled { + /* margin-top:4px; */ + width:16px; + height:16px; + background:url('images/arrows.png') no-repeat center center; + background-position: -48px 0px; + display:block; +} +.dj_ie6 .soria .dijitMenuExpandEnabled { + background-image:url('images/arrows.gif'); +} +.soria .dijitMenuExpandInner { + display:none !important; +} + +.soria .dijitMenuSeparator { + background-color: #b7cdee; +} + +/* separator can be two pixels -- set border of either one to 0px to have only one */ +.soria .dijitMenuSeparatorTop { + border-bottom: 1px solid #666; /*97adcb; */ +} + +.soria .dijitMenuSeparatorBottom { + border-top: 1px solid #ccc; +} + +/* TitlePane */ + +.soria .dijitTitlePane .dijitTitlePaneTitle { + background:#4f8ce5 url("images/gradientTopBg.png") repeat-x top left; + border:1px solid #6969FF; + background-position:0px -1px; + padding:4px 4px 2px 4px; + cursor: pointer; + color:#fff; font-weight:bold; +} + +/* TODO: merge these, and all other icons to a series of background-image:() and background-position: -16*n px styles */ +.soria .dijitTitlePane .dijitArrowNode { + width:16px; + height:16px; +} +.soria .dijitTitlePane .dijitClosed .dijitArrowNode { + background:url('images/arrows.png') no-repeat center center; + background-position:-48px 0px; +} +.dj_ie6 .soria .dijitTitlePane .dijitClosed .dijitArrowNode { + background-image:url('images/arrows.gif'); +} +.soria .dijitTitlePane .dijitOpen .dijitArrowNode { + background:url('images/arrows.png') no-repeat center center; + background-position:0px 0px; +} +.dj_ie6 .soria .dijitTitlePane .dijitOpen .dijitArrowNode { + background-image:url('images/arrows.gif'); +} +.soria .dijitTitlePane .dijitArrowNodeInner { + visibility:hidden; +} + +.soria .dijitTitlePaneTitle .dijitOpenCloseArrowOuter { + margin-right:5px; +} + +.soria .dijitOpen .dijitTitlePaneTitle .dijitOpenCloseArrowOuter { + position:relative; + top:2px; +} + +.soria .dijitTitlePaneContentOuter { + background: #ffffff; + border:1px solid #666; + border-top: 1px solid #666; /* w/out this, an

    on the top line causes a gap between the .content and .label */ +} +.soria .dijitTitlePaneContentInner { + padding:10px; +} +/* force hasLayout to ensure borders etc, show up */ +.dj_ie6 .soria .dijitTitlePaneContentOuter, +.dj_ie6 .soria .dijitTitlePane .dijitTitlePaneTitle { + zoom: 1; +} +.soria .dijitClickableRegion { + background-color : #ffc !important; +} + +/* Tabs */ + +.soria .dijitTabPaneWrapper { + /* + overflow: hidden; + */ + background:#fff; + border:1px solid #b7cde5; +} + +.soria .dijitTab { + line-height:normal; + margin-right:3px; /* space between one tab and the next in top/bottom mode */ + padding:0px; + border:1px solid #b7cdee; + background:#b7cdee url("images/gradientTopBg.png") repeat-x top left; + background-position:0px -1px; +} + +.soria .dijitAlignLeft .dijitTab, +.soria .dijitAlignRight .dijitTab { + margin-right:0px; + margin-bottom:5px; /* space between one tab and the next in left/right mode */ +} + +.soria .dijitTabInnerDiv { + padding:6px 10px 4px 10px; + border-left:1px solid #fff; + border-bottom:1px solid #fff; +} +.soria .dijitTabInnerDiv span { + outline:0; +} + + +.soria .dijitTabHover, +.soria .dijitTabCloseButtonHover { + color: #fff; + border-top-color:#4f8ce5; + border-left-color:#4f8ce5; + border-right-color:#4f8ce5; + background:#4f8ce5 url("images/gradientTopBg.png") repeat-x top left; + background-position:0px -1px; +} + +.soria .dijitTabChecked, +.soria .dijitTabCloseButtonChecked +{ + /* the selected tab (with or without hover) */ + background-color:#fff; + color:#333; +/* border-color: #4F8CE5; */ +/* border-top:1px solid #4f8ce5; */ + background-image:none; +} + +/* make the active tab white on the side next to the content pane */ +.soria .dijitAlignTop .dijitTabChecked, +.soria .dijitAlignTop .dijitTabCloseButtonChecked +{ + border-bottom-color:transparent; + vertical-align:bottom; +} + +.soria .dijitAlignBottom .dijitTabChecked, +.soria .dijitAlignBottom .dijitTabCloseButtonChecked +{ + border-top-color:transparent; + -moz-border-radius:2px 2px 0px 0px; /* eliminate some border detritrus on moz */ +} + +.soria .dijitAlignLeft .dijitTabChecked, +.soria .dijitAlignLeft .dijitTabCloseButtonChecked +{ + border-right-color:white; +} + +.soria .dijitAlignRight .dijitTabChecked, +.soria .dijitAlignRight .dijitTabCloseButtonChecked +{ + border-left-color:white; +} + + +/* make space for a positioned close button */ +.soria .dijitTab .dijitClosable { + position: relative; + padding:6px 24px 4px 10px; +} + +.soria .dijitTab .dijitClosable .closeImage { + position:absolute; + top: 5px; + right: 3px; + height: 15px; + width: 15px; + padding: 0; + margin: 0; + background: url("images/tabClose.png") no-repeat right top; +} + +.soria .dijitTabCloseButton .dijitClosable .closeImage { + background-image : url("images/tabClose.png"); +} + +.soria .dijitTabCloseButtonHover .dijitClosable .closeImage { + background-image : url("images/tabCloseHover.png"); +} + +.soria .dijitAlignLeft .dijitTab .dijitClosable { + padding:6px 10px 4px 20px; +} + +/* correct for IE6. + We cant force hasLayout as that blows out the shrink wrapped tabs + ..so we shim in the closeImage position properties instead +*/ +.dj_ie6 .soria .dijitAlignLeft .dijitTab .dijitClosable .closeImage { + left:-20px; +} + +.soria .dijitAlignBottom .dijitTab .dijitClosable .closeImage { + top: auto; + bottom: 5px; + right: 2px; +} + +.soria .dijitAlignLeft .dijitTab .dijitClosable .closeImage { + top: 2px; + left: 5px; +} + +/* SplitContainer */ + +.soria .dijitSplitContainerSizerH { + background:url("images/splitContainerSizerH.png") repeat-y #fff; + border:0; + border-left:1px solid #ccccff; + border-right:1px solid #ccccff; + width:7px; +} + +.soria .dijitSplitContainerSizerH .thumb { + background:url("images/splitContainerSizerH-thumb.png") no-repeat center center; + left:0px; + width:6px; + height:36px; +} + +.soria .dijitSplitContainerSizerV { + background:url("images/splitContainerSizerV.png") repeat-x #fff; + border:0; + border-top:1px solid #bfbfbf; + border-bottom:1px solid #bfbfbf; + height:7px; +} + +.soria .dijitSplitContainerSizerV .thumb { + background:url("images/splitContainerSizerV-thumb.png") no-repeat center center; + top:0px; + width:26px; + height:6px; +} + + +/* Dialog */ + +.soria .dijitDialog { + margin:0; padding:0; + background: #eee; + border: 1px solid #4f8ce5; + border-top:0px; + -webkit-box-shadow: 0px 3px 7px #adadad; +} + +.soria .dijitDialog .dijitDialogTitle { + border-top: none; + border-left: none; + border-right: none; +} + +.soria .dijitDialog .dijitDialogPaneContent { + background: #ffffff; + border:none; + border-top: 1px solid #b7cdee; /* #cddde9; /* w/out this, an

    on the top line causes a gap between the .content and .label */ + padding:10px; + outline:0; + +} + +.soria .dijitDialogTitleBar { + /* outer container for the titlebar of the dialog */ + background:#4f8ce5 url("images/gradientTopBg.png") repeat-x top left; + /* border: 1px solid #bfbfbf; */ + padding: 4px 8px 2px 4px; + cursor: move; + outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */ +} + +.soria .dijitDialogTitle { + /* typography and styling of the dialog title */ + font-weight: bold; + color:#fff; + padding: 8px 12px 8px 12px; + outline:0; +} + +.soria .dijitDialogCloseIcon { + /* the default close icon for the dialog */ + background : url("images/tabClose.png") no-repeat right top; + float: right; + position: absolute; + vertical-align: middle; + right: 5px; + top: 5px; + height: 22px; + width: 22px; + cursor: pointer; +} +.dj_ie6 .soria .dijitDialogCloseIcon { + background-image: url("images/tabClose.gif"); +} + +.soria .dijitDialogContent { + /* the body of the dialog */ + padding: 8px; + /* border-bottom:1px solid #4f8ce5; */ +} + +/*Tooltip*/ + +.soria .dijitTooltip, +.soria .dijitTooltipDialog { + /* the outermost dom node, holding the connector and container */ + opacity: 0.95; + background: transparent; /* make the area on the sides of the arrow transparent */ +} + +.dijitTooltipBelow { + /* leave room for arrow above content */ + padding-top: 13px; +} + +.dijitTooltipAbove { + /* leave room for arrow below content */ + padding-bottom: 13px; +} + +.soria .dijitTooltipContainer { + /* + The part with the text. + + NOTE: + FF doesn't clip images used as CSS bgs if you specify a border + radius. If you use a solid color, it does. Webkit gets it right. + Sigh. + background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left; + */ + background: #dedede url("images/gradientBottomBg.png") repeat-x bottom left; + border:1px solid #b6c7d5; + padding:0.45em; + border-radius: 6px; + -moz-border-radius: 7px; + -webkit-border-radius: 6px; +} +.soria .dijitTooltipContents { + outline:0; /* the node that gets focus */ +} + +.soria .dijitTooltipConnector { + /* the arrow piece */ + border:0px; + z-index: 2; + background:url("images/tooltips.png") no-repeat; + width:16px; + height:14px; +} + +.soria .dijitTooltipABRight .dijitTooltipConnector { + left: auto !important; + right: 3px; +} + +.soria .dijitTooltipBelow .dijitTooltipConnector { + /* the arrow piece for tooltips below an element */ + top: 0px; + left: 3px; + background-position:-48px 0px; +} + +.soria .dijitTooltipAbove .dijitTooltipConnector { + /* the arrow piece for tooltips above an element */ + bottom: 0px; + left: 3px; + background-position:-16px 0px; +} + +.soria .dijitTooltipLeft { + padding-right: 13px; +} +.dj_ie6 .soria .dijitTooltipLeft { + padding-right: 15px; +} +.soria .dijitTooltipLeft .dijitTooltipConnector { + /* the arrow piece for tooltips to the left of an element, bottom borders aligned */ + right: 0px; + bottom: 7px; + background-position:0px 0px; +} + +.soria .dijitTooltipRight { + padding-left: 13px; +} +.soria .dijitTooltipRight .dijitTooltipConnector { + /* the arrow piece for tooltips to the right of an element, bottom borders aligned */ + left: 0px; + bottom: 7px; + background-position:-32px 0px; +} +.dj_ie6 .soria .dijitTooltipRight .dijitTooltipConnector { + background-image: url("images/tooltipConnectorLeft.gif"); +} + +/* Accordion */ +.soria .dijitAccordionPane .dijitAccordionTitle { + background:#b7cdee url("images/gradientTopBg.png") repeat-x top left; + border-left:1px solid #8ab2ee; + border-right:1px solid #8AB2EE; + padding:5px 5px 2px 5px; + color:#333; +} + +.soria .dijitAccordionPane-selected .dijitAccordionTitle { + background: #4f8ce5 url("images/gradientTopBg.png") repeat-x top left; + color:#fff; + border-left:1px solid #4f8ce5; + border-right:1px solid #4f8ce5; + padding: 5px 5px 2px 5px; + font-weight: bold; +} + +.soria .dijitAccordionArrow { background:url("images/arrows.png") no-repeat center center; } +/* .dj_ie6 .soria .dijitAccordionArrow { background:url("images/arrows.gif") no-repeat center center; } */ +.soria .dijitAccordionPane .dijitAccordionArrow { +/* background:url("images/arrows.png") no-repeat; */ + background-position: -32px 0px; + width:16px; + height:16px; + margin-top:0px; +} +/* .dj_ie6 .soria .dijitAccordionPane .dijitAccordionArrow { + background-image: url("images/arrows.gif"); +} +*/ +.soria .dijitAccordionPane-selected .dijitAccordionArrow { + /* background:url("images/arrowDown.png") no-repeat; */ + background-position: 0px 0px; + margin-top:0px; +} +/* .dj_ie6 .soria .dijitAccordionPane-selected .dijitAccordionArrow { */ +/* background-image: url("images/arrows.gif"); +} + */ + +.soria .dijitAccordionPane .dijitAccordionBody { + background: #fff; + border:1px solid #4f8ce5; +} + +/* Tree */ +.soria .dijitTreeNode { + margin-left: 19px; + cursor:pointer; + zoom: 1; +} + +.soria .dijitTreeIsRoot { + margin-left: 4px; +} + +/* left vertical line (grid) for all nodes */ +.soria .dijitTreeIsLast { + background: transparent; +} +.soria .dijitTreeExpando { + width: 18px; + height: 18px; + cursor:pointer; +} + +.soria .dijitTreeContent { + min-height: 18px; + min-width: 18px; + margin-left:16px; + padding-top:3px; + padding-left:1px; +} + + +.soria .dijitTreeExpand { + width: 18px; + height: 18px; + background-repeat : no-repeat; +} + +/* same style as IE selection */ +.soria .dijitTreeNodeEmphasized { + background-color: Highlight; + color: HighlightText; +} + +/* don't use :focus due to opera and IE's lack of support on div's */ +.soria .dijitTreeLabelFocused { + outline:0; + border-top:0; + border-bottom:2px solid #4f8ce5; + background-color:#b7cdee; +} + +/* FIXME: convert to sprites */ +.soria .dijitTreeExpandoOpened { background-image: url('images/treeExpand_minus.gif'); } +.soria .dijitTreeExpandoClosed { background-image: url('images/treeExpand_plus.gif'); } + .soria .dijitTreeExpandoLeaf { } +.soria .dijitTreeExpandoLoading { background-image: url('images/treeExpand_loading.gif'); } + + + +/* Calendar*/ + +.soria .dijitCalendarIncrementControl { + /* next/prev month buttons */ + width:16px; + height:16px; +} +.dj_ie6 .soria .dijitCalendarIncrementControl { + padding:.1em; +} + +.soria .dijitCalendarIncreaseInner, +.soria .dijitCalendarDecreaseInner { + display:none; +} + +.soria .dijitCalendarDecrease { + background:url("images/arrows.png") no-repeat center center; + background-position:-16px 0px; +} +.dj_ie6 .soria .dijitCalendarDecrease { + background-image:url("images/arrows.gif"); +} + +.soria .dijitCalendarIncrease { + background:url('images/arrows.png') no-repeat center center; + background-position:-48px 0px; +} +.dj_ie6 .soria .dijitCalendarIncrease { + background-image:url("images/arrows.gif"); +} + +.soria table.dijitCalendarContainer { + font-size: 100%; + border-collapse: collapse; + border-spacing: 0; + border: 1px solid #333; + margin: 0; +} + +.soria .dijitCalendarMonthContainer th { + /* month header cell */ + background:#b7cdee url("images/gradientTopBg.png") repeat-x top; + background-position:0 -1px; + padding-top:.3em; + padding-bottom:.1em; +} +.dj_ie6 .soria .dijitCalendarMonthContainer th { + padding-top:.1em; + padding-bottom:0em; +} + +.soria .dijitCalendarDayLabelTemplate { + /* day of week labels */ + background:#b7cdee url("images/gradientBottomBg.png") repeat-x bottom; + font-weight:normal; + background-position:0 -28px; + padding-top:.15em; + padding-bottom:0em; + border-top: 1px solid #333; + color:#293a4b; + text-align:center; +} + +.soria .dijitCalendarMonthLabel { + /* day of week labels */ + color:#293a4b; + font-size: 0.75em; + font-weight: bold; + text-align:center; +} + +.dj_ie7 .soria .dijitCalendarDateTemplate, +.dj_ie6 .soria .dijitCalendarDateTemplate { + font-size: 0.8em; +} + +.soria .dijitCalendarDateTemplate { + /* style for each day cell */ + font-size: 0.9em; + font-weight: bold; + text-align: center; + padding: 0.3em 0.3em 0.05em 0.3em; + letter-spacing: 1px; +} + + +.soria .dijitCalendarPreviousMonth, +.soria .dijitCalendarNextMonth { + /* days that are part of the previous or next month */ + color:#999999; + background-color:#f8f8f8 !important; +} + +.soria .dijitCalendarPreviousMonthDisabled, +.soria .dijitCalendarNextMonthDisabled { + /* days that are part of the previous or next month - disabled*/ + background-color:#a4a5a6 !important; +} + +.soria .dijitCalendarCurrentMonth { + /* days that are part of this month */ + background-color:white !important; +} + +.soria .dijitCalendarCurrentMonthDisabled { + /* days that are part of this month - disabled */ + background-color:#bbbbbc !important; +} + +.soria .dijitCalendarCurrentDate { + /* cell for today's date */ + text-decoration:underline; + font-weight:bold; +} + +.soria .dijitCalendarSelectedDate { + /* cell for the selected date */ + background-color:#4f8ce5 !important; + color:#fff !important; +} + + +.soria .dijitCalendarYearContainer { + /* footer of the table that contains the year display/selector */ + background:#b7cdee url("images/gradientBottomBg.png") repeat-x bottom; + border-top:1px solid #333; +} + +.soria .dijitCalendarYearLabel { + /* container for all of 3 year labels */ + margin:0; + padding:0.4em 0 0.25em 0; + text-align:center; +} + +.soria .dijitCalendarSelectedYear { + /* label for selected year */ + color:#fff; + padding:0.2em; + padding-bottom:0.1em; + background-color:#4f8ce5 !important; +} + +.soria .dijitCalendarNextYear, +.soria .dijitCalendarPreviousYear { + /* label for next/prev years */ + color:black !important; + font-weight:normal; +} + + + + +/* inline edit boxen */ +.soria .dijitInlineValue { + /* span around an inline-editable value when NOT in edit mode */ + padding:3px; + margin:4px; +} + + +/* MOW: trying to get this to look like a mini-dialog. Advised? */ +.soria .dijitInlineEditor { + /* fieldset surrounding an inlineEditor in edit mode */ + display: inline-block; + display: -moz-inline-stack; +} +.dj_ie6 .dijitInLineEditor { + display:inline; +} + +.dijitInlineEditor .saveButton, +.dijitInlineEditor .cancelButton { + margin:3px 3px 3px 0px; +} + + +/* spinner */ +.soria .dijitSpinner {} +.soria .dijitSpinner input { +} + +/* dijit.ProgressBar */ +.soria .dijitProgressBar { + margin:2px 0px 2px 0px; +} + +.soria .dijitProgressBarEmpty{ + /* outer container and background of the bar that's not finished yet*/ + background:#b7cdee url("images/gradientTopBg.png") repeat-x top left; + border-color: #333; +} + +.soria .dijitProgressBarTile{ + /* inner container for finished portion when in 'tile' (image) mode */ + background:#4f8ce5 url("images/gradientTopBg.png") repeat-x top left; +} + +.soria .dijitProgressBarLabel { + /* Set to a color that contrasts with both the "Empty" and "Full" parts. */ + color:#293a4b; +} + +.soria .dijitProgressBarIndeterminate .dijitProgressBarTile { + /* use an animated gif for the progress bar in 'indeterminate' mode */ + background:#b7cdee url("images/progressBarAnim.gif") repeat-x top left; /* FIXME: make a white/alpha animation to overlay a colored node */ +} + +/* dijit.Slider(s) */ +.soria .dijitHorizontalSliderProgressBar { + border-color: #333; + background: #4f8ce5 url("images/gradientTopBg.png") repeat-x top left; + background-position:0 -1px; + zoom:1; +} + +.soria .dijitVerticalSliderProgressBar { + border-color: #333; + background: #4f8ce5 url("images/sliderFullVertical.png") repeat-y bottom left; +} + +.soria .dijitVerticalSliderRemainingBar { + border-color: #333; + background: #b7cdee url("images/sliderEmptyVertical.png") repeat-y bottom left; +} + +.dijitHorizontalSliderRemainingBar { + border-color: #333; + background: #b7cdee url("images/gradientTopBg.png") repeat-x top left; + background-position:0 -1px; +} + +.soria .dijitSliderBar { + border-style: solid; + outline:1px; + /* border-color: #b4b4b4; */ +} + +.soria .dijitHorizontalSliderImageHandle { + border:0px; + width:16px; + height:16px; + background:url("images/preciseSliderThumb.png") no-repeat center center; + cursor:pointer; +} +.dj_ie6 .dijitHorizontalSliderImageHandle { + background-image:url("images/preciseSliderThumb.gif"); +} + +.soria .dijitHorizontalSliderLeftBumper { + display:none; + border-left-width: 1px; + border-color: #333; + background: #4f8ce5 url("images/sliderFull.png") repeat-x top left; +} + +.soria .dijitHorizontalSliderRightBumper { + display:none; + background: #b7cdee url("images/sliderEmpty.png") repeat-x top left; + border-color: #333; + border-right-width: 1px; +} + +.soria .dijitVerticalSliderImageHandle { + border:0px; + width:16px; + height:16px; + background:url("images/sliderThumb.png") no-repeat center center; + cursor:pointer; +} + +.soria .dijitVerticalSliderBottomBumper { + border-bottom-width: 1px; + border-color: #333; + background: #4f8ce5 url("images/sliderFullVertical.png") repeat-y bottom left; +} + +.soria .dijitVerticalSliderTopBumper { + background: #b7cdee url("images/sliderEmptyVertical.png") repeat-y top left; + border-color: #333; + border-top-width: 1px; +} + +/* ICONS */ +.soria .dijitEditorIcon { + background-image: url('images/editor.gif'); /* editor icons sprite image */ + background-repeat: no-repeat; + width: 18px; + height: 18px; + text-align: center; +} +.soria .dijitEditorIconSep { background-position: 0px; } +.soria .dijitEditorIconBackColor { background-position: -18px; } +.soria .dijitEditorIconBold { background-position: -36px; } +.soria .dijitEditorIconCancel { background-position: -54px; } +.soria .dijitEditorIconCopy { background-position: -72px; } +.soria .dijitEditorIconCreateLink { background-position: -90px; } +.soria .dijitEditorIconCut { background-position: -108px; } +.soria .dijitEditorIconDelete { background-position: -126px; } +.soria .dijitEditorIconForeColor { background-position: -144px; } +.soria .dijitEditorIconHiliteColor { background-position: -162px; } +.soria .dijitEditorIconIndent { background-position: -180px; } +.soria .dijitEditorIconInsertHorizontalRule { background-position: -198px; } +.soria .dijitEditorIconInsertImage { background-position: -216px; } +.soria .dijitEditorIconInsertOrderedList { background-position: -234px; } +.soria .dijitEditorIconInsertTable { background-position: -252px; } +.soria .dijitEditorIconInsertUnorderedList { background-position: -270px; } +.soria .dijitEditorIconItalic { background-position: -288px; } +.soria .dijitEditorIconJustifyCenter { background-position: -306px; } +.soria .dijitEditorIconJustifyFull { background-position: -324px; } +.soria .dijitEditorIconJustifyLeft { background-position: -342px; } +.soria .dijitEditorIconJustifyRight { background-position: -360px; } +.soria .dijitEditorIconLeftToRight { background-position: -378px; } +.soria .dijitEditorIconListBulletIndent { background-position: -396px; } +.soria .dijitEditorIconListBulletOutdent { background-position: -414px; } +.soria .dijitEditorIconListNumIndent { background-position: -432px; } +.soria .dijitEditorIconListNumOutdent { background-position: -450px; } +.soria .dijitEditorIconOutdent { background-position: -468px; } +.soria .dijitEditorIconPaste { background-position: -486px; } +.soria .dijitEditorIconRedo { background-position: -504px; } +.soria .dijitEditorIconRemoveFormat { background-position: -522px; } +.soria .dijitEditorIconRightToLeft { background-position: -540px; } +.soria .dijitEditorIconSave { background-position: -558px; } +.soria .dijitEditorIconSpace { background-position: -576px; } +.soria .dijitEditorIconStrikethrough { background-position: -594px; } +.soria .dijitEditorIconSubscript { background-position: -612px; } +.soria .dijitEditorIconSuperscript { background-position: -630px; } +.soria .dijitEditorIconUnderline { background-position: -648px; } +.soria .dijitEditorIconUndo { background-position: -666px; } +.soria .dijitEditorIconWikiword { background-position: -684px; } + +/* + * IE6: can't display PNG images with gradient transparency. + * Want to use filter property for those images, but then need to specify a path relative + * to the main page, rather than relative to this file... using gifs for now + */ + +.dj_ie6 .soria .dijitInputField, +.dj_ie6 .soria .dijitComboBoxInput, +.dj_ie6 .soria .dijitSpinnerInput + { + background:transparent; + /* FIXME: un-comment when a pretty version of .gif is made */ + /* background-image: url("images/dojoTundraGradientBg.gif"); */ +} + +/** TODO: add all other PNGs here that need this */ +/**** Disabled cursor *****/ +.soria .dijitDisabledClickableRegion, /* a region the user would be able to click on, but it's disabled */ +.soria .dijitSpinnerDisabled *, +.soria .dijitButtonDisabled *, +.soria .dijitDropDownButtonDisabled *, +.soria .dijitComboButtonDisabled *, +.soria .dijitComboBoxDisabled * +{ + cursor: not-allowed !important; + cursor: url("no.gif"), not-allowed, default; +} + +/* DnD avatar-specific settings */ +/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */ +.soria .dojoDndAvatar {font-size: 75%; color: black;} +.soria .dojoDndAvatarHeader td {padding-left: 20px; padding-right: 4px; height:16px; width:16px; } +.soria .dojoDndAvatarHeader {background: #ccc;} +.soria .dojoDndAvatarItem { background: #eee;} +.soria.dojoDndMove .dojoDndAvatarHeader { background-image: url(images/dndNoMove.png); background-repeat: no-repeat;} +.soria.dojoDndCopy .dojoDndAvatarHeader { background-image: url(images/dndNoCopy.png); background-repeat: no-repeat;} +.soria.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndMove.png); background-repeat: no-repeat;} +.soria.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndCopy.png); background-repeat: no-repeat;} diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/soria_rtl.css b/spring-faces/src/main/java/META-INF/dijit/themes/soria/soria_rtl.css new file mode 100644 index 00000000..db329d59 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/soria/soria_rtl.css @@ -0,0 +1,96 @@ +@import url("../dijit_rtl.css"); + +/* Dialog */ +.dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon { + background : url("images/tabClose.png") no-repeat left top; + float: left; + right: auto; + left: 5px; +} + +.dijitRtl .dijitDialogTitleBar { + background: #fafafa url("images/titleBarBg.gif") repeat-x bottom left; + padding: 4px 4px 2px 8px; +} + +/* Menu */ + +.dijitRtl .dijitMenuItem .dijitMenuItemIcon { + padding-left: 3px; + padding-right: 0px; +} + +.dijitRtl .dijitMenuItem .dijitMenuExpandEnabled { + background:url('images/arrowLeft.png') no-repeat bottom center; +} + +/* TitlePane */ +.dijitRtl .dijitClosed .dijitTitlePaneTitle .dijitArrowNode { + background:url('images/arrowLeft.png') no-repeat center center; +} + +/* Tree */ +.dijitRtl .dijitTreeContainer .dijitTreeNode { + background-image : url('images/i_rtl.gif'); + background-position : top right; + margin-left: auto; + margin-right: 19px; +} + +.dijitRtl .dijitTreeContainer .dijitTreeIsRoot { + margin-left: auto; + margin-right: 0; +} + +.dijitRtl .dijitTreeContainer .dijitTreeIsLast { + background-image: url('images/i_half_rtl.gif'); +} + +.dijitRtl .dijitTreeContainer .dijitTreeContent { + margin-left: auto; + margin-right: 18px; + padding-left: auto; + padding-right: 1px; +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpandoOpened { + background-image: url('images/treeExpand_minus_rtl.gif'); +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpandoClosed { + background-image: url('images/treeExpand_plus_rtl.gif'); +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpandoLeaf { + background-image: url('images/treeExpand_leaf_rtl.gif'); +} + +/* ToolTip */ + +.dj_ie .dijitRtl .dijitTooltipLeft { + margin-right: 0px; + margin-left: 13px; +} + +.dj_ie .dijitRtl .dijitTooltipRight { + margin-left: 26px; + margin-right: -13px; +} + +.dj_ie .dijitRtl .dijitTooltipDialog { + zoom:1 !important; +} + +/* Calendar */ + +.dijitRtl .dijitCalendarDecrease { + background:url(images/arrowRight.png) no-repeat center center; + margin-left:0; + margin-right:2px; +} + +.dijitRtl .dijitCalendarIncrease { + background:url(images/arrowLeft.png) no-repeat center center; + margin-right:0; + margin-left:4px; +} diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/templateThemeTest.html b/spring-faces/src/main/java/META-INF/dijit/themes/templateThemeTest.html new file mode 100644 index 00000000..adfeb5cf --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/templateThemeTest.html @@ -0,0 +1,182 @@ + + + + Test Widget Templates in Multiple Themes + + + + + + + + +

    Tundra

    +
    + + + +

    + + + +

    + + + +

    + + + + +

    + + + + + +
    +
    + +

    Noir

    +
    +
    +
    + +

    a11y mode

    +
    +
    +
    + + + + diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/themeTester.html b/spring-faces/src/main/java/META-INF/dijit/themes/themeTester.html new file mode 100644 index 00000000..e4e6ca41 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/themeTester.html @@ -0,0 +1,773 @@ + + + Dijit Theme Tester + + + + + + + + + + + +
    Loading themeTester ...
    + + + +
    +
    + + + + +
    +

    Dijit Theme Test Page

    + + +
    + +
    + +
    +

    Tooltips:

    +
    + +
    + +

    Dialogs:

    + + +
    + Show Tooltip Dialog +
    + + + + + + + + + + + +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    + + +
    + +
    + +

    Dijit Color Palette(7x10)

    +
    +
    + Test color is: + +

    +
    +
    + + + +
    + + +
    + + +
    + + + + + + + + + + +
    + +

    dijit.Editor:

    + +
    + +
    +
    + + +

    dijit.form.InLineEditBox + dijit.form.TextBox

    + + This is an InLine Sentence, + + + + And Keep the text around me satic. + +
    + +

    dijit.form.InlineEditBox + dijit.form.Textarea

    + + (HTML before) +
    +

    + +

    +
    + (HTML after) + +

    + These links will + disable / + enable + the text area above. +

    + +
    + +

    dijit.form.DateTextBox:

    + + (HTML before) + + + + (HTML after) + +
    + + +

    dijit.form.FilteringSelect + Inline + remote data store:

    + (HTML BEFORE) +

    + +

    + (HTML AFTER) + +
    + + + + + + +
    + + +
    + + +
    +

    You can explore this single page after applying a Theme + for use in creation of your own theme.

    + +

    I am a Split Container, containing a Split Container on + the right. TabContainer on the top right, Bottom-aligned Tab Container + bottom right. AccordionPane on the left.

    + +

    There is a right-click [context] pop-up menu here, as well.

    +
    + +
    + +
    + +
    +

    I am the last Tab

    + +
    + +
    + +
    + +
    +
    + + + + + + diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.gif new file mode 100644 index 0000000000000000000000000000000000000000..0da12393b3b94174a900fc06715629bdf5ec502d GIT binary patch literal 65 zcmZ?wbhEHbWMtrCSj50^^ytyen>R08wrtLvIn$<1n>=~)#EBFC|NpP}lZBCift^8z T0SG{98JO8JT$LHs)flV+O0N}e literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.png new file mode 100644 index 0000000000000000000000000000000000000000..ac118dd76d972f112bb410b4285c9264ee61ae72 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrA!3HEtFPV4&DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MVg*2jv*44lYjjF{$83*;iJ6E9R@*b$$x);oAbMvGpAuw@%El?AKr>mdKI;Vst07ot-_W%F@ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoUITundra06.psd b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoUITundra06.psd new file mode 100644 index 0000000000000000000000000000000000000000..38d292b949299d59e697b95a0868de1222c4a33e GIT binary patch literal 1979219 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.gif new file mode 100644 index 0000000000000000000000000000000000000000..e9dbe3900d268ae4e8413c93815865beaea7289f GIT binary patch literal 336 zcmZ?wbhEHbC>i7n>uwW&_)L80mYvzj0_BF z3_2hqL4IOj%XOHX*^pr)$9u#fLrX_Zq_@o|QlzbyuRTO+s#!nl#iC9RCH{^lhMGZI zj14jWPDrS$9F-~1sO=L`QeY`!6tDA;R8r+D;#5^t^c0q#z{VsuLEMX5L|H|gXM$Lg WFSmr8f})&An2(E_hnJHhgEat>rgyXe literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..a5e89e26c76e2bf509f7b7e94434e8009c6d7b0b GIT binary patch literal 506 zcmVz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-a7jc#RCwBA{Qv(y0|=~Kxl$HL1p~1=5F0ZMt2V#E^|JScyVAX7FYz&Nyj3DMlAnpWeIt~y(%$k~- zvOq;0-@bkG`}5}y!l=Z|9sfl*%?5X zhldAjDhmq>15ljd@87>nKn=n_fBy6bsyzS@Kp+k7OiWA+Ag2Tc1u=lw=wQQ!4U8aL zflhP>2q2KGG04OZA3iW#xNreO@%{Vv8J<0R#sIVd#5D#8Ah2;D(?KSmJ$shn)2?{=DW@fO&!-o&S z803Ugr%u5&b8~ZpsGR@-1k$h;6waW~0XYlgACN5|#ZY&H6n_SW8YnK-0t66B!~vb; w4^jlO9wZL36=X8d5O~A^1P~*sNdq9j0J_<)aU~r74FCWD07*qoM6N<$f*Mq{Gynhq literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.gif new file mode 100644 index 0000000000000000000000000000000000000000..387d20daf7cace9b0e4501c10f8da7ede3555870 GIT binary patch literal 332 zcmZ?wbhEHbqc&6_uG+_-V=+O;!h&Ky2` z_|Tz42M-=RaNxlD_3PKJUAuDS$`vbCEMLBS>C&Z3mMmGkc=4h|ixw_ixM0D8`Sa(` zn>TOn+_`h+%$YrV_N-a6X3m^BW5$f>)2C0HHf`$EsX)6Js0|cz@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-eMv+?RCwBA{Qv(y0|=~Kxl$HL1p~1=5F0ZMt2V#E^|JScyVAX7FYz&Nyj3DMlAnpWeIt~y(%$k~- zvOq;0-@bkG`}5}y!I^Udl>7hl=TAnUEg*S!fB*t%Fb26(OG}Hv!omWq2@Qb#3Dg9VGX@ACCXfh70E9tK zLI*4?EGT?{00L<^`}_BAh8s6-Ff3iVl;P~zvkV|UIsp0;9LxX#1k$h*ggTeghh`t|E58i1Y#Q9A(w2xQ+{Aa>y4;qm|Q;RD!dU%!53*uQ^2D1^X#pyJO! zr|ko&1qdLNhy&W-5AqzydXPBCR*=cSK!HabKmak4nlu0c3;-(Sv9n^6{e}Pl002ov JPDHLkV1j)d%On5* literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.gif new file mode 100644 index 0000000000000000000000000000000000000000..a37db882a6c288a9415c283f574589a050c138ae GIT binary patch literal 335 zcmZ?wbhEHbTM>zkYq|)~%a2Z(h50 z?ZSl%hYue5bLPw$GiFSmK7HD>X;Y_81zN{IRiOBjg^__ll|ct& zD#%X^Y&i#lR!%5zQ0Q}Uj4(3L5ba&&lqk{0*XQOWG|^0e?c%4G3z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ-ib+I4RCwBA{Qv(y0|=~Kxl$HL1p~1=5F0ZMt2V#E^|JScyVAX7FYz&Nyj3DMlAnpWeIt~y(%$k~- zvOq;0-@bkG11aX<;9z+F{yoE=KYtj2Vj#u;SXo&`fwbJ!t5=T#1P~L*8UOzM^ZEPt zFT?NOzZrsqgBe_1T^WRggcw*@SQx&4|IYOF>sMir?I5)P0mK4wGZPaN14si1gMg~4 zDuc4JGQ;J|ml@8UJ^TOX&!3DyTR={92M8dL24j#rLC%2%00@8#(bv~!(9qCeJay_6 z!|mI*K^lw!0tnLex2div11HC zCxQI~QVS43AaWF(n z_y9H$WHPdUfQml@ZP*7=3lKmk5eGEgA7m5Ay&!RBW@fO-KqtZ@4j_OSNlh960R{j+ Wy0{ePLI_d-0000A78(I{qp6@`}gnPym|BF$&;HmZ=OAS z_VD4uhYlS&c<|tX0|)l+-@kkJ?yXz5Zr;3k{rdIm)~#E)a^;E@E0!-`zHHgDrAwDC zS+ZpD;>C*=En2v6;erJV=Fgu$Z{EDQbLY;PGiUbf*|TQNnmKdkj2SbgPoF+*+O(-t zrvhzfpbRMfWMO1r&|=U583XbY16!WM)UF8`K5D%zjw`Hmbf)_~Pl}Xj>lNToJ-Ebf zGOMAp(?Xt(AgvV5I6qA`1_sN87H-^KCNsp{G?m@O)wqg_xf(rWq?p}1{rUgjo|$7!%+4S&4_4-l)&kPT4hJF??r|Q;K79DFd@~CJQ-|OZ z#uYb&PUx{G)eHQ;zCJ$TYEDiLPft&e!ZSC8cPv>}d;$(ZK=lA#X&)?tQ&tqTrhhcV3 za`NGX^z`Eg4jnr5;qUMAW$WYjb2aC%uVm#=n7~%9rl!U=fo(!@NlA$W3k!?HlBG)} zr%ah5(NOfi{@+v12@M-n=Q`y>sUdkDHqt&j|*F1_!Bg|Ni}*-PqpVe(=D721Z#4DJi3ljt&Ec zznpw&4Gc+)t;PmFY#babUR+Szpfp3+kwKzLp}#qo8SK8ctqyM(N*4d`l{P=XmDn|L z&Ns;y(`yyBGBCCX6*?^c*=)nUNlxY5nKL|Qk{QZ2kAPu1@yZfLfdmG-?j>;!rqk{N PV~@ep)z4*}Q$iB}P~67; literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonActive.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonActive.png new file mode 100644 index 0000000000000000000000000000000000000000..15002b152f4caf7ab20cef32419952e8ffe95eed GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#4!2~3EjvmefQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JinKjl978H@CDr`?rpqj`!NADqQJSIQ0fxHLFBcB}cz#}9 iSE&m$%pzf%#Yjlt8^&t;ucLK6TF9xL4d literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonDisabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonDisabled.png new file mode 100644 index 0000000000000000000000000000000000000000..70766f4f1b9ab66ec1bde3724a8a08dd32555100 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#4!2~3EjvmefQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiZnf4978H@CDnX>#>*^WV0eI`>FB5b|LZRu>6of|H)YMc h8U}fi7AzZCsS>Jip)G+978H@CH?vT-=0~*;NS1>{HK0>e$L-=lu11K=kM?O uQ&_Jz_8vXLz`W%2q;-4`wOaTZfL6&x8-43w>bMCsfx*+&&t;ucLK6VN?lTzx literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonHover.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2a84ada23eda37ba53cba721e4d7a682985096 GIT binary patch literal 159 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#4!2~3EjvmefQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiX1&%978H@CH?vFmY-Q-gTbHw{HcF`f9G%h`u%>q2KO?a zBft9BP48@E4E|<)pO1)z4*} HQ$iB}s%Si8 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarDayLabel.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarDayLabel.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbc3ec92757bc4589bd8655938f1b3c99bd337e GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#2!2~3yhcs3IDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MS-3!jv*DdO!^#!jyP~IC7%BO-=a)p^SM?hspAbst>0X~ zR_fio6>|B|@=dKz)DlAVH&z(#e9f(xe}6N};YAmIbdT1C literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarMonthLabel.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarMonthLabel.png new file mode 100644 index 0000000000000000000000000000000000000000..87645dbe424d5a2ab1375518e5332a4aa45c2a73 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#2!2~3yhcs3IDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MWLQ9jv*DdLi!F0G8l3&9o+ce>#|c{!@hGiDPdDS%xPY! z#A(0jvhIRqnQdv>hj8U}fi7AzZCsS>JiXuE+978H@)%Y{=F(`5@I`)6Q&hmM?Zsnz)7Svd*${8sg zdwZpd>;B3EGQq13x+rJeyrC!6lHamv*_-lr4s1GeIQ6b>t#B24U6ZMM_1F@A>3w3m e{#m~eOkmKT5x^6Cajgl^4hBzGKbLh*2~7ZQ5k8^- literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxActive.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxActive.png new file mode 100644 index 0000000000000000000000000000000000000000..ba901f5f3988469d92408d45aa2d351935d35278 GIT binary patch literal 352 zcmV-m0iXVfP)p0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz0!c(cRCwBAoHc6}1JQs5h<$u~h*7#_ z%NCGoc6N3=ihlg~!NI`+VKV_SBX02e_3PHwRtTGb>K89wxVyU>8ymw_vp`g1I^fr@ zUkM2b&!0b6R#t{9z^S^Xrsl$h3+vafH#9Uv2@|;LH*emsv9a;-@f|#P5E!x(Cr-4r zwM8}p;qG0#cA1%(&7C{<_wV2N`S}3>0ZBxDPn$Lk7-a9?zwhem z!s0@pjbC8^r~)E5VZwy37yzgeWHu8M6GTyNZtkmBuYgWUNlAeVqQ^WdD=VDe(b18Z ym~STh74<9t0000k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XoIG6|Ln>}1?Wy{z#eA`Wwd3f~qn&}jK0WnTV+&%)T;-_u z^Z)<<3W0y$-`}tJGVf97WI1aeA0L$!|2{lqp16vUiHE_dOChgveKN>q22WQ%mvv4F FO#mEBH|PKW literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxEnabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxEnabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a8fe8d4b810b8c5e9fd0e6627138a6391275201f GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^{2k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XJUm?-Ln>~aId_nkL4kwW!L;vG*ao)Kjtr&Dzczc;PhU29 zrn~j;X&qJ}F4r7BZBu5t@Q&}r8J3dJ+C~3=_Sza6JFLzMmS<#RunSbb8+85CW}ul2 Mp00i_>zopr0D##yu>b%7 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxHover.png new file mode 100644 index 0000000000000000000000000000000000000000..1dfeea8a770b0b32627d1cb23c3bdafed56d5dbf GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^{2k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X+&o}1>Aa6P;9$eB>Yu+1!>W`d1=bA=AMfw4_YC;^ z`+L4n$p7Ep`&q6!$nywYZ9aZ?$<8O&*T<`@n71QCeBvrbCLV^qD}Fus9#i6gCNg-s L`njxgN@xNAr_MQS literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.gif new file mode 100644 index 0000000000000000000000000000000000000000..77237aa5761c1e28e9bc0d23c5ff239f3c4a59c6 GIT binary patch literal 2436 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 Cso>B6 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..b55e264a2cc885123b69f7775f43f828432824c7 GIT binary patch literal 2712 zcmV;J3TO3+P)fzair8%n~CF$t&U?dDnc5y zmVzRJhzN*9P@W6OV*wZF{~h;|b-8yR?5=62{xfIq-96{K=k@)sb61s?mexmuly&RY zsnXNa2aQioPFCH%eS6UO2@@vRjNiWh=%DfYwk6t(rx)_AiZeczEn8+a@a);MhD5d+ z&x+H39~>NPHNLjC)^2zvqSbgNzTNOf>*B|k1TNFK;9kQegUc7Z&RPrBbsS$l)Z@Ll zv~u~9%P$$PF^A90%v9_@E-p^%XgsfrBA(aT?s%a9uCA^YZCYn%C%L(~{oh)Pnz{xG z2?}u7^O?L!eEBpoGEyB75FqxYtE-EutE<;nR8&-R{Te3m*Cz1C`SK&itBmkbjDLsg z-(~!7O^|mZUk>>B`KdiTJjlt(iF$f^sI|3qeM?JAHP^3U5`XO|Jd;=8V_yzej|}!F zcXwCPYP+cP{=@Z!CI7DG`ZY{qyW)r7L#0xgE%o*Fw0G~`{_lo@Nm^S5BXxCk4k4Z; z<1MRrK)*Wlne6!OF@GlK_VMG#|0zB`UOjvEY>J48pwXj8i|fLL3u(cE1)<;=w~JRG ze@0YP)asQhSE^>toJnKGjG^Jfhtt@xV`<*JdB8hyv)^#L4;9G!fxo|hDvv=O8X8Kz zzP{w`?JcfhVPPof{{pvL>IgiO^MhG25vgw{EmO~#K7oP*eaX|qjY32GDSq)xdNcle z0?+O2inmAsYHDg|$&w{BZQ3+h1$gr0iPgnW`uh6JmZG8}v7pj-Yw^a#n(>$4ucCyX z{G48%7%n@0Tj$TDoD&ojlrm+?6hRoam~`vbEy~W$rkgi!Qb$LJAkm^li$LOI+&<6< z|5L^6rM>r=R2W+duGLiQ-`*j>gpS*sLwsk^(ITwGinq5$T``m=2*RLh$(CTxW4_-&m(%lm9O1!0k! z+`W6ZU+MSn-%m%591)~MuEQkv;r3gM@V|hk!1{pjl2-!p(3iAdAt50Y9UYA?#tF## zK0ZD)WXKR!qu?g>>P|)6Bm*@*k$Axig|n;=z+1p0{ynW~GqBn^l0FJ9koke!f_Q zn3xz@1+bNXrrII&!e&gKJb6%fTl?Rca)@pfm(gE-zlWww9B=pj*&4g^Whq-nLE7Bh zTtQ?Al;ZN`%XH?<89I6Lq#zN(3$!;%nnQqxfb?=62hRpU_4pVA>n-{Rfg$ib@E#Dg zS}m^d02mkc-OCGkHN7f_w{=5L7F>v?lbM4mj$k>s-p1l zaFZ6)o*t;7=`lTS>k#+<$hk>JPn@BTwr!+Y)1w`wfMHAuVYXrAuUxqz!X5~W4g?+n ziU6FRKoJJ`So~(r`bu-wliKhkBa8{>ggwQ+bHXeL57B78IW)rWXrm`*m>k}cB8T@M z=H&$Px3@i};ya~O+t?~9iYuPxd`=#LbS>v!ti(FTyVhh9X-o)f#Snkz&K(i&!d;e?l@Z6b!XlaK!(RRW z{c0Y)x9ium?#HjwhQ!xt$DU7V>EgNc=4;<~WdB-NXFLNWh5_2KW5<9-&CSiCjXr_y zHmt&L*hAFIgje4re0n7@?qBK~A(&)zj0K^U0lr5LZ;8m^pXhq{cNhj0)z&#^Frl7E>{swmo{z(%iPJTLmj^&l`=6Hbd z8{_*!AZY*b(^sxLU0n zJ4>1&3Bn(ow_mt$LA>F$#I@No1cDXA`8PZf`nKfR_UwPn$|Y3a*hF7l$)z{q6;`SSj@E>zu32ts~J|O?9RjY&-Xm4*P9BtzC2m-IfA=+)e{j({& zl9@CG-^c!Am&)bq}Rd| zz>4E#SVBUAu>J@IaU@z$P*B6|mg}v)AwC=D`xh@>q{6~NVeR2f;k`jf;B#_vfY;%~ zgxj|n;@OJBEv#m*tCb87tbSxkD}y|FiNR0R{l92jO;Q SQKX�s`bE literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.gif new file mode 100644 index 0000000000000000000000000000000000000000..11dc80027e917ae21b62c878cff935e4a06e301a GIT binary patch literal 2028 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.gif new file mode 100644 index 0000000000000000000000000000000000000000..167a3e0d5d6052990938d0dedf9aff5d37a7cd26 GIT binary patch literal 1676 zcmcJNM^h7F0ERcs&_YO1ilP`rupm-Y0*Hth0*DleqM(9*LauQ2SLrA-2+~3VA#JnC zW?L#Djgx+L#sfLJmpyFxo_U|gK0a#g`&`Z#7=dBjY&@DMa!SF+#l%ETOco;XVo*r` zItU5LGd`9Lh*>FF2ugV=RowMN_dNWzn>!9CgM8xqmY0=t$C0$lF9rDIk8R(^e$dA$ zK^eSXV8s(YQRL&rNW2hMz<*AKMBW=oaZ299CH>L#_95?K-;?7ZI_b}|^Pn_OpNX`YNoGYLN#2hPTB64PZH^>U9 z^}V2!DtNiX5gX&gv=GnwqM0Ku8Im&lUWt$ALkf7R90tU&l#V6}PM`d9$L|+1UOvq$ zr(&}B+Z|?QK%0-oa}nkA+oqTKpO@uN<&@1aH!?h9>+a~(sK8m4Gp)7)+}q)~P!pqH zS#9dPI&+~}bwRB*d^9{%m6u<4v_5@y$+A#gt?T_zSvfeZ8?9=&ar5PT&!;Nz{qVcG zfmanv6OSL=ZkxPyP2chUx!%k$=COwHxfk}KsW--YO>M2F+jysJ@yXpQv#)E~Z6o*k z?pwQR${Lq1zI|ZoH(g#kpM|0{Q4}>raZnT;MX91FT8gqnQS=mLjG`DRN*P75QIy6K zEM%3YPO^&HKvr?Il2vrQWR!h(P)EC`swf`BP32$;fxfT`(V$jfG^iCAO$ip5E$SC$ zi~5DxqJCkvs9%^Z>KA5<`i0q|eqpw#UzjcG7iNq4h1sHhVYaAWm@VqJ1PeuJrYI_k zVxcI56lI>G)KQc+iejcHc8a2*D6NPbvV2)3t2C>~DqqPcmIX4(;4~R!zK4ub zH$X;dnW7?CZm9L@F><5U#et;<5U#et;<5TiV+Q^Lm^jZ2 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.psd b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.psd new file mode 100644 index 0000000000000000000000000000000000000000..0a7bf23a4bf663e3d893c270890452dcc628949f GIT binary patch literal 40142 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndMove.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndMove.png new file mode 100644 index 0000000000000000000000000000000000000000..74af29c08938f718f4238fb5c4f09f6750ae56dc GIT binary patch literal 785 zcmV+s1Md8ZP)7j^8B~!ytm5eA`Qiz4Q=^ARmoN zP$MF=^-@`wf2T=GrHG1(HOKDe{@%OWckgvNtB20v+;cgc-|su;eBU9mEF&xXtVD56 zz7n2BXLYmXU|pFKSlF0b8z27ePcFij`X-McM@W`{5W?@jik{n-Z@JyB8(6|JRuW4P zWf4X$A0?6rAKwkiU432sp=W4gI7!8+A0B*Z8wot^cx@Xe69|MR!7)|97J~&x47GT( zIRK+RAGTBtIy>5DR-Z@?g@hE{1f&i0yV@_fIm#iGNy2KZ!9Cl3$V}a%=b_W-)G8%O zQva*PDm?Cd&==~JFVU?*daAAUiaVZ4AQ;<3Ie$n6XGMrd5RWHRi^QX8!Jr zuOufaHOn5`nG*~gL=h>5&+#aCMvNc~A)#4#+efwp=?#!WOQu`bYuemE0IK$Sp*4&<$~+M^#ZZf?C>@s;2lGK!SOxGQ^GiMi%?n+*nxy+K|x$2 z#Ex$J-MZ^DE3=>r6qDZ39TFv(-l2cBAzNjYlzWJ7ieK=BN5TNR>Wn3W25-}DI|{B! z1E_Xb^GYuH0f=kxQQ3sy<$=|gYBJp=2_-|jy6^!TjiXkXZIjt@eTO^IdiXN^>cTuX(K-S9|!A|4M=9mq! zlPB0RiE{eSZ3JxWyq|EQ7#`MpGmJ2+CC9LidH4~84-NQ?x7vUe`7OWzEFUyg!Q)dC P00000NkvXXu0mjf^aNqO literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoCopy.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoCopy.png new file mode 100644 index 0000000000000000000000000000000000000000..87f3aa0d544d937aca0d0971ca6473536067f8d2 GIT binary patch literal 756 zcmVW|B!}-t*2l8Dntah0FUq_nvp}c??~41&Bw0nRA>c2K@er zq`h6kD6R^TE&z)wz>CiNtYfat0L#~-gUPY@1X|nMsFzBxT21GYR8@Q^f5THNqkaEgmuy!ASo|^uZ?Qzs7~59U5$>MI_UsDf86kB zONTnk-iC}(ik8RI4YC|%JgG|4VIkX3aK{FDnKIvkm}+!=CeLn?JkNm790N-b*~ss# mtVmxu{T^cRe%E*YCBOj0;UPPkN^gAt0000q8Rp>%+=~@^5fVvbB9~hxA zLP1-LA_(?fG=kllgs|? zK>u!iP3O9BgCPyyzbzErSf!DVz`zwDo})&XAAm8YUj|FJCp%K{bA7<{TkzQr5Zr+h zs)vX~F*o#3Je_%&>4)ehoKwNc&sIP`4`rg~!leXz@(9b*Q-G>MI1U0^V$fR?C=U-q z3$BLKoIqwMJJ|;(DTAop)IujXfI=Xl^7+gxit=} zTm}o)!I+w?%@J$@SwF3ca&K>%7NQzs+X$=eQuHqK{R|KcqUp=$6=2FNb`Yytk$HJn zAA-wmv@o?xTdV1jrG>9(`BB0@rCQqGM@lYtIAjSlAq<66HEf$G-nxVT7272YCDeus zt;p?phpCb5$!;7$8iC#uD=wQiZljiia0M(Byc zgQ)b8&H|%Kp4xMcbI3~jLHy@1&ldI6@K$-ZKsrZQg$!el9p@hN9DWd<%fY-}rSGdB zl#^1Y+@)o#V&4O-ItWZ00(J)I?0T1753pfl7{$dRG!OiMCgma^TiMp+J86(ivL`Jd z-3A1Ww(gao#Mu6X>j?7fA+XV4e~-LIDOk gfM<&}3H>F&0BIT?88b(KE&u=k07*qoM6N<$f*0#WY5)KL literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowDown.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..b46108b593c22a7d7daf35f1bcdc94e90e78c764 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5X96VhdLn>}1{rUgjo>^J>aXp(1gU0z2EXfao7#7XEz`Eh% z%nhCkvJ)5uGxD-ro;8~oG|BY2D)!!C+0G}=z+u49p1|%O$WD@{Vk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XOgvp2Ln>}1{rUgjp4liNC546SZ@PgTe~DWM4fLFz6Q literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/editor.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/editor.gif new file mode 100644 index 0000000000000000000000000000000000000000..7fe7052c1d60600c6879a9faf3459c5998c0a332 GIT binary patch literal 4360 zcmW;Li6hgE!vOH_X18PCA!li#q7V|&wJ~i(&m84QH7ZxCp~sa+%&-U}XHmn{d7)RKW$WdE+7pr9>I)18Kf z<_oeRs;E2($;SJ&3W6w0%mz~pd zJw5H3ny=o^+it9@In2hl@4V4=!|Lj%x81kh{}QqHBH?NW0&5<>%-3 zeqM5l9NMCxF*EzKtiEi2p(PT7G0ibK6ZJNxk<5Ag%`v1mxAgbLI@NvoW|HFKl$4aK z1+S88KRH}_lU_4>_>3q|*mb=?lH2g(j<_&`JIrnQ$}8o38DGAbwz0VM)3Ms&LRg7= z*jq2bDap6>lOb;`?wAK%zU1Oy$9cq&R#(#!e~19UBx*7`^NX}oC#@$fJnTxxzwIwx zJSUbCeth3PK0dzbuYunyEB$=Khg{y`;-ZH1P`8>WDC}R{SiL9X4DIGw{@QGxX$A()K&!jSe#0E^ve0lYq3}y zb!Vnb_~Tbt`{?Lc8Lu=nZ~TK(^pgqko59tUl~vA*xnCQ9`m&{qON-JV{)w2uy6RKA z()B;2rAdc2caC-bc@}r0YS!qM(b&ZIk?wA%I%@AgKP~G+=B=!2yn6SH{C8dVO)hOp zdU-xEtBD-5Gy8e{#Pq69ySE$LD$Ds7y$qIzY_pT3P{me+I)^M z9;LL)OT;f~Ndk533n7ZcL(zaux>)o?p*>A5`g>M$*W%Nm~RB-zpL zlUyuAzixOhw4siBF+w!7-`?*jLE3~Y@mzJ@KA@J^7uvtam**On2VU|BEho5W3l|Pf z7F7(?$o>Ph;&4efwCKW{5!y~i-5$B#2|GxkN!l65<}q5EtFPF!?3IevZTfX~18%kE zcfIP1UxLlEV;!LmZmeR|o=P>xs05x3%JGGJ_qr|T{W;kvV9Hy&{_j~RL6l+Bb{m@( zb+xQOOwlw)-%v)y<7$0h-z923FNh4Cc;h6E=`~^ll0^6BbJC|dcF$KYj;tt?Y=LZB znUWIil8vkv*OHgFM;+NXeW6U6+)>kiz0{c7Z0_cT>m=jkhlk^}Dr5g;Dm$;L0qhK} zbwFuRyYqEua0HuWhgP;{xbfJaY0phx0dcMpe~%bW9K#wNoTE1*G|g(0QLz*^F=m&t z$JnNS{Gn|~WZ8$oKt5mPG>m^kP-x z@_Jy!V~j4c>f!8QpuxY2#cAZi7|b^g>V&307enkcd;mY4VrVU~_q3NYf$0tVOseF8 z=I7ZXOr<*xW&mXfp7UAxkB&{zSrZ(I32`!G+yAAkosF@C(rG8o0i>Cj6b3VDyr z)(o_*nk>!OeJ2X(W1Z#ma7F2Mm9+1!t?$x&oEm2B7751MSrs9Hzu>Qq-jp4)980%2 z9yzXHC*EbfHnI}#{mbxtz3pXbsL`|Q+`CrKOd76Q?1knXVE;@b?j@0m0MyAJH+y=CHnNY_+XR-tELV ztd^-Q>AceMeLI<8Gs3{4TCQsdf0m8fHYq)!s-q_Wo)H8%HXd`@xJ_&pl2fb3R5~k4 z+C0XO=Q&Dn$IIh)TE>AoTuJ;K zAEQheC|W43&Lz3TA~d984*a^fa$9M?Xt!AnDRrq*7fO$RIcbymXX#t`%MuC2KHTa< zWc6v(JOr}AW+=04&R~t@HdlpVK25zQB85JWRvGMJ!{IbpV=b)>zl=>|SpAZC^?gt1 zY(r{%y3}3gftK-s;H(}jY)(kr$gYhi1t*&&v!Lc39gZp_6dq{TrKzB$Yb788&m}s< z$$A+V%j=@76)^-Deb_p#Wql0WDQJWaMsXgTMuT^x^Zy}x)qw@{Pd%Z*=;by zimTj#3XtiRJY%pj6mPF0u#R^k7mT`ASN@C95mOIKrbL7B-S7E02BSEyzkxe0R3v&(kGh%j#< z3GoE&EpBik;!HBILzyecG@~45cmqxqMfguYjUootL3nJu(vw!W<*?N$d4HO!ak-co zL`73J)c6J>Q_cRYaf97C_Qd`RJ-V+Fw7iO7ruc;0abg&G&PLjOj@JyqNQ79U#jW9C z6vO`39Y-x;=trzdB6aw@p0q_oxjddZ>N&|6Ug;T|`F>;v`An<2?qwxj(*0@gcrsxW z=gDgcl{G!|TQShNGUx)%`NcQa371n+Ae+~UXCwt=cup76nYI)9F6pu#4$K^H=*+J4 zR_*Lzr`1&)GhzDfUAEI&{c$9k6AxEoq6<5LP5#<0x0|X{v59=9zSqe0{vH)|Ut0z9 zgRUuclA*b@`sZH?*-8gmKT{tI*W`QN(Q9m3o0%-#I?x=3Rwh8L#yw| zu6r(BcaVYXpFNHs@GmjD>h7D56B=YQ*Sc>tK4`9mKl6wqE98>Kwp%;}oSQ%;Z2g*k z7>lVvXCvx9;(^@x@aWjs0Ki^3VU;OW2ecETfirW;eO$8-Z(`t<0>}%IEmV<{%3gGW zvyEl8pWL6~Q4r_&+X6UAldmO&`V}4X4F)pzK@ZWP1H6FeG#VX7S> z+rf9eh{t&Fq!>{%zOOG9_7wnrs9s-G1%_H5e2kn^K!y(J>>mJkO2E<1oDiwv7pU03FK+UVmvzFt zrY35EF#o*7o*eKa9i_h=q=QMpqDzQ*eApxnGmp zHH-z#VEug+)+_Y`<>@f#j-+6B@HQRwkq!QL$B~6PKFOpu9KQ58oX-K;sSr7Kau=JP zDkA@?!=$fn@}tSWYgO>0Bap_xI301;+$=R4hMbeJ^aJ+*h;jk47J!u!AYeag1Aq}Y zh*bO~=`b2G)p}xY<-boo* z4)pUJSnuYtQgaQF!A1*{n%@DNajd>vMW#PX^Maxy3azz(P2$7J^h2^E^1GybpxO`o zoPf%tAtW?}kifoZdtRXk2xMp3mjP{5NGCx~NdS%YxxCL~uX!yzi;6N?!``O@el+;a z;cOpuI8vNagY)$*LS+8LeiF+N=)f!oID5KcmvF z5|EB-Sxz3xl(H#wpZ-4Cy04 zE>2-}#3%wA@rVjbWm~1vRNwWZ(89PadH;3rY=dM%=Tj-h*irF4sX8a=$vq5E0$62N zo98PRm5cVNz!SVea1t1zsA#G!AM5@;;2-?~GHmcc z1RiZL1$x^nX5svPz4<8~M t`7S1W6!j784!G%GzVfMRm21^%cd9isH{BDIaf8tvqt#l!un-7v;D2`M+%5nB literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i.gif new file mode 100644 index 0000000000000000000000000000000000000000..1336a9b522dede6c63fe2562e89868e68cd060ee GIT binary patch literal 71 zcmZ?wbhEHb6k-r!XkcV0Dk}Q_|G(l-7DfgJMg|=QAOOiQFv<1EH=JI^8{Cq=E{p%% Yr0oBVvO7|jmilFG33~KmD=ULF0M3{fVgLXD literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half.gif new file mode 100644 index 0000000000000000000000000000000000000000..add395b492ed87e5233aecc698309b285174a234 GIT binary patch literal 65 zcmZ?wbhEHb6k-r!XkcV0Dk}Q_|G(l-7DfgJMg|=QAOOiQFiG^tH=JI^8{Cq=E{p%% Sr0oBVk36P5>s-dlU=09Dl@y@> literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half_rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ff8e1d378b79f47c0232eb6a79c7db77b7948b9 GIT binary patch literal 848 zcmZ?wbhEHb6k-r!XlGz7Dk}Q_|3AYh7!83D83KwwSr{1@7#Vaxz6a$Ab`D(zW)2w- w0fvLk9IR44Ckzf8YU7Z1(y=g1I@&CxpSEVl$3@5c6`Z?dJU6KvX<)Dh0DANo%>V!Z literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..b8a8f12a5cc3082ebfe9d9b134aab6cb81700b63 GIT binary patch literal 857 zcmZ?wbhEHb6k-r!XlGz7Dk}Q_|3AYh7!83D83KwwSr{1@7#Vaxz6a$Ab`CQJW)2w- z0fvLk9IR44Ckzf8YU7Z1(y=g1I@&CxpSEU4VUl}?ymVWNg;Answ>bN}BQt_h4>d4Y F0{~3e8utJI literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/menu.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..4f9f70f0d8625423d5ee10512cd7a91d944dd182 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!{!2~3a&lETfq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6)AYSIEGZ*O8WEvzdf_Wh69m4JO&L3iIbPMOKh}aVB%qz X+9oG+##y`(sFuOg)z4*}Q$iB}`JyCi literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/no.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/no.gif new file mode 100644 index 0000000000000000000000000000000000000000..9021a14e210b1107b48bcd16a637aed335ddb3d2 GIT binary patch literal 179 zcmZ?wbhEHb6krfw*v!drCnDz6+y!q}uf42i^6l!iYc`HIz5M@t{CGh@?f?J(3>ZN1 zCkrD311EzHNCspE151LzNnxH{YBDECf literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/noX.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/noX.gif new file mode 100644 index 0000000000000000000000000000000000000000..4a16dc7957f4d6e7f0d6f222995a28149c549a45 GIT binary patch literal 80 zcmZ?wbhEHbjid-v|$vuDrFojYgEngvwPKnhU&$->CMAi$sl(gd=Tfi>`fa$kxjQ^u-Q&tEM{ z63{8hJ-ukbdmDYe0}BE)lqC8+maI6CV>MT)xx{PfB#HJlW~U___wlnO`Mj$;pWv1> a*I@C*{x+wJ6?@+Ew;!%M{`tNlgEauxxmZ2` literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.png new file mode 100644 index 0000000000000000000000000000000000000000..0e06640a2565bd1e82bc3f55bacf6255fa9a18da GIT binary patch literal 290 zcmV+-0p0$IP)5r0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy#7RU!RCwCdlfeyxAQXllO{ef;f(w8i zyts}_;Q|igRb&B8n8N^-m(psh#*|Yz5dH_>mq!9b2;m@N-2GJ7^-plqG;o8+fgKoQ zFmzpa3971UE12gQLs^!W1mXNkV6Bb2f^+WQ1#R16$g&KIqBsTmzK3xf--0AbNC?XY zwvy-hE-a-)c+HT{_LtY?d?%dqO??;!gqK%K)^)OXe=nhw0%HubQVOPN`hpJyL6W8^ ouC>;?@Tnk3o}Y~zop}f_0O_<_AH%dK-T(jq07*qoM6N<$f++fRrvLx| literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-1.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-1.png new file mode 100644 index 0000000000000000000000000000000000000000..2069a5a2ea0d17e351200286c9ee5d999f155dc1 GIT binary patch literal 288 zcmV+*0pI?KP)#ziG`oOJ?s`z0~;Zp>;yp mRg;NKd&MTJxlilA00RKd>Yt5%4~X&r0000F$eLFxzepnGbNYG$SzK^P_1VTh6|P%YGz3~{B7<(i^5jY(Si zg7#FS2u$_bANMYz>Zs4l&u6FI zmHY6!1=nU*lskCidGK kd&e`qS-!af6(m8R8da@Ecc*U^f*4A!qrkyQnnKlNq=7|iUY~#FQK5`( z^J9awNx`cro$0kJ-|uVh kc;;F|Str%8QvV4s0DQ`#YK@`$e*gdg07*qoM6N<$f;KpQ@Bjb+ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-4.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-4.png new file mode 100644 index 0000000000000000000000000000000000000000..8dad7a6b08605ad7da10ff6b8226f01feea89c57 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^oFFy_6OjCpbU6@6NtU=qlmzFem6RtIr7}3CbESS)_h0M?wmZi zyor%L8;c*V-dvqIwZ18Szo%95s!#fTmfSrj9)JA1>uBfxZwYga!_7?P&d={Jxc_W# hY-Y6S%unhE7zpO{+Bn0k;?b(PWLk3!2o zRqS(7a4=nEC4KiSd#FXeR`52SKM%Dk!a7$73#{->PZezK=kJ=(E3+&9Wa~udReERm zf~yu?usdfnbIH=R?t5K?=D4S@o{&{;5Vf>pSuD7u3F&yOUPr>U;jv=bGDm>*t=@Xwv1- cQpYO6P}sOSCub+O1<)4^p00i_>zopr0L=bx0RR91 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-6.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-6.png new file mode 100644 index 0000000000000000000000000000000000000000..2b607e7b2a6d17c40564420fbd865849c40ee674 GIT binary patch literal 284 zcmV+%0ptFOP)=^n!$}Bf}{(;N*=l!MnunuCt z%h*0w!96GMn>gMOy_ssTUcL_$|1gQx~PXPYm83bXJ%;3hsjiX1XPco87Tk+vyXiU=9 z2Kye^AXlia-DWF21Pv&U%IHAQ#l_P+{M g@k%=@`B#7e0HnL6ml5M@s{jB107*qoM6N<$f)ccRHUIzs literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-9.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-9.png new file mode 100644 index 0000000000000000000000000000000000000000..cf3f37dd7db3fce3f904df42edf937f7600b72ef GIT binary patch literal 286 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 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveDisabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveDisabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0fdef362ddfa2ba95b8d64637ffe3f3f405c4286 GIT binary patch literal 552 zcmV+@0@wYCP)1z<)F8P8ZJ|@YptWdfi>CfTTT^3BP2muYA}$gHfuLSg#H->*kf=S+i&rk{)Pch} z_dVx1-&b2Mm-1h7Zax%?#V|w;d<3R$g5SWe*=+X5?yK1|19%DX5Dtg^KA%q<4u{O= za~X|BG8_&K*e(#@eG3fWZ6p%82T;6T?^cNbOTAwIg?f$vuWK-X$H?>%i^at0bgE3X zT1^Infdqp=Nu^TacDrRf9!sOqU>ivUF!fd7n@}hux~@yR-Ij8>tOC%vQmIIxP*6Hs zL3NzN6+t?(?m?arOsZC^;&Qo^?)UqZoKB}wDwRajGzkO(d^%NN@IFd%(7GgV_P@guBgcE#;$K!hhY*MGwA=jaz*zEVN^E`xj#H!NVDTxE(^l_#v^%}tT q&fB&HIe<7>ee!2`vx6-96JP)aFwo;`BT^s$0000-gVc`FrB(&AVGjPLUlTW8VTKJZGJB}t_hMgT02VtUj73Ucx|As>v~{+CoC2V zBw2x~X=t)q;B@eaCo*{O_?1GgCn-Si4@}_U9j(5}k>djpOBKkngkt^|%B2#_RxA81 z+u?E9ArwU18+*Zy(MbV>hV>m>?%&seLa~HGJ_lJ8;Apl%u4g#8OCm!O%WDudzJJ2Knr_Y>&({95|^e5x)*SCtDVR~e+-=)*GWLZXJ z`V*G3S+upcqr1BY4m*$3auLtp%*>K+A0<`lFA1yQ=-{DlZmY+RvLu7mf)&W^Y{qOX zg{hCx1o<2zFt*wC>?OJFa&UoGzsHzUsn?4c0cBZXTfIbJX4AV}7o>ya==v{v4550c cHhv2*0H;M0B*g|g>Hq)$07*qoM6N<$g3=O01poj5 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonDisabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonDisabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a2943d52ecfcdd4e50854f54b2cd86321c7fc540 GIT binary patch literal 453 zcmV;$0XqJPP)lOB0Iy482yZk^yMvI)vb>Zc#LTwsZ!FIcVDu}7@CY}(>AKEDQCwT&Y&K(# z<4_rU2oUhq{&m0KXFSidJkQsXNIXggW?a7)F-{r47&Xh&Gl;*8E&Gp8GHlk|Z6{o7N3V)0D=P vQoVxkYvpV=g6zT^SD*AVjGLkwKLQK@M;)lBy4zr500000NkvXXu0mjfBc8&K literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonEnabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonEnabled.png new file mode 100644 index 0000000000000000000000000000000000000000..20f2e11abf2de8584350e8c613815ae1f76628f7 GIT binary patch literal 545 zcmV++0^a?JP)Q4~J!hl;-z5fMbE zQU`}1Y-*5N0@t=ym)4@Gt+D?gbZBaMSzF|n_L$wawvFc=FL!}J;2;u-$ZxPb7!2S9Rxg?Ov30gxMRs^O jS{?B-ytqkDd=G`P)Q5Zd=qr0;YU0oj} z21W2e3Q`G>^u@LI|56f-$Rxm5|A< z?mEt$m*|Qb=Ai2x!hAH>*900000NkvXX Hu0mjfLAnMh literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmpty.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmpty.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc245a72031e6e4abe79aa70617cff6476b6b07 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y_!2~4vg%5rOQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jiex=q978H@CH?vT-=0~*!0-Trnb_mG*5wL14L}o@8nMoL To&MM#sF18U}fi7AzZCsS>Jiqt$^978H@CH?vT-=0~*pzilK-a|=0e|%J)^7Y@}YK_-d er8T$}4lqp9;0yjJX(R#E!QkoY=d#Wzp$PzG*DC%1 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFullVertical.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFullVertical.png new file mode 100644 index 0000000000000000000000000000000000000000..1e72421d82e4f1dc5be9685a53b8924698a4f485 GIT binary patch literal 88 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1n!2~3)gaoYzQu3ZIjv*W~lmGnx|Nr~@`}TEz ne*F9UJ3RlMvEc%y5<3RlPCnl?L0JcZN*O#|{an^LB{Ts5LNFa$ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderThumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderThumb.png new file mode 100644 index 0000000000000000000000000000000000000000..a5a5dd6fb0516d085bbce000e1588c4caa910da1 GIT binary patch literal 243 zcmV5r0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyl}SWFRCwBAoHc8fJp%(n7Z95NM3U}%_wJeP-Me=M6Oc`^W)OhtkpQ`X;qTwSV8J6tju55U#>NKD z1{?7E_ir%A+}xZf17Pam2K@W?kAYkOHsJsN|3lq?VGstCdg1Bg$B(7O#l=a|`10jT t5cL#fK+5UUr{{yxHHntL0OvI4A002ovPDHLkV1n&iW*7hf literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowDown.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowDown.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7bbbf441a257fe54723d97e9851c6e796b922d GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1n!3HFw&5r&6Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiWEFu978H@B_$>#{5aphHsjy_|K~e&7#8U}fi7AzZCsS>Jic~yZ978H@CH?vT-=3Mnz{rSc=6}h9GAka`OR#;ETqq;L cAdtYY?7G0W^Y?CT0jg*4boFyt=akR{0JK9WTL1t6 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH-thumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..87b459cb0f48c609d528e3a0149f5b5a247f5cd0 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#6!2~34%~2=@Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiljYV978H@CH?sN`ue8S)BpbeKYxUQ*}0unAc0}eTMj0U Ro&b>$j+1SGu;4zvI%$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Ga-J@ZAr-fh{`~*{e}Db|e@%=nj4CrFHZcC`Vq%eCSb9?A Uo|EITgFuxGp00i_>zopr0PGPb00000 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV-thumb.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV-thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..69e02b18484309b27a549647deb94f718cc83962 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^!a&T-!2~4#Jy{GS86-|6H_V+Po~-c70G+LIEGZ*O8WElwK#KRL+aUCrcYj`{Q3XizS4@3iHD(M WHv2budxM`K13g{+T-G@yGywoga3`by literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d71952a44f0f95a6bef7d7cd4ee950feb4d7ac GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^>>$j+1SGu;4zvI%$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GN}eu`Ar-fh{`~)M&&-za^ZR>wv5Wib{|o7Qb#X>qWnz(F YVBah9s_|@U3{W+Lr>mdKI;Vst0AHCWG5`Po literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabActive.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabActive.png new file mode 100644 index 0000000000000000000000000000000000000000..7271066dd3577071d7748c88989c9e7863a1b5be GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#7!2~4D&M%S!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii|v6978H@CH?vRU7uOPpzi-a*+WT54U8<^trI5-ZkMQw p^eRz^==uNu|8ZS!SuuwOMuvD}P6IamxzRw~44$rjF6*2UngA0FEII%H literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.gif new file mode 100644 index 0000000000000000000000000000000000000000..2cb0ee1fa95af8fa6b9514effea35c4acd040137 GIT binary patch literal 193 zcmZ?wbhEHbzg-kZr;3k<;s=AhYue-cyRst z^($7a0I4PgDE?$&WMB|r&;e-z*~!3ar@*4<_1L1fsUzT!O~DzJ$I|zCIGMTkFl?CA r|NXVC&qjIuGB2iS23HCKTb7m`ix)`TeXwZlx*j#9nE_gX91PX~F)Ki0 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.png new file mode 100644 index 0000000000000000000000000000000000000000..efed5c7b200faefbbe5a473817140083bdda8ad2 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1Gr#xL8Ln>}1{rUgjo|$7!%+4S&4_4-l)&kPT4hJF??r|Q; zK79DFd^3xLqf|qeZsVIGg>UHx_{^9J)dMaUruq8%PB^)?LZrEYO`tnwZ`D@~;VY5} zM;(MEN=ix|ta8YiAR*Flg=MqDT^=@|;FhghA4-7)g$mLgKPeoZsvZ7-E0OKMkp%~4 zbT+yiVB)pnpD}ylT*l3uC#P-Jxlr)Uq0D%bu|tx_pSeBSVQUyzU#Bn~d nb7Ga?aJiH07Brd7p@ES>@l24Ba8np492h)Z{an^LB{Ts5h307I literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.gif new file mode 100644 index 0000000000000000000000000000000000000000..f59471e6e5c172e25bc2787fa2bf857713eed9a9 GIT binary patch literal 193 zcmZ?wbhEHbzl( re}Ap%vr%5Z%!_H7!IcYvElbOe#S0|vK3KGNU5}d5%mA%G4hCxgKeIm@ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.png new file mode 100644 index 0000000000000000000000000000000000000000..ee5f2db133be7436944a5c003c693e452553f4fd GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GCp}#pLn>}1{rUgjo|z-0L~jaf&_Rbcd`FJ)2o#8Qlrw$2 z)%WSgaRo-V32Y0JycKrKbo`av(A?{Ahx1CwoS*E=l}1h4(#;B^2Ba_-oyP&py-{6y}8Rs-gQq=1Ao zM;w$A8rkNupE-NtT*K{_4NrBrP3G86xZCrFXM;r3{>dBnBr|G6s0(w1MZ`QYa!lSJ ntaZRa;gOv2q**2mOgs!O^1(a5FoaA1dWyl*)z4*}Q$iB}5J_qc literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabDisabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabDisabled.png new file mode 100644 index 0000000000000000000000000000000000000000..f891b37b7704303096e76b26d29f7c195f42fa78 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#7!2~4D&M%S!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiZnf4978H@CDr`;qRA{_V0eJxrOvef|NjT;xyc59=uRxP gRaRDRVHHSV_&8Pe;a0J4=|D{kp00i_>zopr0A{o)od5s; literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabEnabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabEnabled.png new file mode 100644 index 0000000000000000000000000000000000000000..fb750a0500f3eff0c4771e9fb109a59cd8ddf46e GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#7!2~4D&M%S!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JinKjl978H@CH?vT-=0~*!0-TrnHYDBEVr2Kjg*y#m9Fu1 j-TCzWeLM%Z!U2X>9eYXcE!jta+88`t{an^LB{Ts5hX*MQ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabHover.png new file mode 100644 index 0000000000000000000000000000000000000000..259b075f7d0eb3ad655d3796ac25a84608b7afa0 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^%s?#7!2~4D&M%S!Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JitIgI978H@CH?vQU7lIOpzhB%_CrZY4U8<^tq=d#YrMAa zX;t|xA3RN$Da literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBar.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBar.png new file mode 100644 index 0000000000000000000000000000000000000000..1835944f7e050d5595e73a7fa1a2368a8e3a12fb GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^%s?!`!2~2XL|@ndq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6`6XvIEGZ*T5@bBFM|OG%Z3gAcgW<6YQEJp*|DkQdu7Vz uRZ`Pt9#(34_Rhq3G2?=juj<1a7#WsNcU|mPATA6vfWgz%&t;ucLK6TVAux;p literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBarBg.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBarBg.gif new file mode 100644 index 0000000000000000000000000000000000000000..1cd57cf5a31eab4b72317876fdb2ffa1962600fc GIT binary patch literal 97 zcmZ?wbhEHbWMq(H*v!E2_3PJf-@bkS{{73BFF$_#`1$ka=g*)2|NsB%*DnTaK=CIF eSXc){g3MrG;S)Hi*{vGUA;2KftSBeQU=09u3n9+{ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.gif new file mode 100644 index 0000000000000000000000000000000000000000..f96fca4aebb1b7bfa8cb370c6649911078b6aa29 GIT binary patch literal 204 zcmZ?wbhEHb6ky(RCQ&mTN{ z{p#(9*Y7^Q|McbK=P%#Bef$3X`;Q+#e*XOV>({T}zkmNH1QdU=Fmf@-Gw3h?0mx1U zR?h_!0#Y(3b$(zCe!VaEL+t^^!|Vo^`=0#Y*Otew!O++$8z`7*CF=Y%{Xq%e5*HUy g!J|xa0w)%~Hf`Ze(NCUutd4_ayYz)=r=1zB0sdBeDgXcg literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.png new file mode 100644 index 0000000000000000000000000000000000000000..cc345a6661bcdbf6a0508fcd27281489f62d338d GIT binary patch literal 422 zcmV;X0a^ZuP) ziG2%NMVipMc@QG4$RsbB%>3s2O(w5!bJtFb=cinpop4B4ZyyXCA5F-x)OUQ+G(G6` z9UmdXk_MQ*42_oM{@cA}x%e_P08>*ny*ZjjpWpFb=fyInIhsa*4zLEeK=tui>~-&q z1wc*BYybeY?pU}YnCH5SU`}@|T%fuh+6F{`{`5M_byq!IX?FkshV2FBaIy;-PG;C% zU;@T=UCS^kH+s%0Ns`U#Ns`d$IV+(2Tbu>x0QCpU+Z0q@SG~OefJ)o;WcaltTEw(% zPXd)JVIDvNSAFN5-iwdAy37(5u5a)2j(!XbR9*z)EYZ;)e(RCQ&mTN{ z{p#(9*Y7^Q|McbK=P%#Bef$3X`;Q+#e*XOV>({T}zkmNH1QdU=Fmf@-Gw3h?0mx1U zR?i3OeNQx|Xb7mh;9xlJvQ<97V)7imE|sUo;tYbFKN|E7FV6V$l7WSd<&cdXXLsgR h$u*kWJrp-esxekv%R6~ZV|#+tERUm;W;-!h0{~b(dSd_p literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..3026ca56df2a36a876130ba23527f9e6c58be265 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!3HGN^yhQ|DYhhUcNd2LAh=-f^2tCE&H|6f zVg?3oVGw3ym^DWND9B#o>FdgVosExGTaEA7zS}^dr=Bj3AsXkWPIl}%WFXSE|H_ud z5$S;kGo!Ao5)COiCV6n`yaUn|4BMR+K46U5DP-F|{X^2+UZ<-;mvc6G?6ZHr_kaI_ z16Hx?>(PQQ1;d_BCNnsZMtZ(u6-8mQ=t~6Xf@NoI^Kbii4KR3voOXag* zJ-0ACzULNi$Y0~n^Ug5HCh+G>o4mjz$FxX$isl6-C53;yw&~Zt8}K}STl0iBj`4Wm z2T?yOy|Sa1%AP&#RPpSx=&s00(RCQ&mTN{ z{p#(9*Y7^Q|McbK=P%#Bef$3X`;Q+#e*XOV>({T}zkmNH1QdU=Fmf@-Gw3h?0mx1U zR?h_=dQ&{r7!%fADOsU?)6bW2^JNv!Qw67Y#;PFdgVosExG$$Ae{rZ-UNt*47)h{pN3lfAQ;90l6!o1ee( z{$hD4Wojs&0*BK!xdYM_O(~)tkGPf3teAYXB_8wUijm> z?|IIIq&@cxYU3Zezjl8Rs&jgJy#WE%AfmM`&`%fOHt`RR@8o?n4nTN?W& zDQ#z)VRQR=&veeo4{o#PO%eI4EfdlzWtz*at-Ph7+So~VL0+dgqvx)zR*xkU$~7c( u-}II+t%$feXVtY+z6|eQxBs`htRED8ewmZ=A1R>689ZJ6T-G@yGywqCf`!xo literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.gif new file mode 100644 index 0000000000000000000000000000000000000000..37729b84aaf929b7a3d0af8093cd70f03b4dc0b4 GIT binary patch literal 208 zcmZ?wbhEHb6ky(RCQ&mTN{ z{p#(9*Y7^Q|McbK=P%#Bef$3X`;Q+#e*XOV>({T}zkeV0@xhN2f3h%gF~~FMFaQC_ zP6k%r2kLz(nOzJ8^H?@cJ8)>ldv*zdlndG)p777(Z0L|s=1|Nmu;KG#aJ{@DppI+O n8nb8tCaK$No7pXV&b|23DCV*IVq?F8ov0WF3qQbN33 z>%u*;ZG9nTd&sfsv6Bj6rOW7)Xwg0Z}Sa z!Zw<6Vi=}^#6WT&HMk7m0pcz#c`=;P0+s86s>Lv%NMBh}T2hz~?sRkvk^`xM#tMo7 zU_m`4Nd`i|KpCv22&xBeK$n?@EDtva8&2C{n3J820i+h{6|ey|5<b!~&37 xkRFg;7D*xA!`ccGVADwfIv_m^42J;%3;+>9ASaJ)pSl15002ovPDHLkV1k?qceMZj literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a09ebecade5986918117ddd0545e19dda4b50c0 GIT binary patch literal 68 zcmZ?wbhEHb6k-r!SjfZx1Vu$f|G_}e`g>7d Nx!N9igt0PM0|3T97D)gA literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..067d534d4cffd068f937ba778c35d9984ad7a89b GIT binary patch literal 68 zcmZ?wbhEHb6k-r!Xk=hyU|=XJD*6uwia%LEdUdHOB?;yGK|R0KoCzrm!6~?4rAhg;HF{T~}PLTpl`iT;6o&g}bbhE^l%kdJ!>9Kg-$( zk>R(Su`%|5Hs@&@^GqVTqgMY^0ik7?+^MAwnX0;V*|l>e%%!5nd9}{eIb-2YnRJK8q;?r?*fR8U zht#1Va}?&|6C!85L3F4$S}S?-QkIO+rt11}Y_-{Qs8W3MieOS(-lb_CvlY^%gf?XX zebHh)0b5qur>#b_?Q7p&dB-M^tn4hS^I>kao7SfS4O3}x_%vF#PE?N?;KNu z%w^ezp^~p{5F2o`h4<72GH?9@Q@*ut=1iMegBv~5TWM)&Y{_PAzmCFJ6g4ffCynf> z<0^qR7n-L@%(;|tlf^c&uuEjE)b#91=697!C1=w3mNF-r-L4lNZ0jwvtNJRw+F-Ia zN{&F5a!qX%i^Y_F{jcq#3a-4aS6khq`@~k1w95Ds8X{K>vQ#y_dR&wI^uK>vAPD&5 z?+bvl9e^P&1tdflx}5R2W=M`1B!$NoC2}FM0(~)FSQ-#q0D8J+-Gsk>4wVwoH=G%M z9Jr$^J}#N1oux(+eZBlNneHi0B9CldLVASZoX=h7@~eq%${`^ls5rbD*$jt}4!oBs zAy|dW=Rd5*pnH`5@CaYV3f`6nAHQNyvmXMidMnq7(r71rFRMf3q#Fz>izx3FQL;xk-Lvx{rLH_Vb0Nek6+z+`11RYAD=#dZJcxDj@Njy zwX(g9zKAEUBghpBpQu>;4u-MJW?L3jt0JE4|6`67IU@f*hJM+LI?v?D@~YEXKvc GU=091%7<_O literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus_rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb09f9eaadd5b8a9707926391871ea1d49858af3 GIT binary patch literal 553 zcmZ?wbhEHb6k-r!Xk%bxU|^`6cF@Je#nRHUan8{{fByXX_3P2IH~;_t`}gnfyAPim z=N|q1<=gv@U%r0({_@R-KYxDz`}_CQ{8j{>}SON6y`O@%sJk2QS{f|Md9z+aqW1{QLL+ z>C1PuvyR+-^yOX zo7BeQ$m=PhZ)2})J+GC;kcW%kNypS#V^s?ao7_5nbpr>Xc}#~6akH{9F`r~swcOUs z?ZPUoV5FwP?s2Y(#g&uQjZa!hl>Jt{o)rhDfCZn4l;SgO8BGpBb6s}{`DYXV^)N7V KiHLA8SOWk#G>IMn literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..f42a84ba8e0726fa9d051c73fed5e6f913dc5623 GIT binary patch literal 552 zcmZ?wbhEHb6k-r!IOfa%1eMbcy12MlT3R;FIr`_%pI^Uz{r~^((X%)I{{3y7d-U^{ zZ|^^TdH3P-sml-k{r&s#^VeO+uK)b?>(8Ix&tJX&@afCZ^LNi&d3g5f!?$1lUAyz_ z&AU%eU%dPN{m1KfAHRM7@$A+6H}5|kId|v9>-V=Gym$mSO-+Z`o`|00*|9}7f{qfV6 ztGA!-KY8=Z*YEpI-n@M4$(OI+Ucdc#>;8*>K;!=Zzw_|r=_?Ojz5V#}C(sK+11SDv zVPs&aXV3w~1Sn1z*jpRwo0?l%+uA!iySh6V`}!v^wlfM^i%CcsYdY}gOtw`Lw=$4% zFBNgT&%uH;oTui4=H!(VLD62Bd3$Z$J zP390$6ku{^<#gWP!l)o^X`(C4$!@MaSx(eO&w`&_LsDz<#ECus8JNYmSQxAUKCp*0 literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus_rtl.gif new file mode 100644 index 0000000000000000000000000000000000000000..0863d9cf9e9d97ddd4610318ea5aedfce94e32c0 GIT binary patch literal 553 zcmZ?wbhEHb6k-r!Xk%bxU|^`6cF@Je#nRHUan8{{fByXX_3Qute~+HM`SBzY|FJ8aD{ouvh_n#g=e|zNYoqzxSKYjVG zcGi)GIY%4k9Qpb4=Z~L1zyJ7g@A0d#?_wSFN zzFfWibpOelU%r0dck<@tTTi}x{r39p$6NPb`~w>I|NotbFHc{2@apZypFe?K7#cwF zCkrqR>KSx^5dn-5AqF<~wubtq=9bpB_Kwc3?rz4u{t1ljIy?@V#!?bu)`FATSnPS+ zWDKmtm2Bs=vgmX3nlc-jxvH;fVPTV9$E@aJ$2X7Z&>=2XHYVni%qm9Pnz@`g8v6NPLrX{Jt&TpY-BP#c7;=djSW-bvC4hCxg DJ*bG_ literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/validationInputBg.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/validationInputBg.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4fc2e0377e06e6f3e29bc399d6b00ca4ad4af8 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^EI=&A!3HFszqfq{q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6>)PocJN;+R)kgQgT-p`wOji zlhh9Ucz#}9SERB2|3A(J9Dn}zKU$Zl${>)y@brLLV!@S7W on the top line causes a gap between the .content and .label */ +} +.tundra .dijitTitlePaneContentInner { + padding:10px; +} +/* force hasLayout to ensure borders etc, show up */ +.dj_ie6 .tundra .dijitTitlePaneContentOuter, +.dj_ie6 .tundra .dijitTitlePane .dijitTitlePaneTitle { + zoom: 1; +} +.tundra .dijitClickableRegion { + background-color : #ffc !important; +} + +/* Tabs */ + +.tundra .dijitTabPaneWrapper { + /* + overflow: hidden; + */ + background:#fff; + border:1px solid #ccc; +} + +.tundra .dijitTab { + line-height:normal; + margin-right:5px; /* space between one tab and the next in top/bottom mode */ + padding:0px; + border:1px solid #ccc; + background:#e2e2e2 url("images/tabEnabled.png") repeat-x; +} + +.tundra .dijitAlignLeft .dijitTab, +.tundra .dijitAlignRight .dijitTab { + margin-right:0px; + margin-bottom:5px; /* space between one tab and the next in left/right mode */ +} + +.tundra .dijitTabInnerDiv { + padding:6px 10px 4px 10px; + border-left:1px solid #fff; + border-bottom:1px solid #fff; +} + +.tundra .dijitTabHover, +.tundra .dijitTabCloseButtonHover { + color: #243C5F; + border-top-color:#92a0b3; + border-left-color:#92a0b3; + border-right-color:#92a0b3; + background:#e2e2e2 url("images/tabHover.png") repeat-x bottom; +} + +.dj_ie6 .tundra .dijitTabHover, +.dj_ie6 .tundra .dijitTabCloseButtonHover { + background-image: url("images/tabHover.gif"); +} + +.tundra .dijitTabChecked, +.tundra .dijitTabCloseButtonChecked +{ + /* the selected tab (with or without hover) */ + background-color:#fff; + border-color: #ccc; + background-image:none; +} + +/* make the active tab white on the side next to the content pane */ +.tundra .dijitAlignTop .dijitTabChecked, +.tundra .dijitAlignTop .dijitTabCloseButtonChecked +{ + border-bottom-color:white; + vertical-align:bottom; +} + +.tundra .dijitAlignBottom .dijitTabChecked, +.tundra .dijitAlignBottom .dijitTabCloseButtonChecked +{ + border-top-color:white; + -moz-border-radius:2px 2px 0px 0px; /* eliminate some border detritrus on moz */ +} + +.tundra .dijitAlignLeft .dijitTabChecked, +.tundra .dijitAlignLeft .dijitTabCloseButtonChecked +{ + border-right-color:white; +} + +.tundra .dijitAlignRight .dijitTabChecked, +.tundra .dijitAlignRight .dijitTabCloseButtonChecked +{ + border-left-color:white; +} + + +/* make space for a positioned close button */ +.tundra .dijitTab .dijitClosable { + position: relative; + padding:6px 20px 4px 10px; +} + +.tundra .dijitTab .dijitClosable .closeImage { + position:absolute; + top: 7px; + right: 3px; + height: 12px; + width: 12px; + padding: 0; + margin: 0; + background: url("images/tabClose.png") no-repeat right top; +} +.dj_ie6 .dijitTab .dijitClosable .closeImage { + background-image:url("images/tabClose.gif"); +} + +.tundra .dijitTabCloseButton .dijitClosable .closeImage { + background-image : url("images/tabClose.png"); +} +.dj_ie6 .tundra .dijitTabCloseButton .dijitClosable .closeImage { + background-image : url("images/tabClose.gif"); +} + +.tundra .dijitTabCloseButtonHover .dijitClosable .closeImage { + background-image : url("images/tabCloseHover.png"); +} +.dj_ie6 .tundra .dijitTabCloseButtonHover .dijitClosable .closeImage { + background-image : url("images/tabCloseHover.gif"); +} + +.tundra .dijitAlignLeft .dijitTab .dijitClosable { + padding:6px 10px 4px 20px; +} + +/* correct for IE6. + We cant force hasLayout as that blows out the shrink wrapped tabs + ..so we shim in the closeImage position properties instead +*/ +.dj_ie6 .tundra .dijitAlignLeft .dijitTab .dijitClosable .closeImage { + left:-20px; +} + +.tundra .dijitAlignBottom .dijitTab .dijitClosable .closeImage { + top: auto; + bottom: 7px; + right: 3px; +} + +.tundra .dijitAlignLeft .dijitTab .dijitClosable .closeImage { + top: 7px; + left: 3px; +} + +/* SplitContainer */ + +.tundra .dijitSplitContainerSizerH { + background:url("images/splitContainerSizerH.png") repeat-y #fff; + border:0; + border-left:1px solid #bfbfbf; + border-right:1px solid #bfbfbf; + width:7px; +} + +.tundra .dijitSplitContainerSizerH .thumb { + background:url("images/splitContainerSizerH-thumb.png") no-repeat #ccc; + left:1px; + width:3px; + height:19px; +} + +.tundra .dijitSplitContainerSizerV { + background:url("images/splitContainerSizerV.png") repeat-x #fff; + border:0; + border-top:1px solid #bfbfbf; + border-bottom:1px solid #bfbfbf; + height:7px; +} + +.tundra .dijitSplitContainerSizerV .thumb { + background:url("images/splitContainerSizerV-thumb.png") no-repeat #ccc; + top:1px; + width:19px; + height:3px; +} + + +/* Dialog */ + +.tundra .dijitDialog { + background: #eee; + border: 1px solid #999; + -webkit-box-shadow: 0px 3px 7px #adadad; +} + +.tundra .dijitDialog .dijitDialogTitle { + border-top: none; + border-left: none; + border-right: none; +} + +.tundra .dijitDialog .dijitDialogPaneContent { + background: #ffffff; + border:none; + border-top: 1px solid #ccc; /* #cddde9; /* w/out this, an

    on the top line causes a gap between the .content and .label */ + padding:10px; + +} + +.tundra .dijitDialogTitleBar { + /* outer container for the titlebar of the dialog */ + background: #fafafa url("images/titleBarBg.gif") repeat-x bottom left; + /* border: 1px solid #bfbfbf; */ + padding: 4px 8px 2px 4px; + cursor: move; + outline:0; /* remove this line if keyboard focus on dialog startup is an issue. tab still takes you to first focusable element */ +} + +.tundra .dijitDialogTitle { + /* typography and styling of the dialog title */ + font-weight: bold; + padding: 8px 12px 8px 12px; + outline:0; +} + +.tundra .dijitDialogCloseIcon { + /* the default close icon for the dialog */ + background : url("images/tabClose.png") no-repeat right top; + float: right; + position: absolute; + vertical-align: middle; + right: 5px; + top: 5px; + height: 22px; + width: 22px; + cursor: pointer; +} +.dj_ie6 .tundra .dijitDialogCloseIcon { + background-image: url("images/tabClose.gif"); +} + +.tundra .dijitDialogContent { + /* the body of the dialog */ + padding: 8px; +} + +/*Tooltip*/ + +.tundra .dijitTooltip, +.tundra .dijitTooltipDialog { + /* the outermost dom node, holding the connector and container */ + opacity: 0.95; + background: transparent; /* make the area on the sides of the arrow transparent */ +} + +.dijitTooltipBelow { + /* leave room for arrow above content */ + padding-top: 13px; +} + +.dijitTooltipAbove { + /* leave room for arrow below content */ + padding-bottom: 13px; +} + +.tundra .dijitTooltipContainer { + /* + The part with the text. + + NOTE: + FF doesn't clip images used as CSS bgs if you specify a border + radius. If you use a solid color, it does. Webkit gets it right. + Sigh. + background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left; + */ + background-color: #fafafa; + border:1px solid #b6c7d5; + padding:0.45em; + border-radius: 6px; + -moz-border-radius: 7px; + -webkit-border-radius: 6px; +} + +.tundra .dijitTooltipConnector { + /* the arrow piece */ + border:0px; + z-index: 2; +} + +.tundra .dijitTooltipABRight .dijitTooltipConnector { + left: auto !important; + right: 3px; +} + +.tundra .dijitTooltipBelow .dijitTooltipConnector { + /* the arrow piece for tooltips below an element */ + top: 0px; + left: 3px; + background:url("images/tooltipConnectorUp.png") no-repeat top left; + width:16px; + height:14px; +} + +.dj_ie6 .tundra .dijitTooltipBelow .dijitTooltipConnector { + background-image: url("images/tooltipConnectorUp.gif"); +} + +.tundra .dijitTooltipAbove .dijitTooltipConnector { + /* the arrow piece for tooltips above an element */ + bottom: 0px; + left: 3px; + background:url("images/tooltipConnectorDown.png") no-repeat top left; + width:16px; + height:14px; +} +.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector { + background-image: url("images/tooltipConnectorDown.gif"); +} + +.tundra .dijitTooltipLeft { + padding-right: 13px; +} +.dj_ie6 .tundra .dijitTooltipLeft { + padding-right: 15px; +} +.tundra .dijitTooltipLeft .dijitTooltipConnector { + /* the arrow piece for tooltips to the left of an element, bottom borders aligned */ + right: 0px; + bottom: 7px; + background:url("images/tooltipConnectorRight.png") no-repeat top left; + width:16px; + height:14px; +} +.dj_ie6 .tundra .dijitTooltipLeft .dijitTooltipConnector { + background-image: url("images/tooltipConnectorRight.gif"); +} + +.tundra .dijitTooltipRight { + padding-left: 13px; +} +.tundra .dijitTooltipRight .dijitTooltipConnector { + /* the arrow piece for tooltips to the right of an element, bottom borders aligned */ + left: 0px; + bottom: 7px; + background:url("images/tooltipConnectorLeft.png") no-repeat top left; + width:16px; + height:14px; +} +.dj_ie6 .tundra .dijitTooltipRight .dijitTooltipConnector { + background-image: url("images/tooltipConnectorLeft.gif"); +} + +/* Accordion */ + +.tundra .dijitAccordionPane-selected { + /* background-color:#85aeec; */ + background-color: #e7e7e7; +} + +.tundra .dijitAccordionPane .dijitAccordionTitle { + background:#fafafa url("images/titleBar.png") repeat-x bottom left; + border: 1px solid #bfbfbf; + padding:4px 4px 2px 4px; +} + +.tundra .dijitAccordionPane-selected .dijitAccordionTitle { + background: #ededed url("images/buttonActive.png") bottom repeat-x; + font-weight: bold; + /* border:1px solid #84a3d1; */ + border: 1px solid #aaaaaa; + padding: 4px 4px 2px 4px; +} + +.tundra .dijitAccordionPane .dijitAccordionArrow { + background:url("images/arrowUp.png") no-repeat; + width:15px; + height:15px; + margin-top:2px; +} +.dj_ie6 .tundra .dijitAccordionPane .dijitAccordionArrow { + background-image: url("images/arrowUp.gif"); +} + +.tundra .dijitAccordionPane-selected .dijitAccordionArrow { + background:url("images/arrowDown.png") no-repeat; + margin-top:2px; +} +.dj_ie6 .tundra .dijitAccordionPane-selected .dijitAccordionArrow { + background-image: url("images/arrowDown.gif"); +} + +.tundra .dijitAccordionPane .dijitAccordionBody { + background: #fff; + border:1px solid #bfbfbf; +} + +/* Tree */ + +.tundra .dijitTreeNode { + background-image : url('images/i.gif'); + background-position : top left; + background-repeat : repeat-y; + margin-left: 19px; + zoom: 1; /* MOW: what the heck is this doing in here? */ +} +.tundra .dijitTreeIsRoot { + margin-left: 0; +} + +/* left vertical line (grid) for all nodes */ +.tundra .dijitTreeIsLast { + background: url('images/i_half.gif') no-repeat; +} + +.tundra .dijitTreeExpando { + width: 18px; + height: 18px; +} + +.tundra .dijitTreeContent { + min-height: 18px; + min-width: 18px; + margin-left:18px; + padding-top:3px; + padding-left:1px; +} + + +.tundra .dijitTreeExpand { + width: 18px; + height: 18px; + background-repeat : no-repeat; +} + +/* same style as IE selection */ +.tundra .dijitTreeNodeEmphasized { + background-color: Highlight; + color: HighlightText; +} + +/* don't use :focus due to opera and IE's lack of support on div's */ +.tundra .dijitTreeLabelFocused { + outline: 1px invert dotted; +} + +.tundra .dijitTreeExpandoOpened { + background-image: url('images/treeExpand_minus.gif'); +} + +.tundra .dijitTreeExpandoClosed { + background-image: url('images/treeExpand_plus.gif'); +} + +.tundra .dijitTreeExpandoLeaf { + background-image: url('images/treeExpand_leaf.gif'); +} + +.tundra .dijitTreeExpandoLoading { + background-image: url('images/treeExpand_loading.gif'); +} + + +/* Calendar*/ + +.tundra .dijitCalendarIncrementControl { + /* next/prev month buttons */ + width:16px; + height:16px; +} +.dj_ie6 .tundra .dijitCalendarIncrementControl { + padding:.1em; +} + +.tundra .dijitCalendarIncreaseInner, +.tundra .dijitCalendarDecreaseInner { + visibility:hidden; +} + +.tundra .dijitCalendarDecrease { + background:url("images/arrowLeft.png") no-repeat center center; +} +.dj_ie6 .tundra .dijitCalendarDecrease { + background-image:url("images/arrowLeft.gif"); +} + +.tundra .dijitCalendarIncrease { + background:url(images/arrowRight.png) no-repeat center center; +} +.dj_ie6 .tundra .dijitCalendarIncrease { + background-image:url("images/arrowRight.gif"); +} + +.tundra table.dijitCalendarContainer { + font-size: 100%; + border-collapse: collapse; + border-spacing: 0; + border: 1px solid #ccc; + margin: 0; +} + +.tundra .dijitCalendarMonthContainer th { + /* month header cell */ + background:white url("images/calendarMonthLabel.png") repeat-x top; + padding-top:.3em; + padding-bottom:.1em; + text-align:center; +} +.dj_ie6 .tundra .dijitCalendarMonthContainer th { + padding-top:.1em; + padding-bottom:0em; +} + +.tundra .dijitCalendarDayLabelTemplate { + /* day of week labels */ + background:white url("images/calendarDayLabel.png") repeat-x bottom; + font-weight:normal; + padding-top:.15em; + padding-bottom:0em; + border-top: 1px solid #eeeeee; + color:#293a4b; + text-align:center; +} + +.tundra .dijitCalendarMonthLabel { + /* day of week labels */ + color:#293a4b; + font-size: 0.75em; + font-weight: bold; + text-align:center; +} + +.dj_ie7 .tundra .dijitCalendarDateTemplate, +.dj_ie6 .tundra .dijitCalendarDateTemplate { + font-size: 0.8em; +} + +.tundra .dijitCalendarDateTemplate { + /* style for each day cell */ + font-size: 0.9em; + font-weight: bold; + text-align: center; + padding: 0.3em 0.3em 0.05em 0.3em; + letter-spacing: 1px; +} + + +.tundra .dijitCalendarPreviousMonth, +.tundra .dijitCalendarNextMonth { + /* days that are part of the previous or next month */ + color:#999999; + background-color:#f8f8f8 !important; +} + +.tundra .dijitCalendarPreviousMonthDisabled, +.tundra .dijitCalendarNextMonthDisabled { + /* days that are part of the previous or next month - disabled*/ + background-color:#a4a5a6 !important; +} + +.tundra .dijitCalendarCurrentMonth { + /* days that are part of this month */ + background-color:white !important; +} + +.tundra .dijitCalendarCurrentMonthDisabled { + /* days that are part of this month - disabled */ + background-color:#bbbbbc !important; +} + +.tundra .dijitCalendarDisabledDate { + /* one or the other? */ + /* background: url(images/noX.gif) no-repeat center center !important; */ + text-decoration:line-through !important; + cursor:default !important; +} + +.tundra .dijitCalendarCurrentDate { + /* cell for today's date */ + text-decoration:underline; + font-weight:bold; +} + +.tundra .dijitCalendarSelectedDate { + /* cell for the selected date */ + background-color:#bbc4d0 !important; + color:black !important; +} + + +.tundra .dijitCalendarYearContainer { + /* footer of the table that contains the year display/selector */ + background:white url("images/calendarYearLabel.png") repeat-x bottom; + border-top:1px solid #ccc; +} + +.tundra .dijitCalendarYearLabel { + /* container for all of 3 year labels */ + margin:0; + padding:0.4em 0 0.25em 0; + text-align:center; +} + +.tundra .dijitCalendarSelectedYear { + /* label for selected year */ + color:black; + padding:0.2em; + padding-bottom:0.1em; + background-color:#bbc4d0 !important; +} + +.tundra .dijitCalendarNextYear, +.tundra .dijitCalendarPreviousYear { + /* label for next/prev years */ + color:black !important; + font-weight:normal; +} + + + +/* inline edit boxen */ +.tundra .dijitInlineValue { + /* span around an inline-editable value when NOT in edit mode */ + padding:3px; + margin:4px; +} + + +/* MOW: trying to get this to look like a mini-dialog. Advised? */ +.tundra .dijitInlineEditor { + /* fieldset surrounding an inlineEditor in edit mode */ + display: inline-block; + display: -moz-inline-stack; + #display:inline; + /* + border: solid; + border-color: #7788a0 #344257 #344257 #7788a0; + border-width:1px 2px 2px 1px; + -moz-border-radius:0px 2px 0px 2px; make BL and TR corners indent on Moz so it looks like we have a shadow + background-color:white; + */ +} + +.dijitInlineEditor .saveButton, +.dijitInlineEditor .cancelButton { + margin:3px 3px 3px 0px; +} + + +/* spinner */ + +.tundra .dijitSpinner {} +.tundra .dijitSpinner input { +} + + + + +/**** + dijit.ProgressBar + ****/ + +.tundra .dijitProgressBar { + margin:2px 0px 2px 0px; +} + +.tundra .dijitProgressBarEmpty{ + /* outer container and background of the bar that's not finished yet*/ + background:#ececec url("images/progressBarEmpty.png") repeat-x bottom left; + border-color: #84a3d1; +} + +.tundra .dijitProgressBarTile{ + /* inner container for finished portion when in 'tile' (image) mode */ + background:#cad2de url("images/progressBarFull.png") repeat-x top left; +} + +.tundra .dijitProgressBarLabel { + /* Set to a color that contrasts with both the "Empty" and "Full" parts. */ + color:#293a4b; +} + +.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile { + /* use an animated gif for the progress bar in 'indeterminate' mode */ + background:#cad2de url("images/dijitProgressBarAnim.gif") repeat-x top left; +} + +/**** + SLIDER +****/ + +.tundra .dijitHorizontalSliderProgressBar { + border-color: #aab0bb; + background: #c0c2c5 url("images/sliderFull.png") repeat-x top left; +} + +.tundra .dijitVerticalSliderProgressBar { + border-color: #aab0bb; + background: #c0c2c5 url("images/sliderFullVertical.png") repeat-y bottom left; +} + +.tundra .dijitVerticalSliderRemainingBar { + border-color: #b4b4b4; + background: #dcdcdc url("images/sliderEmptyVertical.png") repeat-y bottom left; +} + +.dijitHorizontalSliderRemainingBar { + border-color: #b4b4b4; + background: #dcdcdc url("images/sliderEmpty.png") repeat-x top left; +} + +.tundra .dijitSliderBar { + border-style: solid; + outline:1px; + /* border-color: #b4b4b4; */ +} + +.tundra .dijitHorizontalSliderImageHandle { + border:0px; + width:16px; + height:16px; + background:url("images/preciseSliderThumb.png") no-repeat center center; + cursor:pointer; +} +.dj_ie6 .dijitHorizontalSliderImageHandle { + background-image:url("images/preciseSliderThumb.gif"); +} + +.tundra .dijitHorizontalSliderLeftBumper { + border-left-width: 1px; + border-color: #aab0bb; + background: #c0c2c5 url("images/sliderFull.png") repeat-x top left; +} + +.tundra .dijitHorizontalSliderRightBumper { + background: #dcdcdc url("images/sliderEmpty.png") repeat-x top left; + border-color: #b4b4b4; + border-right-width: 1px; +} + +.tundra .dijitVerticalSliderImageHandle { + border:0px; + width:16px; + height:16px; + background:url("images/sliderThumb.png") no-repeat center center; + cursor:pointer; +} + +.tundra .dijitVerticalSliderBottomBumper { + border-bottom-width: 1px; + border-color: #aab0bb; + background: #c0c2c5 url("images/sliderFullVertical.png") repeat-y bottom left; +} + +.tundra .dijitVerticalSliderTopBumper { + background: #dcdcdc url("images/sliderEmptyVertical.png") repeat-y top left; + border-color: #b4b4b4; + border-top-width: 1px; +} + +/**** ICONS *****/ + +.tundra .dijitEditorIcon { + background-image: url('images/editor.gif'); /* editor icons sprite image */ + background-repeat: no-repeat; + width: 18px; + height: 18px; + text-align: center; +} +.tundra .dijitEditorIconSep { background-position: 0px; } +.tundra .dijitEditorIconBackColor { background-position: -18px; } +.tundra .dijitEditorIconBold { background-position: -36px; } +.tundra .dijitEditorIconCancel { background-position: -54px; } +.tundra .dijitEditorIconCopy { background-position: -72px; } +.tundra .dijitEditorIconCreateLink { background-position: -90px; } +.tundra .dijitEditorIconCut { background-position: -108px; } +.tundra .dijitEditorIconDelete { background-position: -126px; } +.tundra .dijitEditorIconForeColor { background-position: -144px; } +.tundra .dijitEditorIconHiliteColor { background-position: -162px; } +.tundra .dijitEditorIconIndent { background-position: -180px; } +.tundra .dijitEditorIconInsertHorizontalRule { background-position: -198px; } +.tundra .dijitEditorIconInsertImage { background-position: -216px; } +.tundra .dijitEditorIconInsertOrderedList { background-position: -234px; } +.tundra .dijitEditorIconInsertTable { background-position: -252px; } +.tundra .dijitEditorIconInsertUnorderedList { background-position: -270px; } +.tundra .dijitEditorIconItalic { background-position: -288px; } +.tundra .dijitEditorIconJustifyCenter { background-position: -306px; } +.tundra .dijitEditorIconJustifyFull { background-position: -324px; } +.tundra .dijitEditorIconJustifyLeft { background-position: -342px; } +.tundra .dijitEditorIconJustifyRight { background-position: -360px; } +.tundra .dijitEditorIconLeftToRight { background-position: -378px; } +.tundra .dijitEditorIconListBulletIndent { background-position: -396px; } +.tundra .dijitEditorIconListBulletOutdent { background-position: -414px; } +.tundra .dijitEditorIconListNumIndent { background-position: -432px; } +.tundra .dijitEditorIconListNumOutdent { background-position: -450px; } +.tundra .dijitEditorIconOutdent { background-position: -468px; } +.tundra .dijitEditorIconPaste { background-position: -486px; } +.tundra .dijitEditorIconRedo { background-position: -504px; } +.tundra .dijitEditorIconRemoveFormat { background-position: -522px; } +.tundra .dijitEditorIconRightToLeft { background-position: -540px; } +.tundra .dijitEditorIconSave { background-position: -558px; } +.tundra .dijitEditorIconSpace { background-position: -576px; } +.tundra .dijitEditorIconStrikethrough { background-position: -594px; } +.tundra .dijitEditorIconSubscript { background-position: -612px; } +.tundra .dijitEditorIconSuperscript { background-position: -630px; } +.tundra .dijitEditorIconUnderline { background-position: -648px; } +.tundra .dijitEditorIconUndo { background-position: -666px; } +.tundra .dijitEditorIconWikiword { background-position: -684px; } + +/* + * IE6: can't display PNG images with gradient transparency. + * Want to use filter property for those images, but then need to specify a path relative + * to the main page, rather than relative to this file... using gifs for now + */ + +.dj_ie6 .tundra .dijitInputField, +.dj_ie6 .tundra .dijitComboBoxInput, +.dj_ie6 .tundra .dijitSpinnerInput + { + background:transparent; + /* FIXME: un-comment when a pretty version of .gif is made */ + /* background-image: url("images/dojoTundraGradientBg.gif"); */ +} + + +/** TODO: add all other PNGs here that need this */ +/**** Disabled cursor *****/ +.tundra .dijitDisabledClickableRegion, /* a region the user would be able to click on, but it's disabled */ +.tundra .dijitSpinnerDisabled *, +.tundra .dijitButtonDisabled *, +.tundra .dijitDropDownButtonDisabled *, +.tundra .dijitComboButtonDisabled *, +.tundra .dijitComboBoxDisabled * +{ + cursor: not-allowed !important; + cursor: url("no.gif"), not-allowed, default; +} + +/* DnD avatar-specific settings */ +/* For now it uses a default set of rules. Some other DnD classes can be modified as well. */ +.tundra .dojoDndAvatar {font-size: 75%; color: black;} +.tundra .dojoDndAvatarHeader td {padding-left: 20px; padding-right: 4px;} +.tundra .dojoDndAvatarHeader {background: #ccc;} +.tundra .dojoDndAvatarItem {background: #eee;} +.tundra.dojoDndMove .dojoDndAvatarHeader {background-image: url(images/dndNoMove.png); background-repeat: no-repeat;} +.tundra.dojoDndCopy .dojoDndAvatarHeader {background-image: url(images/dndNoCopy.png); background-repeat: no-repeat;} +.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndMove.png); background-repeat: no-repeat;} +.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndCopy.png); background-repeat: no-repeat;} diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra_rtl.css b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra_rtl.css new file mode 100644 index 00000000..b8046048 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra_rtl.css @@ -0,0 +1,111 @@ +@import url("../dijit_rtl.css"); + +/* Dialog */ +.dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon { + background : url("images/tabClose.png") no-repeat left top; + float: left; + right: auto; + left: 5px; +} +.dj_ie6 .dijitRtl .dijitDialogTitleBar .dijitDialogCloseIcon { + background-image: url('images/tabClose.gif'); +} + +.dijitRtl .dijitDialogTitleBar { + background: #fafafa url("images/titleBarBg.gif") repeat-x bottom left; + padding: 4px 4px 2px 8px; +} + +/* Menu */ + +.dijitRtl .dijitMenuItem .dijitMenuItemIcon { + padding-left: 3px; + padding-right: 0px; +} + +.dijitRtl .dijitMenuItem .dijitMenuExpandEnabled { + background:url('images/arrowLeft.png') no-repeat bottom center; +} +.dj_ie6 .dijitRtl .dijitMenuItem .dijitMenuExpandEnabled { + background-image:url('images/arrowLeft.gif'); +} + +/* TitlePane */ +.dijitRtl .dijitTitlePane .dijitClosed .dijitArrowNode { + background:url('images/arrowLeft.png') no-repeat center center; +} +.dj_ie6 .dijitRtl .dijitTitlePane .dijitClosed .dijitArrowNode { + background-image:url('images/arrowLeft.gif'); +} + +/* Tree */ +.dijitRtl .dijitTreeContainer .dijitTreeNode { + background-image : url('images/i_rtl.gif'); + background-position : top right; + margin-left: auto; + margin-right: 19px; +} + +.dijitRtl .dijitTreeContainer .dijitTreeIsRoot { + margin-left: auto; + margin-right: 0; +} + +.dijitRtl .dijitTreeContainer .dijitTreeIsLast { + background-image: url('images/i_half_rtl.gif'); +} + +.dijitRtl .dijitTreeContainer .dijitTreeContent { + margin-left: auto; + margin-right: 18px; + padding-left: auto; + padding-right: 1px; +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpandoOpened { + background-image: url('images/treeExpand_minus_rtl.gif'); +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpandoClosed { + background-image: url('images/treeExpand_plus_rtl.gif'); +} + +.dijitRtl .dijitTreeContainer .dijitTreeExpandoLeaf { + background-image: url('images/treeExpand_leaf_rtl.gif'); +} + +/* ToolTip */ + +.dj_ie .dijitRtl .dijitTooltipLeft { + margin-right: 0px; + margin-left: 13px; +} + +.dj_ie .dijitRtl .dijitTooltipRight { + margin-left: 26px; + margin-right: -13px; +} + +.dj_ie .dijitRtl .dijitTooltipDialog { + zoom:1 !important; +} + +/* Calendar */ + +.dijitRtl .tundra .dijitCalendarDecrease { + background:url(images/arrowRight.png) no-repeat center center; + margin-left:0; + margin-right:2px; +} + +.dijitRtl .tundra .dijitCalendarIncrease { + background:url(images/arrowLeft.png) no-repeat center center; + margin-right:0; + margin-left:4px; +} +.dj_ie6 .dijitRtl .dijitCalendarIncrease { + background-image:url(images/arrowLeft.gif); +} +.dj_ie6 .dijitRtl .dijitCalendarDecrease { + background-image:url(images/arrowRight.gif); +} diff --git a/spring-faces/src/main/java/META-INF/dojo/AdapterRegistry.js b/spring-faces/src/main/java/META-INF/dojo/AdapterRegistry.js new file mode 100644 index 00000000..bbbce480 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/AdapterRegistry.js @@ -0,0 +1,78 @@ +if(!dojo._hasResource["dojo.AdapterRegistry"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.AdapterRegistry"] = true; +dojo.provide("dojo.AdapterRegistry"); + +dojo.AdapterRegistry = function(/*Boolean?*/ returnWrappers){ + // summary: + // A registry to make contextual calling/searching easier. + // description: + // Objects of this class keep list of arrays in the form [name, check, + // wrap, directReturn] that are used to determine what the contextual + // result of a set of checked arguments is. All check/wrap functions + // in this registry should be of the same arity. + this.pairs = []; + this.returnWrappers = returnWrappers || false; +} + +dojo.extend(dojo.AdapterRegistry, { + register: function(name, check, /*Function*/ wrap, directReturn, override){ + // summary: + // register a check function to determine if the wrap function or + // object gets selected + // name: String + // a way to identify this matcher. + // check: Function + // a function that arguments are passed to from the adapter's + // match() function. The check function should return true if the + // given arguments are appropriate for the wrap function. + // directReturn: Boolean? + // If directReturn is true, the value passed in for wrap will be + // returned instead of being called. Alternately, the + // AdapterRegistry can be set globally to "return not call" using + // the returnWrappers property. Either way, this behavior allows + // the registry to act as a "search" function instead of a + // function interception library. + // override: Boolean? + // If override is given and true, the check function will be given + // highest priority. Otherwise, it will be the lowest priority + // adapter. + this.pairs[((override) ? "unshift" : "push")]([name, check, wrap, directReturn]); + }, + + match: function(/* ... */){ + // summary: + // Find an adapter for the given arguments. If no suitable adapter + // is found, throws an exception. match() accepts any number of + // arguments, all of which are passed to all matching functions + // from the registered pairs. + for(var i = 0; i < this.pairs.length; i++){ + var pair = this.pairs[i]; + if(pair[1].apply(this, arguments)){ + if((pair[3])||(this.returnWrappers)){ + return pair[2]; + }else{ + return pair[2].apply(this, arguments); + } + } + } + throw new Error("No match found"); + }, + + unregister: function(name){ + // summary: Remove a named adapter from the registry + + // FIXME: this is kind of a dumb way to handle this. On a large + // registry this will be slow-ish and we can use the name as a lookup + // should we choose to trade memory for speed. + for(var i = 0; i < this.pairs.length; i++){ + var pair = this.pairs[i]; + if(pair[0] == name){ + this.pairs.splice(i, 1); + return true; + } + } + return false; + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dojo/DeferredList.js b/spring-faces/src/main/java/META-INF/dojo/DeferredList.js new file mode 100644 index 00000000..763f0459 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/DeferredList.js @@ -0,0 +1,68 @@ +if(!dojo._hasResource["dojo.DeferredList"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.DeferredList"] = true; +dojo.provide("dojo.DeferredList"); +dojo.declare("dojo.DeferredList", dojo.Deferred, { + constructor: function(list, /*bool?*/ fireOnOneCallback, /*bool?*/ fireOnOneErrback, /*bool?*/ consumeErrors, /*Function?*/ canceller){ + this.list = list; + this.resultList = new Array(this.list.length); + + // Deferred init + this.chain = []; + this.id = this._nextId(); + this.fired = -1; + this.paused = 0; + this.results = [null, null]; + this.canceller = canceller; + this.silentlyCancelled = false; + + if (this.list.length === 0 && !fireOnOneCallback) { + this.callback(this.resultList); + } + + this.finishedCount = 0; + this.fireOnOneCallback = fireOnOneCallback; + this.fireOnOneErrback = fireOnOneErrback; + this.consumeErrors = consumeErrors; + + var index = 0; + + dojo.forEach(this.list, function(d) { + var _index = index; + //console.log("add cb/errb index "+_index); + d.addCallback(function(r) { this._cbDeferred(_index, true, r) }); + d.addErrback(function(r) { this._cbDeferred(_index, false, r) }); + index++; + },this); + }, + _cbDeferred: function (index, succeeded, result) { + //dojo.debug("Fire "+index+" succ "+succeeded+" res "+result); + this.resultList[index] = [succeeded, result]; this.finishedCount += 1; + if (this.fired !== 0) { + if (succeeded && this.fireOnOneCallback) { + this.callback([index, result]); + } else if (!succeeded && this.fireOnOneErrback) { + this.errback(result); + } else if (this.finishedCount == this.list.length) { + this.callback(this.resultList); + } + } + if (!succeeded && this.consumeErrors) { + result = null; + } + return result; + }, + + gatherResults: function (deferredList) { + var d = new dojo.DeferedList(deferredList, false, true, false); + d.addCallback(function (results) { + var ret = []; + for (var i = 0; i < results.length; i++) { + ret.push(results[i][1]); + } + return ret; + }); + return d; + } +}); + +} diff --git a/spring-faces/src/main/java/META-INF/dojo/OpenAjax.js b/spring-faces/src/main/java/META-INF/dojo/OpenAjax.js new file mode 100644 index 00000000..3ac9ed41 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/OpenAjax.js @@ -0,0 +1,191 @@ +/******************************************************************************* + * OpenAjax.js + * + * Reference implementation of the OpenAjax Hub, as specified by OpenAjax Alliance. + * Specification is under development at: + * + * http://www.openajax.org/member/wiki/OpenAjax_Hub_Specification + * + * Copyright 2006-2007 OpenAjax Alliance + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 . Unless + * required by applicable law or agreed to in writing, software distributed + * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + * + ******************************************************************************/ + +// prevent re-definition of the OpenAjax object +if(!window["OpenAjax"]){ + OpenAjax = new function(){ + var t = true; + var f = false; + var g = window; + var libs; + var ooh = "org.openajax.hub."; + + var h = {}; + this.hub = h; + h.implementer = "http://openajax.org"; + h.implVersion = "0.6"; + h.specVersion = "0.6"; + h.implExtraData = {}; + var libs = {}; + h.libraries = libs; + + h.registerLibrary = function(prefix, nsURL, version, extra){ + libs[prefix] = { + prefix: prefix, + namespaceURI: nsURL, + version: version, + extraData: extra + }; + this.publish(ooh+"registerLibrary", libs[prefix]); + } + h.unregisterLibrary = function(prefix){ + this.publish(ooh+"unregisterLibrary", libs[prefix]); + delete libs[prefix]; + } + + h._subscriptions = { c:{}, s:[] }; + h._cleanup = []; + h._subIndex = 0; + h._pubDepth = 0; + + h.subscribe = function(name, callback, scope, subscriberData, filter){ + if(!scope){ + scope = window; + } + var handle = name + "." + this._subIndex; + var sub = { scope: scope, cb: callback, fcb: filter, data: subscriberData, sid: this._subIndex++, hdl: handle }; + var path = name.split("."); + this._subscribe(this._subscriptions, path, 0, sub); + return handle; + } + + h.publish = function(name, message){ + var path = name.split("."); + this._pubDepth++; + this._publish(this._subscriptions, path, 0, name, message); + this._pubDepth--; + if((this._cleanup.length > 0) && (this._pubDepth == 0)){ + for(var i = 0; i < this._cleanup.length; i++){ + this.unsubscribe(this._cleanup[i].hdl); + } + delete(this._cleanup); + this._cleanup = []; + } + } + + h.unsubscribe = function(sub){ + var path = sub.split("."); + var sid = path.pop(); + this._unsubscribe(this._subscriptions, path, 0, sid); + } + + h._subscribe = function(tree, path, index, sub){ + var token = path[index]; + if(index == path.length){ + tree.s.push(sub); + }else{ + if(typeof tree.c == "undefined"){ + tree.c = {}; + } + if(typeof tree.c[token] == "undefined"){ + tree.c[token] = { c: {}, s: [] }; + this._subscribe(tree.c[token], path, index + 1, sub); + }else{ + this._subscribe( tree.c[token], path, index + 1, sub); + } + } + } + + h._publish = function(tree, path, index, name, msg){ + if(typeof tree != "undefined"){ + var node; + if(index == path.length) { + node = tree; + }else{ + this._publish(tree.c[path[index]], path, index + 1, name, msg); + this._publish(tree.c["*"], path, index + 1, name, msg); + node = tree.c["**"]; + } + if(typeof node != "undefined"){ + var callbacks = node.s; + var max = callbacks.length; + for(var i = 0; i < max; i++){ + if(callbacks[i].cb){ + var sc = callbacks[i].scope; + var cb = callbacks[i].cb; + var fcb = callbacks[i].fcb; + var d = callbacks[i].data; + if(typeof cb == "string"){ + // get a function object + cb = sc[cb]; + } + if(typeof fcb == "string"){ + // get a function object + fcb = sc[fcb]; + } + if((!fcb) || + (fcb.call(sc, name, msg, d))) { + cb.call(sc, name, msg, d); + } + } + } + } + } + } + + h._unsubscribe = function(tree, path, index, sid) { + if(typeof tree != "undefined") { + if(index < path.length) { + var childNode = tree.c[path[index]]; + this._unsubscribe(childNode, path, index + 1, sid); + if(childNode.s.length == 0) { + for(var x in childNode.c) + return; + delete tree.c[path[index]]; + } + return; + } + else { + var callbacks = tree.s; + var max = callbacks.length; + for(var i = 0; i < max; i++) + if(sid == callbacks[i].sid) { + if(this._pubDepth > 0) { + callbacks[i].cb = null; + this._cleanup.push(callbacks[i]); + } + else + callbacks.splice(i, 1); + return; + } + } + } + } + // The following function is provided for automatic testing purposes. + // It is not expected to be deployed in run-time OpenAjax Hub implementations. + h.reinit = function() + { + for (var lib in OpenAjax.hub.libraries) { + delete OpenAjax.hub.libraries[lib]; + } + OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {}); + + delete OpenAjax._subscriptions; + OpenAjax._subscriptions = {c:{},s:[]}; + delete OpenAjax._cleanup; + OpenAjax._cleanup = []; + OpenAjax._subIndex = 0; + OpenAjax._pubDepth = 0; + } + }; + // Register the OpenAjax Hub itself as a library. + OpenAjax.hub.registerLibrary("OpenAjax", "http://openajax.org/hub", "0.6", {}); + +} diff --git a/spring-faces/src/main/java/META-INF/dojo/_firebug/LICENSE b/spring-faces/src/main/java/META-INF/dojo/_firebug/LICENSE new file mode 100644 index 00000000..8c777a23 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/_firebug/LICENSE @@ -0,0 +1,37 @@ +License Disclaimer: + +All contents of this directory are Copyright (c) the Dojo Foundation, with the +following exceptions: +------------------------------------------------------------------------------- + +firebug.html, firebug.js, errIcon.png, infoIcon.png, warningIcon.png: + * Copyright (c) 2006-2007, Joe Hewitt, All rights reserved. + Distributed under the terms of the BSD License (see below) + +------------------------------------------------------------------------------- + +Copyright (c) 2006-2007, Joe Hewitt +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/spring-faces/src/main/java/META-INF/dojo/_firebug/errorIcon.png b/spring-faces/src/main/java/META-INF/dojo/_firebug/errorIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..2d75261bb675f5f878a9ca549340d11694287ea9 GIT binary patch literal 457 zcmV;)0XF`LP)5Ui~H0X8YDC6$Gxpb|xtYf@N==`2Jc z7Ah8ji(kR7VtwakC$}D$g(o{ZGjC>QZ;f+~bR8H|#%4hcOnLVm*j;w6MZq#Egs5(a zc4lEugK?iQ0QcYtDcH902T2xS;XcvY8O)TA|L_Qo0dkkJVlXBT;dmV(QXWLO$HEed zt}ftbg3DK{l45N>4BPBOtRiE?7^^l0JFaL_w@cLT6E&N;kZtyH3~NT_jk(q5@35sP zaxP8XaIwukAMZ)K?GhDNr$f|e@AO4;e+3u-uo^Lr*!;%I00000NkvXXu0mjfj3mDh literal 0 HcmV?d00001 diff --git a/spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.css b/spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.css new file mode 100644 index 00000000..f636a172 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.css @@ -0,0 +1,210 @@ +.firebug { + margin: 0; + background: #FFFFD7; + font-family: Lucida Grande, Tahoma, sans-serif; + font-size: 11px; + overflow: hidden; + border: 1px solid black; + position: relative; +} + +.firebug a { + text-decoration: none; +} + +.firebug a:hover { + text-decoration: underline; +} + +.firebug #firebugToolbar { + height: 14px; + border-top: 1px solid ThreeDHighlight; + border-bottom: 1px solid ThreeDShadow; + padding: 2px 6px; + background: ThreeDFace; +} + +.firebug .firebugToolbarRight { + position: absolute; + top: 4px; + right: 6px; +} + +.firebug #firebugLog { + overflow: auto; + position: absolute; + left: 0; + width: 100%; +} + +.firebug #firebugCommandLine { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 18px; + border: none; + border-top: 1px solid ThreeDShadow; +} + +/************************************************************************************************/ + +.firebug .logRow { + position: relative; + border-bottom: 1px solid #D7D7D7; + padding: 2px 4px 1px 6px; + background-color: #FFFFFF; +} + +.firebug .logRow-command { + font-family: Monaco, monospace; + color: blue; +} + +.firebug .objectBox-null { + padding: 0 2px; + border: 1px solid #666666; + background-color: #888888; + color: #FFFFFF; +} + +.firebug .objectBox-string { + font-family: Monaco, monospace; + color: red; + white-space: pre; +} + +.firebug .objectBox-number { + color: #000088; +} + +.firebug .objectBox-function { + font-family: Monaco, monospace; + color: DarkGreen; +} + +.firebug .objectBox-object { + color: DarkGreen; + font-weight: bold; +} + +/************************************************************************************************/ + +.firebug .logRow-info, +.firebug .logRow-error, +.firebug .logRow-warning { + background: #FFFFFF no-repeat 2px 2px; + padding-left: 20px; + padding-bottom: 3px; +} + +.firebug .logRow-info { + background-image: url(infoIcon.png); +} + +.firebug .logRow-warning { + background-color: cyan; + background-image: url(warningIcon.png); +} + +.firebug .logRow-error { + background-color: LightYellow; + background-image: url(errorIcon.png); +} + +.firebug .errorMessage { + vertical-align: top; + color: #FF0000; +} + +.firebug .objectBox-sourceLink { + position: absolute; + right: 4px; + top: 2px; + padding-left: 8px; + font-family: Lucida Grande, sans-serif; + font-weight: bold; + color: #0000FF; +} + +/************************************************************************************************/ + +.firebug .logRow-group { + background: #EEEEEE; + border-bottom: none; +} + +.firebug .logGroup { + background: #EEEEEE; +} + +.firebug .logGroupBox { + margin-left: 24px; + border-top: 1px solid #D7D7D7; + border-left: 1px solid #D7D7D7; +} + +/************************************************************************************************/ + +.firebug .selectorTag, +.firebug .selectorId, +.firebug .selectorClass { + font-family: Monaco, monospace; + font-weight: normal; +} + +.firebug .selectorTag { + color: #0000FF; +} + +.firebug .selectorId { + color: DarkBlue; +} + +.firebug .selectorClass { + color: red; +} + +/************************************************************************************************/ + +.firebug .objectBox-element { + font-family: Monaco, monospace; + color: #000088; +} + +.firebug .nodeChildren { + margin-left: 16px; +} + +.firebug .nodeTag { + color: blue; +} + +.firebug .nodeValue { + color: #FF0000; + font-weight: normal; +} + +.firebug .nodeText, +.firebug .nodeComment { + margin: 0 2px; + vertical-align: top; +} + +.firebug .nodeText { + color: #333333; +} + +.firebug .nodeComment { + color: DarkGreen; +} + +/************************************************************************************************/ + +.firebug .propertyNameCell { + vertical-align: top; +} + +.firebug .propertyName { + font-weight: bold; +} \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.js b/spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.js new file mode 100644 index 00000000..75364eed --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/_firebug/firebug.js @@ -0,0 +1,626 @@ +if(!dojo._hasResource["dojo._firebug.firebug"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._firebug.firebug"] = true; +dojo.provide("dojo._firebug.firebug"); +if( + ( + (!("console" in window)) || + (!("firebug" in console)) + )&& + ( + (djConfig["noFirebugLite"] !== true) + ) +){ +(function(){ + // don't build a firebug frame in iframes + if(window != window.parent){ return; } + + window.console = { + log: function(){ + logFormatted(arguments, ""); + }, + + debug: function(){ + logFormatted(arguments, "debug"); + }, + + info: function(){ + logFormatted(arguments, "info"); + }, + + warn: function(){ + logFormatted(arguments, "warning"); + }, + + error: function(){ + logFormatted(arguments, "error"); + }, + + assert: function(truth, message){ + if(!truth){ + var args = []; + for(var i = 1; i < arguments.length; ++i){ + args.push(arguments[i]); + } + + logFormatted(args.length ? args : ["Assertion Failure"], "error"); + throw message ? message : "Assertion Failure"; + } + }, + + dir: function(object){ + var html = []; + + var pairs = []; + for(var name in object){ + try{ + pairs.push([name, object[name]]); + }catch(e){ + /* squelch */ + } + } + + pairs.sort(function(a, b){ + return a[0] < b[0] ? -1 : 1; + }); + + html.push(''); + for(var i = 0; i < pairs.length; ++i){ + var name = pairs[i][0], value = pairs[i][1]; + + html.push('', + '', ''); + } + html.push('
    ', + escapeHTML(name), ''); + appendObject(value, html); + html.push('
    '); + + logRow(html, "dir"); + }, + + dirxml: function(node){ + var html = []; + + appendNode(node, html); + logRow(html, "dirxml"); + }, + + group: function(){ + logRow(arguments, "group", pushGroup); + }, + + groupEnd: function(){ + logRow(arguments, "", popGroup); + }, + + time: function(name){ + timeMap[name] = (new Date()).getTime(); + }, + + timeEnd: function(name){ + if(name in timeMap){ + var delta = (new Date()).getTime() - timeMap[name]; + logFormatted([name+ ":", delta+"ms"]); + delete timeMap[name]; + } + }, + + count: function(){ + this.warn(["count() not supported."]); + }, + + trace: function(){ + this.warn(["trace() not supported."]); + }, + + profile: function(){ + this.warn(["profile() not supported."]); + }, + + profileEnd: function(){ }, + + clear: function(){ + consoleBody.innerHTML = ""; + }, + + open: function(){ toggleConsole(true); }, + + close: function(){ + if(frameVisible){ + toggleConsole(); + } + } + }; + + // *************************************************************************** + + var consoleFrame = null; + var consoleBody = null; + var commandLine = null; + + var frameVisible = false; + var messageQueue = []; + var groupStack = []; + var timeMap = {}; + + var clPrefix = ">>> "; + + // *************************************************************************** + + function toggleConsole(forceOpen){ + frameVisible = forceOpen || !frameVisible; + if(consoleFrame){ + consoleFrame.style.display = frameVisible ? "block" : "none"; + } + } + + function focusCommandLine(){ + toggleConsole(true); + if(commandLine){ + commandLine.focus(); + } + } + + function createFrame(){ + if(consoleFrame){ + return; + } + + var doc = document; + + var styleElement = doc.createElement("link"); + styleElement.href = dojo.moduleUrl("dojo._firebug", "firebug.css"); + styleElement.rel = "stylesheet"; + styleElement.type = "text/css"; + var styleParent = doc.getElementsByTagName("head"); + if(styleParent){ + styleParent = styleParent[0]; + } + if(!styleParent){ + styleParent = doc.getElementsByTagName("html")[0]; + } + if(dojo.isIE){ + window.setTimeout(function(){ styleParent.appendChild(styleElement); }, 0); + }else{ + styleParent.appendChild(styleElement); + } + + if(typeof djConfig != "undefined" && djConfig["debugContainerId"]){ + consoleFrame = doc.getElementById(djConfig.debugContainerId); + } + if(!consoleFrame){ + consoleFrame = doc.createElement("div"); + doc.body.appendChild(consoleFrame); + } + consoleFrame.className += " firebug"; + consoleFrame.style.height = "200px"; + consoleFrame.style.display = (frameVisible ? "block" : "none"); + + consoleFrame.innerHTML = + '
    ' + + ' Clear' + + ' ' + + ' Close' + + ' ' + + '
    ' + + '' + + '
    '; + + + var toolbar = doc.getElementById("firebugToolbar"); + toolbar.onmousedown = onSplitterMouseDown; + + commandLine = doc.getElementById("firebugCommandLine"); + addEvent(commandLine, "keydown", onCommandLineKeyDown); + + addEvent(doc, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown); + + consoleBody = doc.getElementById("firebugLog"); + layout(); + flush(); + } + + dojo.addOnLoad(createFrame); + + function evalCommandLine(){ + var text = commandLine.value; + commandLine.value = ""; + + logRow([clPrefix, text], "command"); + + var value; + try{ + value = eval(text); + }catch(e){ + /* squelch */ + } + + console.log(value); + } + + function layout(){ + var toolbar = consoleBody.ownerDocument.getElementById("firebugToolbar"); + var height = consoleFrame.offsetHeight - (toolbar.offsetHeight + commandLine.offsetHeight); + consoleBody.style.top = toolbar.offsetHeight + "px"; + consoleBody.style.height = height + "px"; + + commandLine.style.top = (consoleFrame.offsetHeight - commandLine.offsetHeight) + "px"; + } + + function logRow(message, className, handler){ + if(consoleBody){ + writeMessage(message, className, handler); + }else{ + messageQueue.push([message, className, handler]); + } + } + + function flush(){ + var queue = messageQueue; + messageQueue = []; + + for(var i = 0; i < queue.length; ++i){ + writeMessage(queue[i][0], queue[i][1], queue[i][2]); + } + } + + function writeMessage(message, className, handler){ + var isScrolledToBottom = + consoleBody.scrollTop + consoleBody.offsetHeight >= consoleBody.scrollHeight; + + handler = handler||writeRow; + + handler(message, className); + + if(isScrolledToBottom){ + consoleBody.scrollTop = consoleBody.scrollHeight - consoleBody.offsetHeight; + } + } + + function appendRow(row){ + var container = groupStack.length ? groupStack[groupStack.length-1] : consoleBody; + container.appendChild(row); + } + + function writeRow(message, className){ + var row = consoleBody.ownerDocument.createElement("div"); + row.className = "logRow" + (className ? " logRow-"+className : ""); + row.innerHTML = message.join(""); + appendRow(row); + } + + function pushGroup(message, className){ + logFormatted(message, className); + + var groupRow = consoleBody.ownerDocument.createElement("div"); + groupRow.className = "logGroup"; + var groupRowBox = consoleBody.ownerDocument.createElement("div"); + groupRowBox.className = "logGroupBox"; + groupRow.appendChild(groupRowBox); + appendRow(groupRowBox); + groupStack.push(groupRowBox); + } + + function popGroup(){ + groupStack.pop(); + } + + // *************************************************************************** + + function logFormatted(objects, className){ + var html = []; + + var format = objects[0]; + var objIndex = 0; + + if(typeof(format) != "string"){ + format = ""; + objIndex = -1; + } + + var parts = parseFormat(format); + for(var i = 0; i < parts.length; ++i){ + var part = parts[i]; + if(part && typeof(part) == "object"){ + var object = objects[++objIndex]; + part.appender(object, html); + }else{ + appendText(part, html); + } + } + + for(var i = objIndex+1; i < objects.length; ++i){ + appendText(" ", html); + + var object = objects[i]; + if(typeof(object) == "string"){ + appendText(object, html); + }else{ + appendObject(object, html); + } + } + + logRow(html, className); + } + + function parseFormat(format){ + var parts = []; + + var reg = /((^%|[^\\]%)(\d+)?(\.)([a-zA-Z]))|((^%|[^\\]%)([a-zA-Z]))/; + var appenderMap = {s: appendText, d: appendInteger, i: appendInteger, f: appendFloat}; + + for(var m = reg.exec(format); m; m = reg.exec(format)){ + var type = m[8] ? m[8] : m[5]; + var appender = type in appenderMap ? appenderMap[type] : appendObject; + var precision = m[3] ? parseInt(m[3]) : (m[4] == "." ? -1 : 0); + + parts.push(format.substr(0, m[0][0] == "%" ? m.index : m.index+1)); + parts.push({appender: appender, precision: precision}); + + format = format.substr(m.index+m[0].length); + } + + parts.push(format); + + return parts; + } + + function escapeHTML(value){ + function replaceChars(ch){ + switch(ch){ + case "<": + return "<"; + case ">": + return ">"; + case "&": + return "&"; + case "'": + return "'"; + case '"': + return """; + } + return "?"; + }; + return String(value).replace(/[<>&"']/g, replaceChars); + } + + function objectToString(object){ + try{ + return object+""; + }catch(e){ + return null; + } + } + + // *************************************************************************** + + function appendText(object, html){ + html.push(escapeHTML(objectToString(object))); + } + + function appendNull(object, html){ + html.push('', escapeHTML(objectToString(object)), ''); + } + + function appendString(object, html){ + html.push('"', escapeHTML(objectToString(object)), + '"'); + } + + function appendInteger(object, html){ + html.push('', escapeHTML(objectToString(object)), ''); + } + + function appendFloat(object, html){ + html.push('', escapeHTML(objectToString(object)), ''); + } + + function appendFunction(object, html){ + var reName = /function ?(.*?)\(/; + var m = reName.exec(objectToString(object)); + var name = m ? m[1] : "function"; + html.push('', escapeHTML(name), '()'); + } + + function appendObject(object, html){ + try{ + if(object == undefined){ + appendNull("undefined", html); + }else if(object == null){ + appendNull("null", html); + }else if(typeof object == "string"){ + appendString(object, html); + }else if(typeof object == "number"){ + appendInteger(object, html); + }else if(typeof object == "function"){ + appendFunction(object, html); + }else if(object.nodeType == 1){ + appendSelector(object, html); + }else if(typeof object == "object"){ + appendObjectFormatted(object, html); + }else{ + appendText(object, html); + } + }catch(e){ + /* squelch */ + } + } + + function appendObjectFormatted(object, html){ + var text = objectToString(object); + var reObject = /\[object (.*?)\]/; + + var m = reObject.exec(text); + html.push('', m ? m[1] : text, '') + } + + function appendSelector(object, html){ + html.push(''); + + html.push('', escapeHTML(object.nodeName.toLowerCase()), ''); + if(object.id){ + html.push('#', escapeHTML(object.id), ''); + } + if(object.className){ + html.push('.', escapeHTML(object.className), ''); + } + + html.push(''); + } + + function appendNode(node, html){ + if(node.nodeType == 1){ + html.push( + '
    ', + '<', node.nodeName.toLowerCase(), ''); + + for(var i = 0; i < node.attributes.length; ++i){ + var attr = node.attributes[i]; + if(!attr.specified){ continue; } + + html.push(' ', attr.nodeName.toLowerCase(), + '="', escapeHTML(attr.nodeValue), + '"') + } + + if(node.firstChild){ + html.push('>
    '); + + for(var child = node.firstChild; child; child = child.nextSibling){ + appendNode(child, html); + } + + html.push('
    </', + node.nodeName.toLowerCase(), '>
    '); + }else{ + html.push('/>

    '); + } + }else if (node.nodeType == 3){ + html.push('
    ', escapeHTML(node.nodeValue), + '
    '); + } + } + + // *************************************************************************** + + function addEvent(object, name, handler){ + if(document.all){ + object.attachEvent("on"+name, handler); + }else{ + object.addEventListener(name, handler, false); + } + } + + function removeEvent(object, name, handler){ + if(document.all){ + object.detachEvent("on"+name, handler); + }else{ + object.removeEventListener(name, handler, false); + } + } + + function cancelEvent(event){ + if(document.all){ + event.cancelBubble = true; + }else{ + event.stopPropagation(); + } + } + + function onError(msg, href, lineNo){ + var html = []; + + var lastSlash = href.lastIndexOf("/"); + var fileName = lastSlash == -1 ? href : href.substr(lastSlash+1); + + html.push( + '', msg, '', + '' + ); + + logRow(html, "error"); + }; + + + //After converting to div instead of iframe, now getting two keydowns right away in IE 6. + //Make sure there is a little bit of delay. + var onKeyDownTime = (new Date()).getTime(); + + function onKeyDown(event){ + var timestamp = (new Date()).getTime(); + if(timestamp > onKeyDownTime + 200){ + onKeyDownTime = timestamp; + if(event.keyCode == 123){ + toggleConsole(); + }else if((event.keyCode == 108 || event.keyCode == 76) && event.shiftKey + && (event.metaKey || event.ctrlKey)){ + focusCommandLine(); + }else{ + return; + } + cancelEvent(event); + } + } + + + function onSplitterMouseDown(event){ + if(dojo.isSafari || dojo.isOpera){ + return; + } + + addEvent(document, "mousemove", onSplitterMouseMove); + addEvent(document, "mouseup", onSplitterMouseUp); + + for(var i = 0; i < frames.length; ++i){ + addEvent(frames[i].document, "mousemove", onSplitterMouseMove); + addEvent(frames[i].document, "mouseup", onSplitterMouseUp); + } + } + + function onSplitterMouseMove(event){ + var win = document.all + ? event.srcElement.ownerDocument.parentWindow + : event.target.ownerDocument.defaultView; + + var clientY = event.clientY; + if(win != win.parent){ + clientY += win.frameElement ? win.frameElement.offsetTop : 0; + } + + var height = consoleFrame.offsetTop + consoleFrame.clientHeight; + var y = height - clientY; + + consoleFrame.style.height = y + "px"; + layout(); + } + + function onSplitterMouseUp(event){ + removeEvent(document, "mousemove", onSplitterMouseMove); + removeEvent(document, "mouseup", onSplitterMouseUp); + + for(var i = 0; i < frames.length; ++i){ + removeEvent(frames[i].document, "mousemove", onSplitterMouseMove); + removeEvent(frames[i].document, "mouseup", onSplitterMouseUp); + } + } + + function onCommandLineKeyDown(event){ + if(event.keyCode == 13){ + evalCommandLine(); + }else if(event.keyCode == 27){ + commandLine.value = ""; + } + } + + window.onerror = onError; + addEvent(document, dojo.isIE || dojo.isSafari ? "keydown" : "keypress", onKeyDown); + + if( (document.documentElement.getAttribute("debug") == "true")|| + (djConfig.isDebug) + ){ + toggleConsole(true); + } +})(); +} + +} diff --git a/spring-faces/src/main/java/META-INF/dojo/_firebug/infoIcon.png b/spring-faces/src/main/java/META-INF/dojo/_firebug/infoIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..da1e5334c19375c7855e04792661bf2cc15b7e14 GIT binary patch literal 524 zcmV+n0`vWeP)k!W#MOQK{ljl)GVz=%0?7rtE9wY7Lo;JgN;%aBBhkF zup$d#AvGJB@i#x7d!6%U9&aT1>bvKh+xgD9@4TZarC_79XA_3Y)u z4jj;IA&G`4T$SEtNOwJyD9b09DTwq1MCN*%!X+xO|0N{Rs4^;&b|i*sHEGPq;n|zOEfbH<6(;%L`k^mT)7z~ywlRx3h4?$ zl>}*o?-02Jb-IWCddBfMi57}>wIB`^Hlv*vh?pjx5|0aenzD001sDKWl9*QR=`djc O0000X+Z1;#G+8)`#`)nwDij+1|+};(+Jd*z{tojUrGNrgOti&26irp z_}33i3=gldFg&}%ydKD%4m4mlSOTPRRTp>8w%MHj-#%jkasQt=!|=bOgW><(yI^TB zesYWX|At9i|AA_qz?K0SLTh@t|9^bL1XtwZ!T_=ktQjT-!jEsTfHbZKahQM#GSy9g zGw=!jV;}@%)c=6I5d!peNPt)%qXt$R0@A3+&Ho=o(%2Y6D=A@WxvV2T-}@x_m?j12e;Kn75?FIa%Y*5~(_)p>;wfs>Yo>SSa9R12cEf^3|A z?HDV=w@(OLSFdJZ*t3U$;p|ydO|Ks_Gd#G$auApZ7BB&cJHLN2R-V|*!SL$`L^DVe z48y>e_e>0@wy}el)6tV$3kUcAYBiJJ3`|`A816m!$KYVc!0_$`6T_P)%nWzVvoQSm z#aIlqs1HRWRI?%|K>)EC$csSy9f(f>@eyb`{RmSF5MTfvB)oWs%O|`50000= 0 ? href.substring(i+1) : null; + }; + }else{ + getHash = function(){ return window.location.hash; }; + } + + function setHash(h){ + if(!h) { h = "" }; + if(h.charAt(0) == "#"){ h = h.substring(1); } + window.location.hash = h; + historyCounter = history.length; + } + + function loadIframeHistory(){ + //summary: private method. Do not call this directly. + var url = (djConfig["dojoIframeHistoryUrl"] || dojo.moduleUrl("dojo", "resources/iframe_history.html")) + "?" + (new Date()).getTime(); + moveForward = true; + if (historyIframe) { + (dojo.isSafari) ? historyIframe.location = url : window.frames[historyIframe.name].location = url; + } else { + console.warn("dojo.back: Not initialised. You need to call dojo.back.init() from a "); + // our fix to ensure that we don't hit strange scoping/timing issues + // insisde of setTimeout() blocks + popup.show(1, 1, 1, 1); + } + + + dojo.extend(dojo.NodeList, { + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array#Methods + + // FIXME: would it be smaller if we set these w/ iteration? + + // FIXME: handle return values for #3244 + // http://trac.dojotoolkit.org/ticket/3244 + + // FIXME: + // need to wrap or implement: + // slice + // splice + // concat + // join (perhaps w/ innerHTML/outerHTML overload for toString() of items?) + // reduce + // reduceRight + + indexOf: function(/*Object*/ value, /*Integer?*/ fromIndex){ + // summary: + // see dojo.indexOf(). The primary difference is that the acted-on + // array is implicitly this NodeList + return d.indexOf(this, value, fromIndex); + }, + + lastIndexOf: function(/*Object*/ value, /*Integer?*/ fromIndex){ + // summary: + // see dojo.lastIndexOf(). The primary difference is that the + // acted-on array is implicitly this NodeList + var aa = d._toArray(arguments); + aa.unshift(this); + return d.lastIndexOf.apply(d, aa); + }, + + every: function(/*Function*/callback, /*Object?*/thisObject){ + // summary: + // see dojo.every() and: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every + // Takes the same structure of arguments and returns as + // dojo.every() with the caveat that the passed array is + // implicitly this NodeList + return d.every(this, callback, thisObject); // Boolean + }, + + some: function(/*Function*/callback, /*Object?*/thisObject){ + // summary: + // see dojo.some() and: + // http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some + // Takes the same structure of arguments and returns as + // dojo.some() with the caveat that the passed array is + // implicitly this NodeList + return d.some(this, callback, thisObject); // Boolean + }, + + forEach: function(callback, thisObj){ + // summary: + // see dojo.forEach(). The primary difference is that the acted-on + // array is implicitly this NodeList + d.forEach(this, callback, thisObj); + return this; // dojo.NodeList non-standard return to allow easier chaining + }, + + map: function(/*Function*/ func, /*Function?*/ obj){ + // summary: + // see dojo.map(). The primary difference is that the acted-on + // array is implicitly this NodeList and the return is a + // dojo.NodeList (a subclass of Array) + + return d.map(this, func, obj, d.NodeList); // dojo.NodeList + }, + + // custom methods + + coords: function(){ + // summary: + // returns the box objects all elements in a node list as + // an Array (*not* a NodeList) + + return d.map(this, d.coords); + }, + + style: function(/*String*/ property, /*String?*/ value){ + // summary: + // gets or sets the value of the CSS property + // property: + // the CSS property to get/set, in JavaScript notation ("lineHieght" instead of "line-height") + // value: + // optional. The value to set the property to + // return: + // if no value is passed, the result is a string. If a value is passed, the return is this NodeList + + // FIXME: need to add examples! + var aa = d._toArray(arguments); + aa.unshift(this[0]); + var s = d.style.apply(d, aa); + return (arguments.length > 1) ? this : s; // String||dojo.NodeList + }, + + styles: function(/*String*/ property, /*String?*/ value){ + // summary: + // gets or sets the CSS property for every element in the NodeList + // property: + // the CSS property to get/set, in JavaScript notation ("lineHieght" instead of "line-height") + // value: + // optional. The value to set the property to + // return: + // if no value is passed, the result is an array of strings. If a value is passed, the return is this NodeList + var aa = d._toArray(arguments); + aa.unshift(null); + var s = this.map(function(i){ + aa[0] = i; + return d.style.apply(d, aa); + }); + return (arguments.length > 1) ? this : s; // String||dojo.NodeList + }, + + addClass: function(/*String*/ className){ + return this.forEach(function(i){ dojo.addClass(i, className); }); + }, + + removeClass: function(/*String*/ className){ + return this.forEach(function(i){ dojo.removeClass(i, className); }); + }, + + // FIXME: toggleClass()? connectPublisher()? connectRunOnce()? + + place: function(/*String||Node*/ queryOrNode, /*String*/ position){ + // summary: + // places elements of this node list relative to the first element matched + // by queryOrNode. Returns the original NodeList. + // queryOrNode: + // may be a string representing any valid CSS3 selector or a DOM node. + // In the selector case, only the first matching element will be used + // for relative positioning. + // position: + // can be one of: + // "last"||"end" (default) + // "first||"start" + // "before" + // "after" + // or an offset in the childNodes property + var item = d.query(queryOrNode)[0]; + position = position||"last"; + + for(var x=0; x= 0){ + if(i[x] < end){ + end = i[x]; + } + } + } + return (end < 0) ? ql : end; + } + + // returns the "#thinger" section of a longer simple query like "#thinger.blah[selected]" + var getId = function(query){ + var i = _getIndexes(query); + if(i[0] != -1){ + return query.substring(i[0]+1, _lowestFromIndex(query, 1)); + }else{ + return ""; + } + } + + // returns only the tag name component of a simple query + var getTagName = function(query){ + var tagNameEnd; + var i = _getIndexes(query); + if((i[0] == 0)||(i[1] == 0)){ + // hash or dot at the front, no tagname + tagNameEnd = 0; + }else{ + tagNameEnd = _lowestFromIndex(query, 0); + } + // FIXME: should this be ">=" to account for tags like ? + return ((tagNameEnd > 0) ? query.substr(0, tagNameEnd).toLowerCase() : "*"); + } + + // like Math.min + var smallest = function(arr){ + var ret = -1; + for(var x=0; x= 0){ + if((ta > ret)||(ret == -1)){ + ret = ta; + } + } + } + return ret; + } + + // returns only the class name component (".whatever") of a simple query + var getClassName = function(query){ + // [ "#", ".", "[", ":" ]; + var i = _getIndexes(query); + if(-1 == i[1]){ return ""; } // no class component + var di = i[1]+1; + + var othersStart = smallest(i.slice(2)); + if(di < othersStart){ + return query.substring(di, othersStart); + }else if(-1 == othersStart){ + return query.substr(di); + }else{ + return ""; + } + } + + /* + var isTagOnly = function(query){ + return (Math.max.apply(this, _getIndexes(query)) == -1); + } + */ + + //////////////////////////////////////////////////////////////////////// + // XPath query code + //////////////////////////////////////////////////////////////////////// + + // this array is a lookup used to generate an attribute matching function. + // There is a similar lookup/generator list for the DOM branch with similar + // calling semantics. + var xPathAttrs = [ + // FIXME: need to re-order in order of likelyness to be used in matches + { + key: "|=", + match: function(attr, value){ + return "[contains(concat(' ',@"+attr+",' '), ' "+ value +"-')]"; + } + }, + { + key: "~=", + match: function(attr, value){ + return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]"; + } + }, + { + key: "^=", + match: function(attr, value){ + return "[starts-with(@"+attr+", '"+ value +"')]"; + } + }, + { + key: "*=", + match: function(attr, value){ + return "[contains(@"+attr+", '"+ value +"')]"; + } + }, + { + key: "$=", + match: function(attr, value){ + return "[substring(@"+attr+", string-length(@"+attr+")-"+(value.length-1)+")='"+value+"']"; + } + }, + { + key: "!=", + match: function(attr, value){ + return "[not(@"+attr+"='"+ value +"')]"; + } + }, + // NOTE: the "=" match MUST come last! + { + key: "=", + match: function(attr, value){ + return "[@"+attr+"='"+ value +"']"; + } + } + ]; + + // takes a list of attribute searches, the overall query, a function to + // generate a default matcher, and a closure-bound method for providing a + // matching function that generates whatever type of yes/no distinguisher + // the query method needs. The method is a bit tortured and hard to read + // because it needs to be used in both the XPath and DOM branches. + var handleAttrs = function( attrList, + query, + getDefault, + handleMatch){ + var matcher; + var i = _getIndexes(query); + if(i[2] >= 0){ + var lBktIdx = query.indexOf("]", i[2]); + var condition = query.substring(i[2]+1, lBktIdx); + while(condition && condition.length){ + if(condition.charAt(0) == "@"){ + condition = condition.slice(1); + } + + matcher = null; + // http://www.w3.org/TR/css3-selectors/#attribute-selectors + for(var x=0; x= 0){ + var attr = condition.substring(0, tci); + var value = condition.substring(tci+ta.key.length); + if( (value.charAt(0) == "\"")|| + (value.charAt(0) == "\'")){ + value = value.substring(1, value.length-1); + } + matcher = ta.match(d.trim(attr), d.trim(value)); + break; + } + } + if((!matcher)&&(condition.length)){ + matcher = getDefault(condition); + } + if(matcher){ + handleMatch(matcher); + // ff = agree(ff, matcher); + } + + condition = null; + var nbktIdx = query.indexOf("[", lBktIdx); + if(0 <= nbktIdx){ + lBktIdx = query.indexOf("]", nbktIdx); + if(0 <= lBktIdx){ + condition = query.substring(nbktIdx+1, lBktIdx); + } + } + } + } + } + + var buildPath = function(query){ + var xpath = "."; + var qparts = query.split(" "); // FIXME: this break on span[thinger = foo] + while(qparts.length){ + var tqp = qparts.shift(); + var prefix; + // FIXME: need to add support for ~ and + + if(tqp == ">"){ + prefix = "/"; + // prefix = "/child::node()"; + tqp = qparts.shift(); + }else{ + prefix = "//"; + // prefix = "/descendant::node()" + } + + // get the tag name (if any) + var tagName = getTagName(tqp); + + xpath += prefix + tagName; + + // check to see if it's got an id. Needs to come first in xpath. + var id = getId(tqp); + if(id.length){ + xpath += "[@id='"+id+"'][1]"; + } + + var cn = getClassName(tqp); + // check the class name component + if(cn.length){ + var padding = " "; + if(cn.charAt(cn.length-1) == "*"){ + padding = ""; cn = cn.substr(0, cn.length-1); + } + xpath += + "[contains(concat(' ',@class,' '), ' "+ + cn + padding + "')]"; + } + + handleAttrs(xPathAttrs, tqp, + function(condition){ + return "[@"+condition+"]"; + }, + function(matcher){ + xpath += matcher; + } + ); + + // FIXME: need to implement pseudo-class checks!! + }; + return xpath; + }; + + var _xpathFuncCache = {}; + var getXPathFunc = function(path){ + if(_xpathFuncCache[path]){ + return _xpathFuncCache[path]; + } + + var doc = d.doc; + // var parent = d.body(); // FIXME + // FIXME: don't need to memoize. The closure scope handles it for us. + var xpath = buildPath(path); + // console.debug(xpath); + + var tf = function(parent){ + // XPath query strings are memoized. + var ret = []; + var xpathResult; + try{ + xpathResult = doc.evaluate(xpath, parent, null, + // XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); + XPathResult.ANY_TYPE, null); + }catch(e){ + console.debug("failure in exprssion:", xpath, "under:", parent); + console.debug(e); + } + var result = xpathResult.iterateNext(); + while(result){ + ret.push(result); + result = xpathResult.iterateNext(); + } + return ret; + } + return _xpathFuncCache[path] = tf; + }; + + /* + d.xPathMatch = function(query){ + // XPath based DOM query system. Handles a small subset of CSS + // selectors, subset is identical to the non-XPath version of this + // function. + + // FIXME: need to add support for alternate roots + return getXPathFunc(query)(); + } + */ + + //////////////////////////////////////////////////////////////////////// + // DOM query code + //////////////////////////////////////////////////////////////////////// + + var _filtersCache = {}; + var _simpleFiltersCache = {}; + + // the basic building block of the yes/no chaining system. agree(f1, f2) + // generates a new function which returns the boolean results of both of + // the passed functions to a single logical-anded result. + var agree = function(first, second){ + if(!first){ + return second; + } + if(!second){ + return first; + } + + return function(){ + return first.apply(window, arguments) && second.apply(window, arguments); + } + } + + var _filterDown = function(element, queryParts, matchArr, idx){ + var nidx = idx+1; + var isFinal = (queryParts.length == nidx); + var tqp = queryParts[idx]; + + // see if we can constrain our next level to direct children + if(tqp == ">"){ + var ecn = element.childNodes; + if(!ecn.length){ + return; + } + nidx++; + isFinal = (queryParts.length == nidx); + // kinda janky, too much array alloc + var tf = getFilterFunc(queryParts[idx+1]); + // for(var x=ecn.length-1, te; x>=0, te=ecn[x]; x--){ + for(var x=0, te; x=0, te=elements[x]; x--){ + var x = elements.length - 1, te; + while(te = elements[x--]){ + _filterDown(te, queryParts, ret, 0); + } + return ret; + } + + var getFilterFunc = function(query){ + // note: query can't have spaces! + if(_filtersCache[query]){ + return _filtersCache[query]; + } + var ff = null; + var tagName = getTagName(query); + + // does it have a tagName component? + if(tagName != "*"){ + // tag name match + ff = agree(ff, + function(elem){ + return ( + (elem.nodeType == 1) && + (tagName == elem.tagName.toLowerCase()) + ); + // return isTn; + } + ); + } + + var idComponent = getId(query); + + // does the node have an ID? + if(idComponent.length){ + ff = agree(ff, + function(elem){ + return ( + (elem.nodeType == 1) && + (elem.id == idComponent) + ); + } + ); + } + + if( Math.max.apply(this, _getIndexes(query).slice(1)) >= 0){ + // if we have other query param parts, make sure we add them to the + // filter chain + ff = agree(ff, getSimpleFilterFunc(query)); + } + + return _filtersCache[query] = ff; + } + + var getNodeIndex = function(node){ + // NOTE: we could have a more accurate caching mechanism by + // invalidating caches after the query has finished, but I think that'd + // lead to significantly more cache churn than the cache would provide + // value for in the common case. Generally, we're more conservative + // (and therefore, more accurate) than jQuery and DomQuery WRT node + // node indexes, but there may be corner cases in which we fall down. + // How much we care about them is TBD. + + var pn = node.parentNode; + var pnc = pn.childNodes; + + // check to see if we can trust the cache. If not, re-key the whole + // thing and return our node match from that. + + var nidx = -1; + var child = pn.firstChild; + if(!child){ + return nidx; + } + + var ci = node["__cachedIndex"]; + var cl = pn["__cachedLength"]; + + // only handle cache building if we've gone out of sync + if(((typeof cl == "number")&&(cl != pnc.length))||(typeof ci != "number")){ + // rip though the whole set, building cache indexes as we go + pn["__cachedLength"] = pnc.length; + var idx = 1; + do{ + // we only assign indexes for nodes with nodeType == 1, as per: + // http://www.w3.org/TR/css3-selectors/#nth-child-pseudo + // only elements are counted in the search order, and they + // begin at 1 for the first child's index + + if(child === node){ + nidx = idx; + } + if(child.nodeType == 1){ + child["__cachedIndex"] = idx; + idx++; + } + child = child.nextSibling; + }while(child); + }else{ + // FIXME: could be incorrect in some cases (node swaps involving + // the passed node, etc.), but we ignore those for now. + nidx = ci; + } + return nidx; + } + + var firedCount = 0; + + var _getAttr = function(elem, attr){ + var blank = ""; + if(attr == "class"){ + return elem.className || blank; + } + if(attr == "for"){ + return elem.htmlFor || blank; + } + return elem.getAttribute(attr, 2) || blank; + } + + var attrs = [ + // FIXME: need to re-order in order of likelyness to be used in matches + { + key: "|=", + match: function(attr, value){ + // E[hreflang|="en"] + // an E element whose "hreflang" attribute has a + // hyphen-separated list of values beginning (from the + // left) with "en" + var valueDash = " "+value+"-"; + return function(elem){ + var ea = " "+(elem.getAttribute(attr, 2) || ""); + return ( + (ea == value) || + (ea.indexOf(valueDash)==0) + ); + } + } + }, + { + key: "^=", + match: function(attr, value){ + return function(elem){ + return (_getAttr(elem, attr).indexOf(value)==0); + } + } + }, + { + key: "*=", + match: function(attr, value){ + return function(elem){ + return (_getAttr(elem, attr).indexOf(value)>=0); + } + } + }, + { + key: "~=", + match: function(attr, value){ + // return "[contains(concat(' ',@"+attr+",' '), ' "+ value +" ')]"; + var tval = " "+value+" "; + return function(elem){ + var ea = " "+_getAttr(elem, attr)+" "; + return (ea.indexOf(tval)>=0); + } + } + }, + { + key: "$=", + match: function(attr, value){ + var tval = " "+value; + return function(elem){ + var ea = " "+_getAttr(elem, attr); + return (ea.lastIndexOf(value)==(ea.length-value.length)); + } + } + }, + { + key: "!=", + match: function(attr, value){ + return function(elem){ + return (_getAttr(elem, attr) != value); + } + } + }, + // NOTE: the "=" match MUST come last! + { + key: "=", + match: function(attr, value){ + return function(elem){ + return (_getAttr(elem, attr) == value); + } + } + } + ]; + + var pseudos = [ + { + key: "first-child", + match: function(name, condition){ + return function(elem){ + if(elem.nodeType != 1){ return false; } + // check to see if any of the previous siblings are elements + var fc = elem.previousSibling; + while(fc && (fc.nodeType != 1)){ + fc = fc.previousSibling; + } + return (!fc); + } + } + }, + { + key: "last-child", + match: function(name, condition){ + return function(elem){ + if(elem.nodeType != 1){ return false; } + // check to see if any of the next siblings are elements + var nc = elem.nextSibling; + while(nc && (nc.nodeType != 1)){ + nc = nc.nextSibling; + } + return (!nc); + } + } + }, + { + key: "empty", + match: function(name, condition){ + return function(elem){ + // DomQuery and jQuery get this wrong, oddly enough. + // The CSS 3 selectors spec is pretty explicit about + // it, too. + var cn = elem.childNodes; + var cnl = elem.childNodes.length; + // if(!cnl){ return true; } + for(var x=cnl-1; x >= 0; x--){ + var nt = cn[x].nodeType; + if((nt == 1)||(nt == 3)){ return false; } + } + return true; + } + } + }, + { + key: "contains", + match: function(name, condition){ + return function(elem){ + // FIXME: I dislike this version of "contains", as + // whimsical attribute could set it off. An inner-text + // based version might be more accurate, but since + // jQuery and DomQuery also potentially get this wrong, + // I'm leaving it for now. + return (elem.innerHTML.indexOf(condition) >= 0); + } + } + }, + { + key: "not", + match: function(name, condition){ + var ntf = getFilterFunc(condition); + return function(elem){ + // FIXME: I dislike this version of "contains", as + // whimsical attribute could set it off. An inner-text + // based version might be more accurate, but since + // jQuery and DomQuery also potentially get this wrong, + // I'm leaving it for now. + return (!ntf(elem)); + } + } + }, + { + key: "nth-child", + match: function(name, condition){ + var pi = parseInt; + if(condition == "odd"){ + return function(elem){ + return ( + ((getNodeIndex(elem)) % 2) == 1 + ); + } + }else if((condition == "2n")|| + (condition == "even")){ + return function(elem){ + return ((getNodeIndex(elem) % 2) == 0); + } + }else if(condition.indexOf("0n+") == 0){ + var ncount = pi(condition.substr(3)); + return function(elem){ + return (elem.parentNode.childNodes[ncount-1] === elem); + } + }else if( (condition.indexOf("n+") > 0) && + (condition.length > 3) ){ + var tparts = condition.split("n+", 2); + var pred = pi(tparts[0]); + var idx = pi(tparts[1]); + return function(elem){ + return ((getNodeIndex(elem) % pred) == idx); + } + }else if(condition.indexOf("n") == -1){ + var ncount = pi(condition); + return function(elem){ + return (getNodeIndex(elem) == ncount); + } + } + } + } + ]; + + var getSimpleFilterFunc = function(query){ + // FIXME: this function currently doesn't support chaining of the same + // sub-selector. E.g., we can't yet search on + // span.thinger.thud + // or + // div:nth-child(even):last-child + + var fcHit = (_simpleFiltersCache[query]||_filtersCache[query]); + if(fcHit){ return fcHit; } + + var ff = null; + + // [ q.indexOf("#"), q.indexOf("."), q.indexOf("["), q.indexOf(":") ]; + var i = _getIndexes(query); + + // the only case where we'll need the tag name is if we came from an ID query + if(i[0] >= 0){ // do we have an ID component? + var tn = getTagName(query); + if(tn != "*"){ + ff = agree(ff, function(elem){ + return (elem.tagName.toLowerCase() == tn); + }); + } + } + + var matcher; + + // if there's a class in our query, generate a match function for it + var className = getClassName(query); + if(className.length){ // do we have a class name component? + // get the class name + var isWildcard = className.charAt(className.length-1) == "*"; + if(isWildcard){ + className = className.substr(0, className.length-1); + } + // I dislike the regex thing, even if memozied in a cache, but it's VERY short + var re = new RegExp("(?:^|\\s)" + className + (isWildcard ? ".*" : "") + "(?:\\s|$)"); + ff = agree(ff, function(elem){ + return re.test(elem.className); + }); + } + + if(i[3]>= 0){ // do we have a pseudo-selector component? + // NOTE: we count on the pseudo name being at the end + // FIXME: this is clearly a bug!!! + var pseudoName = query.substr(i[3]+1); + var condition = ""; + var obi = pseudoName.indexOf("("); + var cbi = pseudoName.lastIndexOf(")"); + if( (0 <= obi)&& + (0 <= cbi)&& + (cbi > obi)){ + condition = pseudoName.substring(obi+1, cbi); + pseudoName = pseudoName.substr(0, obi); + } + + // NOTE: NOT extensible on purpose until I figure out + // the portable xpath pseudos extensibility plan. + + // http://www.w3.org/TR/css3-selectors/#structural-pseudos + matcher = null; + for(var x=0; x= 0){ + // we got a filtered ID search (e.g., "h4#thinger") + retFunc = function(root){ + var te = d.byId(id); + if(filterFunc(te)){ + return [ te ]; + } + } + }else{ + // var ret = []; + var tret; + var tn = getTagName(query); + + if(Math.max.apply(this, _getIndexes(query)) == -1){ + // if(isTagOnly(query)){ + // it's just a plain-ol elements-by-tag-name query from the root + retFunc = function(root){ + var ret = []; + var te, x=0, tret = root.getElementsByTagName(tn); + while(te=tret[x++]){ + ret.push(te); + } + return ret; + } + }else{ + retFunc = function(root){ + var ret = []; + var te, x=0, tret = root.getElementsByTagName(tn); + while(te=tret[x++]){ + if(filterFunc(te)){ + ret.push(te); + } + } + return ret; + } + } + } + return _getElementsFuncCache[query] = retFunc; + } + + var _partsCache = {}; + + //////////////////////////////////////////////////////////////////////// + // the query runner + //////////////////////////////////////////////////////////////////////// + + // this is the second level of spliting, from full-length queries (e.g., + // "div.foo .bar") into simple query expressions (e.g., ["div.foo", + // ".bar"]) + var _queryFuncCache = { + ">": function(root){ + var ret = []; + var te, x=0, tret = root.childNodes; + while(te=tret[x++]){ + if(te.nodeType == 1){ ret.push(te); } + } + return ret; + } + }; + var getStepQueryFunc = function(query){ + // if it's trivial, get a fast-path dispatcher + if(0 > query.indexOf(" ")){ + return getElementsFunc(query); + } + + // otherwise, break it up and return a runner that iterates over the parts recursively + var sqf = function(root){ + var qparts = query.split(" "); // FIXME: this is an inaccurate tokenizer! + + /* + // FIXME: need to make root popping more explicit and cache it somehow + + // see if we can't pop a root off the front + var partIndex = 0; + var lastRoot; + while((partIndex < qparts.length)&&(0 <= qparts[partIndex].indexOf("#"))){ + // FIXME: should we try to cache such that the step function + // only ever looks for the last ID-based query part, thereby + // avoiding re-runs and potential array alloc? + + lastRoot = root; + root = getElementsFunc(qparts[partIndex])()[0]; + if(!root){ root = lastRoot; break; } + partIndex++; + } + // console.debug(qparts[partIndex], root); + if(qparts.length == partIndex){ + return [ root ]; + } + // FIXME: need to handle tight-loop "div div div" style queries + // here so as to avoid huge amounts of array alloc in repeated + // getElements calls by filterDown + var candidates; + + // FIXME: this isn't very generic. It lets us run like a bat outta + // hell on queries like: + // div div span + // and: + // #thinger span#blah div span span + // but we might still fall apart on searches like: + // foo.bar span[blah="thonk"] div div span code.example + // in short, we need to move the look-ahead logic into _filterDown() + // console.debug(qparts[partIndex]); + if( isTagOnly(qparts[partIndex]) && + (qparts[partIndex+1] != ">") + ){ + // go as far as we can down the chain without any intermediate + // array allocation + qparts = qparts.slice(partIndex); + var searchParts = []; + var idx = 0; + while(qparts[idx] && isTagOnly(qparts[idx]) && (qparts[idx+1] != ">" )){ + searchParts.push(qparts[idx]); + idx++; + } + var curLevelItems = [ root ]; + var nextLevelItems; + for(var x=0; x"){ + candidates = [ root ]; + // root = document; + }else{ + candidates = getElementsFunc(qparts.shift())(root); + } + return filterDown(candidates, qparts); + } + return sqf; + } + + // a specialized method that implements our primoridal "query optimizer". + // This allows us to dispatch queries to the fastest subsystem we can get. + var _getQueryFunc = ( + // NOTE: + // XPath on the Webkit nighlies is slower than it's DOM iteration + // for most test cases + // FIXME: + // we should try to capture some runtime speed data for each query + // function to determine on the fly if we should stick w/ the + // potentially optimized variant or if we should try something + // new. + (document["evaluate"] && !d.isSafari) ? + function(query){ + // has xpath support that's faster than DOM + var qparts = query.split(" "); + // can we handle it? + if( (document["evaluate"])&& + (query.indexOf(":") == -1)&& + ( + (true) // || + // (query.indexOf("[") == -1) || + // (query.indexOf("=") == -1) + ) + ){ + // dojo.debug(query); + // should we handle it? + + // var gtIdx = query.indexOf(">") + + // kind of a lame heuristic, but it works + if( + // a "div div div" style query + ((qparts.length > 2)&&(query.indexOf(">") == -1))|| + // or something else with moderate complexity. kinda janky + (qparts.length > 3)|| + (query.indexOf("[")>=0)|| + // or if it's a ".thinger" query + ((1 == qparts.length)&&(0 <= query.indexOf("."))) + + ){ + // use get and cache a xpath runner for this selector + return getXPathFunc(query); + } + } + + // fallthrough + return getStepQueryFunc(query); + } : getStepQueryFunc + ); + // uncomment to disable XPath for testing and tuning the DOM path + // _getQueryFunc = getStepQueryFunc; + + // FIXME: we've got problems w/ the NodeList query()/filter() functions if we go XPath for everything + + // uncomment to disable DOM queries for testing and tuning XPath + // _getQueryFunc = getXPathFunc; + + // this is the primary caching for full-query results. The query dispatcher + // functions are generated here and then pickled for hash lookup in the + // future + var getQueryFunc = function(query){ + // return a cached version if one is available + if(_queryFuncCache[query]){ return _queryFuncCache[query]; } + if(0 > query.indexOf(",")){ + // if it's not a compound query (e.g., ".foo, .bar"), cache and return a dispatcher + return _queryFuncCache[query] = _getQueryFunc(query); + }else{ + // if it's a complex query, break it up into it's constituent parts + // and return a dispatcher that will merge the parts when run + + // var parts = query.split(", "); + var parts = query.split(/\s*,\s*/); + var tf = function(root){ + var pindex = 0; // avoid array alloc for every invocation + var ret = []; + var tp; + while(tp = parts[pindex++]){ + ret = ret.concat(_getQueryFunc(tp, tp.indexOf(" "))(root)); + } + return ret; + } + // ...cache and return + return _queryFuncCache[query] = tf; + } + } + + /* + // experimental implementation of _zip for IE + var _zip = function(arr){ + if(!arr){ return []; } + var al = arr.length; + if(al < 2){ return arr; } + var ret = [arr[0]]; + var lastIdx = arr[0].sourceIndex; + for(var x=1, te; te = arr[x]; x++){ + // for(var x=1; x lastIdx){ + ret.push(te); + lastIdx = nsi; + } + } + return ret; + } + */ + + // FIXME: + // Dean's new Base2 uses a system whereby queries themselves note if + // they'll need duplicate filtering. We need to get on that plan!! + + // attempt to efficiently determine if an item in a list is a dupe, + // returning a list of "uniques", hopefully in doucment order + var _zipIdx = 0; + var _zip = function(arr){ + var ret = new d.NodeList(); + if(!arr){ return ret; } + if(arr[0]){ + ret.push(arr[0]); + } + if(arr.length < 2){ return ret; } + _zipIdx++; + arr[0]["_zipIdx"] = _zipIdx; + for(var x=1, te; te = arr[x]; x++){ + if(arr[x]["_zipIdx"] != _zipIdx){ + ret.push(te); + } + te["_zipIdx"] = _zipIdx; + } + // FIXME: should we consider stripping these properties? + return ret; + } + + // the main exectuor + d.query = function(query, root){ + // return is always an array + // NOTE: elementsById is not currently supported + // NOTE: ignores xpath-ish queries for now + if(typeof query != "string"){ + return new d.NodeList(query); + } + if(typeof root == "string"){ + root = d.byId(root); + } + + // FIXME: should support more methods on the return than the stock array. + return _zip(getQueryFunc(query)(root||d.doc)); + } + + /* + // exposing these was a mistake + d.query.attrs = attrs; + d.query.pseudos = pseudos; + */ + + // one-off function for filtering a NodeList based on a simple selector + d._filterQueryResult = function(nodeList, simpleFilter){ + var tnl = new d.NodeList(); + var ff = (simpleFilter) ? getFilterFunc(simpleFilter) : function(){ return true; }; + // dojo.debug(ff); + for(var x=0, te; te = nodeList[x]; x++){ + if(ff(te)){ tnl.push(te); } + } + return tnl; + } +})(); + +} + +if(!dojo._hasResource["dojo._base.xhr"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo._base.xhr"] = true; +dojo.provide("dojo._base.xhr"); + + + + + +dojo.formToObject = function(/*DOMNode||String*/ formNode){ + // summary: + // dojo.formToObject returns the values encoded in an HTML form as + // string properties in an object which it then returns. Disabled form + // elements, buttons, and other non-value form elements are skipped. + // Multi-select elements are returned as an array of string values. + // description: + // This form: + // + //
    + // + // + // + // + //
    + // + // yields this object structure as the result of a call to + // formToObject(): + // + // { + // blah: "blah", + // multi: [ + // "thud", + // "thonk" + // ] + // }; + + // FIXME: seems that dojo.query needs negation operators!! + var ret = {}; + var iq = "input[type!=file][type!=submit][type!=image][type!=reset][type!=button], select, textarea"; + dojo.query(iq, formNode).filter(function(node){ + return (!node.disabled); + }).forEach(function(item){ + var _in = item.name; + var type = (item.type||"").toLowerCase(); + if((type == "radio")||(type == "checkbox")){ + if(item.checked){ ret[_in] = item.value; } + }else if(item.multiple){ + var ria = ret[_in] = []; + dojo.query("option[selected]", item).forEach(function(opt){ + ria.push(opt.value); + }); + }else{ + ret[_in] = item.value; + if(type == "image"){ + ret[_in+".x"] = ret[_in+".y"] = ret[_in].x = ret[_in].y = 0; + } + } + }); + return ret; +} + +dojo.objectToQuery = function(/*Object*/ map){ + // summary: + // takes a key/value mapping object and returns a string representing + // a URL-encoded version of that object. + // examples: + // this object: + // + // { + // blah: "blah", + // multi: [ + // "thud", + // "thonk" + // ] + // }; + // + // yeilds the following query string: + // + // "blah=blah&multi=thud&multi=thonk" + + + // FIXME: need to implement encodeAscii!! + var ec = encodeURIComponent; + var ret = ""; + var backstop = {}; + for(var x in map){ + if(map[x] != backstop[x]){ + if(dojo.isArray(map[x])){ + for(var y=0; y 0){ + setTimeout(dojo.hitch(this, function(){ this.play(null, gotoStart); }), d); + return this; // dojo._Animation + } + + this._startTime = new Date().valueOf(); + if(this._paused){ + this._startTime -= this.duration * this._percent; + } + this._endTime = this._startTime + this.duration; + + this._active = true; + this._paused = false; + + var value = this.curve.getValue(this._percent); + if(!this._percent){ + if(!this._startRepeatCount){ + this._startRepeatCount = this.repeat; + } + this.fire("onBegin", [value]); + } + + this.fire("onPlay", [value]); + + this._cycle(); + return this; // dojo._Animation + }, + + pause: function(){ + // summary: Pauses a running animation. + clearTimeout(this._timer); + if(!this._active){ return this; /*dojo._Animation*/} + this._paused = true; + this.fire("onPause", [this.curve.getValue(this._percent)]); + return this; // dojo._Animation + }, + + gotoPercent: function(/*Decimal*/ pct, /*boolean?*/ andPlay){ + // summary: Sets the progress of the animation. + // pct: A percentage in decimal notation (between and including 0.0 and 1.0). + // andPlay: If true, play the animation after setting the progress. + clearTimeout(this._timer); + this._active = this._paused = true; + this._percent = pct * 100; + if(andPlay){ this.play(); } + return this; // dojo._Animation + }, + + stop: function(/*boolean?*/ gotoEnd){ + // summary: Stops a running animation. + // gotoEnd: If true, the animation will end. + if(!this._timer){ return; } + clearTimeout(this._timer); + if(gotoEnd){ + this._percent = 1; + } + this.fire("onStop", [this.curve.getValue(this._percent)]); + this._active = this._paused = false; + return this; // dojo._Animation + }, + + status: function(){ + // summary: Returns a string token representation of the status of + // the animation, one of: "paused", "playing", "stopped" + if(this._active){ + return this._paused ? "paused" : "playing"; // String + } + return "stopped"; // String + }, + + _cycle: function(){ + clearTimeout(this._timer); + if(this._active){ + var curr = new Date().valueOf(); + var step = (curr - this._startTime) / (this._endTime - this._startTime); + + if(step >= 1){ + step = 1; + } + this._percent = step; + + // Perform easing + if(this.easing){ + step = this.easing(step); + } + + this.fire("onAnimate", [this.curve.getValue(step)]); + + if(step < 1){ + this._timer = setTimeout(dojo.hitch(this, "_cycle"), this.rate); + }else{ + this._active = false; + + if(this.repeat > 0){ + this.repeat--; + this.play(null, true); + }else if(this.repeat == -1){ + this.play(null, true); + }else{ + if(this._startRepeatCount){ + this.repeat = this._startRepeatCount; + this._startRepeatCount = 0; + } + } + this._percent = 0; + this.fire("onEnd"); + } + } + return this; // dojo._Animation + } +}); + +(function(){ + var _makeFadeable = function(node){ + if(dojo.isIE){ + // only set the zoom if the "tickle" value would be the same as the + // default + var ns = node.style; + if(!ns.zoom.length && dojo.style(node, "zoom") == "normal"){ + // make sure the node "hasLayout" + // NOTE: this has been tested with larger and smaller user-set text + // sizes and works fine + ns.zoom = "1"; + // node.style.zoom = "normal"; + } + // don't set the width to auto if it didn't already cascade that way. + // We don't want to f anyones designs + if(!ns.width.length && dojo.style(node, "width") == "auto"){ + ns.width = "auto"; + } + } + } + + dojo._fade = function(/*Object*/ args){ + // summary:Returns an animation that will fade the "nodes" from the start to end values passed. + + //FIXME: remove arg checking? Change docs above to show that end is not optional. Just make sure this blows up in a reliable way? + if(typeof args.end == "undefined"){ + throw new Error("dojo._fade needs an end value"); + } + args.node = dojo.byId(args.node); + var fArgs = dojo.mixin({ properties: {} }, args); + var props = (fArgs.properties.opacity = {}); + props.start = (typeof fArgs.start == "undefined") ? + function(){ return Number(dojo.style(fArgs.node, "opacity")); } : fArgs.start; + props.end = fArgs.end; + + var anim = dojo.animateProperty(fArgs); + dojo.connect(anim, "beforeBegin", null, function(){ + _makeFadeable(fArgs.node); + }); + + return anim; // dojo._Animation + } + + dojo.fadeIn = function(/*Object*/ args){ + // summary: Returns an animation that will fade node + // defined in 'args' from its current opacity to fully + // opaque. + // + // mixins: + // args.duration: Duration of the animation in milliseconds. + // args.easing: An easing function. + return dojo._fade(dojo.mixin({ end: 1 }, args)); // dojo._Animation + } + + dojo.fadeOut = function(/*Object*/ args){ + // summary: Returns an animation that will fade node + // defined in 'args' from its current opacity to fully + // transparent. + // mixins: + // duration: Duration of the animation in milliseconds. + // easing: An easing function. + return dojo._fade(dojo.mixin({ end: 0 }, args)); // dojo._Animation + } + + if(dojo.isKhtml && !dojo.isSafari){ + // the cool kids are obviously not using konqueror... + // found a very wierd bug in floats constants, 1.5 evals as 1 + // seems somebody mixed up ints and floats in 3.5.4 ?? + // FIXME: investigate more and post a KDE bug (Fredrik) + dojo._defaultEasing = function(/*Decimal?*/ n){ + // summary: Returns the point for point n on a sin wave. + return parseFloat("0.5")+((Math.sin((n+parseFloat("1.5")) * Math.PI))/2); //FIXME: Does this still occur in the supported Safari version? + } + }else{ + dojo._defaultEasing = function(/*Decimal?*/ n){ + return 0.5+((Math.sin((n+1.5) * Math.PI))/2); + } + } + + var PropLine = function(properties){ + this._properties = properties; + for(var p in properties){ + var prop = properties[p]; + if(prop.start instanceof dojo.Color){ + // create a reusable temp color object to keep intermediate results + prop.tempColor = new dojo.Color(); + } + } + this.getValue = function(r){ + var ret = {}; + for(var p in this._properties){ + var prop = this._properties[p]; + var value = null; + if(prop.start instanceof dojo.Color){ + value = dojo.blendColors(prop.start, prop.end, r, prop.tempColor).toCss(); + }else if(!dojo.isArray(prop.start)){ + value = ((prop.end - prop.start) * r) + prop.start + (p != "opacity" ? prop.units||"px" : ""); + } + ret[p] = value; + } + return ret; + } + } + + dojo.animateProperty = function(/*Object*/ args){ + // summary: Returns an animation that will transition the properties of node + // defined in 'args' depending how they are defined in 'args.properties' + + args.node = dojo.byId(args.node); + if (!args.easing){ args.easing = dojo._defaultEasing; } + + var anim = new dojo._Animation(args); + dojo.connect(anim, "beforeBegin", anim, function(){ + var pm = {}; + for(var p in this.properties){ + // Make shallow copy of properties into pm because we overwrite some values below. + // In particular if start/end are functions we don't want to overwrite them or + // the functions won't be called if the animation is reused. + var prop = pm[p] = dojo.mixin({}, this.properties[p]); + + if(dojo.isFunction(prop.start)){ + prop.start = prop.start(); + } + if(dojo.isFunction(prop.end)){ + prop.end = prop.end(); + } + + var isColor = (p.toLowerCase().indexOf("color") >= 0); + function getStyle(node, p){ + // dojo.style(node, "height") can return "auto" or "" on IE; this is more reliable: + switch(p){ + case "height": return node.offsetHeight; + case "width": return node.offsetWidth; + } + var v = dojo.style(node, p); + return (p=="opacity") ? Number(v) : parseFloat(v); + } + if(typeof prop.end == "undefined"){ + prop.end = getStyle(this.node, p); + }else if(typeof prop.start == "undefined"){ + prop.start = getStyle(this.node, p); + } + + if(isColor){ + // console.debug("it's a color!"); + prop.start = new dojo.Color(prop.start); + prop.end = new dojo.Color(prop.end); + }else{ + prop.start = (p == "opacity") ? Number(prop.start) : parseFloat(prop.start); + } + // console.debug("start:", prop.start); + // console.debug("end:", prop.end); + } + this.curve = new PropLine(pm); + }); + dojo.connect(anim, "onAnimate", anim, function(propValues){ + // try{ + for(var s in propValues){ + // console.debug(s, propValues[s], this.node.style[s]); + dojo.style(this.node, s, propValues[s]); + // this.node.style[s] = propValues[s]; + } + // }catch(e){ console.debug(dojo.toJson(e)); } + }); + + return anim; // dojo._Animation + } +})(); + +} + diff --git a/spring-faces/src/main/java/META-INF/dojo/fx.js b/spring-faces/src/main/java/META-INF/dojo/fx.js new file mode 100644 index 00000000..f84ab34e --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/fx.js @@ -0,0 +1,215 @@ +if(!dojo._hasResource["dojo.fx"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.fx"] = true; +dojo.provide("dojo.fx"); +dojo.provide("dojo.fx.Toggler"); + +dojo.fx.chain = function(/*dojo._Animation[]*/ animations){ + // summary: Chain a list of _Animations to run in sequence + var first = animations.shift(); + var previous = first; + dojo.forEach(animations, function(current){ + dojo.connect(previous, "onEnd", current, "play"); + previous = current; + }); + return first; // dojo._Animation +}; + +dojo.fx.combine = function(/*dojo._Animation[]*/ animations){ + // summary: Combine a list of _Animations to run in parallel + + var first = animations.shift(); + dojo.forEach(animations, function(current){ + dojo.forEach([ + +//FIXME: onEnd gets fired multiple times for each animation, not once for the combined animation +// should we return to a "container" with its own unique events? + + "play", "pause", "stop" + ], function(event){ + if(current[event]){ + dojo.connect(first, event, current, event); + } + }, this); + }); + return first; // dojo._Animation +}; + +dojo.declare("dojo.fx.Toggler", null, { + constructor: function(args){ + // summary: + // class constructor for an animation toggler. It accepts a packed + // set of arguments about what type of animation to use in each + // direction, duration, etc. + // example: + // var t = new dojo.fx.Toggler({ + // node: "nodeId", + // showDuration: 500, + // // hideDuration will default to "200" + // showFunc: dojo.wipeIn, + // // hideFunc will default to "fadeOut" + // }); + // t.show(100); // delay showing for 100ms + // // ...time passes... + // t.hide(); + + // FIXME: need a policy for where the toggler should "be" the next + // time show/hide are called if we're stopped somewhere in the + // middle. + + var _t = this; + + dojo.mixin(_t, args); + _t.node = args.node; + _t._showArgs = dojo.mixin({}, args); + _t._showArgs.node = _t.node; + _t._showArgs.duration = _t.showDuration; + _t.showAnim = _t.showFunc(_t._showArgs); + + _t._hideArgs = dojo.mixin({}, args); + _t._hideArgs.node = _t.node; + _t._hideArgs.duration = _t.hideDuration; + _t.hideAnim = _t.hideFunc(_t._hideArgs); + + dojo.connect(_t.showAnim, "beforeBegin", dojo.hitch(_t.hideAnim, "stop", true)); + dojo.connect(_t.hideAnim, "beforeBegin", dojo.hitch(_t.showAnim, "stop", true)); + }, + + node: null, + showFunc: dojo.fadeIn, + hideFunc: dojo.fadeOut, + + showDuration: 200, + hideDuration: 200, + + _showArgs: null, + _showAnim: null, + + _hideArgs: null, + _hideAnim: null, + + _isShowing: false, + _isHiding: false, + + show: function(delay){ + delay = delay||0; + return this.showAnim.play(delay); + }, + + hide: function(delay){ + delay = delay||0; + return this.hideAnim.play(delay); + } +}); + +dojo.fx.wipeIn = function(/*Object*/ args){ + // summary + // Returns an animation that will expand the + // node defined in 'args' object from it's current height to + // it's natural height (with no scrollbar). + // Node must have no margin/border/padding. + args.node = dojo.byId(args.node); + var node = args.node, s = node.style; + + var anim = dojo.animateProperty(dojo.mixin({ + properties: { + height: { + // wrapped in functions so we wait till the last second to query (in case value has changed) + start: function(){ + // start at current [computed] height, but use 1px rather than 0 + // because 0 causes IE to display the whole panel + s.overflow="hidden"; + if(s.visibility=="hidden"||s.display=="none"){ + s.height="1px"; + s.display=""; + s.visibility=""; + return 1; + }else{ + var height = dojo.style(node, "height"); + return Math.max(height, 1); + } + }, + end: function(){ + return node.scrollHeight; + } + } + } + }, args)); + + dojo.connect(anim, "onEnd", anim, function(){ + s.height = "auto"; + }); + + return anim; // dojo._Animation +} + +dojo.fx.wipeOut = function(/*Object*/ args){ + // summary + // Returns an animation that will shrink node defined in "args" + // from it's current height to 1px, and then hide it. + var node = (args.node = dojo.byId(args.node)); + + var anim = dojo.animateProperty(dojo.mixin({ + properties: { + height: { + end: 1 // 0 causes IE to display the whole panel + } + } + }, args)); + + dojo.connect(anim, "beforeBegin", anim, function(){ + var s=node.style; + s.overflow = "hidden"; + s.display = ""; + }); + dojo.connect(anim, "onEnd", anim, function(){ + var s=this.node.style; + s.height = "auto"; + s.display = "none"; + }); + + return anim; // dojo._Animation +} + +dojo.fx.slideTo = function(/*Object?*/ args){ + // summary + // Returns an animation that will slide "node" + // defined in args Object from its current position to + // the position defined by (args.left, args.top). + + var node = args.node = dojo.byId(args.node); + var compute = dojo.getComputedStyle; + + var top = null; + var left = null; + + var init = (function(){ + var innerNode = node; + return function(){ + var pos = compute(innerNode).position; + top = (pos == 'absolute' ? node.offsetTop : parseInt(compute(node).top) || 0); + left = (pos == 'absolute' ? node.offsetLeft : parseInt(compute(node).left) || 0); + + if(pos != 'absolute' && pos != 'relative'){ + var ret = dojo.coords(innerNode, true); + top = ret.y; + left = ret.x; + innerNode.style.position="absolute"; + innerNode.style.top=top+"px"; + innerNode.style.left=left+"px"; + } + } + })(); + init(); + + var anim = dojo.animateProperty(dojo.mixin({ + properties: { + top: { start: top, end: args.top||0 }, + left: { start: left, end: args.left||0 } + } + }, args)); + dojo.connect(anim, "beforeBegin", anim, init); + + return anim; // dojo._Animation +} + +} diff --git a/spring-faces/src/main/java/META-INF/dojo/i18n.js b/spring-faces/src/main/java/META-INF/dojo/i18n.js new file mode 100644 index 00000000..698e37af --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/i18n.js @@ -0,0 +1,235 @@ +if(!dojo._hasResource["dojo.i18n"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.i18n"] = true; +dojo.provide("dojo.i18n"); + +dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){ +// summary: +// Returns an Object containing the localization for a given resource bundle +// in a package, matching the specified locale. +// +// description: +// Returns a hash containing name/value pairs in its prototypesuch that values can be easily overridden. +// Throws an exception if the bundle is not found. +// Bundle must have already been loaded by dojo.requireLocalization() or by a build optimization step. +// +// packageName: package which is associated with this resource +// bundleName: the base filename of the resource bundle (without the ".js" suffix) +// locale: the variant to load (optional). By default, the locale defined by the +// host environment: dojo.locale + + locale = dojo.i18n.normalizeLocale(locale); + + // look for nearest locale match + var elements = locale.split('-'); + var module = [packageName,"nls",bundleName].join('.'); + var bundle = dojo._loadedModules[module]; + if(bundle){ + var localization; + for(var i = elements.length; i > 0; i--){ + var loc = elements.slice(0, i).join('_'); + if(bundle[loc]){ + localization = bundle[loc]; + break; + } + } + if(!localization){ + localization = bundle.ROOT; + } + + // make a singleton prototype so that the caller won't accidentally change the values globally + if(localization){ + var clazz = function(){}; + clazz.prototype = localization; + return new clazz(); // Object + } + } + + throw new Error("Bundle not found: " + bundleName + " in " + packageName+" , locale=" + locale); +}; + +dojo.i18n.normalizeLocale = function(/*String?*/locale){ + // summary: + // Returns canonical form of locale, as used by Dojo. + // + // description: + // All variants are case-insensitive and are separated by '-' as specified in RFC 3066. + // If no locale is specified, the dojo.locale is returned. dojo.locale is defined by + // the user agent's locale unless overridden by djConfig. + + var result = locale ? locale.toLowerCase() : dojo.locale; + if(result == "root"){ + result = "ROOT"; + } + return result; // String +}; + +dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ + // summary: + // See dojo.requireLocalization() + // + // description: + // Called by the bootstrap, but factored out so that it is only included in the build when needed. + + var targetLocale = dojo.i18n.normalizeLocale(locale); + var bundlePackage = [moduleName, "nls", bundleName].join("."); + // NOTE: + // When loading these resources, the packaging does not match what is + // on disk. This is an implementation detail, as this is just a + // private data structure to hold the loaded resources. e.g. + // tests/hello/nls/en-us/salutations.js is loaded as the object + // tests.hello.nls.salutations.en_us={...} The structure on disk is + // intended to be most convenient for developers and translators, but + // in memory it is more logical and efficient to store in a different + // order. Locales cannot use dashes, since the resulting path will + // not evaluate as valid JS, so we translate them to underscores. + + //Find the best-match locale to load if we have available flat locales. + var bestLocale = ""; + if(availableFlatLocales){ + var flatLocales = availableFlatLocales.split(","); + for(var i = 0; i < flatLocales.length; i++){ + //Locale must match from start of string. + if(targetLocale.indexOf(flatLocales[i]) == 0){ + if(flatLocales[i].length > bestLocale.length){ + bestLocale = flatLocales[i]; + } + } + } + if(!bestLocale){ + bestLocale = "ROOT"; + } + } + + //See if the desired locale is already loaded. + var tempLocale = availableFlatLocales ? bestLocale : targetLocale; + var bundle = dojo._loadedModules[bundlePackage]; + var localizedBundle = null; + if(bundle){ + if(djConfig.localizationComplete && bundle._built){return;} + var jsLoc = tempLocale.replace(/-/g, '_'); + var translationPackage = bundlePackage+"."+jsLoc; + localizedBundle = dojo._loadedModules[translationPackage]; + } + + if(!localizedBundle){ + bundle = dojo["provide"](bundlePackage); + var syms = dojo._getModuleSymbols(moduleName); + var modpath = syms.concat("nls").join("/"); + var parent; + + dojo.i18n._searchLocalePath(tempLocale, availableFlatLocales, function(loc){ + var jsLoc = loc.replace(/-/g, '_'); + var translationPackage = bundlePackage + "." + jsLoc; + var loaded = false; + if(!dojo._loadedModules[translationPackage]){ + // Mark loaded whether it's found or not, so that further load attempts will not be made + dojo["provide"](translationPackage); + var module = [modpath]; + if(loc != "ROOT"){module.push(loc);} + module.push(bundleName); + var filespec = module.join("/") + '.js'; + loaded = dojo._loadPath(filespec, null, function(hash){ + // Use singleton with prototype to point to parent bundle, then mix-in result from loadPath + var clazz = function(){}; + clazz.prototype = parent; + bundle[jsLoc] = new clazz(); + for(var j in hash){ bundle[jsLoc][j] = hash[j]; } + }); + }else{ + loaded = true; + } + if(loaded && bundle[jsLoc]){ + parent = bundle[jsLoc]; + }else{ + bundle[jsLoc] = parent; + } + + if(availableFlatLocales){ + //Stop the locale path searching if we know the availableFlatLocales, since + //the first call to this function will load the only bundle that is needed. + return true; + } + }); + } + + //Save the best locale bundle as the target locale bundle when we know the + //the available bundles. + if(availableFlatLocales && targetLocale != bestLocale){ + bundle[targetLocale.replace(/-/g, '_')] = bundle[bestLocale.replace(/-/g, '_')]; + } +}; + +(function(){ + // If other locales are used, dojo.requireLocalization should load them as + // well, by default. + // + // Override dojo.requireLocalization to do load the default bundle, then + // iterate through the extraLocale list and load those translations as + // well, unless a particular locale was requested. + + var extra = djConfig.extraLocale; + if(extra){ + if(!extra instanceof Array){ + extra = [extra]; + } + + var req = dojo.i18n._requireLocalization; + dojo.i18n._requireLocalization = function(m, b, locale, availableFlatLocales){ + req(m,b,locale, availableFlatLocales); + if(locale){return;} + for(var i=0; i 0; i--){ + searchlist.push(elements.slice(0, i).join('-')); + } + searchlist.push(false); + if(down){searchlist.reverse();} + + for(var j = searchlist.length - 1; j >= 0; j--){ + var loc = searchlist[j] || "ROOT"; + var stop = searchFunc(loc); + if(stop){ break; } + } +}; + +dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){ + // summary: + // Load built, flattened resource bundles, if available for all + // locales used in the page. Only called by built layer files. + + function preload(locale){ + locale = dojo.i18n.normalizeLocale(locale); + dojo.i18n._searchLocalePath(locale, true, function(loc){ + for(var i=0; i