full-height.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. 'use strict';
  2. /**
  3. * Make element 100% height of browser window.
  4. */
  5. app.directive('ctFullheight', ['$window', '$rootScope', '$timeout', 'APP_MEDIAQUERY',
  6. function ($window, $rootScope, $timeout, mq) {
  7. return {
  8. restrict: "AE",
  9. scope: {
  10. ctFullheightIf: '&'
  11. },
  12. link: function (scope, elem, attrs) {
  13. var $win = $($window);
  14. var $document = $(document);
  15. var exclusionItems;
  16. var exclusionHeight;
  17. var setHeight = true;
  18. var page;
  19. scope.initializeWindowSize = function () {
  20. $timeout(function () {
  21. exclusionHeight = 0;
  22. if (attrs.ctFullheightIf) {
  23. scope.$watch(scope.ctFullheightIf, function (newVal, oldVal) {
  24. if (newVal && !oldVal) {
  25. setHeight = true;
  26. } else if (!newVal) {
  27. $(elem).css('height', 'auto');
  28. setHeight = false;
  29. }
  30. });
  31. }
  32. if (attrs.ctFullheightExclusion) {
  33. var exclusionItems = attrs.ctFullheightExclusion.split(',');
  34. angular.forEach(exclusionItems, function (_element) {
  35. exclusionHeight = exclusionHeight + $(_element).outerHeight(true);
  36. });
  37. }
  38. if (attrs.ctFullheight == 'window') {
  39. page = $win;
  40. } else {
  41. page = $document;
  42. }
  43. scope.$watch(function () {
  44. scope.__height = page.height();
  45. });
  46. if (setHeight) {
  47. $(elem).css('height', 'auto');
  48. if (page.innerHeight() < $win.innerHeight()) {
  49. page = $win;
  50. }
  51. $(elem).css('height', page.innerHeight() - exclusionHeight);
  52. }
  53. }, 300);
  54. };
  55. scope.initializeWindowSize();
  56. scope.$watch('__height', function (newHeight, oldHeight) {
  57. scope.initializeWindowSize();
  58. });
  59. $win.on('resize', function () {
  60. scope.initializeWindowSize();
  61. });
  62. }
  63. };
  64. }]);