'use strict'; // minimum margin of content to bottom of page var marginBottom = 50; // DOM-element of var page = void 0; // all dom elements var elements = void 0; /** * gets all DOM-elements on page * @return {HTMLElement[]} DOM-elements */ var getAllDOMElements = function getAllDOMElements() { elements = document.getElementsByTagName('*'); }; /** * gets DOM-element of #resumeX * @return {HTMLElement} */ var getResumeDOMElement = function getResumeDOMElement() { return page.children[0]; }; /** * sets letiable 'page' to DOM-element of */ var setPageDOMElement = function setPageDOMElement() { page = document.getElementsByTagName('page')[0]; }; /** * checks whether font needs to be fixed, and if fixes it */ var checkFont = function checkFont() { var resume = getResumeDOMElement(); if (contentIsGreaterThanPage(resume)) fixFont(); }; /** * checks whether content is greater than page * @param {HTMLElement} resume * @return {boolean} false if content fits to page */ var contentIsGreaterThanPage = function contentIsGreaterThanPage(resume) { var pageHeight = page.offsetHeight; var resumeHeight = resume.offsetHeight + marginBottom; if (pageHeight < resumeHeight) return true;else return false; }; /** * gets font size of DOM-elemnt * @param {HTMLElement} element * @return {number} font size of element */ var getFontSizeOfElement = function getFontSizeOfElement(element) { var style = window.getComputedStyle(element, null).getPropertyValue('font-size'); return parseFloat(style); }; /** * sets font size of DOM-element * @param {HTMLElement} element * @param {number} fontSize */ var setFontSizeOfElement = function setFontSizeOfElement(element, fontSize) { element.style.fontSize = fontSize + 'px'; }; /** * decreases font size of all DOM-elements */ var decreaseFontSizes = function decreaseFontSizes() { var current = void 0, newFontSize = void 0; for (var i = 0; i < elements.length; i++) { current = elements[i]; newFontSize = getFontSizeOfElement(current) * 0.99; setFontSizeOfElement(current, newFontSize); } }; /** * decreases font size until content fits to page */ var fixFont = function fixFont() { decreaseFontSizes(); var resume = getResumeDOMElement(); if (contentIsGreaterThanPage(resume)) fixFont(); }; /** * checks if DOM-element has box-shadow * @param {HTMLElement} element * @return {string} '' if no shadow, otherwise shadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px' */ var hasBoxShadow = function hasBoxShadow(element) { var style = window.getComputedStyle(element, null).getPropertyValue('box-shadow'); if (style != 'none') return style;else return ''; }; /** * gets absolute position of element * @param {HTMLElement} element * @return {{}} */ var getAbsolutePositionOfElement = function getAbsolutePositionOfElement(element) { return { top: element.getBoundingClientRect().top, left: element.getBoundingClientRect().left }; }; /** * removes box shadow from element * @param {HTMLElement} element */ var removeBoxShadowOfElement = function removeBoxShadowOfElement(element) { element.style.boxShadow = 'none'; }; /** * gets border radius of element * @param {HTMLElement} element * @return {String} e.g. '50%' */ var getBorderRadiusOfElement = function getBorderRadiusOfElement(element) { return window.getComputedStyle(element, null).getPropertyValue('border-radius'); }; /** * adds new box shadow * @param {HTMLElement} element * @param {{}} position e.g. { left: 10, top: 100} * @param {string} boxShadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px' */ var addNewBoxShadow = function addNewBoxShadow(element, position, boxShadow) { var div = document.createElement('div'); div.style.height = element.offsetHeight; div.style.width = element.offsetWidth; div.style.borderRadius = getBorderRadiusOfElement(element); div.style.position = 'absolute'; div.style.boxShadow = boxShadow; div.style.webkitPrintColorAdjust = 'exact'; div.style.webkitFilter = 'opacity(1)'; div.style.top = position.top; div.style.left = position.left; document.getElementsByTagName('body')[0].appendChild(div); }; /** * fixes box shadow of element * @param {HTMLElement} element * @param {string} boxShadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px' */ var fixBoxShadow = function fixBoxShadow(element, boxShadow) { var position = getAbsolutePositionOfElement(element); removeBoxShadowOfElement(element); addNewBoxShadow(element, position, boxShadow); }; /** * gets all elements with shadows * @return {HTMLElement[]} elements with shadows */ var getElementsWithShadows = function getElementsWithShadows() { var current = void 0, boxShadow = void 0; var ret = []; for (var i = 0; i < elements.length; i++) { current = elements[i]; boxShadow = hasBoxShadow(current); if (hasBoxShadow(current) != '') ret.push({ element: current, shadow: boxShadow }); } return ret; }; /** * fixes shadows, since normal box-shadow cannot be printed in chrome, * see: http://stackoverflow.com/questions/13975198/text-shadow-and-box-shadow-while-printing-chrome */ var fixBoxShadows = function fixBoxShadows() { var elementsWithShadow = getElementsWithShadows(); for (var i = 0; i < elementsWithShadow.length; i++) { fixBoxShadow(elementsWithShadow[i].element, elementsWithShadow[i].shadow); } }; var isResume = function isResume() { if (document.getElementsByTagName('page')[0]) return true;else return false; }; var fixResume = function fixResume() { if (!isResume()) return; getAllDOMElements(); fixBoxShadows(); setPageDOMElement(); checkFont(); }; fixResume();