/** * Pages * @constructor */ hui.ui.Pages = function(options) { this.options = options || {}; this.element = hui.get(options.element); this.name = options.name; this.pages = hui.get.children(this.element); this.index = 0; this.fixedHeight = hui.cls.has(this.element,'hui_pages_full'); this.expanded = false; hui.ui.extend(this); }; hui.ui.Pages.create = function(options) { options = options || {}; options.element = hui.build('div',{'class':'hui_pages'}); return new hui.ui.Pages(options); }; hui.ui.Pages.prototype = { add : function(widgetOrElement) { var element = hui.dom.isElement(widgetOrElement) ? element : widgetOrElement.element; var page = hui.build('div',{'class':'hui_pages_page'}); page.appendChild(element); this.element.appendChild(page); if (this.pages.length>0) { page.style.display = 'none'; } this.pages = hui.get.children(this.element); }, next : function() { if (this.expanded) {return;} var current = this.pages[this.index]; this.index = this.pages.length <= this.index+1 ? 0 : this.index+1; this._transition({hide:current,show:this.pages[this.index]}); }, previous : function() { if (this.expanded) {return;} var current = this.pages[this.index]; this.index = this.index === 0 ? this.pages.length-1 : this.index-1; this._transition({hide:current,show:this.pages[this.index]}); }, goTo : function(key) { for (var i=0; i < this.pages.length; i++) { if (this.pages[i].getAttribute('data-key')==key && i!=this.index) { var current = this.pages[this.index]; this.index = i; this._transition({hide:current,show:this.pages[i]}); return; } } }, getPageKey : function() { return this.pages[this.index].getAttribute('data-key'); }, expand : function() { var l = this.pages.length; for (var i=0; i < l; i++) { if (!this.expanded) { hui.style.set(this.pages[i],{ width : (100 / l)+'%', display : 'block', 'float' : 'left', opacity: 1 }); } else { hui.style.set(this.pages[i],{ width : '', display : i==this.index ? 'block' : 'none', 'float' : '' }); } } hui.ui.callVisible(this); this.expanded = !this.expanded; }, _unFocus : function() { var active = document.activeElement; if (active && hui.dom.isDescendantOrSelf(active, this.element)) { active.blur(); } }, _transition : function(options) { this._unFocus(); var hide = options.hide, show = options.show, e = this.element, duration = 200; if (this.fixedHeight) { hui.style.set(hide, { position : 'absolute', width : e.clientWidth + 'px', height : this.element.clientHeight + 'px' }); hui.style.set(show,{ position : 'absolute', display : 'block', opacity : 0, width : e.clientWidth + 'px', height : this.element.clientHeight + 'px' }); } else { hui.style.set(hide,{ position: 'absolute', width: e.clientWidth + 'px' }); hui.style.set(show,{ position: 'absolute', width: e.clientWidth + 'px', display: 'block', opacity: 0 }); hui.style.set(e,{ height: hide.offsetHeight + 'px', overflow: 'hidden', position: 'relative' }); hui.animate({ node : e, css : {height: show.offsetHeight + 'px'}, duration : duration, ease : hui.ease.slowFastSlow }); } hui.ui.reLayout(); hui.effect.fadeOut({ element : hide, duration : duration, $complete : function() { hui.style.set(hide,{width : '',position:'',height:''}); window.setTimeout(function() { hide.style.display = 'none'; }); } }); hui.effect.fadeIn({ element : show, duration : duration, $complete : function() { hui.style.set(show, {width : '', position:'', height:''}); if (!this.fixedHeight) { hui.style.set(e, {height:'', overflow:'', position:''}); } hui.ui.reLayout(); hui.ui.callVisible(this); this.fireSizeChange(); }.bind(this) }); } };