(function (_super) { /** * A base foundation * @class * @augments hui.ui.Component * @param {Object} options */ hui.ui.Foundation = function(options) { _super.call(this, options); this._attach(); }; hui.ui.Foundation.prototype = { nodes : { resizeNavigation : '.hui_foundation_resize_navigation', resizeResults : '.hui_foundation_resize_overlay', navigation : '.hui_foundation_navigation', results : '.hui_foundation_results', content : '.hui_foundation_content', main : '.hui_foundation_main', actions : '.hui_foundation_actions', overlay : '.hui_foundation_overlay', toggle : '.hui_foundation_overlay_toggle', close : '.hui_foundation_overlay_close', details : '.hui_foundation_details', detailsToggle : '.hui_foundation_details_toggle', back : '.hui_foundation_back' }, _attach : function() { var initial = 0, navigation = this.nodes.navigation, results = this.nodes.results, content = this.nodes.content, actions = this.nodes.actions, overlay = this.nodes.overlay, main = this.nodes.main, navWidth, fullWidth, resultsWidth, overlayWidth, self = this; hui.on(this.nodes.toggle,'tap',this._toggleOverlay,this); hui.on(this.nodes.close,'tap',this._toggleOverlay,this); hui.on(this.nodes.detailsToggle,'tap',this._toggleDetails,this); hui.on(this.nodes.back,'tap',this._back,this); hui.drag.attach({ element : this.nodes.resizeNavigation, touch: true, $startMove : function(e) { initial = e.getLeft(); navWidth = navigation.clientWidth; overlayWidth = overlay.clientWidth; fullWidth = self.element.clientWidth; navigation.style.transition = 'none'; results.style.transition = 'none'; }, $move : function(e) { var diff = e.getLeft() - initial; var ratio = (navWidth + diff) / overlayWidth; ratio = hui.between(0.3, ratio, 0.7); navigation.style.width = (ratio * 100) + '%'; results.style.left = (ratio * 100) + '%'; results.style.width = (100 - ratio * 100) + '%'; }, $finally : function() { navigation.style.transition = ''; results.style.transition = ''; } }); hui.drag.attach({ element : this.nodes.resizeResults, touch: true, $startMove : function(e) { initial = e.getLeft(); fullWidth = self.element.clientWidth; overlayWidth = overlay.clientWidth; overlay.style.transition = 'none'; main.style.transition = 'none'; }, $move : function(e) { var diff = e.getLeft() - initial; var ratio = (overlayWidth + diff) / fullWidth; ratio = hui.between(0.2, ratio, 0.7); overlay.style.width = (ratio * 100) + '%'; main.style.left = (ratio * 100) + '%'; }, $finally : function() { overlay.style.transition = ''; main.style.transition = ''; } }); }, _toggleOverlay : function() { hui.cls.toggle(this.element, 'hui-is-open'); }, _toggleDetails : function() { hui.cls.toggle(this.element, 'hui-is-details-open'); }, _back : function() { hui.cls.remove(this.element, 'hui-is-submerged'); }, _break : -1, $$layout : function() { var breaks = [0, 600, 800, 1100, 1400]; var w = this.element.clientWidth; var curr = -1; for (var i = 0; i < breaks.length; i++) { if (breaks[i] > w) { break; } curr = breaks[i]; } if (curr !== this._break) { this.nodes.main.style.left = ''; this.nodes.overlay.style.width = ''; this.nodes.results.style.width = ''; this.nodes.results.style.left = ''; this.nodes.navigation.style.width = ''; this._break = curr; } }, disposeOverlay : function() { hui.cls.remove(this.element, 'hui-is-open'); }, submerge : function() { hui.cls.add(this.element,'hui-is-submerged'); }, setBusyMain : function(busy) { hui.cls.set(this.nodes.main, 'hui-is-busy', busy); } }; hui.extend(hui.ui.Foundation, _super); })(hui.ui.Component);