UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

154 lines (126 loc) 5.44 kB
"use strict"; (function(root, factory) { /* global window, define, DevExpress, jQuery */ if (typeof define === 'function' && define.amd) { define(function(require, exports, module) { module.exports = factory( require("jquery"), require("framework/html/presets").layoutSets, require("framework/html/layout_controller").DefaultLayoutController, require("ui/pivot"), require("ui/toolbar") ); }); } else { root.DevExpress.layouts = root.DevExpress.layouts || {}; root.DevExpress.layouts.PivotLayout = factory( jQuery, DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController ); root.DevExpress.framework.html.PivotLayoutController = root.DevExpress.layouts.PivotLayout.PivotLayoutController; } }(window, function($, layoutSets, DefaultLayoutController) { var exports = {}, HAS_TOOLBAR_BOTTOM_CLASS = "has-toolbar-bottom", TOOLBAR_BOTTOM_SELECTOR = ".layout-toolbar-bottom", ACTIVE_PIVOT_ITEM_SELECTOR = ".dx-pivot-item:not(.dx-pivot-item-hidden)"; var PivotLayoutController = DefaultLayoutController.inherit({ ctor: function(options) { options = options || {}; options.name = options.name || "pivot"; this._viewsInLayout = {}; this.callBase(options); }, init: function(options) { this.callBase(options); }, _createNavigationWidget: function() { var that = this; this.$root = $("<div/>") .addClass("pivot-layout"); this.$pivot = $("<div/>") .appendTo(this.$root) .dxPivot({ itemTemplate: function(itemData, itemIndex, itemElement) { var emptyLayout = that._createEmptyLayout(); that._showElements(emptyLayout); emptyLayout.find(".layout-footer").remove(); emptyLayout.appendTo(itemElement); } }) .dxCommandContainer({ id: 'global-navigation' }); this.$pivot.dxPivot("instance").on("optionChanged", function(args) { if (args.name === "items") { // Layouts design is not supposed to be able to remove a rendered view from a layout and insert it again. // Since the dxPivot widget doesn't support changing its items dynamically, // the items are recreated and view render cache should be cleared that._clearPivotViewsRenderCache(); } }); var $tmpLayoutForFooter = that._createEmptyLayout(); this._showElements($tmpLayoutForFooter); this.$footer = $tmpLayoutForFooter.find(".layout-footer").insertAfter(this.$pivot); return this.$pivot; }, _clearPivotViewsRenderCache: function() { var that = this; $.each(this._viewsInLayout, function(key, viewInfo) { that._clearRenderResult(viewInfo); }); }, _renderNavigationImpl: function(navigationCommands) { var container = this.$pivot.dxCommandContainer("instance"); this._commandManager.renderCommandsToContainers(navigationCommands, [container]); }, element: function() { return this.$root; }, _getViewFrame: function(viewInfo) { var $result = this.$pivot.find(ACTIVE_PIVOT_ITEM_SELECTOR); $result = $result.add(this.$footer); return $result; }, _showViewImpl: function(viewInfo, direction, previousViewTemplateId) { this._showViewElements(viewInfo.renderResult.$markup); this._changeView(viewInfo, previousViewTemplateId); this._changeAppBar(); this._viewsInLayout[viewInfo.key] = viewInfo; return $.Deferred().resolve().promise(); }, _changeAppBar: function() { var $appBar = this.$footer.find(".dx-active-view " + TOOLBAR_BOTTOM_SELECTOR), appBar = $appBar.dxToolbar("instance"); if (appBar) { this._refreshAppBarVisibility(appBar, this.$root); } }, _refreshAppBarVisibility: function(appBar, $container) { var isAppBarNotEmpty = false; $.each(appBar.option("items"), function(index, item) { if (item.visible) { isAppBarNotEmpty = true; return false; } }); $container.toggleClass(HAS_TOOLBAR_BOTTOM_CLASS, isAppBarNotEmpty); appBar.option("visible", isAppBarNotEmpty); }, _hideView: function(viewInfo) { this.callBase.apply(this, arguments); this._changeAppBar(); } }); layoutSets["navbar"] = layoutSets["navbar"] || []; layoutSets["navbar"].push({ platform: "win", version: [8], phone: true, root: true, controller: new PivotLayoutController() }); exports.PivotLayoutController = PivotLayoutController; return exports; }));