source: Dev/branches/rest-dojo-ui/client/dojox/mobile/PageIndicator.js @ 256

Last change on this file since 256 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 3.0 KB
Line 
1define([
2        "dojo/_base/connect",
3        "dojo/_base/declare",
4        "dojo/_base/window",
5        "dojo/dom",
6        "dojo/dom-class",
7        "dojo/dom-construct",
8        "dijit/registry",       // registry.byNode
9        "dijit/_Contained",
10        "dijit/_WidgetBase"
11], function(connect, declare, win, dom, domClass, domConstruct, registry, Contained, WidgetBase){
12
13/*=====
14        var Contained = dijit._Contained;
15        var WidgetBase = dijit._WidgetBase;
16=====*/
17
18        // module:
19        //              dojox/mobile/PageIndicator
20        // summary:
21        //              A current page indicator.
22
23        return declare("dojox.mobile.PageIndicator", [WidgetBase, Contained],{
24                // summary:
25                //              A current page indicator.
26                // description:
27                //              PageIndicator displays a series of gray and white dots to
28                //              indicate which page is currently being viewed. It can typically
29                //              be used with dojox.mobile.SwapView. It is also internally used
30                //              in dojox.mobile.Carousel.
31
32                // refId: String
33                //              An ID of a DOM node to be searched. Siblings of the reference
34                //              node will be searched for views. If not specified, this.domNode
35                //              will be the reference node.
36                refId: "",
37
38                buildRendering: function(){
39                        this.domNode = this.srcNodeRef || win.doc.createElement("DIV");
40                        this.domNode.className = "mblPageIndicator";
41                        this._tblNode = domConstruct.create("TABLE", {className:"mblPageIndicatorContainer"}, this.domNode);
42                        this._tblNode.insertRow(-1);
43                        this.connect(this.domNode, "onclick", "onClick");
44                        connect.subscribe("/dojox/mobile/viewChanged", this, function(view){
45                                this.reset();
46                        });
47                },
48
49                startup: function(){
50                        var _this = this;
51                        setTimeout(function(){ // to wait until views' visibility is determined
52                                _this.reset();
53                        }, 0);
54                },
55
56                reset: function(){
57                        // summary:
58                        //              Updates the indicator.
59                        var r = this._tblNode.rows[0];
60                        var i, c, a = [], dot;
61                        var refNode = (this.refId && dom.byId(this.refId)) || this.domNode;
62                        var children = refNode.parentNode.childNodes;
63                        for(i = 0; i < children.length; i++){
64                                c = children[i];
65                                if(this.isView(c)){
66                                        a.push(c);
67                                }
68                        }
69                        if(r.cells.length !== a.length){
70                                domConstruct.empty(r);
71                                for(i = 0; i < a.length; i++){
72                                        c = a[i];
73                                        dot = domConstruct.create("DIV", {className:"mblPageIndicatorDot"});
74                                        r.insertCell(-1).appendChild(dot);
75                                }
76                        }
77                        if(a.length === 0){ return; }
78                        var currentView = registry.byNode(a[0]).getShowingView();
79                        for(i = 0; i < r.cells.length; i++){
80                                dot = r.cells[i].firstChild;
81                                if(a[i] === currentView.domNode){
82                                        domClass.add(dot, "mblPageIndicatorDotSelected");
83                                }else{
84                                        domClass.remove(dot, "mblPageIndicatorDotSelected");
85                                }
86                        }
87                },
88
89                isView: function(node){
90                        // summary:
91                        //              Returns true if the given node is a view.
92                        return (node && node.nodeType === 1 && domClass.contains(node, "mblView"));
93                },
94
95                onClick: function(e){
96                        if(e.target !== this.domNode){ return; }
97                        if(e.layerX < this._tblNode.offsetLeft){
98                                connect.publish("/dojox/mobile/prevPage", [this]);
99                        }else if(e.layerX > this._tblNode.offsetLeft + this._tblNode.offsetWidth){
100                                connect.publish("/dojox/mobile/nextPage", [this]);
101                        }
102                }
103        });
104});
Note: See TracBrowser for help on using the repository browser.