summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/mobile/IconContainer.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/mobile/IconContainer.js')
-rw-r--r--js/dojo/dojox/mobile/IconContainer.js185
1 files changed, 185 insertions, 0 deletions
diff --git a/js/dojo/dojox/mobile/IconContainer.js b/js/dojo/dojox/mobile/IconContainer.js
new file mode 100644
index 0000000..0bd667d
--- /dev/null
+++ b/js/dojo/dojox/mobile/IconContainer.js
@@ -0,0 +1,185 @@
+//>>built
+define("dojox/mobile/IconContainer", [
+ "dojo/_base/array",
+ "dojo/_base/declare",
+ "dojo/_base/window",
+ "dojo/dom-construct",
+ "dojo/dom-style",
+ "dijit/registry", // registry.byNode
+ "dijit/_Contained",
+ "dijit/_Container",
+ "dijit/_WidgetBase",
+ "./IconItem",
+ "./Heading",
+ "./View"
+], function(array, declare, win, domConstruct, domStyle, registry, Contained, Container, WidgetBase, IconItem, Heading, View){
+
+/*=====
+ var Contained = dijit._Contained;
+ var Container = dijit._Container;
+ var WidgetBase = dijit._WidgetBase;
+=====*/
+
+ // module:
+ // dojox/mobile/IconContainer
+ // summary:
+ // A container widget that holds multiple icons.
+
+ return declare("dojox.mobile.IconContainer", [WidgetBase, Container, Contained],{
+ // summary:
+ // A container widget that holds multiple icons.
+ // description:
+ // IconContainer is a container widget that holds multiple icons
+ // each of which represents application component.
+
+ // defaultIcon: String
+ // The default fall-back icon, which is displayed only when the
+ // specified icon has failed to load.
+ defaultIcon: "",
+
+ // transition: String
+ // A type of animated transition effect. You can choose from the
+ // standard transition types, "slide", "fade", "flip", or from the
+ // extended transition types, "cover", "coverv", "dissolve",
+ // "reveal", "revealv", "scaleIn", "scaleOut", "slidev",
+ // "swirl", "zoomIn", "zoomOut". If "none" is specified, transition
+ // occurs immediately without animation. If "below" is specified,
+ // the application contents are displayed below the icons.
+ transition: "below",
+
+ // pressedIconOpacity: Number
+ // The opacity of the pressed icon image.
+ pressedIconOpacity: 0.4,
+
+ // iconBase: String
+ // The default icon path for child items.
+ iconBase: "",
+
+ // iconPos: String
+ // The default icon position for child items.
+ iconPos: "",
+
+ // back: String
+ // A label for the navigational control.
+ back: "Home",
+
+ // label: String
+ // A title text of the heading.
+ label: "My Application",
+
+ // single: Boolean
+ // If true, only one icon content can be opened at a time.
+ single: false,
+
+ buildRendering: function(){
+ this.domNode = this.containerNode = this.srcNodeRef || win.doc.createElement("UL");
+ this.domNode.className = "mblIconContainer";
+ var t = this._terminator = domConstruct.create("LI");
+ t.className = "mblIconItemTerminator";
+ t.innerHTML = " ";
+ this.domNode.appendChild(t);
+ },
+
+ _setupSubNodes: function(ul){
+ array.forEach(this.getChildren(), function(w){
+ ul.appendChild(w.subNode);
+ });
+ },
+
+ startup: function(){
+ if(this._started){ return; }
+ if(this.transition === "below"){
+ this._setupSubNodes(this.domNode);
+ }else{
+ var view = this.appView = new View({id:this.id+"_mblApplView"});
+ var _this = this;
+ view.onAfterTransitionIn = function(moveTo, dir, transition, context, method){
+ _this._opening._open_1();
+ };
+ view.domNode.style.visibility = "hidden";
+ var heading = view._heading
+ = new Heading({back: this._cv ? this._cv(this.back) : this.back,
+ label: this._cv ? this._cv(this.label) : this.label,
+ moveTo: this.domNode.parentNode.id,
+ transition: this.transition});
+ view.addChild(heading);
+ var ul = view._ul = win.doc.createElement("UL");
+ ul.className = "mblIconContainer";
+ ul.style.marginTop = "0px";
+ this._setupSubNodes(ul);
+ view.domNode.appendChild(ul);
+
+ var target;
+ for(var w = this.getParent(); w; w = w.getParent()){
+ if(w instanceof View){
+ target = w.domNode.parentNode;
+ break;
+ }
+ }
+ if(!target){ target = win.body(); }
+ target.appendChild(view.domNode);
+
+ view.startup();
+ }
+ this.inherited(arguments);
+ },
+
+ closeAll: function(){
+ // summary:
+ // Closes all the icon items.
+ var len = this.domNode.childNodes.length, child, w;
+ for(var i = 0; i < len; i++){
+ var child = this.domNode.childNodes[i];
+ if(child.nodeType !== 1){ continue; }
+ if(child === this._terminator){ break; }
+ var w = registry.byNode(child);
+ w.containerNode.parentNode.style.display = "none";
+ domStyle.set(w.iconNode, "opacity", 1);
+ }
+ },
+
+ addChild: function(widget, /*Number?*/insertIndex){
+ var children = this.getChildren();
+ if(typeof insertIndex !== "number" || insertIndex > children.length){
+ insertIndex = children.length;
+ }
+ var idx = insertIndex;
+ var refNode = this.containerNode;
+ if(idx > 0){
+ refNode = children[idx - 1].domNode;
+ idx = "after";
+ }
+ domConstruct.place(widget.domNode, refNode, idx);
+
+ widget.transition = this.transition;
+ if(this.transition === "below"){
+ for(var i = 0, refNode = this._terminator; i < insertIndex; i++){
+ refNode = refNode.nextSibling;
+ }
+ domConstruct.place(widget.subNode, refNode, "after");
+ }else{
+ domConstruct.place(widget.subNode, this.appView._ul, insertIndex);
+ }
+ widget.inheritParams();
+ widget._setIconAttr(widget.icon);
+
+ if(this._started && !widget._started){
+ widget.startup();
+ }
+ },
+
+ removeChild: function(/*Widget|Number*/widget){
+ if(typeof widget === "number"){
+ widget = this.getChildren()[widget];
+ }
+ if(widget){
+ this.inherited(arguments);
+ if(this.transition === "below"){
+ this.containerNode.removeChild(widget.subNode);
+ }else{
+ this.appView._ul.removeChild(widget.subNode);
+ }
+ }
+ }
+ });
+});