diff --git a/README.md b/README.md index 08915db..4277c80 100755 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ A collection of multiple beautiful resumes build with LESS and Mustache Template ## Resumes + diff --git a/pdf/resume-grey-boxes.pdf b/pdf/resume-grey-boxes.pdf index 3551082..6c6a02b 100755 Binary files a/pdf/resume-grey-boxes.pdf and b/pdf/resume-grey-boxes.pdf differ diff --git a/pdf/resume-left-right.pdf b/pdf/resume-left-right.pdf index e4411a4..e462a68 100755 Binary files a/pdf/resume-left-right.pdf and b/pdf/resume-left-right.pdf differ diff --git a/pdf/resume-material-blue.pdf b/pdf/resume-material-blue.pdf index ef8cf73..b549201 100755 Binary files a/pdf/resume-material-blue.pdf and b/pdf/resume-material-blue.pdf differ diff --git a/pdf/resume-material-dark.pdf b/pdf/resume-material-dark.pdf new file mode 100644 index 0000000..2fe5e76 Binary files /dev/null and b/pdf/resume-material-dark.pdf differ diff --git a/pdf/resume-oblique.pdf b/pdf/resume-oblique.pdf index d99d989..4325d7c 100755 Binary files a/pdf/resume-oblique.pdf and b/pdf/resume-oblique.pdf differ diff --git a/pdf/resume-side-bar.pdf b/pdf/resume-side-bar.pdf index 688c23f..e12755a 100755 Binary files a/pdf/resume-side-bar.pdf and b/pdf/resume-side-bar.pdf differ diff --git a/pdf/resume-spotify.pdf b/pdf/resume-spotify.pdf index ab7127d..4fb34a6 100755 Binary files a/pdf/resume-spotify.pdf and b/pdf/resume-spotify.pdf differ diff --git a/public/js/gen/javascript.js b/public/js/gen/javascript.js index e187a12..ab47485 100755 --- a/public/js/gen/javascript.js +++ b/public/js/gen/javascript.js @@ -5,7 +5,7 @@ * @return {HTMLElement[]} DOM-elements */ var getAllDOMElements = function getAllDOMElements() { - return document.getElementsByTagName('*'); + return document.getElementsByTagName('*'); }; /** @@ -14,7 +14,7 @@ var getAllDOMElements = function getAllDOMElements() { * @return {HTMLElement} */ var getResumeDOMElement = function getResumeDOMElement(page) { - return page.children[0]; + return page.children[0]; }; /** @@ -22,7 +22,7 @@ var getResumeDOMElement = function getResumeDOMElement(page) { * @return {HTMLElement} */ var getPageDOMElement = function getPageDOMElement() { - return document.getElementsByTagName('page')[0]; + return document.getElementsByTagName('page')[0]; }; /** @@ -31,7 +31,7 @@ var getPageDOMElement = function getPageDOMElement() { * @return {boolean} */ var autoFontEnabled = function autoFontEnabled(resume) { - return resume.hasAttribute('autofont'); + return resume.hasAttribute('autofont'); }; /** @@ -41,9 +41,9 @@ var autoFontEnabled = function autoFontEnabled(resume) { * @return {boolean} false if content fits to page */ var contentIsGreaterThanPage = function contentIsGreaterThanPage(resume, page) { - var pageHeight = page.offsetHeight; - var resumeHeight = resume.offsetHeight; - if (pageHeight < resumeHeight) return true;else return false; + var pageHeight = page.offsetHeight; + var resumeHeight = resume.offsetHeight; + if (pageHeight < resumeHeight) return true;else return false; }; /** @@ -52,8 +52,8 @@ var contentIsGreaterThanPage = function contentIsGreaterThanPage(resume, page) { * @return {number} font size of element */ var getFontSizeOfElement = function getFontSizeOfElement(element) { - var style = window.getComputedStyle(element, null).getPropertyValue('font-size'); - return parseFloat(style); + var style = window.getComputedStyle(element, null).getPropertyValue('font-size'); + return parseFloat(style); }; /** @@ -61,9 +61,9 @@ var getFontSizeOfElement = function getFontSizeOfElement(element) { * @param {HTMLElement[]} */ var calcNewFontSizes = function calcNewFontSizes(elements) { - return elements.map(function (el) { - return getFontSizeOfElement(el) * 0.99; - }); + return elements.map(function (el) { + return getFontSizeOfElement(el) * 0.99; + }); }; /** @@ -72,8 +72,8 @@ var calcNewFontSizes = function calcNewFontSizes(elements) { * @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 ''; + var style = window.getComputedStyle(element, null).getPropertyValue('box-shadow'); + if (style != 'none') return style;else return ''; }; /** @@ -82,10 +82,10 @@ var hasBoxShadow = function hasBoxShadow(element) { * @return {{}} */ var getAbsolutePositionOfElement = function getAbsolutePositionOfElement(element) { - return { - top: element.getBoundingClientRect().top, - left: element.getBoundingClientRect().left - }; + return { + top: element.getBoundingClientRect().top, + left: element.getBoundingClientRect().left + }; }; /** @@ -94,7 +94,7 @@ var getAbsolutePositionOfElement = function getAbsolutePositionOfElement(element * @return {string} e.g. '50%' */ var getBorderRadiusOfElement = function getBorderRadiusOfElement(element) { - return window.getComputedStyle(element, null).getPropertyValue('border-radius'); + return window.getComputedStyle(element, null).getPropertyValue('border-radius'); }; /** @@ -104,17 +104,17 @@ var getBorderRadiusOfElement = function getBorderRadiusOfElement(element) { * @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); + 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); }; /** @@ -123,15 +123,15 @@ var addNewBoxShadow = function addNewBoxShadow(element, position, boxShadow) { * @return {HTMLElement[]} elements with shadows */ var getElementsWithShadows = function getElementsWithShadows(elements) { - var ar = [].slice.call(elements); - return ar.filter(function (el) { - return hasBoxShadow(el) != ''; - }).map(function (el) { - return { - element: el, - shadow: hasBoxShadow(el) - }; - }); + var ar = [].slice.call(elements); + return ar.filter(function (el) { + return hasBoxShadow(el) != ''; + }).map(function (el) { + return { + element: el, + shadow: hasBoxShadow(el) + }; + }); }; /** @@ -139,13 +139,13 @@ var getElementsWithShadows = function getElementsWithShadows(elements) { * see: http://stackoverflow.com/questions/13975198/text-shadow-and-box-shadow-while-printing-chrome */ var fixBoxShadows = function fixBoxShadows() { - var elements = getAllDOMElements(); - var elementsWithShadow = getElementsWithShadows(elements); - elementsWithShadow.forEach(function (element) { - var position = getAbsolutePositionOfElement(element.element); - element.element.style.boxShadow = 'none'; - addNewBoxShadow(element.element, position, element.shadow); - }); + var elements = getAllDOMElements(); + var elementsWithShadow = getElementsWithShadows(elements); + elementsWithShadow.forEach(function (element) { + var position = getAbsolutePositionOfElement(element.element); + element.element.style.boxShadow = 'none'; + addNewBoxShadow(element.element, position, element.shadow); + }); }; /** @@ -153,38 +153,39 @@ var fixBoxShadows = function fixBoxShadows() { * @return {Boolean} true if page contains resume */ var isResume = function isResume() { - if (document.getElementsByTagName('page')[0]) return true;else return false; + if (document.getElementsByTagName('page')[0]) return true;else return false; }; /** * checks whether font needs to be fixed, and if fixes it */ var checkFont = function checkFont() { - var page = getPageDOMElement(); - var resume = getResumeDOMElement(page); - var fixFont = function fixFont(resume, page) { - var elements = getAllDOMElements(); - var elementsAr = [].slice.call(elements); - var newFontSizes = calcNewFontSizes(elementsAr); - elementsAr.forEach(function (el, i) { - return el.style.fontSize = newFontSizes[i] + 'px'; - }); - if (contentIsGreaterThanPage(resume, page)) fixFont(resume, page); - }; - if (autoFontEnabled(resume) && contentIsGreaterThanPage(resume, page)) fixFont(resume, page); + var page = getPageDOMElement(); + var resume = getResumeDOMElement(page); + var fixFont = function fixFont(resume, page) { + var elements = getAllDOMElements(); + var elementsAr = [].slice.call(elements); + var newFontSizes = calcNewFontSizes(elementsAr); + elementsAr.forEach(function (el, i) { + return el.style.fontSize = newFontSizes[i] + 'px'; + }); + if (contentIsGreaterThanPage(resume, page)) fixFont(resume, page); + }; + if (autoFontEnabled(resume) && contentIsGreaterThanPage(resume, page)) fixFont(resume, page); }; var isElectron = function isElectron() { - return window && window.process && window.process.type; + return window && window.process && window.process.type; }; /** * fixes resume */ var fixResume = function fixResume() { - if (!isResume()) return; - checkFont(); - if (isElectron()) fixBoxShadows(); + console.log('aaaaaaa'); + if (!isResume()) return; + checkFont(); + if (isElectron()) fixBoxShadows(); }; fixResume(); diff --git a/public/js/gen/javascript.js.map b/public/js/gen/javascript.js.map index 8f24af5..0ad9829 100755 --- a/public/js/gen/javascript.js.map +++ b/public/js/gen/javascript.js.map @@ -1 +1 @@ -{"version":3,"sources":["../javascript.js"],"names":["getAllDOMElements","document","getElementsByTagName","getResumeDOMElement","page","children","getPageDOMElement","autoFontEnabled","resume","hasAttribute","contentIsGreaterThanPage","pageHeight","offsetHeight","resumeHeight","getFontSizeOfElement","style","window","getComputedStyle","element","getPropertyValue","parseFloat","calcNewFontSizes","elements","map","el","hasBoxShadow","getAbsolutePositionOfElement","top","getBoundingClientRect","left","getBorderRadiusOfElement","addNewBoxShadow","position","boxShadow","div","createElement","height","width","offsetWidth","borderRadius","webkitPrintColorAdjust","webkitFilter","appendChild","getElementsWithShadows","ar","slice","call","filter","shadow","fixBoxShadows","elementsWithShadow","forEach","isResume","checkFont","fixFont","elementsAr","newFontSizes","i","fontSize","isElectron","process","type","fixResume"],"mappings":"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","file":"javascript.js","sourcesContent":["/**\n * gets all DOM-elements on page\n * @return {HTMLElement[]} DOM-elements\n */\nconst getAllDOMElements = () => {\n return document.getElementsByTagName('*');\n};\n\n/**\n * gets DOM-element of #resumeX\n * @param {HTMLElement} page\n * @return {HTMLElement}\n */\nconst getResumeDOMElement = page => {\n return page.children[0];\n};\n\n/**\n * returns DOM-element of \n * @return {HTMLElement}\n */\nconst getPageDOMElement = () => {\n return document.getElementsByTagName('page')[0];\n};\n\n/**\n * checks whether auto-font adjustment is enabled for resume\n * @param {HTMLElement} resume\n * @return {boolean}\n */\nconst autoFontEnabled = resume => {\n return resume.hasAttribute('autofont');\n};\n\n/**\n * checks whether content is greater than page\n * @param {HTMLElement} resume\n * @param {HTMLElement} page\n * @return {boolean} false if content fits to page\n */\nconst contentIsGreaterThanPage = (resume, page) => {\n const pageHeight = page.offsetHeight;\n const resumeHeight = resume.offsetHeight;\n if (pageHeight < resumeHeight) return true;\n else return false;\n};\n\n/**\n * gets font size of DOM-elemnt\n * @param {HTMLElement} element\n * @return {number} font size of element\n */\nconst getFontSizeOfElement = element => {\n const style = window.getComputedStyle(element, null).getPropertyValue('font-size');\n return parseFloat(style);\n};\n\n/**\n * calculates new font size of all DOM-elements\n * @param {HTMLElement[]}\n */\nconst calcNewFontSizes = elements => {\n return elements\n .map(el => getFontSizeOfElement(el) * 0.99);\n};\n\n\n/**\n * checks if DOM-element has box-shadow\n * @param {HTMLElement} element\n * @return {string} '' if no shadow, otherwise shadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px'\n */\nconst hasBoxShadow = element => {\n const style = window\n .getComputedStyle(element, null)\n .getPropertyValue('box-shadow');\n if (style != 'none') return style;\n else return '';\n};\n\n/**\n * gets absolute position of element\n * @param {HTMLElement} element\n * @return {{}}\n */\nconst getAbsolutePositionOfElement = element => {\n return {\n top: element.getBoundingClientRect().top,\n left: element.getBoundingClientRect().left\n };\n};\n\n/**\n * gets border radius of element\n * @param {HTMLElement} element\n * @return {string} e.g. '50%'\n */\nconst getBorderRadiusOfElement = element => {\n return window\n .getComputedStyle(element, null)\n .getPropertyValue('border-radius');\n};\n\n/**\n * adds new box shadow\n * @param {HTMLElement} element\n * @param {{}} position e.g. { left: 10, top: 100}\n * @param {string} boxShadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px'\n */\nconst addNewBoxShadow = (element, position, boxShadow) => {\n let div = document.createElement('div');\n div.style.height = element.offsetHeight;\n div.style.width = element.offsetWidth;\n div.style.borderRadius = getBorderRadiusOfElement(element);\n div.style.position = 'absolute';\n div.style.boxShadow = boxShadow;\n div.style.webkitPrintColorAdjust = 'exact';\n div.style.webkitFilter = 'opacity(1)';\n div.style.top = position.top;\n div.style.left = position.left;\n document.getElementsByTagName('body')[0].appendChild(div);\n};\n\n/**\n * gets all elements with shadows\n * @param {HTMLElement[]} elements on page\n * @return {HTMLElement[]} elements with shadows\n */\nconst getElementsWithShadows = elements => {\n const ar = [].slice.call(elements);\n return ar\n .filter(el => hasBoxShadow(el) != '')\n .map(el => {\n return {\n element: el,\n shadow: hasBoxShadow(el)\n };\n });\n};\n\n/**\n * fixes shadows, since normal box-shadow cannot be printed in chrome,\n * see: http://stackoverflow.com/questions/13975198/text-shadow-and-box-shadow-while-printing-chrome\n */\nconst fixBoxShadows = () => {\n const elements = getAllDOMElements();\n const elementsWithShadow = getElementsWithShadows(elements);\n elementsWithShadow.forEach(element => {\n const position = getAbsolutePositionOfElement(element.element);\n element.element.style.boxShadow = 'none';\n addNewBoxShadow(element.element, position, element.shadow);\n });\n};\n\n/**\n * checks if the page contains a resume\n * @return {Boolean} true if page contains resume\n */\nconst isResume = () => {\n if (document.getElementsByTagName('page')[0]) return true;\n else return false;\n};\n\n/**\n * checks whether font needs to be fixed, and if fixes it\n */\nconst checkFont = () => {\n const page = getPageDOMElement();\n const resume = getResumeDOMElement(page);\n const fixFont = function(resume, page) {\n const elements = getAllDOMElements();\n const elementsAr = [].slice.call(elements);\n const newFontSizes = calcNewFontSizes(elementsAr);\n elementsAr.forEach((el, i) => el.style.fontSize = newFontSizes[i] + 'px');\n if (contentIsGreaterThanPage(resume, page)) fixFont(resume, page);\n };\n if (\n autoFontEnabled(resume) &&\n contentIsGreaterThanPage(resume, page)\n ) fixFont(resume, page);\n};\n\nconst isElectron = () => {\n return window && window.process && window.process.type;\n}\n\n/**\n * fixes resume\n */\nconst fixResume = () => {\n if (!isResume()) return;\n checkFont();\n if (isElectron()) fixBoxShadows();\n};\n\nfixResume();\n"]} \ No newline at end of file +{"version":3,"sources":["../javascript.js"],"names":["getAllDOMElements","document","getElementsByTagName","getResumeDOMElement","page","children","getPageDOMElement","autoFontEnabled","resume","hasAttribute","contentIsGreaterThanPage","pageHeight","offsetHeight","resumeHeight","getFontSizeOfElement","style","window","getComputedStyle","element","getPropertyValue","parseFloat","calcNewFontSizes","elements","map","el","hasBoxShadow","getAbsolutePositionOfElement","top","getBoundingClientRect","left","getBorderRadiusOfElement","addNewBoxShadow","position","boxShadow","div","createElement","height","width","offsetWidth","borderRadius","webkitPrintColorAdjust","webkitFilter","appendChild","getElementsWithShadows","ar","slice","call","filter","shadow","fixBoxShadows","elementsWithShadow","forEach","isResume","checkFont","fixFont","elementsAr","newFontSizes","i","fontSize","isElectron","process","type","fixResume","console","log"],"mappings":"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","file":"javascript.js","sourcesContent":["/**\n * gets all DOM-elements on page\n * @return {HTMLElement[]} DOM-elements\n */\nconst getAllDOMElements = () => {\n return document.getElementsByTagName('*');\n};\n\n/**\n * gets DOM-element of #resumeX\n * @param {HTMLElement} page\n * @return {HTMLElement}\n */\nconst getResumeDOMElement = page => {\n return page.children[0];\n};\n\n/**\n * returns DOM-element of \n * @return {HTMLElement}\n */\nconst getPageDOMElement = () => {\n return document.getElementsByTagName('page')[0];\n};\n\n/**\n * checks whether auto-font adjustment is enabled for resume\n * @param {HTMLElement} resume\n * @return {boolean}\n */\nconst autoFontEnabled = resume => {\n return resume.hasAttribute('autofont');\n};\n\n/**\n * checks whether content is greater than page\n * @param {HTMLElement} resume\n * @param {HTMLElement} page\n * @return {boolean} false if content fits to page\n */\nconst contentIsGreaterThanPage = (resume, page) => {\n const pageHeight = page.offsetHeight;\n const resumeHeight = resume.offsetHeight;\n if (pageHeight < resumeHeight) return true;\n else return false;\n};\n\n/**\n * gets font size of DOM-elemnt\n * @param {HTMLElement} element\n * @return {number} font size of element\n */\nconst getFontSizeOfElement = element => {\n const style = window.getComputedStyle(element, null).getPropertyValue('font-size');\n return parseFloat(style);\n};\n\n/**\n * calculates new font size of all DOM-elements\n * @param {HTMLElement[]}\n */\nconst calcNewFontSizes = elements => {\n return elements\n .map(el => getFontSizeOfElement(el) * 0.99);\n};\n\n\n/**\n * checks if DOM-element has box-shadow\n * @param {HTMLElement} element\n * @return {string} '' if no shadow, otherwise shadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px'\n */\nconst hasBoxShadow = element => {\n const style = window\n .getComputedStyle(element, null)\n .getPropertyValue('box-shadow');\n if (style != 'none') return style;\n else return '';\n};\n\n/**\n * gets absolute position of element\n * @param {HTMLElement} element\n * @return {{}}\n */\nconst getAbsolutePositionOfElement = element => {\n return {\n top: element.getBoundingClientRect().top,\n left: element.getBoundingClientRect().left\n };\n};\n\n/**\n * gets border radius of element\n * @param {HTMLElement} element\n * @return {string} e.g. '50%'\n */\nconst getBorderRadiusOfElement = element => {\n return window\n .getComputedStyle(element, null)\n .getPropertyValue('border-radius');\n};\n\n/**\n * adds new box shadow\n * @param {HTMLElement} element\n * @param {{}} position e.g. { left: 10, top: 100}\n * @param {string} boxShadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px'\n */\nconst addNewBoxShadow = (element, position, boxShadow) => {\n let div = document.createElement('div');\n div.style.height = element.offsetHeight;\n div.style.width = element.offsetWidth;\n div.style.borderRadius = getBorderRadiusOfElement(element);\n div.style.position = 'absolute';\n div.style.boxShadow = boxShadow;\n div.style.webkitPrintColorAdjust = 'exact';\n div.style.webkitFilter = 'opacity(1)';\n div.style.top = position.top;\n div.style.left = position.left;\n document.getElementsByTagName('body')[0].appendChild(div);\n};\n\n/**\n * gets all elements with shadows\n * @param {HTMLElement[]} elements on page\n * @return {HTMLElement[]} elements with shadows\n */\nconst getElementsWithShadows = elements => {\n const ar = [].slice.call(elements);\n return ar\n .filter(el => hasBoxShadow(el) != '')\n .map(el => {\n return {\n element: el,\n shadow: hasBoxShadow(el)\n };\n });\n};\n\n/**\n * fixes shadows, since normal box-shadow cannot be printed in chrome,\n * see: http://stackoverflow.com/questions/13975198/text-shadow-and-box-shadow-while-printing-chrome\n */\nconst fixBoxShadows = () => {\n const elements = getAllDOMElements();\n const elementsWithShadow = getElementsWithShadows(elements);\n elementsWithShadow.forEach(element => {\n const position = getAbsolutePositionOfElement(element.element);\n element.element.style.boxShadow = 'none';\n addNewBoxShadow(element.element, position, element.shadow);\n });\n};\n\n/**\n * checks if the page contains a resume\n * @return {Boolean} true if page contains resume\n */\nconst isResume = () => {\n if (document.getElementsByTagName('page')[0]) return true;\n else return false;\n};\n\n/**\n * checks whether font needs to be fixed, and if fixes it\n */\nconst checkFont = () => {\n const page = getPageDOMElement();\n const resume = getResumeDOMElement(page);\n const fixFont = function(resume, page) {\n const elements = getAllDOMElements();\n const elementsAr = [].slice.call(elements);\n const newFontSizes = calcNewFontSizes(elementsAr);\n elementsAr.forEach((el, i) => el.style.fontSize = newFontSizes[i] + 'px');\n if (contentIsGreaterThanPage(resume, page)) fixFont(resume, page);\n };\n if (\n autoFontEnabled(resume) &&\n contentIsGreaterThanPage(resume, page)\n ) fixFont(resume, page);\n};\n\nconst isElectron = () => {\n return window && window.process && window.process.type;\n}\n\n/**\n * fixes resume\n */\nconst fixResume = () => {\n console.log('aaaaaaa');\n if (!isResume()) return;\n checkFont();\n if (isElectron()) fixBoxShadows();\n};\n\nfixResume();\n"]} \ No newline at end of file diff --git a/public/js/javascript.js b/public/js/javascript.js index c68898e..6e8899c 100755 --- a/public/js/javascript.js +++ b/public/js/javascript.js @@ -3,7 +3,7 @@ * @return {HTMLElement[]} DOM-elements */ const getAllDOMElements = () => { - return document.getElementsByTagName('*'); + return document.getElementsByTagName('*'); }; /** @@ -12,7 +12,7 @@ const getAllDOMElements = () => { * @return {HTMLElement} */ const getResumeDOMElement = page => { - return page.children[0]; + return page.children[0]; }; /** @@ -20,7 +20,7 @@ const getResumeDOMElement = page => { * @return {HTMLElement} */ const getPageDOMElement = () => { - return document.getElementsByTagName('page')[0]; + return document.getElementsByTagName('page')[0]; }; /** @@ -29,7 +29,7 @@ const getPageDOMElement = () => { * @return {boolean} */ const autoFontEnabled = resume => { - return resume.hasAttribute('autofont'); + return resume.hasAttribute('autofont'); }; /** @@ -39,10 +39,10 @@ const autoFontEnabled = resume => { * @return {boolean} false if content fits to page */ const contentIsGreaterThanPage = (resume, page) => { - const pageHeight = page.offsetHeight; - const resumeHeight = resume.offsetHeight; - if (pageHeight < resumeHeight) return true; - else return false; + const pageHeight = page.offsetHeight; + const resumeHeight = resume.offsetHeight; + if (pageHeight < resumeHeight) return true; + else return false; }; /** @@ -51,8 +51,8 @@ const contentIsGreaterThanPage = (resume, page) => { * @return {number} font size of element */ const getFontSizeOfElement = element => { - const style = window.getComputedStyle(element, null).getPropertyValue('font-size'); - return parseFloat(style); + const style = window.getComputedStyle(element, null).getPropertyValue('font-size'); + return parseFloat(style); }; /** @@ -60,8 +60,8 @@ const getFontSizeOfElement = element => { * @param {HTMLElement[]} */ const calcNewFontSizes = elements => { - return elements - .map(el => getFontSizeOfElement(el) * 0.99); + return elements + .map(el => getFontSizeOfElement(el) * 0.99); }; @@ -71,11 +71,11 @@ const calcNewFontSizes = elements => { * @return {string} '' if no shadow, otherwise shadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px' */ const hasBoxShadow = element => { - const style = window - .getComputedStyle(element, null) - .getPropertyValue('box-shadow'); - if (style != 'none') return style; - else return ''; + const style = window + .getComputedStyle(element, null) + .getPropertyValue('box-shadow'); + if (style != 'none') return style; + else return ''; }; /** @@ -84,10 +84,10 @@ const hasBoxShadow = element => { * @return {{}} */ const getAbsolutePositionOfElement = element => { - return { - top: element.getBoundingClientRect().top, - left: element.getBoundingClientRect().left - }; + return { + top: element.getBoundingClientRect().top, + left: element.getBoundingClientRect().left + }; }; /** @@ -96,9 +96,9 @@ const getAbsolutePositionOfElement = element => { * @return {string} e.g. '50%' */ const getBorderRadiusOfElement = element => { - return window - .getComputedStyle(element, null) - .getPropertyValue('border-radius'); + return window + .getComputedStyle(element, null) + .getPropertyValue('border-radius'); }; /** @@ -108,17 +108,17 @@ const getBorderRadiusOfElement = element => { * @param {string} boxShadow e.g. 'rgba(0, 0, 0, 0.137255) 0px 2px 2px 0px' */ const addNewBoxShadow = (element, position, boxShadow) => { - let 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); + let 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); }; /** @@ -127,15 +127,15 @@ const addNewBoxShadow = (element, position, boxShadow) => { * @return {HTMLElement[]} elements with shadows */ const getElementsWithShadows = elements => { - const ar = [].slice.call(elements); - return ar - .filter(el => hasBoxShadow(el) != '') - .map(el => { - return { - element: el, - shadow: hasBoxShadow(el) - }; - }); + const ar = [].slice.call(elements); + return ar + .filter(el => hasBoxShadow(el) != '') + .map(el => { + return { + element: el, + shadow: hasBoxShadow(el) + }; + }); }; /** @@ -143,13 +143,13 @@ const getElementsWithShadows = elements => { * see: http://stackoverflow.com/questions/13975198/text-shadow-and-box-shadow-while-printing-chrome */ const fixBoxShadows = () => { - const elements = getAllDOMElements(); - const elementsWithShadow = getElementsWithShadows(elements); - elementsWithShadow.forEach(element => { - const position = getAbsolutePositionOfElement(element.element); - element.element.style.boxShadow = 'none'; - addNewBoxShadow(element.element, position, element.shadow); - }); + const elements = getAllDOMElements(); + const elementsWithShadow = getElementsWithShadows(elements); + elementsWithShadow.forEach(element => { + const position = getAbsolutePositionOfElement(element.element); + element.element.style.boxShadow = 'none'; + addNewBoxShadow(element.element, position, element.shadow); + }); }; /** @@ -157,40 +157,41 @@ const fixBoxShadows = () => { * @return {Boolean} true if page contains resume */ const isResume = () => { - if (document.getElementsByTagName('page')[0]) return true; - else return false; + if (document.getElementsByTagName('page')[0]) return true; + else return false; }; /** * checks whether font needs to be fixed, and if fixes it */ const checkFont = () => { - const page = getPageDOMElement(); - const resume = getResumeDOMElement(page); - const fixFont = function(resume, page) { - const elements = getAllDOMElements(); - const elementsAr = [].slice.call(elements); - const newFontSizes = calcNewFontSizes(elementsAr); - elementsAr.forEach((el, i) => el.style.fontSize = newFontSizes[i] + 'px'); - if (contentIsGreaterThanPage(resume, page)) fixFont(resume, page); - }; - if ( - autoFontEnabled(resume) && - contentIsGreaterThanPage(resume, page) - ) fixFont(resume, page); + const page = getPageDOMElement(); + const resume = getResumeDOMElement(page); + const fixFont = function(resume, page) { + const elements = getAllDOMElements(); + const elementsAr = [].slice.call(elements); + const newFontSizes = calcNewFontSizes(elementsAr); + elementsAr.forEach((el, i) => el.style.fontSize = newFontSizes[i] + 'px'); + if (contentIsGreaterThanPage(resume, page)) fixFont(resume, page); + }; + if ( + autoFontEnabled(resume) && + contentIsGreaterThanPage(resume, page) + ) fixFont(resume, page); }; const isElectron = () => { - return window && window.process && window.process.type; + return window && window.process && window.process.type; } /** * fixes resume */ const fixResume = () => { - if (!isResume()) return; - checkFont(); - if (isElectron()) fixBoxShadows(); + console.log('aaaaaaa'); + if (!isResume()) return; + checkFont(); + if (isElectron()) fixBoxShadows(); }; fixResume(); diff --git a/public/preview/resume-material-dark.png b/public/preview/resume-material-dark.png new file mode 100644 index 0000000..f03fe66 Binary files /dev/null and b/public/preview/resume-material-dark.png differ diff --git a/public/styles/resume-material-blue0.min.css b/public/styles/resume-material-blue0.min.css new file mode 100644 index 0000000..d7b53ed --- /dev/null +++ b/public/styles/resume-material-blue0.min.css @@ -0,0 +1 @@ +@import url(https://fonts.googleapis.com/css?family=Roboto:400,300,700,500);body{font-family:Roboto!important}a{cursor:pointer}.description-personal{margin-left:20px;margin-top:20px;padding-right:40px;text-align:justify;font-family:Roboto}.block-helper{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12);-webkit-print-color-adjust:exact;-webkit-filter:opacity(1);position:absolute;height:100%;width:100%;top:0;left:0}.title{right:25px;padding-left:20px;padding-top:20px;bottom:25px}.title h2{text-transform:uppercase;display:block;font-size:1.17em;-webkit-margin-before:1em;-webkit-margin-after:1em;-webkit-margin-start:0;-webkit-margin-end:0;color:#fff;padding-top:0;margin-top:0;letter-spacing:10px;font-weight:400;color:rgba(0,0,0,.7)}.title div{margin-top:-5px;margin:0;padding:0;line-height:15pt;font-weight:300;letter-spacing:2px;color:#fff;display:block;font-size:.67em;-webkit-margin-before:2.33em;-webkit-margin-start:0;-webkit-margin-end:0;padding-top:0;margin-top:0;color:#16151c;text-transform:uppercase;font-weight:500;letter-spacing:3px;font-size:10pt;opacity:.8;color:rgba(63,61,60,.71)}.section-headline{text-transform:uppercase;font-weight:500;letter-spacing:3px;font-size:10pt;opacity:.8;margin-left:20px;margin-top:40px;margin-bottom:20px;color:#3f3d3c}#material-blue{font-family:Roboto,sans-serif!important;background-color:#ccc;font-size:15px;line-height:1.5;color:#767270;letter-spacing:.072em;font-weight:400}#material-blue .c{clear:both}#material-blue li,#material-blue ul{margin:0;padding:0;list-style-type:none}#material-blue li{padding-top:9px}#material-blue p{margin-top:0;margin-bottom:25px;font-family:Roboto,sans-serif;font-weight:300;font-size:10pt;line-height:17pt}#material-blue .m_box{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}#material-blue .fa,#material-blue .material-icons{display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:26px}#material-blue h1,#material-blue h2,#material-blue h3,#material-blue h4,#material-blue h5,#material-blue h6{font-weight:400;margin:0}#material-blue h2{font-size:22pt;line-height:37pt;margin:0;font-weight:500}#material-blue h4{font-size:12pt;line-height:20pt;opacity:1}#material-blue .rightCol{width:63.5%;height:100%;float:right;display:flex;flex-direction:column}#material-blue .rightCol .block{width:90%;position:relative;background-color:#fff;padding:20px;margin-top:5px;margin-bottom:5px;display:inline-block}#material-blue .rightCol .block .headline{font-weight:300;display:block;font-size:15px;color:rgba(0,0,0,.870588)}#material-blue .rightCol .block .subheadline{color:rgba(0,0,0,.541176);display:block;font-size:14px;font-weight:300}#material-blue .rightCol .block .info{font-size:14px;color:rgba(0,0,0,.870588);margin-bottom:0;padding-top:20px}#material-blue .rightCol .block .icon{width:16%;float:left;margin-left:0}#material-blue .rightCol .block .icon .fa,#material-blue .rightCol .block .icon .material-icons{text-align:center;display:block;font-size:30pt}#material-blue .rightCol .block .content{width:80%;position:absolute;height:96%;left:17%;padding-right:3%;text-align:left;display:flex;flex-direction:column}#material-blue .rightCol .block .content .item{border-bottom:1px solid #bdbdbd;flex:1;width:97%;display:flex;justify-content:center;flex-direction:column;text-align:left;padding-top:0}#material-blue .rightCol .block .content .item span{color:#d8ab94;margin-top:0;font-size:10pt;line-height:16pt}#material-blue .rightCol .block .content .item p{margin-top:5px}#material-blue .rightCol .block .content .item:last-of-type{border-bottom-style:none}#material-blue .rightCol .block .content .item:last-of-type{border-bottom-style:none}#material-blue .leftCol{width:35%;height:100%;float:left;padding:0;text-align:left;color:#fff;background-color:#16151c;overflow:hidden;display:block;color:rgba(255,255,255,.59)}#material-blue .leftCol .section-headline{color:rgba(255,255,255,.54)}#material-blue .leftCol a{color:rgba(255,255,255,.59);text-decoration:none}#material-blue .leftCol .heading{background-color:#fff;background-repeat:no-repeat;background-size:cover;background-position:center;position:relative;width:100%;height:277px}#material-blue .leftCol .item{width:100%;margin-top:13px;float:left}#material-blue .leftCol .item .icon{width:20%;float:left}#material-blue .leftCol .item .fa,#material-blue .leftCol .item .material-icons{display:inherit;text-align:center}#material-blue .leftCol .item .text{float:right;width:69%;padding-right:10%;padding-top:0;display:block;font-size:15px;font-weight:300}#material-blue .leftCol .item .text li{padding-top:0;display:block;font-size:15px;font-weight:300}#material-blue .leftCol .item span{font-weight:300}#material-blue .leftCol .item .skill{clear:both;width:97%;padding-top:4px}#material-blue .leftCol .item .skill .left{float:left;width:10%;padding-top:3px}#material-blue .leftCol .item .skill .left i:nth-child(2){float:left;padding-top:4px}#material-blue .leftCol .item .skill .right{float:right;width:93%}#material-blue .leftCol .item .skill .right .progress{float:left;position:relative;height:2px;display:block;width:95%;background-color:rgba(255,255,255,.19);border-radius:2px;margin:.5rem 0 1rem;overflow:visible;margin-bottom:10px}#material-blue .leftCol .item .skill .right .progress .determinate{background-color:#78909c;position:absolute;top:0;bottom:0}#material-blue .leftCol .item .skill .right .progress .determinate .fa,#material-blue .leftCol .item .skill .right .progress .determinate .material-icons{font-size:13px;position:absolute;top:-4px;right:-2px;margin-left:50%;color:#fff}#material-blue .leftCol .item.last .text{border-bottom-style:none;padding-bottom:0}#material-blue #myselfpic{background-image:url(/person.jpg);color:#000}#material-blue #githubIcon{width:25px;padding-left:17px} \ No newline at end of file diff --git a/public/styles/resume-material-dark.min.css b/public/styles/resume-material-dark.min.css new file mode 100644 index 0000000..6f140cd --- /dev/null +++ b/public/styles/resume-material-dark.min.css @@ -0,0 +1 @@ +body{font-family:Roboto!important}a{cursor:pointer}.description-personal{margin-let:20px;margin-top:20px;padding-right:40px;text-align:justify;font-family:Roboto}.title{right:25px;padding-left:20px;padding-top:20px;bottom:25px}.title h2{text-transform:uppercase;display:block;font-size:1.17em;-webkit-margin-before:1em;-webkit-margin-after:1em;-webkit-margin-start:0;-webkit-margin-end:0;color:#fff;padding-top:0;margin-top:0;letter-spacing:10px;font-weight:400;color:rgba(0,0,0,.7)}.title div{margin-top:-5px;margin:0;padding:0;line-height:15pt;font-weight:300;letter-spacing:2px;color:#fff;display:block;font-size:.67em;-webkit-margin-before:2.33em;-webkit-margin-start:0;-webkit-margin-end:0;padding-top:0;margin-top:0;color:#16151c;text-transform:uppercase;font-weight:500;letter-spacing:3px;font-size:10pt;opacity:.8;color:rgba(63,61,60,.71)}.section-headline{text-transform:uppercase;font-weight:500;letter-spacing:3px;font-size:10pt;opacity:.8;margin-left:20px;margin-top:40px;margin-bottom:20px;color:#3f3d3c}#material-blue{font-family:Roboto,sans-serif!important;background-color:#ccc;font-size:15px;line-height:1.5;color:#767270;letter-spacing:.072em;font-weight:400}#material-blue .c{clear:both}#material-blue li,#material-blue ul{margin:0;padding:0;list-style-type:none}#material-blue li{padding-top:9px}#material-blue p{margin-top:0;margin-bottom:25px;font-family:Roboto,sans-serif;font-weight:300;font-size:10pt;line-height:17pt}#material-blue .m_box{box-shadow:0 2px 5px 0 rgba(0,0,0,.16),0 2px 10px 0 rgba(0,0,0,.12)}#material-blue .fa,#material-blue .material-icons{display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:26px}#material-blue h1,#material-blue h2,#material-blue h3,#material-blue h4,#material-blue h5,#material-blue h6{font-weight:400;margin:0}#material-blue h2{font-size:22pt;line-height:37pt;margin:0;font-weight:500}#material-blue h4{font-size:12pt;line-height:20pt;opacity:1}#material-blue .rightCol{width:63.5%;height:100%;float:right;display:flex;flex-direction:column}#material-blue .rightCol .block{width:90%;position:relative;background-color:#fff;padding:20px;margin-top:5px;margin-bottom:5px;display:inline-block}#material-blue .rightCol .block .headline{font-weight:300;display:block;font-size:15px;color:rgba(0,0,0,.870588)}#material-blue .rightCol .block .subheadline{color:rgba(0,0,0,.541176);display:block;font-size:14px;font-weight:300}#material-blue .rightCol .block .info{font-size:14px;color:rgba(0,0,0,.870588);margin-bottom:0;padding-top:20px}#material-blue .rightCol .block .icon{width:16%;float:left;margin-left:0}#material-blue .rightCol .block .icon .fa,#material-blue .rightCol .block .icon .material-icons{text-align:center;display:block;font-size:30pt}#material-blue .rightCol .block .content{width:80%;position:absolute;height:96%;left:17%;padding-right:3%;text-align:left;display:flex;flex-direction:column}#material-blue .rightCol .block .content .item{border-bottom:1px solid #bdbdbd;flex:1;width:97%;display:flex;justify-content:center;flex-direction:column;text-align:left;padding-top:0}#material-blue .rightCol .block .content .item span{color:#d8ab94;margin-top:0;font-size:10pt;line-height:16pt}#material-blue .rightCol .block .content .item p{margin-top:5px}#material-blue .rightCol .block .content .item:last-of-type{border-bottom-style:none}#material-blue .rightCol .block .content .item:last-of-type{border-bottom-style:none}#material-blue .leftCol{width:35%;height:100%;float:left;padding:0;text-align:left;color:#fff;background-color:#16151c;overflow:hidden;display:block;color:rgba(255,255,255,.59)}#material-blue .leftCol .section-headline{color:rgba(255,255,255,.54)}#material-blue .leftCol a{color:rgba(255,255,255,.59);text-decoration:none}#material-blue .leftCol .heading{background-color:#fff;background-repeat:no-repeat;background-size:cover;background-position:center;position:relative;width:100%;height:277px}#material-blue .leftCol .item{width:100%;margin-top:13px;float:left}#material-blue .leftCol .item .icon{width:20%;float:left}#material-blue .leftCol .item .fa,#material-blue .leftCol .item .material-icons{display:inherit;text-align:center}#material-blue .leftCol .item .text{float:right;width:69%;padding-right:10%;padding-top:0;display:block;font-size:15px;font-weight:300}#material-blue .leftCol .item .text li{padding-top:0;display:block;font-size:15px;font-weight:300}#material-blue .leftCol .item span{font-weight:300}#material-blue .leftCol .item .skill{clear:both;width:97%;padding-top:4px}#material-blue .leftCol .item .skill .left{float:left;width:10%;padding-top:3px}#material-blue .leftCol .item .skill .left i:nth-child(2){float:left;padding-top:4px}#material-blue .leftCol .item .skill .right{float:right;width:93%}#material-blue .leftCol .item .skill .right .progress{float:left;position:relative;height:2px;display:block;width:95%;background-color:rgba(255,255,255,.19);border-radius:2px;margin:.5rem 0 1rem;overflow:visible;margin-bottom:10px}#material-blue .leftCol .item .skill .right .progress .determinate{background-color:#78909c;position:absolute;top:0;bottom:0}#material-blue .leftCol .item .skill .right .progress .determinate .fa,#material-blue .leftCol .item .skill .right .progress .determinate .material-icons{font-size:13px;position:absolute;top:-4px;right:-2px;margin-left:50%;color:#fff}#material-blue .leftCol .item.last .text{border-bottom-style:none;padding-bottom:0}#material-blue #myselfpic{background-image:url(/person.jpg);color:#000}#material-blue #githubIcon{width:25px;padding-left:17px} \ No newline at end of file diff --git a/public/styles/resume-material-violet.min.css b/public/styles/resume-material-violet.min.css new file mode 100644 index 0000000..b43058e --- /dev/null +++ b/public/styles/resume-material-violet.min.css @@ -0,0 +1 @@ +.resume-material-violet{background:#fff;font-family:Roboto}.row{width:100%}.row.dark{height:19.5%;background:#16151c;position:relative}.row.main{height:80.5%}.section{margin:20px}.section .section-headline{text-transform:uppercase;font-weight:500;letter-spacing:3px;font-size:10pt;opacity:.8;margin-top:40px;margin-bottom:20px}.working-experience .paper{margin-bottom:10px}.working-experience .paper:last-of-type{margin-bottom:0}.working-experience .position{color:rgba(0,0,0,.870588);display:inline-block;font-size:15px;font-weight:300;width:100%}.working-experience .company{color:rgba(0,0,0,.541176);display:inline-block;font-weight:300;font-size:14px;width:100%;padding-bottom:20px}.working-experience .description{width:100%;font-size:14px;display:inline-block;color:rgba(0,0,0,.870588);padding-bottom:10px}.working-experience .skills{display:inline-block}.working-experience .chip{border:10px;box-sizing:border-box;display:flex;font-family:Roboto,sans-serif;-webkit-tap-highlight-color:transparent;cursor:default;text-decoration:none;margin:0;padding:0;outline:0;font-size:inherit;font-weight:inherit;position:relative;z-index:1;background-color:#e0e0e0;border-radius:16px;width:-webkit-fit-content;color:rgba(0,0,0,.870588);font-size:14px;font-weight:400;line-height:32px;padding-left:12px;padding-right:12px;user-select:none;white-space:nowrap;margin-right:10px;margin-bottom:10px;float:left}.header-description{top:50%;position:absolute;transform:translateY(-50%);width:62%;right:0}.header-description .name{letter-spacing:9px;text-transform:uppercase;font-weight:300;color:#fff}.header-description .position{text-transform:uppercase;font-weight:300;font-size:.67em;letter-spacing:2px;color:#fff;padding-bottom:0;margin-bottom:0}.img-wrapper{height:100%;position:relative}.img-wrapper .image{width:38%;top:50%;position:absolute;transform:translateY(-50%)}.img-wrapper .image .img{width:100px;height:100px;margin-left:auto;margin-right:40px;border-radius:50%;background:url(/person.jpg);background-repeat:none;background-position:center;background-size:cover}.part{width:50%;height:100%;display:inline-block}.part.left{float:left}.part.left .section{margin-left:40px}.part.right{float:right}.part.right .section{margin-right:40px}.paper{box-shadow:rgba(0,0,0,.117647) 0 1px 6px,rgba(0,0,0,.117647) 0 1px 4px;background:#fff;padding:20px}.education .paper{margin-bottom:10px}.education .paper:last-of-type{margin-bottom:0}.education .degree{color:rgba(0,0,0,.870588);display:inline-block;font-size:15px;font-weight:300;width:100%}.education .timeperiod{color:rgba(0,0,0,.541176);display:inline-block;font-weight:300;font-size:14px;width:100%;padding-bottom:20px}.education .description{width:100%;font-size:14px;display:inline-block;color:rgba(0,0,0,.870588);padding-bottom:10px}.skills .skill-description{width:100%;font-size:14px;display:inline-block;color:rgba(0,0,0,.870588);padding-bottom:10px;margin-top:20px;text-align:justify}.skills .skill-entry{display:inline-block;text-align:center;width:24%}.skills .skill-entry .skill{margin-top:10px;margin-bottom:10px;font-size:14px;padding-bottom:10px;color:rgba(0,0,0,.870588);display:inline-block;font-size:15px;font-weight:300;width:100%}div.doughnut{width:300px;height:300px;top:0;right:0;bottom:0;left:0;margin:auto;position:absolute;background:#e0e0e0 linear-gradient(to right,#e0e0e0 50%,#d8ab94 50%);color:#d8ab94;border-radius:50%;animation-delay:-35s;position:relative;width:50px;height:50px}@keyframes spin{to{transform:rotate(180deg)}}@keyframes background{50%{background-color:currentColor}}div.doughnut::after{content:'';position:absolute;width:80%;height:80%;top:0;right:0;bottom:0;left:0;margin:auto;background:#fff;border-radius:50%}div.doughnut::before{content:'';position:absolute;display:block;background-color:inherit;height:100%;width:50%;bottom:0;right:0;border-radius:0 100% 100% 0/50%;transform:rotate(0);transform-origin:0 50%;animation:50s spin infinite linear,100s background infinite step-end;animation-play-state:paused;animation-delay:inherit}.contact table td{vertical-align:middle;padding-bottom:10px}.contact .info{color:rgba(0,0,0,.870588);display:inline-block;font-size:15px;font-weight:300;width:100%}.contact .description{color:rgba(0,0,0,.541176);display:inline-block;font-weight:300;font-size:14px;width:100%}.contact .icon{color:#d8ab94;display:inline-block;margin-right:20px}.contact .icon i{font-size:30px}.contact .icon i.fa{font-size:34px} \ No newline at end of file diff --git a/resumes/resume-material-dark/index.mustache b/resumes/resume-material-dark/index.mustache new file mode 100644 index 0000000..beb3483 --- /dev/null +++ b/resumes/resume-material-dark/index.mustache @@ -0,0 +1,131 @@ + +
+
+
+
+
+ Contact +
+
+
+ account_circle +
+
+
    +
  • Born {{person.birth.year}} in {{person.birth.location}}
  • +
