devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
79 lines (61 loc) • 2.04 kB
JavaScript
var windowUtils = require("./window"),
domAdapter = require("../dom_adapter"),
Callbacks = require("./callbacks"),
readyCallbacks = require("./ready_callbacks"),
callOnce = require("./call_once");
var resizeCallbacks = function () {
var prevSize,
callbacks = Callbacks(),
originalCallbacksAdd = callbacks.add,
originalCallbacksRemove = callbacks.remove;
if (!windowUtils.hasWindow()) {
return callbacks;
}
var formatSize = function formatSize() {
var documentElement = domAdapter.getDocumentElement();
return {
width: documentElement.clientWidth,
height: documentElement.clientHeight
};
};
var handleResize = function handleResize() {
var now = formatSize();
if (now.width === prevSize.width && now.height === prevSize.height) {
return;
}
var changedDimension;
if (now.width === prevSize.width) {
changedDimension = 'height';
}
if (now.height === prevSize.height) {
changedDimension = 'width';
}
prevSize = now;
callbacks.fire(changedDimension);
};
var setPrevSize = callOnce(function () {
prevSize = formatSize();
});
var removeListener;
callbacks.add = function () {
var result = originalCallbacksAdd.apply(callbacks, arguments);
setPrevSize();
readyCallbacks.add(function () {
if (!removeListener && callbacks.has()) {
removeListener = domAdapter.listen(windowUtils.getWindow(), "resize", handleResize);
}
});
return result;
};
callbacks.remove = function () {
var result = originalCallbacksRemove.apply(callbacks, arguments);
if (!callbacks.has() && removeListener) {
removeListener();
removeListener = undefined;
}
return result;
};
return callbacks;
}();
module.exports = resizeCallbacks;
;