124 lines
6.5 KiB
JavaScript
124 lines
6.5 KiB
JavaScript
(function(root, factory) {
|
|
if (typeof define === 'function' && define.amd) {
|
|
define(function(require, exports, module) {
|
|
module.exports = factory(require("jquery"), require("core/class"), require("framework/html/presets").layoutSets, require("framework/html/layout_controller").DefaultLayoutController, require("core/devices"), require("core/errors").log, require("ui/toolbar"))
|
|
})
|
|
}
|
|
else {
|
|
root.DevExpress.layouts = root.DevExpress.layouts || {};
|
|
root.DevExpress.layouts.SimpleLayout = factory(jQuery, DevExpress.Class, DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController, DevExpress.devices, DevExpress.errors.log);
|
|
root.DevExpress.framework.html.SimpleLayoutController = root.DevExpress.layouts.SimpleLayout.SimpleLayoutController;
|
|
root.DevExpress.framework.html.Win8SimpleLayoutController = root.DevExpress.layouts.SimpleLayout.Win8SimpleLayoutController
|
|
}
|
|
}(this, function($, Class, layoutSets, DefaultLayoutController, devices, log) {
|
|
var exports = {};
|
|
var SimpleLayoutController = DefaultLayoutController.inherit({
|
|
ctor: function(options) {
|
|
options = options || {};
|
|
options.name = options.name || "simple";
|
|
this.callBase(options);
|
|
var device = devices.current();
|
|
if (device.win && device.phone || options.Win8SimpleLayoutControllerFroced) {
|
|
this.impl = new Win8SimpleLayoutImpl($.proxy(this._getViewFrame, this))
|
|
}
|
|
else {
|
|
this.impl = new SimpleLayoutImpl
|
|
}
|
|
}, _onRenderComplete: function(viewInfo) {
|
|
this.impl.onRenderComplete(viewInfo);
|
|
this.callBase.apply(this, arguments)
|
|
}, disposeView: function(viewInfo) {
|
|
this.impl.disposeView(viewInfo);
|
|
this.callBase.apply(this, arguments)
|
|
}, _changeView: function(viewInfo) {
|
|
var that = this,
|
|
result = this.callBase.apply(this, arguments);
|
|
result.done(function() {
|
|
that.impl.changeView(viewInfo)
|
|
});
|
|
return result
|
|
}
|
|
});
|
|
var SimpleLayoutImpl = Class.inherit({
|
|
ctor: $.noop, onRenderComplete: $.noop, disposeView: $.noop, changeView: $.noop
|
|
});
|
|
var HAS_TOOLBAR_BOTTOM_CLASS = "has-toolbar-bottom",
|
|
LAYOUT_TOOLBAR_BOTTOM_SELECTOR = ".layout-toolbar-bottom";
|
|
var Win8SimpleLayoutImpl = SimpleLayoutImpl.inherit({
|
|
ctor: function(viewFrameGetter) {
|
|
this._getViewFrame = viewFrameGetter;
|
|
this.callBase.apply(this, arguments);
|
|
this._toolbarOptionChangedHandler = $.proxy(this._onToolbarOptionChanged, this)
|
|
}, _onToolbarOptionChanged: function(args) {
|
|
if (args.name === "items") {
|
|
var appbar = args.component;
|
|
if (appbar) {
|
|
this._refreshAppbarVisibility(appbar)
|
|
}
|
|
this._refreshHasToolbarClass()
|
|
}
|
|
}, _getAppbar: function($markup) {
|
|
var $appbar = $markup.find(LAYOUT_TOOLBAR_BOTTOM_SELECTOR);
|
|
if ($appbar.length !== 1) {
|
|
return
|
|
}
|
|
return $appbar.dxToolbar("instance")
|
|
}, _getCurrentAppbar: function() {
|
|
return this._getAppbar(this._getViewFrame().find(".dx-active-view "))
|
|
}, onRenderComplete: function(viewInfo) {
|
|
var appbar = this._getAppbar(viewInfo.renderResult.$markup);
|
|
if (appbar) {
|
|
this._refreshAppbarVisibility(appbar);
|
|
appbar.on("optionChanged", this._toolbarOptionChangedHandler)
|
|
}
|
|
}, disposeView: function(viewInfo) {
|
|
var appbar = this._getAppbar(viewInfo.renderResult.$markup);
|
|
if (appbar) {
|
|
appbar.off("optionChanged", this._toolbarOptionChangedHandler)
|
|
}
|
|
}, changeView: function(viewInfo) {
|
|
this._refreshHasToolbarClass()
|
|
}, _refreshAppbarVisibility: function(appbar) {
|
|
var isAppbarNotEmpty = false;
|
|
$.each(appbar.option("items"), function(index, item) {
|
|
if (item.visible) {
|
|
isAppbarNotEmpty = true;
|
|
return false
|
|
}
|
|
});
|
|
appbar.option("visible", isAppbarNotEmpty)
|
|
}, _refreshHasToolbarClass: function() {
|
|
var appbar = this._getCurrentAppbar(),
|
|
hasToolbar = appbar ? appbar.option("visible") : false;
|
|
this._getViewFrame().toggleClass(HAS_TOOLBAR_BOTTOM_CLASS, hasToolbar)
|
|
}
|
|
});
|
|
var Win8SimpleLayoutController = SimpleLayoutController.inherit({ctor: function(options) {
|
|
options = options || {};
|
|
options.Win8SimpleLayoutControllerFroced = true;
|
|
log("W0000", "Layouts", "Win8SimpleLayoutController", "15.1", "Use the SimpleLayoutController instead");
|
|
this.callBase.apply(this, arguments)
|
|
}});
|
|
layoutSets["navbar"] = layoutSets["navbar"] || [];
|
|
layoutSets["navbar"].push({
|
|
platform: "win", root: false, phone: true, controller: new SimpleLayoutController
|
|
});
|
|
layoutSets["navbar"].push({
|
|
platform: "android", root: false, controller: new SimpleLayoutController
|
|
});
|
|
layoutSets["simple"] = layoutSets["simple"] || [];
|
|
layoutSets["simple"].push({controller: new SimpleLayoutController});
|
|
layoutSets["simple"].push({
|
|
platform: "win", phone: true, controller: new SimpleLayoutController
|
|
});
|
|
layoutSets["split"] = layoutSets["split"] || [];
|
|
layoutSets["split"].push({
|
|
platform: "win", requireCustomResolve: true, controller: new SimpleLayoutController
|
|
});
|
|
layoutSets["split"].push({
|
|
platform: "win", root: false, phone: true, controller: new SimpleLayoutController
|
|
});
|
|
exports.SimpleLayoutController = SimpleLayoutController;
|
|
exports.Win8SimpleLayoutController = Win8SimpleLayoutController;
|
|
return exports
|
|
})); |