+
+
+ +
+
+ location_city +
+
+
    +
  • {{person.contact.street}}
  • +
  • {{person.contact.city}}
  • +
+
+
+ + +
+
+ phone +
+
+ {{person.contact.phone}} +
+
+
+ + +
+
+ email +
+
+ {{person.contact.email}} +
+
+
+ + +
+
+ +
+
+ @{{person.contact.github}} + github.com/{{person.contact.github}} +
+
+
+ + +
+
+ language +
+
+ {{person.contact.website}}m +
+
+
+ +
+
+ Skills +
+ {{#person.skills}} +
+
+ {{name}} +
+
+ +
+
+
+
+ {{/person.skills}} +
+
+ +
+
+

{{person.name.first}} {{person.name.last}}

+
{{person.position}}
+
+ +
Working experience
+ + + {{#person.experience}} +
+
+
{{position}} - {{company}} +
{{timeperiod}}
+

+ {{description}} +

+
+
+ {{/person.experience}} + +
Education
+ + {{#person.education}} +
+
+
{{degree}}
+

+ {{timeperiod}}, {{description}} +

+
+ {{/person.education}} +
+
+ +
diff --git a/resumes/resume-material-dark/style.less b/resumes/resume-material-dark/style.less new file mode 100644 index 0000000..3bb4360 --- /dev/null +++ b/resumes/resume-material-dark/style.less @@ -0,0 +1,388 @@ +@main: #d8ab94; +@dark: #16151c; +@red: #a80202; +@determinate: #78909C; + +body { + font-family: Roboto !important; +} + +a { + cursor: pointer; +} + +.description-personal { + margin-let: 20px; + margin-top: 20px; + padding-right: 40px; + text-align: justify; + font-family: Roboto; +} + +.title { + right: 25px; + padding-left: 20px; + padding-top: 20px; + bottom: 25px; + + h2 { + letter-spacing: 10px; + text-transform: uppercase; + display: block; + font-size: 1.17em; + -webkit-margin-before: 1em; + -webkit-margin-after: 1em; + -webkit-margin-start: 0; + -webkit-margin-end: 0; + color: white; + padding-top: 0; + margin-top: 0; + letter-spacing: 10px; + font-weight: 400; + color: rgba(0, 0, 0, 0.7); + } + + div { + margin-top: -5px; + font-size: 10pt; + margin: 0; + padding: 0; + line-height: 15pt; + font-weight: 300; + letter-spacing: 2px; + text-transform: uppercase; + color: white; + display: block; + font-size: 0.67em; + -webkit-margin-before: 2.33em; + -webkit-margin-start: 0; + -webkit-margin-end: 0; + padding-top: 0; + margin-top: 0; + color: #16151c; + text-transform: uppercase; + font-weight: 500; + letter-spacing: 3px; + font-size: 10pt; + opacity: 0.8; + color: rgba(63, 61, 60, 0.71); + } +} + +.section-headline { + text-transform: uppercase; + font-weight: 500; + letter-spacing: 3px; + font-size: 10pt; + opacity: 0.8; + margin-left: 20px; + margin-top: 40px; + margin-bottom: 20px; + color: #3f3d3c; +} + +#material-blue { + .c { + clear: both; + } + font-family: Roboto, sans-serif !important; + background-color: #ccc; + font-size: 15px; + line-height: 1.5; + color: #767270; + letter-spacing: 0.072em; + font-weight: normal; + + li, + ul { + margin: 0; + padding: 0; + list-style-type: none; + } + + li { + padding-top: 9px; + } + + p { + margin-top: 0; + margin-bottom: 25px; + font-family: 'Roboto', sans-serif; + font-weight: 300; + font-size: 10pt; + line-height: 17pt; + } + + .m_box { + box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12); + } + + .fa, + .material-icons { + display: inline-block; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + font-size: 26px; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-weight: 400; + margin: 0; + } + + h2 { + font-size: 22pt; + line-height: 37pt; + margin: 0; + font-weight: 500; + } + + h4 { + font-size: 12pt; + line-height: 20pt; + opacity: 1; + } + + .rightCol { + width: 63.5%; + height: 100%; + float: right; + display: flex; + flex-direction: column; + + .block { + width: 90%; + position: relative; + background-color: #fff; + padding: 20px; + margin-top: 5px; + margin-bottom: 5px; + display: inline-block; + + .headline { + font-weight: 300; + display: block; + font-size: 15px; + color: rgba(0, 0, 0, 0.870588); + } + + .subheadline { + color: rgba(0, 0, 0, 0.541176); + display: block; + font-size: 14px; + font-weight: 300; + } + + .info { + font-size: 14px; + color: rgba(0, 0, 0, 0.870588); + margin-bottom: 0; + padding-top: 20px; + } + + .icon { + width: 16%; + float: left; + margin-left: 0; + + .fa, + .material-icons { + text-align: center; + display: block; + font-size: 30pt; + } + } + + .content { + width: 80%; + position: absolute; + height: 96%; + left: 17%; + padding-right: 3%; + text-align: left; + display: flex; + flex-direction: column; + + .item { + border-bottom: 1px solid #bdbdbd; + flex: 1; + width: 97%; + display: flex; + justify-content: center; + flex-direction: column; + text-align: left; + padding-top: 0; + + span { + color: @main; + margin-top: 0; + font-size: 10pt; + line-height: 16pt; + } + + p { + margin-top: 5px; + } + + &:last-of-type { + border-bottom-style: none; + } + } + + .item:last-of-type { + border-bottom-style: none; + } + } + } + } + + .leftCol { + width: 35%; + height: 100%; + float: left; + padding: 0; + text-align: left; + color: #ffffff; + background-color: @dark; + overflow: hidden; + display: block; + color: rgba(255, 255, 255, 0.59); + + .shadow {} + + .section-headline { + color: rgba(255, 255, 255, 0.54); + } + + a { + color: rgba(255, 255, 255, 0.59); + text-decoration: none; + } + + .heading { + background-color: white; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + position: relative; + width: 100%; + height: 277px; + } + @paddingVertical: 13px; + + .item { + width: 100%; + margin-top: @paddingVertical; + float: left; + + .icon { + width: 20%; + float: left; + } + + .fa, + .material-icons { + display: inherit; + text-align: center; + } + + .text { + float: right; + width: 69%; + padding-right: 10%; + padding-top: 0; + display: block; + font-size: 15px; + font-weight: 300; + + li { + padding-top: 0; + display: block; + font-size: 15px; + font-weight: 300; + } + } + + span { + font-weight: 300; + } + + .skill { + clear: both; + width: 97%; + padding-top: 4px; + + .left { + float: left; + width: 10%; + padding-top: 3px; + + i {} + + i:nth-child(2) { + float: left; + padding-top: 4px; + } + } + + .right { + float: right; + width: 93%; + + .progress { + float: left; + position: relative; + height: 2px; + display: block; + width: 95%; + background-color: rgba(255, 255, 255, 0.19); + border-radius: 2px; + margin: 0.5rem 0 1rem; + overflow: visible; + margin-bottom: 10px; + + .determinate { + background-color: @determinate; + position: absolute; + top: 0; + bottom: 0; + + .fa, + .material-icons { + font-size: 13px; + position: absolute; + top: -4px; + right: -2px; + margin-left: 50%; + color: white; + } + } + } + } + } + } + + .item.last .text { + border-bottom-style: none; + padding-bottom: 0; + } + } + + #myselfpic { + background-image: url("/person.jpg"); + color: black; + } + + #githubIcon { + width: 25px; + padding-left: 17px; + } +} diff --git a/src/person.js b/src/person.js index 3f79eb7..899aa91 100755 --- a/src/person.js +++ b/src/person.js @@ -1,85 +1,85 @@ /* eslint-disable */ module.exports = { - name: { - first: 'John', - last: 'Doe', + name: { + first: 'John', + last: 'Doe', + }, + position: 'Software Developer', + birth: { + year: 1990, + location: 'New York' + }, + experience: [{ + company: 'Company A', + position: 'Developer', + timeperiod: 'since January 2016', + description: 'Programming and watching cute cat videos.' }, - position: 'Software Developer', - birth: { - year: 1990, - location: 'New York' + { + company: 'Company B', + position: 'Frontend Developer', + timeperiod: 'January 2015 - December 2015', + description: 'Fulfillment of extremly important tasks.' }, - experience: [{ - company: 'Company A', - position: 'Developer', - timeperiod: 'since January 2016', - description: 'Programming and watching cute cat videos.' - }, - { - company: 'Company B', - position: 'Frontend Developer', - timeperiod: 'January 2015 - December 2015', - description: 'Fulfillment of extremly important tasks.' - }, - { - company: 'Company C', - position: 'Trainee', - timeperiod: 'March 2014 - December 2014', - description: 'Making coffee and baking cookies.' - } - ], - education: [{ - degree: 'Master of Arts', - timeperiod: 'March 2012 - December 2013', - description: 'Major in Hacking and Computer Penetration, University A, New York, USA.' - }, - { - degree: 'Bachelor of Science', - timeperiod: 'March 2009 - December 2011', - description: 'Major in Engineering, University B, Los Angeles, USA.' - } - ], - // skill level goes 0 to 100 - skills: [{ - name: 'HTML5', - level: '99' - }, - { - name: 'CSS3', - level: '95' - }, - { - name: 'JavaScript', - level: '97' - }, - { - name: 'Node.js', - level: '93' - }, - { - name: 'Angular 2', - level: '60' - }, - { - name: 'TypeScript', - level: '80' - }, - { - name: 'ES.Next', - level: '70' - }, - { - name: 'Docker', - level: '99' - } - ], - skillDescription: 'Also proficient in Adobe Photoshop and Illustrator, grew up bilingual (English and Klingon).', - contact: { - email: 'john.doe@email.com', - phone: '0123 456789', - street: '1234 Broadway', - city: 'New York', - website: 'johndoe.com', - github: 'johnyD' + { + company: 'Company C', + position: 'Trainee', + timeperiod: 'March 2014 - December 2014', + description: 'Making coffee and baking cookies.' } + ], + education: [{ + degree: 'Master of Arts', + timeperiod: 'March 2012 - December 2013', + description: 'Major in Hacking and Computer Penetration, University A, New York, USA.' + }, + { + degree: 'Bachelor of Science', + timeperiod: 'March 2009 - December 2011', + description: 'Major in Engineering, University B, Los Angeles, USA.' + } + ], + // skill level goes 0 to 100 + skills: [{ + name: 'HTML5', + level: '99' + }, + { + name: 'CSS3', + level: '95' + }, + { + name: 'JavaScript', + level: '97' + }, + { + name: 'Node.js', + level: '93' + }, + { + name: 'Angular 2', + level: '60' + }, + { + name: 'TypeScript', + level: '80' + }, + { + name: 'ES.Next', + level: '70' + }, + { + name: 'Docker', + level: '99' + } + ], + skillDescription: 'Also proficient in Adobe Photoshop and Illustrator, grew up bilingual (English and Klingon).', + contact: { + email: 'john.doe@email.com', + phone: '0123 456789', + street: '1234 Broadway', + city: 'New York', + website: 'johndoe.com', + github: 'johnyD' + } };