70 lines
2.5 KiB
JavaScript
Executable File
70 lines
2.5 KiB
JavaScript
Executable File
'use strict';
|
|
/**
|
|
* Make element 100% height of browser window.
|
|
*/
|
|
app.directive('ctFullheight', ['$window', '$rootScope', '$timeout', 'APP_MEDIAQUERY',
|
|
function ($window, $rootScope, $timeout, mq) {
|
|
return {
|
|
restrict: "AE",
|
|
scope: {
|
|
ctFullheightIf: '&'
|
|
},
|
|
link: function (scope, elem, attrs) {
|
|
var $win = $($window);
|
|
var $document = $(document);
|
|
var exclusionItems;
|
|
var exclusionHeight;
|
|
var setHeight = true;
|
|
var page;
|
|
|
|
scope.initializeWindowSize = function () {
|
|
$timeout(function () {
|
|
exclusionHeight = 0;
|
|
if (attrs.ctFullheightIf) {
|
|
scope.$watch(scope.ctFullheightIf, function (newVal, oldVal) {
|
|
if (newVal && !oldVal) {
|
|
setHeight = true;
|
|
} else if (!newVal) {
|
|
$(elem).css('height', 'auto');
|
|
setHeight = false;
|
|
}
|
|
});
|
|
}
|
|
|
|
if (attrs.ctFullheightExclusion) {
|
|
var exclusionItems = attrs.ctFullheightExclusion.split(',');
|
|
angular.forEach(exclusionItems, function (_element) {
|
|
exclusionHeight = exclusionHeight + $(_element).outerHeight(true);
|
|
});
|
|
}
|
|
if (attrs.ctFullheight == 'window') {
|
|
page = $win;
|
|
} else {
|
|
page = $document;
|
|
}
|
|
|
|
scope.$watch(function () {
|
|
scope.__height = page.height();
|
|
});
|
|
if (setHeight) {
|
|
$(elem).css('height', 'auto');
|
|
if (page.innerHeight() < $win.innerHeight()) {
|
|
page = $win;
|
|
}
|
|
$(elem).css('height', page.innerHeight() - exclusionHeight);
|
|
}
|
|
}, 300);
|
|
};
|
|
|
|
scope.initializeWindowSize();
|
|
scope.$watch('__height', function (newHeight, oldHeight) {
|
|
scope.initializeWindowSize();
|
|
});
|
|
$win.on('resize', function () {
|
|
scope.initializeWindowSize();
|
|
});
|
|
|
|
}
|
|
};
|
|
}]);
|