Átállás

JUSTWEB létrehozása
This commit is contained in:
2017-08-24 10:42:06 +02:00
parent 159a71d3d0
commit e986f8cc23
120 changed files with 241221 additions and 239306 deletions
@@ -1,4 +1,4 @@
.empty-layout {
.empty-layout {
width: 100%;
height: 100%;
position: relative;
@@ -16,4 +16,4 @@
.empty-layout > div.content > div {
width: 100%;
height: 100%;
}
}
@@ -1,4 +1,4 @@
<div class="empty-layout" data-options="dxLayout : { name: 'empty' } " >
<div class="empty-layout" data-options="dxLayout : { name: 'empty' } " >
<div class="content layout-content" data-options="dxContentPlaceholder : { name: 'content', animation: 'view-content-change' }">
</div>
</div>
@@ -1,23 +1,42 @@
"use strict";
(function(root, factory) {
/* global 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)
})
}
else {
module.exports = factory(
require("jquery"),
require("framework/html/presets").layoutSets,
require("framework/html/layout_controller").DefaultLayoutController
);
});
} else {
root.DevExpress.layouts = root.DevExpress.layouts || {};
root.DevExpress.layouts.EmptyLayout = factory(jQuery, DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController);
root.DevExpress.framework.html.EmptyLayoutController = root.DevExpress.layouts.EmptyLayout.EmptyLayoutController
root.DevExpress.layouts.EmptyLayout = factory(
jQuery,
DevExpress.framework.html.layoutSets,
DevExpress.framework.html.DefaultLayoutController
);
root.DevExpress.framework.html.EmptyLayoutController = root.DevExpress.layouts.EmptyLayout.EmptyLayoutController;
}
}(this, function($, layoutSets, DefaultLayoutController) {
}(window, function($, layoutSets, DefaultLayoutController) {
var exports = {};
var EmptyLayoutController = DefaultLayoutController.inherit({ctor: function(options) {
options = options || {};
options.name = options.name || "empty";
this.callBase(options)
}});
var EmptyLayoutController = DefaultLayoutController.inherit({
ctor: function(options) {
options = options || {};
options.name = options.name || "empty";
this.callBase(options);
}
});
layoutSets["empty"] = layoutSets["empty"] || [];
layoutSets["empty"].push({controller: new EmptyLayoutController});
layoutSets["empty"].push({
controller: new EmptyLayoutController()
});
exports.EmptyLayoutController = EmptyLayoutController;
return exports
return exports;
}));
@@ -1,4 +1,4 @@
/* Layout */
/* Layout */
.navbar-layout,
.navbar-layout-tablet {
@@ -94,13 +94,16 @@
}
.dx-theme-android5 .navbar-layout .layout-footer {
bottom: 0;
height: 56px;
display: none;
bottom: -9999px;
left: -9999px;
visibility: hidden;
}
.dx-theme-android5 .navbar-layout.has-toolbar .layout-footer {
display: block;
bottom: 0;
left: 0;
visibility: visible;
}
/* win8 */
@@ -251,7 +254,7 @@
bottom: 68px;
}
.dx-theme-generic .navbar-layout .layout-footer,
.dx-theme-generic .navbar-layout .layout-footer,
.dx-theme-generic .navbar-layout .layout-footer .dx-navbar {
bottom: 0;
height: 68px;
@@ -1,4 +1,4 @@
<div class="navbar-layout" data-options="dxLayout : { name: 'navbar', platform: 'ios' } ">
<div class="navbar-layout" data-options="dxLayout : { name: 'navbar', platform: 'ios' } ">
<div class="layout-header dx-toolbar-background" data-options="dxContentPlaceholder : { name: 'header', animation: 'view-header-toolbar' }">
<div data-bind="dxToolbar: { items: [ { text: title, location: 'center' } ] }" data-options="dxCommandContainer : { id: 'ios-header-toolbar' }">
</div>
@@ -1,63 +1,99 @@
"use strict";
(function(root, factory) {
/* global define, DevExpress */
if (typeof define === 'function' && define.amd) {
define(function(require, exports, module) {
module.exports = factory(require("framework/html/presets").layoutSets, require("framework/html/layout_controller").DefaultLayoutController, require("ui/toolbar"))
})
}
else {
module.exports = factory(
require("framework/html/presets").layoutSets,
require("framework/html/layout_controller").DefaultLayoutController,
require("ui/toolbar")
);
});
} else {
root.DevExpress.layouts = root.DevExpress.layouts || {};
root.DevExpress.layouts.NavbarLayout = factory(DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController);
root.DevExpress.framework.html.NavBarController = root.DevExpress.layouts.NavbarLayout.NavBarController
root.DevExpress.layouts.NavbarLayout = factory(
DevExpress.framework.html.layoutSets,
DevExpress.framework.html.DefaultLayoutController
);
root.DevExpress.framework.html.NavBarController = root.DevExpress.layouts.NavbarLayout.NavBarController;
}
}(this, function(layoutSets, DefaultLayoutController) {
}(window, function(layoutSets, DefaultLayoutController) {
var exports = {},
HAS_NAVBAR_CLASS = "has-navbar",
HAS_TOOLBAR_CLASS = "has-toolbar",
LAYOUT_FOOTER_SELECTOR = ".layout-footer",
ACTIVE_TOOLBAR_SELECTOR = ".dx-active-view .dx-toolbar";
var NavBarController = DefaultLayoutController.inherit({
ctor: function(options) {
options = options || {};
options.name = options.name || "navbar";
this.callBase(options)
}, _createNavigationWidget: function(navigationCommands) {
this.callBase(navigationCommands);
this.$navbar = this._$mainLayout.find(".navbar-container");
return this.$navbar
}, _renderNavigationImpl: function(navigationCommands) {
this.callBase(navigationCommands);
if (navigationCommands.length) {
this._$mainLayout.addClass(HAS_NAVBAR_CLASS)
}
}, _showViewImpl: function(viewInfo) {
var that = this;
return that.callBase.apply(that, arguments).done(function() {
var $toolbar = that._$mainLayout.find(LAYOUT_FOOTER_SELECTOR).find(ACTIVE_TOOLBAR_SELECTOR),
isToolbarEmpty = !$toolbar.length || !$toolbar.dxToolbar("instance").option("visible");
that._$mainLayout.toggleClass(HAS_TOOLBAR_CLASS, !isToolbarEmpty)
})
}
});
ctor: function(options) {
options = options || {};
options.name = options.name || "navbar";
this.callBase(options);
},
_createNavigationWidget: function(navigationCommands) {
this.callBase(navigationCommands);
this.$navbar = this._$mainLayout.find(".navbar-container");
return this.$navbar;
},
_renderNavigationImpl: function(navigationCommands) {
this.callBase(navigationCommands);
if (navigationCommands.length) {
this._$mainLayout.addClass(HAS_NAVBAR_CLASS);
}
},
_showViewImpl: function(viewInfo) {
var that = this;
return that.callBase.apply(that, arguments).done(function() {
var $toolbar = that._$mainLayout.find(LAYOUT_FOOTER_SELECTOR).find(ACTIVE_TOOLBAR_SELECTOR),
isToolbarEmpty = !$toolbar.length || !$toolbar.dxToolbar("instance").option("visible");
that._$mainLayout.toggleClass(HAS_TOOLBAR_CLASS, !isToolbarEmpty);
});
}
});
layoutSets["navbar"] = layoutSets["navbar"] || [];
layoutSets["navbar"].push({
platform: "ios", controller: new NavBarController
platform: "ios",
controller: new NavBarController()
});
layoutSets["navbar"].push({
platform: "android", controller: new NavBarController
platform: "android",
controller: new NavBarController()
});
layoutSets["navbar"].push({
platform: "generic", controller: new NavBarController
platform: "generic",
controller: new NavBarController()
});
layoutSets["navbar"].push({
platform: "win", controller: new NavBarController
platform: "win",
controller: new NavBarController()
});
layoutSets["split"] = layoutSets["split"] || [];
layoutSets["split"].push({
platform: "win", phone: false, root: true, pane: "master", controller: new NavBarController
platform: "win",
phone: false,
root: true,
pane: "master",
controller: new NavBarController()
});
layoutSets["split"].push({
platform: "win", phone: true, controller: new NavBarController
platform: "win",
phone: true,
controller: new NavBarController()
});
exports.NavBarController = NavBarController;
return exports
return exports;
}));
@@ -1,4 +1,4 @@
/* Layout */
/* Layout */
.navbar-layout-phone .layout-content,
.navbar-layout-phone .layout-content > div {
@@ -1,4 +1,4 @@
<div class="navbar-layout-phone" data-options="dxLayout : { name: 'pivot', platform: 'win', phone: true }">
<div class="navbar-layout-phone" data-options="dxLayout : { name: 'pivot', platform: 'win', phone: true }">
<div class="layout-content" data-options="dxContentPlaceholder : { name: 'content' }">
</div>
@@ -1,90 +1,153 @@
"use strict";
(function(root, factory) {
/* global 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 {
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
root.DevExpress.layouts.PivotLayout = factory(
jQuery,
DevExpress.framework.html.layoutSets,
DevExpress.framework.html.DefaultLayoutController
);
root.DevExpress.framework.html.PivotLayoutController = root.DevExpress.layouts.PivotLayout.PivotLayoutController;
}
}(this, function($, layoutSets, DefaultLayoutController) {
}(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") {
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)
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);
}
}, _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()
})
.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
platform: "win",
version: [8],
phone: true,
root: true,
controller: new PivotLayoutController()
});
exports.PivotLayoutController = PivotLayoutController;
return exports
return exports;
}));
@@ -1,4 +1,4 @@
.child-controller-content {
.child-controller-content {
height: 100%;
}
@@ -1,4 +1,4 @@
<div class="popup-layout" data-options="dxLayout : { name: 'popup' }">
<div class="popup-layout" data-options="dxLayout : { name: 'popup' }">
<div data-bind="dxPopup: { showTitle: false, contentTemplate: 'content', fullScreen: true, deferRendering: false, closeOnBackButton: false, showCloseButton: false }" class="popup-container">
<div data-options="dxTemplate: { name: 'content' }" class="child-controller-content">
</div>
@@ -1,99 +1,152 @@
"use strict";
(function(root, factory) {
/* global 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("../Simple/SimpleLayout.js").SimpleLayoutController, require("ui/popup"))
})
}
else {
module.exports = factory(
require("jquery"),
require("framework/html/presets").layoutSets,
require("framework/html/layout_controller").DefaultLayoutController,
require("../Simple/SimpleLayout.js").SimpleLayoutController,
require("ui/popup")
);
});
} else {
root.DevExpress.layouts = root.DevExpress.layouts || {};
root.DevExpress.layouts.PopupLayout = factory(jQuery, DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController, DevExpress.layouts.SimpleLayout.SimpleLayoutController);
root.DevExpress.layouts.PopupLayout = factory(
jQuery,
DevExpress.framework.html.layoutSets,
DevExpress.framework.html.DefaultLayoutController,
DevExpress.layouts.SimpleLayout.SimpleLayoutController
);
root.DevExpress.framework.html.OverlayLayoutControllerBase = root.DevExpress.layouts.PopupLayout.OverlayLayoutControllerBase;
root.DevExpress.framework.html.PopupLayoutController = root.DevExpress.layouts.PopupLayout.PopupLayoutController
root.DevExpress.framework.html.PopupLayoutController = root.DevExpress.layouts.PopupLayout.PopupLayoutController;
}
}(this, function($, layoutSets, DefaultLayoutController, SimpleLayoutController) {
}(window, function($, layoutSets, DefaultLayoutController, SimpleLayoutController) {
var exports = {},
abstract = DefaultLayoutController.abstract;
var OverlayLayoutControllerBase = DefaultLayoutController.inherit({
ctor: function(options) {
options = options || {};
this.callBase(options);
if (!options.childController) {
this._ensureChildController(SimpleLayoutController, "SimpleLayout");
this.childController = new SimpleLayoutController
}
else {
this.childController = options.childController
}
this.contentContainerSelector = options.contentContainerSelector
}, _initChildController: function(options) {
var that = this,
$targetViewPort = that._$mainLayout.find(this.contentContainerSelector);
that.childController.init($.extend({}, options, {$viewPort: $targetViewPort}));
$.each(["viewRendered", "viewShowing", "viewReleased", "viewHidden"], function(_, callbacksPropertyName) {
that.childController.on(callbacksPropertyName, function(args) {
that.fireEvent(callbacksPropertyName, [args])
})
})
}, _ensureChildController: function(controller, layoutName) {
if (!controller) {
throw new Error(layoutName + "Controller is not found but it is required by the '" + this.name + "' layout for specified platform and device. Make sure the " + layoutName + ".* files are referenced in your main *.html file or specify other platform and device.");
}
}, _base: function() {
return DefaultLayoutController.prototype
}, _showContainerWidget: abstract, _hideContainerWidget: abstract, init: function(options) {
options = options || {};
this.callBase(options);
this._initChildController(options)
}, activate: function($target) {
var that = this,
result;
that.childController.activate();
that._base().activate.call(that, $target);
result = that._showContainerWidget($target);
return result
}, deactivate: function() {
var that = this,
result;
result = that._hideContainerWidget();
result.done(function() {
that._base().deactivate.call(that);
that.childController.deactivate()
});
return result
}, showView: function(viewInfo, direction) {
return this.childController.showView(viewInfo, direction)
}
});
ctor: function(options) {
options = options || {};
this.callBase(options);
if (!options.childController) {
this.childController = new SimpleLayoutController();
} else {
this.childController = options.childController;
}
this.contentContainerSelector = options.contentContainerSelector;
},
_initChildController: function(options) {
var that = this,
$targetViewPort = that._$mainLayout.find(this.contentContainerSelector);
that.childController.init($.extend({}, options, {
$viewPort: $targetViewPort
}));
$.each(["viewRendered", "viewShowing", "viewReleased", "viewHidden"], function(_, callbacksPropertyName) {
that.childController.on(callbacksPropertyName, function(args) {
that.fireEvent(callbacksPropertyName, [args]);
});
});
},
_ensureChildController: function(controller, layoutName) {
if (!controller) {
throw new Error(layoutName + "Controller is not found but it is required by the '" + this.name + "' layout for specified platform and device. Make sure the " + layoutName + ".* files are referenced in your main *.html file or specify other platform and device.");
}
},
_base: function() {
return DefaultLayoutController.prototype;
},
_showContainerWidget: abstract,
_hideContainerWidget: abstract,
init: function(options) {
options = options || {};
this.callBase(options);
this._initChildController(options);
},
activate: function($target) {
var that = this,
result;
that.childController.activate();
that._base().activate.call(that, $target);
result = that._showContainerWidget($target);
return result;
},
deactivate: function() {
var that = this,
result;
result = that._hideContainerWidget();
result.done(function() {
that._base().deactivate.call(that);
that.childController.deactivate();
});
return result;
},
showView: function(viewInfo, direction) {
return this.childController.showView(viewInfo, direction);
}
});
var PopupLayoutController = OverlayLayoutControllerBase.inherit({
ctor: function(options) {
options = options || {};
options.name = options.name || "popup";
options.contentContainerSelector = options.contentContainerSelector || ".child-controller-content";
this.isOverlay = true;
this._targetContainer = options.targetContainer;
this.callBase(options)
}, init: function(options) {
this.callBase(options);
this._popup = this._$mainLayout.find(".popup-container").dxPopup("instance");
if (this._targetContainer) {
this._popup.option("container", this._targetContainer)
}
}, _showContainerWidget: function() {
return this._popup.show()
}, _hideContainerWidget: function() {
return this._popup.hide()
}
});
ctor: function(options) {
options = options || {};
options.name = options.name || "popup";
options.contentContainerSelector = options.contentContainerSelector || ".child-controller-content";
this.isOverlay = true;
this._targetContainer = options.targetContainer;
this.callBase(options);
},
init: function(options) {
this.callBase(options);
this._popup = this._$mainLayout.find(".popup-container").dxPopup("instance");
if (this._targetContainer) {
this._popup.option("container", this._targetContainer);
}
},
_showContainerWidget: function() {
return this._popup.show();
},
_hideContainerWidget: function() {
return this._popup.hide();
}
});
$.each(["navbar", "simple", "slideout", "pivot", "split"], function(index, name) {
layoutSets[name] = layoutSets[name] || [];
$.each(layoutSets[name], function(index, layoutInfo) {
layoutInfo.modal = false
layoutInfo.modal = false;
});
layoutSets[name].push({
modal: true, controller: new PopupLayoutController
})
modal: true,
controller: new PopupLayoutController()
});
});
exports.OverlayLayoutControllerBase = OverlayLayoutControllerBase;
exports.PopupLayoutController = PopupLayoutController;
return exports
return exports;
}));
@@ -1,4 +1,4 @@
/* Layout */
/* Layout */
.simple-layout,
.simple-layout-tablet {
@@ -229,4 +229,4 @@
.dx-theme-win10 .simple-layout.dx-animating:not(.dx-enter):not(.dx-leave) {
display: none;
}
}
@@ -1,4 +1,4 @@
<div class="simple-layout" data-options="dxLayout : { name: 'simple', platform: 'win', phone: false, version: [8] } ">
<div class="simple-layout" data-options="dxLayout : { name: 'simple', platform: 'win', phone: false, version: [8] } ">
<div class="layout-frame" data-options="dxTransition: { name: 'main', animation: 'view-content-change' }">
<div class="layout-header">
<div data-bind="dxToolbar: { items: [{ text: title, location: 'center' }] }"
@@ -1,124 +1,206 @@
"use strict";
(function(root, factory) {
/* global define, DevExpress, jQuery */
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 {
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.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
root.DevExpress.framework.html.Win8SimpleLayoutController = root.DevExpress.layouts.SimpleLayout.Win8SimpleLayoutController;
}
}(this, function($, Class, layoutSets, DefaultLayoutController, devices, log) {
}(window, 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
}
});
ctor: function(options) {
options = options || {};
options.name = options.name || "simple";
this.callBase(options);
var device = devices.current();
if (device.win && device.phone || options.Win8SimpleLayoutControllerForced) {
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
});
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)
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);
}
});
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)
}});
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.Win8SimpleLayoutControllerForced = true;
// deprecated since 15.2
this.callBase.apply(this, arguments);
}
});
layoutSets["navbar"] = layoutSets["navbar"] || [];
layoutSets["navbar"].push({
platform: "win", root: false, phone: true, controller: new SimpleLayoutController
platform: "win",
root: false,
phone: true,
controller: new SimpleLayoutController()
});
layoutSets["navbar"].push({
platform: "android", root: false, controller: new SimpleLayoutController
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
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
platform: "win",
requireCustomResolve: true,
controller: new SimpleLayoutController()
});
layoutSets["split"].push({
platform: "win", root: false, phone: true, controller: new SimpleLayoutController
platform: "win",
root: false,
phone: true,
controller: new SimpleLayoutController()
});
exports.SimpleLayoutController = SimpleLayoutController;
exports.Win8SimpleLayoutController = Win8SimpleLayoutController;
return exports
return exports;
}));
@@ -1,4 +1,4 @@
.slideout-layout {
.slideout-layout {
height: 100%;
width: 100%;
overflow: hidden;
@@ -133,7 +133,7 @@
.dx-theme-android5 .slideout-layout .layout-content,
.dx-theme-android5 .dx-slideout .dx-slideout-item-container .dx-slideoutview-shield {
top: 56px;
top: 56px;
}
.dx-theme-android5 .slideout-layout .layout-frame,
@@ -1,4 +1,4 @@
<script type="text/html" id="slideOutMenuItemTemplate">
<script type="text/html" id="slideOutMenuItemTemplate">
<div data-bind="visible: visible, css: { 'dx-state-disabled': disabled }" data-options="dxTemplate : { name: 'item' } ">
<div>
<!-- ko dxIcon: $data.icon || $data.iconSrc --><!-- /ko -->
@@ -1,140 +1,226 @@
"use strict";
(function(root, factory) {
/* global 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("animation/fx"), require("core/devices"), require("ui/slide_out"), require("ui/toolbar"), require("ui/button"))
})
}
else {
root.DevExpress.layouts = root.DevExpress.layouts || {};
root.DevExpress.layouts.SlideOutLayout = factory(jQuery, DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController, DevExpress.fx, DevExpress.devices);
root.DevExpress.framework.html.SlideOutController = root.DevExpress.layouts.SlideOutLayout.SlideOutController
}
}(this, function($, layoutSets, DefaultLayoutController, fx, devices) {
var exports = {};
var SlideOutController = DefaultLayoutController.inherit({
ctor: function(options) {
options = options || {};
options.name = options.name || "slideout";
this.swipeEnabled = options.swipeEnabled === undefined ? true : options.swipeEnabled;
this.callBase(options)
}, init: function(options) {
this.callBase(options);
this._navigationManager = options.navigationManager;
this._navigationCanceledHandler = $.proxy(this._onNavigatingCanceled, this)
}, activate: function() {
var result = this.callBase.apply(this, arguments);
this._navigationManager.on("navigationCanceled", this._navigationCanceledHandler);
return result
}, deactivate: function() {
this._navigationManager.off("navigationCanceled", this._navigationCanceledHandler);
return this.callBase.apply(this, arguments)
}, disable: function() {
if (this.slideOut.option("menuVisible")) {
this._toggleNavigation()
}
return this.callBase.apply(this, arguments)
}, _onNavigatingCanceled: function(args) {
if (this.slideOut.option("menuVisible") && args.cancelReason !== "redirect") {
this._toggleNavigation()
}
}, _createNavigationWidget: function() {
this.$slideOut = $("<div data-bind='dxSlideOut: { menuItemTemplate: $(\"#slideOutMenuItemTemplate\"), contentTemplate: \" \" }'></div>").dxCommandContainer({id: 'global-navigation'});
this._applyTemplate(this.$slideOut, this._layoutModel);
this.callBase();
this.slideOut = this.$slideOut.dxSlideOut("instance");
this.slideOut.option("swipeEnabled", this.swipeEnabled);
this.$slideOut.find(".dx-slideout-item-container").append(this._$mainLayout);
return this.$slideOut
}, _renderNavigationImpl: function(navigationCommands) {
var container = this.$slideOut.dxCommandContainer("instance");
this._commandManager.renderCommandsToContainers(navigationCommands, [container])
}, element: function() {
return this.$slideOut
}, _showViewImpl: function(viewInfo, direction, previousViewTemplateId) {
this._fxOffSaved = fx.off;
if (this.slideOut.option("menuVisible")) {
fx.off = true
}
return this.callBase.apply(this, arguments)
}, _getReadyForRenderDeferredItems: function(viewInfo) {
var result = this.callBase(viewInfo);
fx.off = this._fxOffSaved;
if (this.slideOut.option("menuVisible")) {
result = $.when(this._toggleNavigation(), result)
}
return result
}, _onViewShown: function(viewInfo) {
this._refreshVisibility()
}, _refreshVisibility: function() {
if (devices.real().platform === "android") {
this.$slideOut.css("backface-visibility", "hidden");
this.$slideOut.css("backface-visibility");
this.$slideOut.css("backface-visibility", "visible")
}
}, _viewHasBackCommands: function(viewInfo) {
var hasBackCommands = false;
$.each(viewInfo.commands, function(index, command) {
if (((command.option("behavior") === "back" || command.option("id") === "back")) && command.option("visible")) {
hasBackCommands = true;
return false
}
});
return hasBackCommands
}, _onRenderComplete: function(viewInfo) {
var that = this;
if (!that._viewHasBackCommands(viewInfo)) {
that._initNavigationButton(viewInfo.renderResult.$markup)
}
var $content = viewInfo.renderResult.$markup.find(".layout-content"),
$appbar = viewInfo.renderResult.$markup.find(".layout-toolbar-bottom"),
appbar = $appbar.dxToolbar("instance");
if (appbar) {
that._refreshAppbarVisibility(appbar, $content);
appbar.on("optionChanged", function(args) {
if (args.name === "items") {
that._refreshAppbarVisibility(appbar, $content)
}
})
}
}, _refreshAppbarVisibility: function(appbar, $content) {
var isAppbarNotEmpty = false;
$.each(appbar.option("items"), function(index, item) {
if (item.visible) {
isAppbarNotEmpty = true;
return false
}
});
$content.toggleClass("has-toolbar-bottom", isAppbarNotEmpty);
appbar.option("visible", isAppbarNotEmpty)
}, _initNavigationButton: function($markup) {
var that = this,
$toolbar = $markup.find(".layout-toolbar"),
toolbar = $toolbar.dxToolbar("instance");
var initNavButton = function() {
toolbar.option("items[0].visible", true);
$toolbar.find(".nav-button").dxButton("instance").option("onClick", $.proxy(that._toggleNavigation, that, $markup))
};
initNavButton();
toolbar.on("contentReady", function(args) {
initNavButton()
})
}, _toggleNavigation: function($markup) {
return this.slideOut.toggleMenuVisibility()
}
module.exports = factory(
require("jquery"),
require("framework/html/presets").layoutSets,
require("framework/html/layout_controller").DefaultLayoutController,
require("animation/fx"),
require("core/devices"),
require("ui/slide_out"),
require("ui/toolbar"),
require("ui/button")
);
});
} else {
root.DevExpress.layouts = root.DevExpress.layouts || {};
root.DevExpress.layouts.SlideOutLayout = factory(
jQuery,
DevExpress.framework.html.layoutSets,
DevExpress.framework.html.DefaultLayoutController,
DevExpress.fx,
DevExpress.devices
);
root.DevExpress.framework.html.SlideOutController = root.DevExpress.layouts.SlideOutLayout.SlideOutController;
}
}(window, function($, layoutSets, DefaultLayoutController, fx, devices) {
var exports = {};
var SlideOutController = DefaultLayoutController.inherit({
ctor: function(options) {
options = options || {};
options.name = options.name || "slideout";
this.swipeEnabled = options.swipeEnabled === undefined ? true : options.swipeEnabled;
this.callBase(options);
},
init: function(options) {
this.callBase(options);
this._navigationManager = options.navigationManager;
this._navigationCanceledHandler = $.proxy(this._onNavigatingCanceled, this);
},
activate: function() {
var result = this.callBase.apply(this, arguments);
this._navigationManager.on("navigationCanceled", this._navigationCanceledHandler);
return result;
},
deactivate: function() {
this._navigationManager.off("navigationCanceled", this._navigationCanceledHandler);
return this.callBase.apply(this, arguments);
},
disable: function() {
if (this.slideOut.option("menuVisible")) {
this._toggleNavigation();
}
return this.callBase.apply(this, arguments);
},
_onNavigatingCanceled: function(args) {
if (this.slideOut.option("menuVisible") && args.cancelReason !== "redirect") {
this._toggleNavigation();
}
},
_createNavigationWidget: function() {
this.$slideOut = $("<div data-bind='dxSlideOut: { menuItemTemplate: $(\"#slideOutMenuItemTemplate\"), contentTemplate: \" \" }'></div>")
.dxCommandContainer({
id: 'global-navigation'
});
this._applyTemplate(this.$slideOut, this._layoutModel);
this.callBase();
this.slideOut = this.$slideOut.dxSlideOut("instance");
this.slideOut.option("swipeEnabled", this.swipeEnabled);
this.$slideOut.find(".dx-slideout-item-container").append(this._$mainLayout);
return this.$slideOut;
},
_renderNavigationImpl: function(navigationCommands) {
var container = this.$slideOut.dxCommandContainer("instance");
this._commandManager.renderCommandsToContainers(navigationCommands, [container]);
},
element: function() {
return this.$slideOut;
},
_showViewImpl: function(viewInfo, direction, previousViewTemplateId) {
this._fxOffSaved = fx.off;
if (this.slideOut.option("menuVisible")) {
fx.off = true;
}
return this.callBase.apply(this, arguments);
},
_getReadyForRenderDeferredItems: function(viewInfo) {
var result = this.callBase(viewInfo);
fx.off = this._fxOffSaved;
if (this.slideOut.option("menuVisible")) {
result = $.when(this._toggleNavigation(), result);
}
return result;
},
_onViewShown: function(viewInfo) {
this._refreshVisibility();
},
_refreshVisibility: function() {
// NOTE : T111662 - View rendering only after tap on it
if (devices.real().platform === "android") {
this.$slideOut.css("backface-visibility", "hidden");
this.$slideOut.css("backface-visibility");
this.$slideOut.css("backface-visibility", "visible");
}
},
_viewHasBackCommands: function(viewInfo) {
var hasBackCommands = false;
$.each(viewInfo.commands, function(index, command) {
if (((command.option("behavior") === "back" || command.option("id") === "back")) && command.option("visible")) {
hasBackCommands = true;
return false;
}
});
return hasBackCommands;
},
_onRenderComplete: function(viewInfo) {
var that = this;
if (!that._viewHasBackCommands(viewInfo)) {
that._initNavigationButton(viewInfo.renderResult.$markup);
}
var $content = viewInfo.renderResult.$markup.find(".layout-content"),
$appBar = viewInfo.renderResult.$markup.find(".layout-toolbar-bottom"),
appBar = $appBar.dxToolbar("instance");
if (appBar) {
that._refreshAppBarVisibility(appBar, $content);
appBar.on("optionChanged", function(args) {
if (args.name === "items") {
that._refreshAppBarVisibility(appBar, $content);
}
});
}
},
_refreshAppBarVisibility: function(appBar, $content) {
var isAppBarNotEmpty = false;
$.each(appBar.option("items"), function(index, item) {
if (item.visible) {
isAppBarNotEmpty = true;
return false;
}
});
$content.toggleClass("has-toolbar-bottom", isAppBarNotEmpty);
appBar.option("visible", isAppBarNotEmpty);
},
_initNavigationButton: function($markup) {
var that = this,
$toolbar = $markup.find(".layout-toolbar"),
toolbar = $toolbar.dxToolbar("instance");
var initNavButton = function() {
toolbar.option("items[0].visible", true); //nav button item
$toolbar.find(".nav-button").dxButton("instance").option("onClick", $.proxy(that._toggleNavigation, that, $markup));
};
initNavButton();
toolbar.on("contentReady", function(args) {
initNavButton();
});
},
_toggleNavigation: function($markup) {
return this.slideOut.toggleMenuVisibility();
}
});
layoutSets["slideout"] = layoutSets["slideout"] || [];
layoutSets["slideout"].push({
platform: "ios", controller: new SlideOutController
platform: "ios",
controller: new SlideOutController()
});
layoutSets["slideout"].push({
platform: "android", controller: new SlideOutController
platform: "android",
controller: new SlideOutController()
});
layoutSets["slideout"].push({
platform: "generic", controller: new SlideOutController
platform: "generic",
controller: new SlideOutController()
});
layoutSets["slideout"].push({
platform: "win", controller: new SlideOutController
platform: "win",
controller: new SlideOutController()
});
exports.SlideOutController = SlideOutController;
return exports
return exports;
}));
@@ -1,4 +1,4 @@
.dx-viewport {
.dx-viewport {
width: 100%;
height: 100%;
position: absolute;
@@ -9,7 +9,7 @@
-ms-grid-columns: 620px 1fr;
-ms-grid-rows: 104px 1fr;
width: 100%;
height: 100%;
height: 100%;
}
.dx-theme-win8 .split-layout .layout-header {
@@ -52,7 +52,7 @@
}
.dx-theme-win8 .split-layout .left-content {
-ms-grid-column: 1;
-ms-grid-column: 1;
-ms-grid-row: 2;
padding: 60px 0 0 120px;
}
@@ -64,7 +64,7 @@
}
.dx-theme-win8 .split-layout .right-content {
-ms-grid-column: 2;
-ms-grid-column: 2;
-ms-grid-row: 2;
padding: 60px 0 0 0;
}
@@ -80,7 +80,7 @@
.dx-theme-win8 .split-layout .dx-app-bar {
position: fixed;
z-index: 1000;
z-index: 1000;
width: 100%;
bottom: -104px;
transition: bottom .4s;
@@ -117,7 +117,7 @@
-ms-grid-columns: 1fr 3fr;
-ms-grid-rows: 60px 1fr;
width: 100%;
height: 100%;
height: 100%;
}
.dx-theme-win10 .split-layout .layout-header {
@@ -139,13 +139,13 @@
}
.dx-theme-win10 .split-layout .left-content {
-ms-grid-column: 1;
-ms-grid-column: 1;
-ms-grid-row: 2;
background-color: #171717;
}
.dx-theme-win10 .split-layout .right-content {
-ms-grid-column: 2;
-ms-grid-column: 2;
-ms-grid-row: 2;
}
@@ -207,4 +207,4 @@
top: 48px;
bottom: 0;
width: 100%;
}
}
@@ -1,4 +1,4 @@
<div class="master-detail-layout" data-options="dxLayout : { name: 'split', tablet: true, platform: 'ios' }">
<div class="master-detail-layout" data-options="dxLayout : { name: 'split', tablet: true, platform: 'ios' }">
<div class="master-pane dx-splitter">
</div>
@@ -1,20 +1,45 @@
"use strict";
(function(root, factory) {
/* global define, DevExpress, jQuery */
if (typeof define === 'function' && define.amd) {
define(function(require, exports, module) {
module.exports = factory(require("jquery"), require("knockout"), require("core/class"), require("framework/errors"), require("framework/html/presets").layoutSets, require("framework/html/layout_controller").DefaultLayoutController, require("../Empty/EmptyLayout.js"), require("../Simple/SimpleLayout.js"), require("animation/fx"), require("ui/toolbar"))
})
}
else {
module.exports = factory(
require("jquery"),
require("knockout"),
require("core/class"),
require("framework/errors"),
require("framework/html/presets").layoutSets,
require("framework/html/layout_controller").DefaultLayoutController,
require("../Empty/EmptyLayout.js"),
require("../Simple/SimpleLayout.js"),
require("animation/fx"),
require("ui/toolbar")
);
});
} else {
root.DevExpress.layouts = root.DevExpress.layouts || {};
root.DevExpress.layouts.SplitLayout = factory(jQuery, window.ko, DevExpress.Class, DevExpress.framework.errors, DevExpress.framework.html.layoutSets, DevExpress.framework.html.DefaultLayoutController, DevExpress.layouts.EmptyLayout, DevExpress.layouts.SimpleLayout, DevExpress.fx);
root.DevExpress.layouts.SplitLayout = factory(
jQuery,
window.ko,
DevExpress.Class,
DevExpress.framework.errors,
DevExpress.framework.html.layoutSets,
DevExpress.framework.html.DefaultLayoutController,
DevExpress.layouts.EmptyLayout,
DevExpress.layouts.SimpleLayout,
DevExpress.fx
);
root.DevExpress.framework.html.MultipaneLayoutController = root.DevExpress.layouts.SplitLayout.MultipaneLayoutController;
root.DevExpress.framework.html.IOSSplitLayoutController = root.DevExpress.layouts.SplitLayout.IOSSplitLayoutController;
root.DevExpress.framework.html.ToolbarController = root.DevExpress.layouts.SplitLayout.ToolbarController;
root.DevExpress.framework.html.AndroidSplitLayoutController = root.DevExpress.layouts.SplitLayout.AndroidSplitLayoutController;
root.DevExpress.framework.html.WinSplitLayoutController = root.DevExpress.layouts.SplitLayout.WinSplitLayoutController;
root.DevExpress.framework.html.Win8SplitLayoutController = root.DevExpress.layouts.SplitLayout.Win8SplitLayoutController
root.DevExpress.framework.html.Win8SplitLayoutController = root.DevExpress.layouts.SplitLayout.Win8SplitLayoutController;
}
}(this, function($, ko, Class, errors, layoutSets, DefaultLayoutController, EmptyLayoutControllerModule, SimpleLayoutControllerModule, fx) {
}(window, function($, ko, Class, errors, layoutSets, DefaultLayoutController, EmptyLayoutControllerModule, SimpleLayoutControllerModule, fx) {
var exports = {},
APPBAR_TOUCH_AREA_HEIGHT = 50,
APPBAR_TOUCH_THRESHOLD = 50,
@@ -24,358 +49,524 @@
POINTER_DOWN_EVENT_NAME,
POINTER_UP_EVENT_NAME,
POINTER_MOVE_EVENT_NAME;
if (window.PointerEvent) {
POINTER_DOWN_EVENT_NAME = "pointerdown";
POINTER_UP_EVENT_NAME = "pointerup";
POINTER_MOVE_EVENT_NAME = "pointermove"
}
else if (window.MSPointerEvent) {
POINTER_MOVE_EVENT_NAME = "pointermove";
} else if (window.MSPointerEvent) {
POINTER_DOWN_EVENT_NAME = "MSPointerDown";
POINTER_UP_EVENT_NAME = "MSPointerUp";
POINTER_MOVE_EVENT_NAME = "MSPointerMove"
}
else {
POINTER_MOVE_EVENT_NAME = "MSPointerMove";
} else {
POINTER_DOWN_EVENT_NAME = "mousedown";
POINTER_UP_EVENT_NAME = "mouseup";
POINTER_MOVE_EVENT_NAME = "mousemove"
POINTER_MOVE_EVENT_NAME = "mousemove";
}
var SplitLayoutEventHelper = Class.inherit({
ctor: function(splitLayout) {
this.root = splitLayout
}, init: function() {
this.root._$viewPort.on(POINTER_UP_EVENT_NAME + EVENTS_NAMESPACE, $.proxy(this._pointerUpHandler, this));
this.root._$viewPort.on(POINTER_DOWN_EVENT_NAME + EVENTS_NAMESPACE, $.proxy(this._pointerDownHandler, this));
$(document).on("keydown" + EVENTS_NAMESPACE, $.proxy(this._keyDownHandler, this));
$(document).on("keyup" + EVENTS_NAMESPACE, $.proxy(this._keyUpHandler, this));
this._startTouchPoint = false;
this._winKeyPressed = false;
this._moveEvent = false;
this._appbarBehavior = true
}, _pointerDownHandler: function(e) {
var originalEvent = e.originalEvent;
if (this._isTouch(originalEvent) && this._startedInAppBarArea(originalEvent)) {
this._startTouchPoint = {
x: originalEvent.clientX, y: originalEvent.clientY
};
this.root._$viewPort.on(POINTER_MOVE_EVENT_NAME + EVENTS_NAMESPACE, $.proxy(this._pointerMoveHandler, this))
}
}, _pointerMoveHandler: function(e) {
var originalEvent = e.originalEvent;
if (this._thresholdExceeded(originalEvent)) {
this._moveEvent = true;
this.root._$viewPort.off(POINTER_MOVE_EVENT_NAME + EVENTS_NAMESPACE);
if (this._isVerticalDirection(originalEvent.clientX, originalEvent.clientY))
this._toggleAppBarState(true)
}
}, _pointerUpHandler: function(e) {
this.root._$viewPort.off(POINTER_MOVE_EVENT_NAME + EVENTS_NAMESPACE);
var $appBar = this.root._$viewPort.find(".dx-app-bar");
if (e.originalEvent.button === 2) {
this._toggleAppBarState()
}
else if (!this._moveEvent && $appBar[0] && !$appBar[0].contains(e.target)) {
this._toggleAppBarState(false)
}
this._moveEvent = false
}, _keyDownHandler: function(e) {
if (e.keyCode === KEYCODE_WIN) {
this._winKeyPressed = true
}
}, _keyUpHandler: function(e) {
if (this._winKeyPressed && (e.keyCode === KEYCODE_Z)) {
this._toggleAppBarState()
}
else if (e.keyCode === KEYCODE_WIN) {
this._winKeyPressed = false
}
}, _toggleAppBarState: function(state) {
if (!this.root._appBarHasCommands())
return;
this.root._$viewPort.find(".dx-app-bar").toggleClass("dx-app-bar-visible", !this._appbarBehavior || state)
}, _isVerticalDirection: function(x, y) {
return Math.abs(y - this._startTouchPoint.y) > Math.abs(x - this._startTouchPoint.x)
}, _isTouch: function(event) {
return event.pointerType === event.MSPOINTER_TYPE_TOUCH || event.pointerType === event.MSPOINTER_TYPE_PEN
}, _startedInAppBarArea: function(event) {
return (this.root._$viewPort.height() - APPBAR_TOUCH_AREA_HEIGHT) < event.clientY
}, _thresholdExceeded: function(originalEvent) {
return originalEvent.clientY < (this._startTouchPoint.y - APPBAR_TOUCH_THRESHOLD)
ctor: function(splitLayout) {
this.root = splitLayout;
},
init: function() {
this.root._$viewPort.on(POINTER_UP_EVENT_NAME + EVENTS_NAMESPACE, $.proxy(this._pointerUpHandler, this));
this.root._$viewPort.on(POINTER_DOWN_EVENT_NAME + EVENTS_NAMESPACE, $.proxy(this._pointerDownHandler, this));
$(document).on("keydown" + EVENTS_NAMESPACE, $.proxy(this._keyDownHandler, this));
$(document).on("keyup" + EVENTS_NAMESPACE, $.proxy(this._keyUpHandler, this));
this._startTouchPoint = false;
this._winKeyPressed = false;
this._moveEvent = false;
this._appBarBehavior = true;
},
_pointerDownHandler: function(e) {
var originalEvent = e.originalEvent;
if (this._isTouch(originalEvent) && this._startedInAppBarArea(originalEvent)) {
this._startTouchPoint = {
x: originalEvent.clientX,
y: originalEvent.clientY
};
this.root._$viewPort.on(POINTER_MOVE_EVENT_NAME + EVENTS_NAMESPACE, $.proxy(this._pointerMoveHandler, this));
}
},
_pointerMoveHandler: function(e) {
var originalEvent = e.originalEvent;
if (this._thresholdExceeded(originalEvent)) {
this._moveEvent = true;
this.root._$viewPort.off(POINTER_MOVE_EVENT_NAME + EVENTS_NAMESPACE);
if (this._isVerticalDirection(originalEvent.clientX, originalEvent.clientY)) {
this._toggleAppBarState(true);
}
});
}
},
_pointerUpHandler: function(e) {
this.root._$viewPort.off(POINTER_MOVE_EVENT_NAME + EVENTS_NAMESPACE);
var $appBar = this.root._$viewPort.find(".dx-app-bar");
if (e.originalEvent.button === 2) {
this._toggleAppBarState();
} else if (!this._moveEvent && $appBar[0] && !$appBar[0].contains(e.target)) {
this._toggleAppBarState(false);
}
this._moveEvent = false;
},
_keyDownHandler: function(e) {
if (e.keyCode === KEYCODE_WIN) {
this._winKeyPressed = true;
}
},
_keyUpHandler: function(e) {
if (this._winKeyPressed && (e.keyCode === KEYCODE_Z)) {
this._toggleAppBarState();
} else if (e.keyCode === KEYCODE_WIN) {
this._winKeyPressed = false;
}
},
_toggleAppBarState: function(state) {
if (!this.root._appBarHasCommands()) {
return;
}
this.root._$viewPort.find(".dx-app-bar").toggleClass("dx-app-bar-visible", !this._appBarBehavior || state);
},
_isVerticalDirection: function(x, y) {
return Math.abs(y - this._startTouchPoint.y) > Math.abs(x - this._startTouchPoint.x);
},
_isTouch: function(event) {
return event.pointerType === event.MSPOINTER_TYPE_TOUCH ||
event.pointerType === event.MSPOINTER_TYPE_PEN;
},
_startedInAppBarArea: function(event) {
return (this.root._$viewPort.height() - APPBAR_TOUCH_AREA_HEIGHT) < event.clientY;
},
_thresholdExceeded: function(originalEvent) {
return originalEvent.clientY < (this._startTouchPoint.y - APPBAR_TOUCH_THRESHOLD);
}
});
var MultipaneLayoutController = DefaultLayoutController.inherit({
ctor: function(options) {
options = options || {};
options.name = options.name || "split";
this._detailPaneName = options.detailPaneName || "detail";
this._masterPaneName = options.masterPaneName || "master";
options.defaultPaneName = this._detailPaneName;
this.callBase(options);
this._panesConfig = options.panesConfig;
this._activeViews = {};
this._stateStorageKey = "dxSplitLayoutState"
}, init: function(options) {
options = options || {};
this.callBase(options);
this._router = options.app && options.app.router;
this._onNavigatingHandler = $.proxy(this._onNavigating, this);
this._onNavigatedHandler = $.proxy(this._onNavigated, this);
this._navigationManager = options.navigationManager;
this._ensurePanesConfig();
this._initChildControllers(options)
}, activate: function() {
var tasks = [];
this.callBase();
this._navigationManager.on("navigating", this._onNavigatingHandler);
this._navigationManager.on("navigated", this._onNavigatedHandler);
this._navigationManager.on("navigatingBack", this._onNavigatingBackHandler);
$.each(this._panesConfig, function(_, paneConfig) {
tasks.push(paneConfig.controller.activate())
});
return $.when.apply($, tasks)
}, deactivate: function() {
var that = this,
tasks = [];
$.each(this._panesConfig, function(_, paneConfig) {
tasks.push(paneConfig.controller.deactivate())
});
this._navigationManager.off("navigating", this._onNavigatingHandler);
this._navigationManager.off("navigated", this._onNavigatedHandler);
this.callBase();
return $.when.apply($, tasks).done(function() {
that._activeViews = {}
})
}, showView: function(viewInfo, direction) {
var that = this,
paneConfig = that._getPaneConfig(viewInfo);
return paneConfig.controller.showView(viewInfo, direction).done(function() {
that._activeViews[that._getViewPaneName(viewInfo.viewTemplateInfo)] = viewInfo
})
}, activeViewInfo: function() {
return this._activeViews[this._masterPaneName]
}, _updateLayoutTitle: function(viewInfo, defaultTitle) {
if (this._getViewPaneName(viewInfo.viewTemplateInfo) === this._masterPaneName) {
var title;
if (viewInfo.model !== undefined) {
title = ko.utils.unwrapObservable(viewInfo.model.title)
}
else {
title = (viewInfo.viewTemplateInfo || {}).title
}
this._layoutModel.title(title || defaultTitle || "")
}
}, _ensurePanesConfig: function() {
if (!this._panesConfig) {
this._panesConfig = this._createPanesConfig()
}
}, _createPanesConfig: function() {
return {}
}, _initChildControllers: function(options) {
var that = this;
$.each(that._panesConfig, function(_, paneConfig) {
var controller = paneConfig.controller;
controller.init($.extend({}, options, {$viewPort: that._$mainLayout.find(paneConfig.selector)}));
$.each(["viewRendered", "viewShowing", "viewReleased", "viewHidden"], function(_, callbacksPropertyName) {
controller.on(callbacksPropertyName, function(args) {
that.fireEvent(callbacksPropertyName, [args])
})
})
})
}, _onNavigating: function(args) {
var options = args.options,
$sourceElement = this._getEventSourceElement(args.options.jQueryEvent);
var routeValues = this._router.parse(args.uri),
viewTemplateInfo = this._viewEngine.getViewTemplateInfo(routeValues.view).option(),
pane = this._getViewPaneName(viewTemplateInfo);
if (pane === this._detailPaneName) {
options.stack = this._detailPaneName + "_pane";
options.root = options.root === undefined ? $sourceElement.is(this._panesConfig[this._masterPaneName].selector + " *") : options.root;
options.keepPositionInStack = false
}
else {
options.stack = options.stack || this._masterPaneCurrentStackKey
}
args.options.pane = pane
}, _onNavigated: function(args) {
if (args.options.pane === this._masterPaneName) {
this._masterPaneCurrentStackKey = this._navigationManager.currentStackKey
}
}, _getEventSourceElement: function(jQueryEvent) {
return jQueryEvent ? $(jQueryEvent.target) : $()
}, _getPaneConfig: function(viewInfo) {
return this._panesConfig[this._getViewPaneName(viewInfo.viewTemplateInfo)]
}, _getViewPaneName: function(viewTemplateInfo) {
return viewTemplateInfo.pane || this._detailPaneName
}, _raiseEvent: function(callback) {
callback.fire()
}, _ensureChildController: function(controller, layoutName) {
if (!controller) {
throw new Error(layoutName + "Controller is not found but it is required by the '" + this.name + "' layout for specified platform and device. Make sure the " + layoutName + ".* files are referenced in your main *.html file or specify other platform and device.");
}
}, saveState: function(storage) {
var state = {};
$.each(this._activeViews, function(pane, viewInfo) {
state[pane] = {
uri: viewInfo.uri, stack: viewInfo.navigateOptions.stack
}
});
var json = JSON.stringify(state);
storage.setItem(this._stateStorageKey, json)
}, restoreState: function(storage) {
var json = storage.getItem(this._stateStorageKey);
if (json) {
try {
var that = this,
state = JSON.parse(json);
$.each(state, function(pane, navigateOptions) {
that._navigationManager.navigate(navigateOptions.uri, {
stack: navigateOptions.stack, target: 'current'
})
})
}
catch(e) {
this.removeState(storage);
throw errors.Error("E3007");
}
}
}, removeState: function(storage) {
storage.removeItem(this._stateStorageKey)
ctor: function(options) {
options = options || {};
options.name = options.name || "split";
this._detailPaneName = options.detailPaneName || "detail";
this._masterPaneName = options.masterPaneName || "master";
options.defaultPaneName = this._detailPaneName;
this.callBase(options);
this._panesConfig = options.panesConfig;
this._activeViews = {};
this._stateStorageKey = "dxSplitLayoutState";
},
init: function(options) {
options = options || {};
this.callBase(options);
this._router = options.app && options.app.router;
this._onNavigatingHandler = $.proxy(this._onNavigating, this);
this._onNavigatedHandler = $.proxy(this._onNavigated, this);
this._navigationManager = options.navigationManager;
this._ensurePanesConfig();
this._initChildControllers(options);
},
activate: function() {
var tasks = [];
this.callBase();
this._navigationManager.on("navigating", this._onNavigatingHandler);
this._navigationManager.on("navigated", this._onNavigatedHandler);
this._navigationManager.on("navigatingBack", this._onNavigatingBackHandler);
$.each(this._panesConfig, function(_, paneConfig) {
tasks.push(paneConfig.controller.activate());
});
return $.when.apply($, tasks);
},
deactivate: function() {
var that = this,
tasks = [];
$.each(this._panesConfig, function(_, paneConfig) {
tasks.push(paneConfig.controller.deactivate());
});
this._navigationManager.off("navigating", this._onNavigatingHandler);
this._navigationManager.off("navigated", this._onNavigatedHandler);
this.callBase();
return $.when.apply($, tasks).done(function() {
that._activeViews = {};
});
},
showView: function(viewInfo, direction) {
var that = this,
paneConfig = that._getPaneConfig(viewInfo);
var paneName = that._getViewPaneName(viewInfo.viewTemplateInfo);
if (!this._masterPaneCurrentStackKey && paneName === this._masterPaneName) {
this._masterPaneCurrentStackKey = viewInfo.navigateOptions.stack;
}
return paneConfig.controller.showView(viewInfo, direction).done(function() {
that._activeViews[that._getViewPaneName(viewInfo.viewTemplateInfo)] = viewInfo;
});
},
activeViewInfo: function() {
return this._activeViews[this._masterPaneName];
},
_updateLayoutTitle: function(viewInfo, defaultTitle) {
if (this._getViewPaneName(viewInfo.viewTemplateInfo) === this._masterPaneName) {
var title;
if (viewInfo.model !== undefined) {
title = ko.utils.unwrapObservable(viewInfo.model.title);
} else {
title = (viewInfo.viewTemplateInfo || {}).title;
}
});
var IOSSplitLayoutController = MultipaneLayoutController.inherit({_createPanesConfig: function() {
this._ensureChildController(SimpleLayoutControllerModule.SimpleLayoutController, "SimpleLayout");
return {
master: {
controller: new SimpleLayoutControllerModule.SimpleLayoutController, selector: ".master-pane"
}, detail: {
controller: new SimpleLayoutControllerModule.SimpleLayoutController, selector: ".detail-pane"
}
}
}});
var ToolbarController = Class.inherit({
ctor: function($toolbar, commandManager) {
this._commandManager = commandManager;
this._$toolbar = $toolbar;
this._toolbar = $toolbar.dxToolbar("instance");
this._commandContainer = $toolbar.dxCommandContainer("instance")
}, showViews: function(viewInfos) {
this._layoutModel.title(title || defaultTitle || "");
}
},
_ensurePanesConfig: function() {
if (!this._panesConfig) {
this._panesConfig = this._createPanesConfig();
}
},
_createPanesConfig: function() {
return {};
},
_initChildControllers: function(options) {
var that = this;
$.each(that._panesConfig, function(_, paneConfig) {
var controller = paneConfig.controller;
controller.init($.extend({}, options, {
$viewPort: that._$mainLayout.find(paneConfig.selector)
}));
$.each(["viewRendered", "viewShowing", "viewReleased", "viewHidden"], function(_, callbacksPropertyName) {
controller.on(callbacksPropertyName, function(args) {
that.fireEvent(callbacksPropertyName, [args]);
});
});
});
},
_onNavigating: function(args) {
var options = args.options,
$sourceElement = this._getEventSourceElement(args.options.jQueryEvent);
var routeValues = this._router.parse(args.uri),
viewTemplateInfo = this._viewEngine.getViewTemplateInfo(routeValues.view).option(),
pane = this._getViewPaneName(viewTemplateInfo);
if (pane === this._detailPaneName) {
options.stack = this._detailPaneName + "_pane";
options.root = options.root === undefined ? $sourceElement.is(this._panesConfig[this._masterPaneName].selector + " *") : options.root;
options.keepPositionInStack = false;
} else {
options.stack = options.stack || this._masterPaneCurrentStackKey;
}
args.options.pane = pane;
},
_onNavigated: function(args) {
if (args.options.pane === this._masterPaneName) {
this._masterPaneCurrentStackKey = this._navigationManager.currentStackKey;
}
},
_getEventSourceElement: function(jQueryEvent) {
return jQueryEvent ? $(jQueryEvent.target) : $();
},
_getPaneConfig: function(viewInfo) {
return this._panesConfig[this._getViewPaneName(viewInfo.viewTemplateInfo)];
},
_getViewPaneName: function(viewTemplateInfo) {
return viewTemplateInfo.pane || this._detailPaneName;
},
_raiseEvent: function(callback) {
callback.fire();
},
_ensureChildController: function(controller, layoutName) {
if (!controller) {
throw new Error(layoutName + "Controller is not found but it is required by the '" + this.name + "' layout for specified platform and device. Make sure the " + layoutName + ".* files are referenced in your main *.html file or specify other platform and device.");
}
},
saveState: function(storage) {
var state = {};
$.each(this._activeViews, function(pane, viewInfo) {
state[pane] = {
uri: viewInfo.uri,
stack: viewInfo.navigateOptions.stack
};
});
var json = JSON.stringify(state);
storage.setItem(this._stateStorageKey, json);
},
restoreState: function(storage) {
var json = storage.getItem(this._stateStorageKey);
if (json) {
try {
var that = this,
commands = this._mergeCommands(viewInfos),
toolbarItems = that._toolbar.option("items");
var newItems = $.map(toolbarItems, function(item) {
return item.command ? undefined : item
state = JSON.parse(json);
$.each(state, function(pane, navigateOptions) {
that._navigationManager.navigate(navigateOptions.uri, {
stack: navigateOptions.stack,
target: 'current'
});
that._toolbar.option("items", newItems);
fx.off = true;
that._commandManager.renderCommandsToContainers(commands, [that._commandContainer]);
fx.off = false
}, _mergeCommands: function(viewInfos) {
var result = [],
idHash = {};
$.each(viewInfos, function(_, viewInfo) {
if (viewInfo.commands) {
$.each(viewInfo.commands, function(_, command) {
var id = command.option("id");
if (!(id in idHash)) {
idHash[id] = true;
result.push(command)
}
})
});
} catch (e) {
this.removeState(storage);
throw errors.Error("E3007");
}
}
},
removeState: function(storage) {
storage.removeItem(this._stateStorageKey);
}
});
var IOSSplitLayoutController = MultipaneLayoutController.inherit({
_createPanesConfig: function() {
return {
master: {
controller: new SimpleLayoutControllerModule.SimpleLayoutController(),
selector: ".master-pane"
},
detail: {
controller: new SimpleLayoutControllerModule.SimpleLayoutController(),
selector: ".detail-pane"
}
};
}
});
var ToolbarController = Class.inherit({
ctor: function($toolbar, commandManager) {
this._commandManager = commandManager;
this._$toolbar = $toolbar;
this._toolbar = $toolbar.dxToolbar("instance");
this._commandContainer = $toolbar.dxCommandContainer("instance");
},
showViews: function(viewInfos) {
var that = this,
commands = this._mergeCommands(viewInfos),
toolbarItems = that._toolbar.option("items");
var newItems = $.map(toolbarItems, function(item) {
return item.command ? undefined : item;
});
that._toolbar.option("items", newItems);
fx.off = true;
that._commandManager.renderCommandsToContainers(commands, [that._commandContainer]);
fx.off = false;
},
_mergeCommands: function(viewInfos) {
var result = [],
idHash = {};
$.each(viewInfos, function(_, viewInfo) {
if (viewInfo.commands) {
$.each(viewInfo.commands, function(_, command) {
var id = command.option("id");
if (!(id in idHash)) {
idHash[id] = true;
result.push(command);
}
});
return result
}
});
});
return result;
}
});
var AndroidSplitLayoutController = MultipaneLayoutController.inherit({
ctor: function(options) {
options = options || {};
options.layoutModel = options.layoutModel || this._createLayoutModel();
this.callBase(options)
}, init: function(options) {
this.callBase(options);
this.toolbarController = new ToolbarController(this._$mainLayout.find(".header-toolbar"), this._commandManager)
}, _createLayoutModel: function() {
return {title: ko.observable("")}
}, showView: function(viewInfo, direction) {
var that = this;
that._updateLayoutTitle(viewInfo);
return that.callBase(viewInfo, direction).done(function() {
that.toolbarController.showViews(that._activeViews)
})
}, _createPanesConfig: function() {
this._ensureChildController(EmptyLayoutControllerModule.EmptyLayoutController, "EmptyLayout");
return {
master: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController, selector: ".master-pane"
}, detail: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController, selector: ".detail-pane"
}
}
ctor: function(options) {
options = options || {};
options.layoutModel = options.layoutModel || this._createLayoutModel();
this.callBase(options);
},
init: function(options) {
this.callBase(options);
this.toolbarController = new ToolbarController(this._$mainLayout.find(".header-toolbar"), this._commandManager);
},
_createLayoutModel: function() {
return {
title: ko.observable("")
};
},
showView: function(viewInfo, direction) {
var that = this;
that._updateLayoutTitle(viewInfo);
return that.callBase(viewInfo, direction).done(function() {
that.toolbarController.showViews(that._activeViews);
});
},
_createPanesConfig: function() {
return {
master: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController(),
selector: ".master-pane"
},
detail: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController(),
selector: ".detail-pane"
}
});
};
}
});
var WinSplitLayoutController = MultipaneLayoutController.inherit({
ctor: function(options) {
options = options || {};
this._eventHelper = new SplitLayoutEventHelper(this);
options.layoutModel = options.layoutModel || this._createLayoutModel();
this.callBase(options)
}, init: function(options) {
this.callBase(options);
this._eventHelper.init();
this.headerToolbarController = new ToolbarController(this._$mainLayout.find(".header-toolbar"), this._commandManager)
}, showView: function(viewInfo, direction) {
var that = this;
that._updateLayoutTitle(viewInfo);
return that.callBase(viewInfo, direction).done(function() {
that.headerToolbarController.showViews(that._activeViews)
})
}, _createLayoutModel: function() {
return {title: ko.observable("")}
}, _createPanesConfig: function() {
this._ensureChildController(EmptyLayoutControllerModule.EmptyLayoutController, "EmptyLayout");
return {
master: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController, selector: ".left-content"
}, detail: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController, selector: ".right-content"
}
}
}, _appBarHasCommands: function() {
var footerToolbar = this._$viewPort.find(".footer-toolbar").data("dxToolbar");
return footerToolbar ? footerToolbar.option("items").length : false
ctor: function(options) {
options = options || {};
this._eventHelper = new SplitLayoutEventHelper(this);
options.layoutModel = options.layoutModel || this._createLayoutModel();
this.callBase(options);
},
init: function(options) {
this.callBase(options);
this._eventHelper.init();
this.headerToolbarController = new ToolbarController(this._$mainLayout.find(".header-toolbar"), this._commandManager);
},
showView: function(viewInfo, direction) {
var that = this;
that._updateLayoutTitle(viewInfo);
return that.callBase(viewInfo, direction).done(function() {
that.headerToolbarController.showViews(that._activeViews);
});
},
_createLayoutModel: function() {
return {
title: ko.observable("")
};
},
_createPanesConfig: function() {
return {
master: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController(),
selector: ".left-content"
},
detail: {
controller: new EmptyLayoutControllerModule.EmptyLayoutController(),
selector: ".right-content"
}
});
};
},
_appBarHasCommands: function() {
var footerToolbar = this._$viewPort.find(".footer-toolbar").data("dxToolbar");
return footerToolbar ? footerToolbar.option("items").length : false;
}
});
var Win8SplitLayoutController = WinSplitLayoutController.inherit({
init: function(options) {
this.callBase(options);
this.footerToolbarController = new ToolbarController(this._$mainLayout.find(".footer-toolbar"), this._commandManager)
}, showView: function(viewInfo, direction) {
var that = this;
return that.callBase(viewInfo, direction).done(function() {
that.footerToolbarController.showViews(that._activeViews)
})
}
});
init: function(options) {
this.callBase(options);
this.footerToolbarController = new ToolbarController(this._$mainLayout.find(".footer-toolbar"), this._commandManager);
},
showView: function(viewInfo, direction) {
var that = this;
return that.callBase(viewInfo, direction).done(function() {
that.footerToolbarController.showViews(that._activeViews);
});
},
});
layoutSets["split"] = layoutSets["split"] || [];
layoutSets["split"].push({
platform: "ios", tablet: true, controller: new IOSSplitLayoutController
platform: "ios",
tablet: true,
controller: new IOSSplitLayoutController()
});
layoutSets["split"].push({
platform: "android", tablet: true, controller: new AndroidSplitLayoutController
platform: "android",
tablet: true,
controller: new AndroidSplitLayoutController()
});
layoutSets["split"].push({
platform: "generic", tablet: true, controller: new IOSSplitLayoutController
platform: "generic",
tablet: true,
controller: new IOSSplitLayoutController()
});
layoutSets["split"].push({
platform: "win", phone: false, controller: new WinSplitLayoutController
platform: "win",
phone: false,
controller: new WinSplitLayoutController()
});
layoutSets["split"].push({
platform: "win", version: [8], phone: false, controller: new Win8SplitLayoutController
platform: "win",
version: [8],
phone: false,
controller: new Win8SplitLayoutController()
});
exports.MultipaneLayoutController = MultipaneLayoutController;
exports.IOSSplitLayoutController = IOSSplitLayoutController;
exports.ToolbarController = ToolbarController;
exports.AndroidSplitLayoutController = AndroidSplitLayoutController;
exports.WinSplitLayoutController = WinSplitLayoutController;
exports.Win8SplitLayoutController = Win8SplitLayoutController;
return exports
return exports;
}));