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 00000000..e565824a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/form/templates/blank.gif differ 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 00000000..e565824a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/templates/blank.gif differ 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 00000000..5d74aad6 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/templates/buttons/bg-fade.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/colors3x4.png b/spring-faces/src/main/java/META-INF/dijit/templates/colors3x4.png new file mode 100644 index 00000000..6da240f9 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/templates/colors3x4.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/templates/colors7x10.png b/spring-faces/src/main/java/META-INF/dijit/templates/colors7x10.png new file mode 100644 index 00000000..503f71a8 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/templates/colors7x10.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/a11y/README.txt b/spring-faces/src/main/java/META-INF/dijit/themes/a11y/README.txt new file mode 100644 index 00000000..a8093542 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/a11y/README.txt @@ -0,0 +1,3 @@ +This folder contains images used by all themes when in "high-contrast" mode. + +If you think you need to put something here, please talk to Becky or Bill first. \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/a11y/indeterminate_progress.gif b/spring-faces/src/main/java/META-INF/dijit/themes/a11y/indeterminate_progress.gif new file mode 100644 index 00000000..66f535cd Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/a11y/indeterminate_progress.gif differ 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 00000000..055e0064 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-left.png differ 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 00000000..8f5c1726 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-right.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-stretch.png new file mode 100644 index 00000000..44bfe5cc Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonActive-stretch.png differ 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 00000000..c8d4c945 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-right.png new file mode 100644 index 00000000..63292bcf Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-right.png differ 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 00000000..4b1f2ca7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonDisabled-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-left.png new file mode 100644 index 00000000..19b80401 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-right.png new file mode 100644 index 00000000..7d7e4241 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-right.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-stretch.png new file mode 100644 index 00000000..fe4b7684 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonEnabled-stretch.png differ 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 00000000..c0817c82 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-left.png differ 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 00000000..33469471 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-right.png differ 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 00000000..53cebb51 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/buttonHover-stretch.png differ 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 00000000..9f7d4711 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/close.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeActive.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeActive.png new file mode 100644 index 00000000..0fcae9fb Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeActive.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeHover.png new file mode 100644 index 00000000..b47820ee Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/closeHover.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-left.png new file mode 100644 index 00000000..19b80401 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-right.png new file mode 100644 index 00000000..465f22f5 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-right.png differ 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 00000000..fe4b7684 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowActive-stretch.png differ 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 00000000..19b80401 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-right.png new file mode 100644 index 00000000..9a94b629 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-right.png differ 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 00000000..2b20d64b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonArrowHover-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-left.png new file mode 100644 index 00000000..a989bb9c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-left.png differ 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 00000000..20e11417 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-right.png differ 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 00000000..ec26b8f8 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnActive-stretch.png differ 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 00000000..a5cd568d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-left.png differ 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 00000000..4e4e40d1 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-right.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-stretch.png new file mode 100644 index 00000000..53cebb51 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonBtnHover-stretch.png differ 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 00000000..b8720f35 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-left.png differ 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 00000000..42314522 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-right.png differ 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 00000000..4b1f2ca7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonDisabled-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-left.png new file mode 100644 index 00000000..d0e4aef4 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-right.png new file mode 100644 index 00000000..a1a1262c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-right.png differ 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 00000000..fe4b7684 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/comboButtonEnabled-stretch.png differ 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 00000000..52e81c3c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-center.png differ 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 00000000..8ebfd08e Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-right.png new file mode 100644 index 00000000..52e81c3c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-right.png differ 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 00000000..44bfe5cc Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonActive-stretch.png differ 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 00000000..9a9533f8 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-center.png differ 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 00000000..d1d5d1b1 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-right.png new file mode 100644 index 00000000..9a9533f8 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-right.png differ 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 00000000..4b1f2ca7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonDisabled-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-left.png new file mode 100644 index 00000000..8730903a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-left.png differ 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 00000000..93370e4c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right-06.png differ 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 00000000..93370e4c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-right.png differ 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 00000000..fe4b7684 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonEnabled-stretch.png differ 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 00000000..41c1863f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-center.png differ 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 00000000..c0817c82 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-left.png differ 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 00000000..41c1863f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-right.png differ 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 00000000..53cebb51 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/ddButtonHover-stretch.png differ 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 00000000..660ca4fb Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndCopy.png differ 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 00000000..74af29c0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndMove.png differ 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 00000000..87f3aa0d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoCopy.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoMove.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoMove.png new file mode 100644 index 00000000..d75ed860 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/dndNoMove.png differ 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 00000000..a1daf35f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-right.png new file mode 100644 index 00000000..c63f36a4 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-right.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-stretch.png new file mode 100644 index 00000000..aab0b8cc Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectActive-stretch.png differ 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 00000000..6d488d0f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-left.png differ 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 00000000..285e48a2 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-right.png differ 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 00000000..feb2e105 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectDisabled-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-left.png new file mode 100644 index 00000000..9df25074 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-right.png new file mode 100644 index 00000000..fb663953 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-right.png differ 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 00000000..ad8c9e42 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectEnabled-stretch.png differ 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 00000000..c8776286 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-right.png new file mode 100644 index 00000000..2458306e Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-right.png differ 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 00000000..ae1fb138 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/selectHover-stretch.png differ 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 00000000..b86242d9 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-bottom.png differ 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 00000000..dd8aa68a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerActive-top.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-bottom.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-bottom.png new file mode 100644 index 00000000..b7ae2f9a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-bottom.png differ 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 00000000..e3864aa7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-stretch.png new file mode 100644 index 00000000..feb2e105 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-top.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-top.png new file mode 100644 index 00000000..add65eb7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerDisabled-top.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-bottom.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-bottom.png new file mode 100644 index 00000000..7e803345 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-bottom.png differ 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 00000000..96d72fee Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-left.png differ 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 00000000..4ede9266 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-stretch.png differ 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 00000000..f5a1aa12 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerEnabled-top.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-bottom.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-bottom.png new file mode 100644 index 00000000..c8f7598f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-bottom.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-top.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-top.png new file mode 100644 index 00000000..d889ab26 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/spinnerHover-top.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-left.png new file mode 100644 index 00000000..f3af3e02 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-right.png new file mode 100644 index 00000000..dda4ca07 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-right.png differ 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 00000000..44bfe5cc Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabActive-stretch.png differ 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 00000000..aaab23a3 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-right.png new file mode 100644 index 00000000..afd92430 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-right.png differ 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 00000000..4b1f2ca7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabDisabled-stretch.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-left.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-left.png new file mode 100644 index 00000000..580a23db Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-left.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-right.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-right.png new file mode 100644 index 00000000..97270651 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-right.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-stretch.png new file mode 100644 index 00000000..fe4b7684 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabEnabled-stretch.png differ 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 00000000..562c682a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-left.png differ 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 00000000..de7e879d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-right.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-stretch.png b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-stretch.png new file mode 100644 index 00000000..53cebb51 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/images/tabHover-stretch.png differ 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 00000000..c6bd56f7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/noir/noir.psd differ 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 00000000..17b7daf5 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/arrows.png differ 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 00000000..4e10f67a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/checkmark.png differ 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 00000000..660ca4fb Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndCopy.png differ 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 00000000..74af29c0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndMove.png differ 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 00000000..87f3aa0d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoCopy.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoMove.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoMove.png new file mode 100644 index 00000000..d75ed860 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/dndNoMove.png differ 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 00000000..7fe7052c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/editor.gif differ 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 00000000..72f5dc84 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientBottomBg.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseBottomBg.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseBottomBg.png new file mode 100644 index 00000000..600a688e Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseBottomBg.png differ 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 00000000..971a267c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientInverseTopBg.png differ 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 00000000..29e733bd Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/gradientTopBg.png differ 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 00000000..0e06640a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/preciseSliderThumb.png differ 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 00000000..167a3e0d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/progressBarAnim.gif differ 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 00000000..a5a5dd6f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/sliderThumb.png differ 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 00000000..4a40a531 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH-thumb.png differ 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 00000000..e2600677 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerH.png differ 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 00000000..d1f409de Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV-thumb.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV.png new file mode 100644 index 00000000..37f6a053 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/splitContainerSizerV.png differ 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 00000000..7b84982f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabClose.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabCloseHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabCloseHover.png new file mode 100644 index 00000000..55f682fa Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tabCloseHover.png differ 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 00000000..3d7a881f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/tooltips.png differ 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 00000000..b6d53b9d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_loading.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus.gif new file mode 100644 index 00000000..413d1285 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus.gif differ 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 00000000..b0687e5d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_minus_rtl.gif differ 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 00000000..9cfbb252 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus_rtl.gif b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus_rtl.gif new file mode 100644 index 00000000..96673fe0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/soria/images/treeExpand_plus_rtl.gif differ 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

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

    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 00000000..0da12393 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.gif differ 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 00000000..ac118dd7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoTundraGradientBg.png differ 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 00000000..38d292b9 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/dojoUITundra06.psd differ 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 00000000..e9dbe390 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.gif differ 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 00000000..a5e89e26 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowDown.png differ 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 00000000..387d20da Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.png new file mode 100644 index 00000000..7886aec7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowLeft.png differ 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 00000000..a37db882 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.png new file mode 100644 index 00000000..593c4fd3 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowRight.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.gif new file mode 100644 index 00000000..ac819f19 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.png new file mode 100644 index 00000000..e12d3cd8 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/arrowUp.png differ 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 00000000..15002b15 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonActive.png differ 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 00000000..70766f4f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonDisabled.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonEnabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonEnabled.png new file mode 100644 index 00000000..2a0251a0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonEnabled.png differ 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 00000000..3d2a84ad Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/buttonHover.png differ 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 00000000..2cbc3ec9 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarDayLabel.png differ 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 00000000..87645dbe Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarMonthLabel.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarYearLabel.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarYearLabel.png new file mode 100644 index 00000000..e0abe3eb Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/calendarYearLabel.png differ 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 00000000..ba901f5f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxActive.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxDisabled.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxDisabled.png new file mode 100644 index 00000000..8955e9e2 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxDisabled.png differ 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 00000000..a8fe8d4b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxEnabled.png differ 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 00000000..1dfeea8a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkboxHover.png differ 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 00000000..77237aa5 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.gif differ 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 00000000..b55e264a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmark.png differ 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 00000000..11dc8002 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.png new file mode 100644 index 00000000..f26aa57d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/checkmarkNoBorder.png differ 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 00000000..167a3e0d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.gif differ 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 00000000..0a7bf23a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dijitProgressBarAnim.psd differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndCopy.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndCopy.png new file mode 100644 index 00000000..660ca4fb Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndCopy.png differ 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 00000000..74af29c0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndMove.png differ 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 00000000..87f3aa0d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoCopy.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoMove.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoMove.png new file mode 100644 index 00000000..d75ed860 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/dndNoMove.png differ 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 00000000..b46108b5 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowDown.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowUp.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowUp.png new file mode 100644 index 00000000..2c1b71cc Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/doubleArrowUp.png differ 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 00000000..7fe7052c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/editor.gif differ 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 00000000..1336a9b5 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i.gif differ 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 00000000..add395b4 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half.gif differ 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 00000000..8ff8e1d3 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_half_rtl.gif differ 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 00000000..b8a8f12a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/i_rtl.gif differ 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 00000000..4f9f70f0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/menu.png differ 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 00000000..9021a14e Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/no.gif differ 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 00000000..4a16dc79 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/noX.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/popupMenuBg.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/popupMenuBg.gif new file mode 100644 index 00000000..ae56bf3b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/popupMenuBg.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.gif new file mode 100644 index 00000000..15d4879c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.gif differ 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 00000000..0e06640a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/preciseSliderThumb.png differ 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 00000000..2069a5a2 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-1.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-2.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-2.png new file mode 100644 index 00000000..779b22fa Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-2.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-3.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-3.png new file mode 100644 index 00000000..77d4f70d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-3.png differ 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 00000000..8dad7a6b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-4.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-5.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-5.png new file mode 100644 index 00000000..915f3c79 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-5.png differ 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 00000000..2b607e7b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-6.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-7.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-7.png new file mode 100644 index 00000000..00d6b4b6 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-7.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-8.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-8.png new file mode 100644 index 00000000..e2944efc Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-8.png differ 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 00000000..cf3f37dd Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim-9.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim.psd b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim.psd new file mode 100644 index 00000000..0a7bf23a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarAnim.psd differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarEmpty.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarEmpty.png new file mode 100644 index 00000000..53918650 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarEmpty.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarFull.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarFull.png new file mode 100644 index 00000000..dd02ee39 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/progressBarFull.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActive.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActive.png new file mode 100644 index 00000000..c6b4266e Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActive.png differ 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 00000000..0fdef362 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveDisabled.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveHover.png new file mode 100644 index 00000000..a91dc4e9 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonActiveHover.png differ 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 00000000..a2943d52 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonDisabled.png differ 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 00000000..20f2e11a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonEnabled.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonHover.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonHover.png new file mode 100644 index 00000000..7a069737 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/radioButtonHover.png differ 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 00000000..0bc245a7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmpty.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmptyVertical.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmptyVertical.png new file mode 100644 index 00000000..c91a4e35 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderEmptyVertical.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFull.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFull.png new file mode 100644 index 00000000..6c9d0f87 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFull.png differ 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 00000000..1e72421d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderFullVertical.png differ 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 00000000..a5a5dd6f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/sliderThumb.png differ 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 00000000..ac7bbbf4 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowDown.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowUp.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowUp.png new file mode 100644 index 00000000..d26812d0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/smallArrowUp.png differ 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 00000000..87b459cb Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH-thumb.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH.png new file mode 100644 index 00000000..4b27d8ae Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerH.png differ 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 00000000..69e02b18 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV-thumb.png differ 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 00000000..f1d71952 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/splitContainerSizerV.png differ 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 00000000..7271066d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabActive.png differ 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 00000000..2cb0ee1f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.gif differ 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 00000000..efed5c7b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabClose.png differ 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 00000000..f59471e6 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.gif differ 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 00000000..ee5f2db1 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabCloseHover.png differ 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 00000000..f891b37b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabDisabled.png differ 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 00000000..fb750a05 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabEnabled.png differ 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 00000000..259b075f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tabHover.png differ 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 00000000..1835944f Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBar.png differ 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 00000000..1cd57cf5 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/titleBarBg.gif differ 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 00000000..f96fca4a Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.gif differ 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 00000000..cc345a66 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorDown.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.gif new file mode 100644 index 00000000..4d0a88c7 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.gif differ 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 00000000..3026ca56 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorLeft.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.gif new file mode 100644 index 00000000..4e22c1a6 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.png new file mode 100644 index 00000000..a7f91130 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorRight.png differ 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 00000000..37729b84 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.png b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.png new file mode 100644 index 00000000..bf13c713 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/tooltipConnectorUp.png differ 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 00000000..1a09ebec Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf.gif differ 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 00000000..067d534d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_loading.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_loading.gif new file mode 100644 index 00000000..b6d53b9d Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_loading.gif differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus.gif b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus.gif new file mode 100644 index 00000000..c8b6cf2c Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus.gif differ 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 00000000..cb09f9ea Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_minus_rtl.gif differ 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 00000000..f42a84ba Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus.gif differ 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 00000000..0863d9cf Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/treeExpand_plus_rtl.gif differ 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 00000000..9c4fc2e0 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/images/validationInputBg.png differ diff --git a/spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra.css b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra.css new file mode 100644 index 00000000..f6deba03 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/themes/tundra/tundra.css @@ -0,0 +1,1297 @@ +/* + Adds cosmetic styling to Dijit. Users may swap with a custom theme CSS file. +*/ + +@import url("../dijit.css"); + + +.dj_safari .tundra .dijitPopup { + /* -webkit-border-radius: 5px; */ + -webkit-box-shadow: 0px 3px 7px #adadad; +} + +/* + * Control opacity of popups + */ +.tundra .dijitPopup div, +.tundra .dijitPopup table { + opacity: 0.95; +} + +/***** + dijit.form.Button + dijit.form.DropDownButton + dijit.form.ComboButton + dijit.form.ComboBox (partial) + *****/ + + +.tundra .dijitButtonNode { + /* enabled state - inner */ + /* border:1px outset #a0a0a0; */ + border:1px solid #9b9b9b; + padding:.3em .4em .2em .4em; + background:#e9e9e9 url("images/buttonEnabled.png") repeat-x top; +} +.dj_ie6 .tundra .dijitButtonNode { + position:relative; +} + + +.tundra .dijitButtonDisabled .dijitButtonNode, +.tundra .dijitToggleButtonDisabled .dijitButtonNode, +.tundra .dijitDropDownButtonDisabled .dijitButtonNode, +.tundra .dijitComboButtonDisabled .dijitButtonNode, +.tundra .dijitComboBoxDisabled .dijitDownArrowButton, +.tundra .dijitComboBoxDisabled .dijitComboBoxInput, +.tundra .dijitSpinnerDisabled .dijitSpinnerInput, +.tundra .dijitSpinnerDisabled .dijitButtonNode { + /* disabled state - inner */ + border: 1px solid #d5d5d5; + /*color:#b4b4b4;*/ + background:#e4e4e4 url("images/buttonDisabled.png") top repeat-x; + opacity: 0.30; /* Safari, Opera and Mozilla */ +} +.tundra .dijitButtonDisabled .dijitButtonNode *, +.tundra .dijitToggleButtonDisabled .dijitButtonNode *, +.tundra .dijitDropDownButtonDisabled .dijitButtonNode *, +.tundra .dijitComboButtonDisabled .dijitButtonNode *, +.tundra .dijitSpinnerDisabled .dijitButtonNode * { + filter: gray() alpha(opacity=30); /* IE */ +} + +.tundra .dijitButtonHover .dijitButtonNode, +.tundra .dijitToggleButtonHover .dijitButtonNode, +.tundra .dijitDropDownButtonHover .dijitButtonNode, +.tundra .dijitComboButtonHover .dijitButtonContents, +.tundra .dijitComboButtonDownArrowHover .dijitDownArrowButton, +.tundra .dijitComboBoxHover .dijitDownArrowButton, +.tundra .dijitSpinnerUpArrowHover .dijitUpArrowButton, +.tundra .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:#366dba; + color:#366dba; + background:url("images/buttonHover.png") repeat-x bottom; +} + +.tundra .dijitButtonActive .dijitButtonNode, +.tundra .dijitToggleButtonActive .dijitButtonNode, +.tundra .dijitDropDownButtonActive .dijitButtonNode, +.tundra .dijitComboButtonActive .dijitButtonContents, +.tundra .dijitDownArrowActive .dijitDownArrowButton, +.tundra .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:#366dba; + background: #ededed url("images/buttonActive.png") bottom repeat-x; +} + + +.tundra .dijitToolbar { + border: 1px solid #9b9b9b; + background:#e9e9e9 url("images/buttonEnabled.png") repeat-x top; +} + +.tundra .dijitToolbar * { + padding: 0px; + margin: 0px; + #margin-top: -1px; /*IE*/ +} + +.dj_ie .tundra .dijitToolbar { + padding-bottom: 1px; +} + +.tundra .dijitToolbar .dijitButtonNode { + padding: 0px; + margin: 0px; + border: 1px solid transparent; + background: none; +} +.tundra .dijitToolbar .dijitToggleButtonChecked .dijitButtonNode { + background-color:#C1D2EE; + border:1px solid #316AC5; +} +.tundra .dijitToolbar .dijitToggleButtonCheckedHover .dijitButtonContents { + border-color: #366dba; + background-color:transparent; +} +.dj_ie6 .tundra .dijitToolbar .dijitButtonNode { + /* workaround no transparent border support in IE6*/ + border-color: #e9e9e9; +} + +.tundra .dijitToolbar .dijitButtonHover .dijitButtonNode, +.tundra .dijitToolbar .dijitToggleButtonHover .dijitButtonNode, +.tundra .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; +} + +.tundra .dijitToolbar .dijitToolbarSeparator { + background: url('images/editor.gif'); +} + +/* ComboBox-icon-specific */ +.tundra .dijitComboBox .dijitDownArrowButtonChar { + /* visibility:hidden; */ + display:none; +} +.tundra .dijitComboBox .dijitDownArrowButtonInner { + width:16px; + height:16px; + background:url("images/arrowDown.png") no-repeat center center; +} +.dj_ie6 .tundra .dijitComboBox .dijitDownArrowButtonInner { + background-image:url("images/arrowDown.gif"); +} +.tundra .dijitComboBoxHover .dijitDownArrowButtonInner { + /* TODO: url("images/arrowDownHover.png") but in IE6 it flickers some? */ +} + + +/***** + dijit.form.NumberSpinner + override for the shorter stacked buttons + *****/ + +.tundra .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) + ****/ + +.tundra .dijitComboBox { + /* put margin on the outer element of the autocompleter rather than the input */ + margin:.0em .1em .2em .1em; +} + +.tundra .dijitInputField, +.tundra .dijitInlineEditor input, +.tundra .dijitTextaArea, +.tundra .dijitComboBoxInput, +.tundra .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/validationInputBg.png") repeat-x top left; + border:1px solid #9b9b9b; + line-height: normal; + padding: 0.2em 0.3em; +} + +.tundra .dijitComboBoxFocused .dijitComboBoxInput { + /* input field when focused (eg: typing affects it) */ + border-color:#366dba; + border-style:inset; +} + +.tundra .dijitComboBoxDisabled .dijitComboBoxInput { + /* input field when disabled (also set above) */ +} + +.tundra .dijitComboBoxHover .dijitComboBoxInput { + /* input field when hovered over */ + border-color:#366dba; +} + +.tundra .dijitComboBoxActive .dijitComboBoxInput { + /* input field when mouse is down (?) */ +} + +/* Dojo Input Field */ + +.tundra .dijitInputFieldValidationNormal { + +} + +.tundra .dijitInputFieldValidationError { + border:1px solid #f3d118; + background-color::#f9f7ba; + background-image:none; +} + +.tundra .dijitInputFieldFocused { + border:1px solid #666; +} + +.tundra .dijitInputFieldValidationError:hover, +.tundra .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 +*/ + +.tundra .dijitToggleButton .dijitCheckBox, +.tundra .dijitToggleButton .dijitRadio, +.tundra .dijitToggleButton .dijitCheckBoxIcon, +.tundra .dijitToggleButton .dijitRadioIcon { + background-image: url('images/checkmarkNoBorder.gif'); +} + +.tundra .dijitCheckBox, +.tundra .dijitRadio, +.tundra .dijitCheckBoxIcon, /* inside a toggle button */ +.tundra .dijitRadioIcon { /* inside a toggle button */ + background-image: url('images/checkmark.gif'); /* checkbox sprite image */ + background-repeat: no-repeat; + width: 16px; + height: 16px; + overflow:hidden; + margin:0; padding:0; +} + + +.tundra .dijitCheckBox, +.tundra .dijitToggleButton .dijitCheckBoxIcon { + /* unchecked */ + background-position: -16px 0px; +} + +.tundra .dijitCheckBoxChecked, +.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon { + /* checked */ + background-position: 0px 0px; +} + +.tundra .dijitCheckBoxDisabled { + /* disabled */ + background-position: -48px 0px; +} + +.tundra .dijitCheckBoxCheckedDisabled { + /* disabled but checked */ + background-position: -32px 0px; +} + +.tundra .dijitCheckBoxHover, +.tundra .dijitCheckBoxFocused { + /* hovering over an unchecked enabled checkbox */ + background-position: -80px 0px; +} + +.tundra .dijitCheckBoxCheckedHover, + .tundra .dijitCheckBoxCheckedFocused { + /* hovering over a checked enabled checkbox */ + background-position: -64px 0px; +} + +.tundra .dijitRadio, +.tundra .dijitToggleButton .dijitRadioIcon { + /* unselected */ + background-position: -112px -1px; +} + +.tundra .dijitRadioChecked, +.tundra .dijitToggleButtonChecked .dijitRadioIcon { + /* selected */ + background-position: -96px -1px; +} + +.tundra .dijitRadioCheckedDisabled { + /* selected but disabled */ + background-position: -128px -1px; +} + +.tundra .dijitRadioDisabled { + /* unselected and disabled */ + background-position: -144px -1px; +} + +.tundra .dijitRadioHover, +.tundra .dijitRadioFocused { + /* hovering over an unselected enabled radio button */ + background-position: -176px -1px; +} + +.tundra .dijitRadioCheckedHover, +.tundra .dijitRadioCheckedFocused { + /* hovering over a selected enabled radio button */ + background-position: -160px -1px; +} + +/* Menu */ +.tundra .dijitMenu { + border: 1px solid #9b9b9b; + margin: 0px; + padding: 0px; +} + +.tundra .dijitMenuItem { + background-color: #f7f7f7; + font: menu; + margin: 0; +} + +.tundra .dijitMenuItem TD { + padding:2px; +} + +.tundra .dijitMenuItemHover { + background-color: #95a0b0; /* #555555; #aaaaaa; #646464; #60a1ea; */ + color:#fff; +} + +.tundra .dijitMenuItemIcon { + width: 16px; + height: 16px; + /* padding-right: 3px; */ +} + +.tundra .dijitMenuExpand { + display:none; +} +.tundra .dijitMenuExpandEnabled { + /* margin-top:4px; */ + width:16px; + height:16px; + background:url('images/arrowRight.png') no-repeat center center; + display:block; +} +.dj_ie6 .tundra .dijitMenuExpandEnabled { + background-image:url('images/arrowRight.gif'); +} +.tundra .dijitMenuExpandInner { + display:none !important; +} + +.tundra .dijitMenuSeparator { + background-color: #f7f7f7; +} + +/* separator can be two pixels -- set border of either one to 0px to have only one */ +.tundra .dijitMenuSeparatorTop { + border-bottom: 1px solid #9b9b9b; /*97adcb; */ +} + +.tundra .dijitMenuSeparatorBottom { + border-top: 1px solid #e8e8e8; +} + +/* TitlePane */ + +.tundra .dijitTitlePane .dijitTitlePaneTitle { + background: #cccccc; + background:#fafafa url("images/titleBarBg.gif") repeat-x bottom left; + border:1px solid #bfbfbf; + padding:4px 4px 2px 4px; + cursor: pointer; +} + +/* TODO: merge these, and all other icons to a series of background-image:() and background-position: -16*n px styles */ +.tundra .dijitTitlePane .dijitArrowNode { + width:16px; + height:16px; +} +.tundra .dijitTitlePane .dijitClosed .dijitArrowNode { + background:url('images/arrowRight.png') no-repeat center center; +} +.dj_ie6 .tundra .dijitTitlePane .dijitClosed .dijitArrowNode { + background-image:url('images/arrowRight.gif'); +} +.tundra .dijitTitlePane .dijitOpen .dijitArrowNode { + background:url('images/arrowDown.png') no-repeat center center; +} +.dj_ie6 .tundra .dijitTitlePane .dijitOpen .dijitArrowNode { + background-image:url('images/arrowDown.gif'); +} +.tundra .dijitTitlePane .dijitArrowNodeInner { + visibility:hidden; +} + +.tundra .dijitTitlePaneTitle .dijitOpenCloseArrowOuter { + margin-right:5px; +} + +.tundra .dijitOpen .dijitTitlePaneTitle .dijitOpenCloseArrowOuter { + position:relative; + top:2px; +} + +.tundra .dijitTitlePaneContentOuter { + background: #ffffff; + border:1px solid #bfbfbf; + border-top: 1px solid #cddde9; /* w/out this, an

    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 00000000..2d75261b Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dojo/_firebug/errorIcon.png differ 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 00000000..da1e5334 Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dojo/_firebug/infoIcon.png differ diff --git a/spring-faces/src/main/java/META-INF/dojo/_firebug/warningIcon.png b/spring-faces/src/main/java/META-INF/dojo/_firebug/warningIcon.png new file mode 100644 index 00000000..de51084e Binary files /dev/null and b/spring-faces/src/main/java/META-INF/dojo/_firebug/warningIcon.png differ diff --git a/spring-faces/src/main/java/META-INF/dojo/back.js b/spring-faces/src/main/java/META-INF/dojo/back.js new file mode 100644 index 00000000..243072af --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dojo/back.js @@ -0,0 +1,361 @@ +if(!dojo._hasResource["dojo.back"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojo.back"] = true; +dojo.provide("dojo.back"); + +(function() { + + var back = dojo.back; + + var initialHref = (typeof(window) !== "undefined") ? window.location.href : ""; + var initialHash = (typeof(window) !== "undefined") ? window.location.hash : ""; + var initialState = null; + + var locationTimer = null; + var bookmarkAnchor = null; + var historyIframe = null; + var forwardStack = []; + var historyStack = []; + var moveForward = false; + var changingUrl = false; + var historyCounter; + + function handleBackButton(){ + //summary: private method. Do not call this directly. + + //The "current" page is always at the top of the history stack. + console.debug("handlingBackButton"); + var current = historyStack.pop(); + if(!current){ return; } + var last = historyStack[historyStack.length-1]; + if(!last && historyStack.length == 0){ + last = initialState; + } + if(last){ + if(last.kwArgs["back"]){ + last.kwArgs["back"](); + }else if(last.kwArgs["backButton"]){ + last.kwArgs["backButton"](); + }else if(last.kwArgs["handle"]){ + last.kwArgs.handle("back"); + } + } + forwardStack.push(current); + console.debug("done handling back"); + } + + back.goBack = handleBackButton; + + function handleForwardButton(){ + //summary: private method. Do not call this directly. + console.debug("handling forward"); + var last = forwardStack.pop(); + if(!last){ return; } + if(last.kwArgs["forward"]){ + last.kwArgs.forward(); + }else if(last.kwArgs["forwardButton"]){ + last.kwArgs.forwardButton(); + }else if(last.kwArgs["handle"]){ + last.kwArgs.handle("forward"); + } + historyStack.push(last); + console.debug("done handling forward"); + } + + back.goForward = handleForwardButton; + + function createState(url, args, hash){ + //summary: private method. Do not call this directly. + return {"url": url, "kwArgs": args, "urlHash": hash}; //Object + } + + function getUrlQuery(url){ + //summary: private method. Do not call this directly. + var segments = url.split("?"); + if (segments.length < 2){ + return null; //null + } + else{ + return segments[1]; //String + } + } + + var getHash; + if(dojo.isOpera){ + getHash = function(){ + // work + var href = window.top.location.href; + var i = href.indexOf("#"); + return i >= 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