123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- define("dojox/mobile/PageIndicator", [
- "dojo/_base/connect",
- "dojo/_base/declare",
- "dojo/_base/window",
- "dojo/dom",
- "dojo/dom-class",
- "dojo/dom-construct",
- "dijit/registry", // registry.byNode
- "dijit/_Contained",
- "dijit/_WidgetBase"
- ], function(connect, declare, win, dom, domClass, domConstruct, registry, Contained, WidgetBase){
- /*=====
- var Contained = dijit._Contained;
- var WidgetBase = dijit._WidgetBase;
- =====*/
- // module:
- // dojox/mobile/PageIndicator
- // summary:
- // A current page indicator.
- return declare("dojox.mobile.PageIndicator", [WidgetBase, Contained],{
- // summary:
- // A current page indicator.
- // description:
- // PageIndicator displays a series of gray and white dots to
- // indicate which page is currently being viewed. It can typically
- // be used with dojox.mobile.SwapView. It is also internally used
- // in dojox.mobile.Carousel.
- // refId: String
- // An ID of a DOM node to be searched. Siblings of the reference
- // node will be searched for views. If not specified, this.domNode
- // will be the reference node.
- refId: "",
- buildRendering: function(){
- this.domNode = this.srcNodeRef || win.doc.createElement("DIV");
- this.domNode.className = "mblPageIndicator";
- this._tblNode = domConstruct.create("TABLE", {className:"mblPageIndicatorContainer"}, this.domNode);
- this._tblNode.insertRow(-1);
- this.connect(this.domNode, "onclick", "onClick");
- connect.subscribe("/dojox/mobile/viewChanged", this, function(view){
- this.reset();
- });
- },
- startup: function(){
- var _this = this;
- setTimeout(function(){ // to wait until views' visibility is determined
- _this.reset();
- }, 0);
- },
- reset: function(){
- // summary:
- // Updates the indicator.
- var r = this._tblNode.rows[0];
- var i, c, a = [], dot;
- var refNode = (this.refId && dom.byId(this.refId)) || this.domNode;
- var children = refNode.parentNode.childNodes;
- for(i = 0; i < children.length; i++){
- c = children[i];
- if(this.isView(c)){
- a.push(c);
- }
- }
- if(r.cells.length !== a.length){
- domConstruct.empty(r);
- for(i = 0; i < a.length; i++){
- c = a[i];
- dot = domConstruct.create("DIV", {className:"mblPageIndicatorDot"});
- r.insertCell(-1).appendChild(dot);
- }
- }
- if(a.length === 0){ return; }
- var currentView = registry.byNode(a[0]).getShowingView();
- for(i = 0; i < r.cells.length; i++){
- dot = r.cells[i].firstChild;
- if(a[i] === currentView.domNode){
- domClass.add(dot, "mblPageIndicatorDotSelected");
- }else{
- domClass.remove(dot, "mblPageIndicatorDotSelected");
- }
- }
- },
- isView: function(node){
- // summary:
- // Returns true if the given node is a view.
- return (node && node.nodeType === 1 && domClass.contains(node, "mblView"));
- },
- onClick: function(e){
- if(e.target !== this.domNode){ return; }
- if(e.layerX < this._tblNode.offsetLeft){
- connect.publish("/dojox/mobile/prevPage", [this]);
- }else if(e.layerX > this._tblNode.offsetLeft + this._tblNode.offsetWidth){
- connect.publish("/dojox/mobile/nextPage", [this]);
- }
- }
- });
- });
|