diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/public/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/public/.travis.yml b/public/.travis.yml new file mode 100644 index 0000000..18f48b1 --- /dev/null +++ b/public/.travis.yml @@ -0,0 +1,11 @@ +sudo: false +language: node_js +node_js: + - "node" +install: npm install +script: + - npm test + - gulp +cache: + directories: + - node_modules diff --git a/public/LICENSE b/public/LICENSE new file mode 100644 index 0000000..b4e7121 --- /dev/null +++ b/public/LICENSE @@ -0,0 +1,27 @@ +The MIT License (MIT) + +Modifications: + +Copyright (c) 2018 Camelot Developers + +Original Project: + +Copyright (c) 2013-2018 Blackrock Digital LLC + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/public/README.md b/public/README.md new file mode 100644 index 0000000..816eb28 --- /dev/null +++ b/public/README.md @@ -0,0 +1,74 @@ +# [Start Bootstrap - Freelancer](https://startbootstrap.com/template-overviews/freelancer/) + +[Freelancer](http://startbootstrap.com/template-overviews/freelancer/) is a one page freelancer portfolio theme for [Bootstrap](http://getbootstrap.com/) created by [Start Bootstrap](http://startbootstrap.com/). This theme features several content sections, a responsive portfolio grid with hover effects, full page portfolio item modals, and a working PHP contact form. + +## Preview + +[](https://blackrockdigital.github.io/startbootstrap-freelancer/) + +**[View Live Preview](https://blackrockdigital.github.io/startbootstrap-freelancer/)** + +## Status + +[](https://raw.githubusercontent.com/BlackrockDigital/startbootstrap-freelancer/master/LICENSE) +[](https://www.npmjs.com/package/startbootstrap-freelancer) +[](https://travis-ci.org/BlackrockDigital/startbootstrap-freelancer) +[](https://david-dm.org/BlackrockDigital/startbootstrap-freelancer) +[](https://david-dm.org/BlackrockDigital/startbootstrap-freelancer?type=dev) + +## Download and Installation + +To begin using this template, choose one of the following options to get started: +* [Download the latest release on Start Bootstrap](https://startbootstrap.com/template-overviews/freelancer/) +* Install via npm: `npm i startbootstrap-freelancer` +* Clone the repo: `git clone https://github.com/BlackrockDigital/startbootstrap-freelancer.git` +* [Fork, Clone, or Download on GitHub](https://github.com/BlackrockDigital/startbootstrap-freelancer) + +## Usage + +### Basic Usage + +After downloading, simply edit the HTML and CSS files included with the template in your favorite text editor to make changes. These are the only files you need to worry about, you can ignore everything else! To preview the changes you make to the code, you can open the `index.html` file in your web browser. + +### Advanced Usage + +After installation, run `npm install` and then run `gulp dev` which will open up a preview of the template in your default browser, watch for changes to core template files, and live reload the browser when changes are saved. You can view the `gulpfile.js` to see which tasks are included with the dev environment. + +#### Gulp Tasks + +- `gulp` the default task that builds everything +- `gulp dev` browserSync opens the project in your default browser and live reloads when changes are made +- `gulp css` compiles SCSS files into CSS and minifies the compiled CSS +- `gulp js` minifies the themes JS file +- `gulp vendor` copies dependencies from node_modules to the vendor directory + +You must have npm and Gulp installed globally on your machine in order to use these features. + +## Troubleshooting and Help + +Start Bootstrap has a public Slack channel which is a great place to ask questions about this template and all things related to Start Bootstrap. + +**[Click here to join the Slack channel!](https://startbootstrap-slack.herokuapp.com/)** + +## Bugs and Issues + +Have a bug or an issue with this template? [Open a new issue](https://github.com/BlackrockDigital/startbootstrap-freelancer/issues) here on GitHub or leave a comment on the [template overview page at Start Bootstrap](http://startbootstrap.com/template-overviews/freelancer/). + +## About + +Start Bootstrap is an open source library of free Bootstrap templates and themes. All of the free templates and themes on Start Bootstrap are released under the MIT license, which means you can use them for any purpose, even for commercial projects. + +* https://startbootstrap.com +* https://twitter.com/SBootstrap + +Start Bootstrap was created by and is maintained by **[David Miller](http://davidmiller.io/)**, Owner of [Blackrock Digital](http://blackrockdigital.io/). + +* http://davidmiller.io +* https://twitter.com/davidmillerskt +* https://github.com/davidtmiller + +Start Bootstrap is based on the [Bootstrap](http://getbootstrap.com/) framework created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thorton](https://twitter.com/fat). + +## Copyright and License + +Copyright 2013-2018 Blackrock Digital LLC. Code released under the [MIT](https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/gh-pages/LICENSE) license. diff --git a/public/css/index.css b/public/css/index.css new file mode 100644 index 0000000..672f7c3 --- /dev/null +++ b/public/css/index.css @@ -0,0 +1,339 @@ +/*! + * Start Bootstrap - Freelancer v5.0.0 (https://startbootstrap.com/template-overviews/freelancer) + * Copyright 2013-2018 Start Bootstrap + * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) + */ + +body { + font-family: 'Lato'; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 700; + font-family: 'Montserrat'; +} + +hr.star-light, +hr.star-dark { + max-width: 15rem; + padding: 0; + text-align: center; + border: none; + border-top: solid 0.25rem; + margin-top: 2.5rem; + margin-bottom: 2.5rem; + margin-left: auto; + margin-right: auto; +} + +hr.star-light:after, +hr.star-dark:after { + position: relative; + top: -.8em; + display: inline-block; + padding: 0 0.25em; + content: '\f005'; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + font-size: 2em; +} + +hr.star-light { + border-color: #fff; +} + +hr.star-light:after { + color: #fff; + background-color: #2196F3; +} + +hr.star-dark { + border-color: #2C3E50; +} + +hr.star-dark:after { + color: #2C3E50; + background-color: white; +} + +section { + padding: 6rem 0; +} + +section h2 { + font-size: 2.25rem; + line-height: 2rem; +} + +@media (min-width: 992px) { + section h2 { + font-size: 3rem; + line-height: 2.5rem; + } +} + +.btn-xl { + padding: 1rem 1.75rem; + font-size: 1.25rem; +} + +.btn-social { + width: 3.25rem; + height: 3.25rem; + font-size: 1.25rem; + line-height: 2rem; +} + +.scroll-to-top { + z-index: 1042; + right: 1rem; + bottom: 1rem; + display: none; +} + +.scroll-to-top a { + width: 3.5rem; + height: 3.5rem; + background-color: rgba(33, 37, 41, 0.5); + line-height: 3.1rem; +} + +#mainNav { + padding-top: 1rem; + padding-bottom: 1rem; + font-weight: 700; + font-family: 'Montserrat'; +} + +#mainNav .navbar-brand { + color: #fff; +} + +#mainNav .navbar-nav { + margin-top: 1rem; + letter-spacing: 0.0625rem; +} + +#mainNav .navbar-nav li.nav-item a.nav-link { + color: #fff; +} + +#mainNav .navbar-nav li.nav-item a.nav-link:hover { + color: #2196F3; +} + +#mainNav .navbar-nav li.nav-item a.nav-link:active, #mainNav .navbar-nav li.nav-item a.nav-link:focus { + color: #fff; +} + +#mainNav .navbar-nav li.nav-item a.nav-link.active { + color: #2196F3; +} + +#mainNav .navbar-toggler { + font-size: 80%; + padding: 0.8rem; +} + +@media (min-width: 992px) { + #mainNav { + padding-top: 1.5rem; + padding-bottom: 1.5rem; + -webkit-transition: padding-top 0.3s, padding-bottom 0.3s; + transition: padding-top 0.3s, padding-bottom 0.3s; + } + #mainNav .navbar-brand { + font-size: 2em; + -webkit-transition: font-size 0.3s; + transition: font-size 0.3s; + } + #mainNav .navbar-nav { + margin-top: 0; + } + #mainNav .navbar-nav > li.nav-item > a.nav-link.active { + color: #fff; + background: #2196F3; + } + #mainNav .navbar-nav > li.nav-item > a.nav-link.active:active, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:focus, #mainNav .navbar-nav > li.nav-item > a.nav-link.active:hover { + color: #fff; + background: #2196F3; + } + #mainNav.navbar-shrink { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + } + #mainNav.navbar-shrink .navbar-brand { + font-size: 1.5em; + } +} + +header.masthead { + padding-top: calc(6rem + 72px); + padding-bottom: 6rem; +} + +header.masthead h1 { + font-size: 3rem; + line-height: 3rem; +} + +header.masthead h2 { + font-size: 1.3rem; + font-family: 'Lato'; +} + +@media (min-width: 992px) { + header.masthead { + padding-top: calc(6rem + 106px); + padding-bottom: 6rem; + } + header.masthead h1 { + font-size: 4.75em; + line-height: 4rem; + } + header.masthead h2 { + font-size: 1.75em; + } +} + +.portfolio { + margin-bottom: -15px; +} + +.portfolio .portfolio-item { + position: relative; + display: block; + max-width: 25rem; + margin-bottom: 15px; +} + +.portfolio .portfolio-item .portfolio-item-caption { + -webkit-transition: all ease 0.5s; + transition: all ease 0.5s; + opacity: 0; + background-color: rgba(33, 150, 243, 0.9); +} + +.portfolio .portfolio-item .portfolio-item-caption:hover { + opacity: 1; +} + +.portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content { + font-size: 1.5rem; +} + +@media (min-width: 576px) { + .portfolio { + margin-bottom: -30px; + } + .portfolio .portfolio-item { + margin-bottom: 30px; + } +} + +.portfolio-modal .portfolio-modal-dialog { + padding: 3rem 1rem; + min-height: calc(100vh - 2rem); + margin: 1rem calc(1rem - 8px); + position: relative; + z-index: 2; + -webkit-box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5); + box-shadow: 0 0 3rem 1rem rgba(0, 0, 0, 0.5); +} + +.portfolio-modal .portfolio-modal-dialog .close-button { + position: absolute; + top: 2rem; + right: 2rem; +} + +.portfolio-modal .portfolio-modal-dialog .close-button i { + line-height: 38px; +} + +.portfolio-modal .portfolio-modal-dialog h2 { + font-size: 2rem; +} + +@media (min-width: 768px) { + .portfolio-modal .portfolio-modal-dialog { + min-height: 100vh; + padding: 5rem; + margin: 3rem calc(3rem - 8px); + } + .portfolio-modal .portfolio-modal-dialog h2 { + font-size: 3rem; + } +} + +.social-icons .fa-linkedin { + color: #0068B5; +} + +.social-icons .fa-github { + color: #212121; +} + +.footer { + padding-top: 5rem; + padding-bottom: 5rem; + background-color: #2C3E50; + color: #fff; +} + +.copyright { + background-color: #1a252f; +} + +a { + color: #2196F3; +} + +a:focus, a:hover, a:active { + color: #0c7cd5; +} + +.btn { + border-width: 2px; +} + +.bg-primary { + background-color: #2196F3 !important; +} + +.bg-secondary { + background-color: #2C3E50 !important; +} + +.text-primary { + color: #2196F3 !important; +} + +.text-secondary { + color: #2C3E50 !important; +} + +.btn-primary { + background-color: #2196F3; + border-color: #2196F3; +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary:active { + background-color: #0c7cd5; + border-color: #0c7cd5; +} + +.btn-secondary { + background-color: #2C3E50; + border-color: #2C3E50; +} + +.btn-secondary:hover, .btn-secondary:focus, .btn-secondary:active { + background-color: #1a252f; + border-color: #1a252f; +} diff --git a/public/css/index.min.css b/public/css/index.min.css new file mode 100644 index 0000000..8648db2 --- /dev/null +++ b/public/css/index.min.css @@ -0,0 +1,5 @@ +/*! + * Start Bootstrap - Freelancer v5.0.0 (https://startbootstrap.com/template-overviews/freelancer) + * Copyright 2013-2018 Start Bootstrap + * Licensed under MIT (https://github.com/BlackrockDigital/startbootstrap-freelancer/blob/master/LICENSE) + */body{font-family:Lato}h1,h2,h3,h4,h5,h6{font-weight:700;font-family:Montserrat}hr.star-dark,hr.star-light{max-width:15rem;padding:0;text-align:center;border:none;border-top:solid .25rem;margin-top:2.5rem;margin-bottom:2.5rem;margin-left:auto;margin-right:auto}hr.star-dark:after,hr.star-light:after{position:relative;top:-.8em;display:inline-block;padding:0 .25em;content:'\f005';font-family:"Font Awesome 5 Free";font-weight:900;font-size:2em}hr.star-light{border-color:#fff}hr.star-light:after{color:#fff;background-color:#2196f3}hr.star-dark{border-color:#2c3e50}hr.star-dark:after{color:#2c3e50;background-color:#fff}section{padding:6rem 0}section h2{font-size:2.25rem;line-height:2rem}@media (min-width:992px){section h2{font-size:3rem;line-height:2.5rem}}.btn-xl{padding:1rem 1.75rem;font-size:1.25rem}.btn-social{width:3.25rem;height:3.25rem;font-size:1.25rem;line-height:2rem}.scroll-to-top{z-index:1042;right:1rem;bottom:1rem;display:none}.scroll-to-top a{width:3.5rem;height:3.5rem;background-color:rgba(33,37,41,.5);line-height:3.1rem}#mainNav{padding-top:1rem;padding-bottom:1rem;font-weight:700;font-family:Montserrat}#mainNav .navbar-brand{color:#fff}#mainNav .navbar-nav{margin-top:1rem;letter-spacing:.0625rem}#mainNav .navbar-nav li.nav-item a.nav-link{color:#fff}#mainNav .navbar-nav li.nav-item a.nav-link:hover{color:#2196f3}#mainNav .navbar-nav li.nav-item a.nav-link:active,#mainNav .navbar-nav li.nav-item a.nav-link:focus{color:#fff}#mainNav .navbar-nav li.nav-item a.nav-link.active{color:#2196f3}#mainNav .navbar-toggler{font-size:80%;padding:.8rem}@media (min-width:992px){#mainNav{padding-top:1.5rem;padding-bottom:1.5rem;-webkit-transition:padding-top .3s,padding-bottom .3s;transition:padding-top .3s,padding-bottom .3s}#mainNav .navbar-brand{font-size:2em;-webkit-transition:font-size .3s;transition:font-size .3s}#mainNav .navbar-nav{margin-top:0}#mainNav .navbar-nav>li.nav-item>a.nav-link.active{color:#fff;background:#2196f3}#mainNav .navbar-nav>li.nav-item>a.nav-link.active:active,#mainNav .navbar-nav>li.nav-item>a.nav-link.active:focus,#mainNav .navbar-nav>li.nav-item>a.nav-link.active:hover{color:#fff;background:#2196f3}#mainNav.navbar-shrink{padding-top:.5rem;padding-bottom:.5rem}#mainNav.navbar-shrink .navbar-brand{font-size:1.5em}}header.masthead{padding-top:calc(6rem + 72px);padding-bottom:6rem}header.masthead h1{font-size:3rem;line-height:3rem}header.masthead h2{font-size:1.3rem;font-family:Lato}@media (min-width:992px){header.masthead{padding-top:calc(6rem + 106px);padding-bottom:6rem}header.masthead h1{font-size:4.75em;line-height:4rem}header.masthead h2{font-size:1.75em}}.portfolio{margin-bottom:-15px}.portfolio .portfolio-item{position:relative;display:block;max-width:25rem;margin-bottom:15px}.portfolio .portfolio-item .portfolio-item-caption{-webkit-transition:all ease .5s;transition:all ease .5s;opacity:0;background-color:rgba(33,150,243,.9)}.portfolio .portfolio-item .portfolio-item-caption:hover{opacity:1}.portfolio .portfolio-item .portfolio-item-caption .portfolio-item-caption-content{font-size:1.5rem}@media (min-width:576px){.portfolio{margin-bottom:-30px}.portfolio .portfolio-item{margin-bottom:30px}}.portfolio-modal .portfolio-modal-dialog{padding:3rem 1rem;min-height:calc(100vh - 2rem);margin:1rem calc(1rem - 8px);position:relative;z-index:2;-webkit-box-shadow:0 0 3rem 1rem rgba(0,0,0,.5);box-shadow:0 0 3rem 1rem rgba(0,0,0,.5)}.portfolio-modal .portfolio-modal-dialog .close-button{position:absolute;top:2rem;right:2rem}.portfolio-modal .portfolio-modal-dialog .close-button i{line-height:38px}.portfolio-modal .portfolio-modal-dialog h2{font-size:2rem}@media (min-width:768px){.portfolio-modal .portfolio-modal-dialog{min-height:100vh;padding:5rem;margin:3rem calc(3rem - 8px)}.portfolio-modal .portfolio-modal-dialog h2{font-size:3rem}}.social-icons .fa-linkedin{color:#0068b5}.social-icons .fa-github{color:#212121}.footer{padding-top:5rem;padding-bottom:5rem;background-color:#2c3e50;color:#fff}.copyright{background-color:#1a252f}a{color:#2196f3}a:active,a:focus,a:hover{color:#0c7cd5}.btn{border-width:2px}.bg-primary{background-color:#2196f3!important}.bg-secondary{background-color:#2c3e50!important}.text-primary{color:#2196f3!important}.text-secondary{color:#2c3e50!important}.btn-primary{background-color:#2196f3;border-color:#2196f3}.btn-primary:active,.btn-primary:focus,.btn-primary:hover{background-color:#0c7cd5;border-color:#0c7cd5}.btn-secondary{background-color:#2c3e50;border-color:#2c3e50}.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover{background-color:#1a252f;border-color:#1a252f} \ No newline at end of file diff --git a/public/gulpfile.js b/public/gulpfile.js new file mode 100644 index 0000000..51a7dfd --- /dev/null +++ b/public/gulpfile.js @@ -0,0 +1,90 @@ +var gulp = require('gulp'); +var sass = require('gulp-sass'); +var header = require('gulp-header'); +var cleanCSS = require('gulp-clean-css'); +var rename = require("gulp-rename"); +var uglify = require('gulp-uglify'); +var autoprefixer = require('gulp-autoprefixer'); +var pkg = require('./package.json'); +var browserSync = require('browser-sync').create(); + +// Set the banner content +var banner = ['/*!\n', + ' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n', + ' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n', + ' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n', + ' */\n', + '\n' +].join(''); + +// Compile SCSS +gulp.task('css:compile', function() { + return gulp.src('./scss/**/*.scss') + .pipe(sass.sync({ + outputStyle: 'expanded' + }).on('error', sass.logError)) + .pipe(autoprefixer({ + browsers: ['last 2 versions'], + cascade: false + })) + .pipe(header(banner, { + pkg: pkg + })) + .pipe(gulp.dest('./css')) +}); + +// Minify CSS +gulp.task('css:minify', ['css:compile'], function() { + return gulp.src([ + './css/*.css', + '!./css/*.min.css' + ]) + .pipe(cleanCSS()) + .pipe(rename({ + suffix: '.min' + })) + .pipe(gulp.dest('./css')) + .pipe(browserSync.stream()); +}); + +// CSS +gulp.task('css', ['css:compile', 'css:minify']); + +// Minify JavaScript +gulp.task('js:minify', function() { + return gulp.src([ + './js/*.js', + '!./js/*.min.js' + ]) + .pipe(uglify()) + .pipe(rename({ + suffix: '.min' + })) + .pipe(header(banner, { + pkg: pkg + })) + .pipe(gulp.dest('./js')) + .pipe(browserSync.stream()); +}); + +// JS +gulp.task('js', ['js:minify']); + +// Default task +gulp.task('default', ['css', 'js']); + +// Configure the browserSync task +gulp.task('browserSync', function() { + browserSync.init({ + server: { + baseDir: "./" + } + }); +}); + +// Dev task +gulp.task('dev', ['css', 'js', 'browserSync'], function() { + gulp.watch('./scss/*.scss', ['css']); + gulp.watch('./js/*.js', ['js']); + gulp.watch('./*.html', browserSync.reload); +}); diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..86c314a --- /dev/null +++ b/public/index.html @@ -0,0 +1,229 @@ + + + +
+ + + + + + +Excalibur is an open-source web app to extract tabular data from PDFs. There are both open and closed-source tools that are widely used for this task. They either give a nice output or fail miserably. This is not helpful since everything in the real world, including PDF table extraction, is fuzzy. This leads to the creation of ad-hoc table extraction scripts for each type of PDF table.
+Excalibur uses Camelot under the hood, which was created to offer users complete control over table extraction. If you can’t get your desired output with the default settings, you can tweak them and get the job done!
You can check out fantastic documentation at https://excalibur-py.readthedocs.io/.
+
Upload your PDF on Excalibur's web interface. All file storage and processing happens on your own local or remote machine. You have complete control over your data.
+View the tables detected by Excalibur on your PDF page.
+Draw a table boundary and also add column separators for cases where Excalibur is not able to detect the tables.
+View the extracted tables and then download them in the format you prefer. Excalibur supports CSV, Excel, JSON and HTML.
+