123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- 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);
- }
- }
- }
- });
- });
|