├── linkedrw ├── __main__.py ├── scraper │ ├── __init__.py │ ├── scrape.py │ ├── accomplishment.py │ ├── personal.py │ └── background.py ├── exceptions.py ├── linkedr │ ├── __init__.py │ ├── skill.py │ ├── publication.py │ ├── section.py │ └── resume.py ├── linkedw │ ├── __init__.py │ └── website.py ├── __init__.py ├── templates │ ├── awesome_cv_files │ │ └── fonts │ │ │ ├── FontAwesome.ttf │ │ │ ├── Roboto-Bold.ttf │ │ │ ├── Roboto-Thin.ttf │ │ │ ├── Roboto-Italic.ttf │ │ │ ├── Roboto-Light.ttf │ │ │ ├── Roboto-Medium.ttf │ │ │ ├── Roboto-Regular.ttf │ │ │ ├── Roboto-BoldItalic.ttf │ │ │ ├── Roboto-LightItalic.ttf │ │ │ ├── Roboto-MediumItalic.ttf │ │ │ └── Roboto-ThinItalic.ttf │ ├── dev_portfolio_files │ │ ├── images │ │ │ └── lead-bg.jpg │ │ ├── libs │ │ │ └── font-awesome │ │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ │ ├── less │ │ │ │ ├── screen-reader.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── core.less │ │ │ │ ├── stacked.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── path.less │ │ │ │ ├── animated.less │ │ │ │ └── mixins.less │ │ │ │ └── scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _screen-reader.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── font-awesome.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _animated.scss │ │ │ │ └── _mixins.scss │ │ ├── package.json │ │ ├── gulpfile.js │ │ ├── js │ │ │ ├── scripts.min.js │ │ │ └── scripts.js │ │ ├── css │ │ │ ├── styles.css │ │ │ └── bootstrap.min.css │ │ └── scss │ │ │ └── styles.scss │ ├── resume_template.tex │ └── index_template.html ├── utils │ ├── __init__.py │ ├── get_prog_languages.py │ ├── helper.py │ └── prog_languages.txt ├── constants.py └── main.py ├── setup.cfg ├── .gitattributes ├── MANIFEST.in ├── .coveragerc ├── requirements.txt ├── tests ├── resume │ ├── publications.tex │ ├── honors.tex │ ├── skills.tex │ ├── volunteering.tex │ ├── projects.tex │ ├── education.tex │ ├── experience.tex │ ├── references.bib │ └── resume.tex ├── test_website.py ├── profile.json ├── test_resume.py └── website │ ├── empty │ └── index.html │ ├── no_date │ └── index.html │ └── full │ └── index.html ├── .github ├── ISSUE_TEMPLATE.md └── stale.yml ├── LICENSE ├── .travis.yml ├── setup.py ├── example.json ├── README.md └── .gitignore /linkedrw/__main__.py: -------------------------------------------------------------------------------- 1 | from .main import main 2 | 3 | main() 4 | -------------------------------------------------------------------------------- /linkedrw/scraper/__init__.py: -------------------------------------------------------------------------------- 1 | from .scrape import scrape 2 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [aliases] 2 | test=pytest --addopts=--cov=./ 3 | 4 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.cls linguist-vendored 2 | *.sty linguist-vendored -------------------------------------------------------------------------------- /linkedrw/exceptions.py: -------------------------------------------------------------------------------- 1 | class LoginError(BaseException): 2 | pass 3 | -------------------------------------------------------------------------------- /linkedrw/linkedr/__init__.py: -------------------------------------------------------------------------------- 1 | from .resume import make_resume_files 2 | -------------------------------------------------------------------------------- /linkedrw/linkedw/__init__.py: -------------------------------------------------------------------------------- 1 | from .website import make_website_files 2 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE requirements.txt linkedrw/utils/* 2 | recursive-include linkedrw/templates/ * -------------------------------------------------------------------------------- /linkedrw/__init__.py: -------------------------------------------------------------------------------- 1 | from .main import main 2 | 3 | __version__ = "1.2.1" 4 | VERSION = __version__ 5 | -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | omit = 3 | linkedrw/main.py 4 | linkedrw/scraper/* 5 | linkedrw/utils/* 6 | setup.py -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | arrow>=0.13.1 2 | beautifulsoup4>=4.7.1 3 | habanero>=0.6.2 4 | logbook>=1.4.3 5 | requests>=2.21.0 6 | selenium>=3.141.0 7 | -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-Thin.ttf -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/images/lead-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/dev_portfolio_files/images/lead-bg.jpg -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-Italic.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-Medium.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /tests/resume/publications.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Publications} 2 | 3 | \begin{refsection} 4 | \nocite{Bradford_1976} 5 | \printbibliography[heading=none] 6 | \end{refsection} -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-BoldItalic.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-LightItalic.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-MediumItalic.ttf -------------------------------------------------------------------------------- /linkedrw/templates/awesome_cv_files/fonts/Roboto-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/awesome_cv_files/fonts/Roboto-ThinItalic.ttf -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /tests/resume/honors.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Honors \& Awards} 2 | 3 | \begin{cvhonors} 4 | \cvhonor 5 | {Award} % title 6 | {Issuer} % issuer 7 | {Location} % location 8 | {2019} % date 9 | \end{cvhonors} -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zeshuaro/LinkedRW/HEAD/linkedrw/templates/dev_portfolio_files/libs/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /tests/resume/skills.tex: -------------------------------------------------------------------------------- 1 | \cvsection{skills} 2 | 3 | \begin{cvskills} 4 | \cvskill 5 | {Programming} 6 | {Python, Java} 7 | \cvskill 8 | {Technologies} 9 | {Docker} 10 | \cvskill 11 | {Languages} 12 | {English} 13 | \end{cvskills} -------------------------------------------------------------------------------- /tests/resume/volunteering.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Volunteering} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {Title} % title 6 | {Volunteering Centre} % name 7 | {Location} % location 8 | {Jan 2018 {-} Dec 2018} % dates 9 | {} % description 10 | 11 | \end{cventries} -------------------------------------------------------------------------------- /linkedrw/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from linkedrw.utils.helper import ( 2 | make_dir, 3 | get_accomplishment_link, 4 | get_description, 5 | get_optional_text, 6 | get_optional_text_replace, 7 | get_span_text, 8 | escape_latex, 9 | copy_files, 10 | scroll_to_elem, 11 | ) 12 | -------------------------------------------------------------------------------- /tests/resume/projects.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Projects} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {} 6 | {Project} % name 7 | {} 8 | {Jan 2018 {-} Present} % dates 9 | { 10 | \begin{cvitems} 11 | \item{Description} 12 | \end{cvitems} 13 | } 14 | 15 | \end{cventries} -------------------------------------------------------------------------------- /tests/resume/education.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Education} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {Degree} % degree 6 | {School} % name 7 | {Location} % location 8 | {2018 {-} 2019} % dates 9 | { 10 | \begin{cvitems} 11 | \item{Description} 12 | \end{cvitems} 13 | } 14 | 15 | \end{cventries} -------------------------------------------------------------------------------- /tests/resume/experience.tex: -------------------------------------------------------------------------------- 1 | \cvsection{Experience} 2 | 3 | \begin{cventries} 4 | \cventry 5 | {Title} % title 6 | {Company} % name 7 | {Location} % location 8 | {Jan 2019 {-} Present} % dates 9 | { 10 | \begin{cvitems} 11 | \item{Description} 12 | \end{cvitems} 13 | } 14 | 15 | \end{cventries} -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Issue Template 3 | about: Template for issue report 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### What happened 11 | 12 | ### Did you keep your browser window on top when `linkedrw` is running 13 | 14 | ### Did you try increasing the timeout by using `-t/--timeout` option 15 | 16 | ### Which web driver did you use 17 | 18 | ### Logs 19 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /tests/resume/references.bib: -------------------------------------------------------------------------------- 1 | @article{Bradford_1976, 2 | doi = {10.1016/0003-2697(76)90527-3}, 3 | url = {https://doi.org/10.1016%2F0003-2697%2876%2990527-3}, 4 | year = 1976, 5 | month = {may}, 6 | publisher = {Elsevier {BV}}, 7 | volume = {72}, 8 | number = {1-2}, 9 | pages = {248--254}, 10 | author = {Marion M. Bradford}, 11 | title = {A rapid and sensitive method for the quantitation of microgram quantities of protein utilizing the principle of protein-dye binding}, 12 | journal = {Analytical Biochemistry} 13 | } -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "devportfolio-template", 3 | "version": "1.1.3", 4 | "description": "", 5 | "main": "js/scripts.js", 6 | "scripts": { 7 | "watch": "gulp watch" 8 | }, 9 | "keywords": [ 10 | "portfolio", 11 | "personal", 12 | "website", 13 | "tech", 14 | "coding", 15 | "dev" 16 | ], 17 | "author": "Ryan Fitzgerald", 18 | "license": "MIT", 19 | "devDependencies": { 20 | "gulp": "^4.0.0", 21 | "gulp-autoprefixer": "^6.0.0", 22 | "gulp-plumber": "^1.2.0", 23 | "gulp-rename": "^1.4.0", 24 | "gulp-sass": "^4.0.2", 25 | "gulp-uglify": "^3.0.1", 26 | "gulp-wait": "0.0.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 30 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | # Label to use when marking an issue as stale 10 | staleLabel: stale 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /linkedrw/utils/get_prog_languages.py: -------------------------------------------------------------------------------- 1 | import re 2 | import requests 3 | 4 | from bs4 import BeautifulSoup 5 | 6 | 7 | def main(): 8 | url = "https://en.wikipedia.org/wiki/List_of_programming_languages" 9 | r = requests.get(url) 10 | languages = [] 11 | 12 | if r.status_code == 200: 13 | soup = BeautifulSoup(r.text, "html.parser") 14 | divs = soup.find_all("div", {"class": "div-col columns column-width"}) 15 | 16 | for div in divs: 17 | for li in div.find_all("li"): 18 | language = li.text.strip().lower() 19 | language = re.sub("\s+\(.*", "", language) 20 | language = re.sub("\s+–.*", "", language) 21 | languages.append(language) 22 | 23 | with open("prog_languages.txt", "w") as f: 24 | f.write("\n".join(languages)) 25 | 26 | 27 | if __name__ == "__main__": 28 | main() 29 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/libs/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 zeshuaro 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require('gulp'); 2 | var plumber = require('gulp-plumber'); 3 | var uglify = require('gulp-uglify'); 4 | var sass = require('gulp-sass'); 5 | var wait = require('gulp-wait'); 6 | var rename = require('gulp-rename'); 7 | var autoprefixer = require('gulp-autoprefixer'); 8 | 9 | gulp.task('scripts', function() { 10 | return gulp.src('js/scripts.js') 11 | .pipe(plumber(plumber({ 12 | errorHandler: function (err) { 13 | console.log(err); 14 | this.emit('end'); 15 | } 16 | }))) 17 | .pipe(uglify({ 18 | output: { 19 | comments: '/^!/' 20 | } 21 | })) 22 | .pipe(rename({extname: '.min.js'})) 23 | .pipe(gulp.dest('js')); 24 | }); 25 | 26 | gulp.task('styles', function () { 27 | return gulp.src('./scss/styles.scss') 28 | .pipe(wait(250)) 29 | .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError)) 30 | .pipe(gulp.dest('./css')); 31 | }); 32 | 33 | gulp.task('watch', function() { 34 | gulp.watch('js/scripts.js', gulp.series('scripts')); 35 | gulp.watch('scss/styles.scss', gulp.series('styles')); 36 | }); -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | dist: xenial # required for Python >= 3.7 2 | language: python 3 | python: 4 | - "3.6" 5 | - "3.7" 6 | 7 | branches: 8 | only: 9 | - master 10 | - /^v\d+\.\d+(\.\d+)?(-\S*)?$/ 11 | 12 | cache: 13 | directories: 14 | - $HOME/.cache/pip 15 | - $HOME/.pre-commit 16 | before_cache: 17 | - rm -f $HOME/.cache/pip/log/debug.log 18 | - rm -f $HOME/.pre-commit/pre-commit.log 19 | 20 | # command to install dependencies 21 | install: pip install -r requirements.txt codecov 22 | 23 | # command to run tests 24 | script: python setup.py test 25 | 26 | jobs: 27 | include: 28 | - stage: deploy 29 | if: tag IS present 30 | python: "3.6" 31 | install: skip 32 | script: skip 33 | deploy: 34 | provider: pypi 35 | user: zeshuaro 36 | password: 37 | secure: JxSsLwMmZO2369d/YxX9vadFeuVej4JOpAJz6DXJkTaQhvyGS8lkD4KeBpBeXTC6Y2TZ3lkW68z/6bNBSZ9Vjh+9vKUL+Gkmc0m5RZIyZBw7gu0re+0XxBocJp5eWK24g2Sj36hyNB3zs7BakPSYMUO36Zh9+tE0AFrl7j7oaXccEtYwb3h5srpe4ANc0/PdriE+YteJDE6gMe6obKuVMrdZgGoErgoRALWfapcNNVGYRNbKEYpoD37GGqgteULKTGb7gUv+pyY4N6OsEW3Xu+gptlQysEB09DTyholxIUARv2AMbQUn0juTBneTJC+YKSMyUQTA2muy9WEkQdf2ZxsUi3W3BynmKgt6u6kepB5sNLvuVCe0i2TTlHSea1G519tUJs2WwMdXFDSmFFFyO4QV+70cZs+lQaYglDo6fwE7GWwB1Fb7tkL2a6ftp/eAoNeWJX7nvtGZJMRR8Sv8ic/Ugc4wHF4xGfIsjZSxjg1JmbevIyk2chdxdB0Hpi22of1b4B3G8QX4jR3p2URwUM30WcGujT8or2XBonE9saACl7t84KtVkDErz0e1zeqqNj08MEniOVrviGCvHU+G811EbezSmzuwH81R92ka+n8x2cV1SLfBy0L8tlrgT30YA/gH4HjzdTBncTD1hfuLhKMfrYcelv/l99eFZPJ6FPE= 38 | on: 39 | branch: master 40 | tags: true 41 | 42 | after_success: 43 | - coverage combine 44 | - codecov -F Travis -------------------------------------------------------------------------------- /linkedrw/templates/dev_portfolio_files/js/scripts.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Title: Dev Portfolio Template 3 | Version: 1.2.1 4 | Last Change: 08/27/2017 5 | Author: Ryan Fitzgerald 6 | Repo: https://github.com/RyanFitzgerald/devportfolio-template 7 | Issues: https://github.com/RyanFitzgerald/devportfolio-template/issues 8 | 9 | Description: This file contains all the scripts associated with the single-page 10 | portfolio website. 11 | */ 12 | !function(n){n("html").removeClass("no-js"),n("header a").click(function(e){if(!n(this).hasClass("no-scroll")){e.preventDefault();var t=n(this).attr("href"),i=n(t).offset().top;n("html, body").animate({scrollTop:i+"px"},Math.abs(window.pageYOffset-n(t).offset().top)/1),n("header").hasClass("active")&&n("header, body").removeClass("active")}}),n("#to-top").click(function(){n("html, body").animate({scrollTop:0},500)}),n("#lead-down span").click(function(){var e=n("#lead").next().offset().top;n("html, body").animate({scrollTop:e+"px"},500)}),n("#experience-timeline").each(function(){$this=n(this),$userContent=$this.children("div"),$userContent.each(function(){n(this).addClass("vtimeline-content").wrap('
57 | summary-here 58 |
59 |74 | About 75 |
76 |