diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..54caef58d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,25 @@ +#[1.3.0](https://github.com/guilhermeborgesbastos/live-resume/releases/tag/v1.3) (2021-07-29) +###📃 release notes +- Add horizontal gestures to navigate the profile experience. +- Add horizontal gestures to navigate the profile posts. + +#[1.2.0](https://github.com/guilhermeborgesbastos/live-resume/releases/tag/v1.2) (2020-06-15) +###📃 release notes +- Add to the header an icon for downloading the resume as PDF file; +- Add the company logo to the Experience section; +- Improv application text's readability. + +#[1.1.0](https://github.com/guilhermeborgesbastos/live-resume/releases/tag/v1.1) (2020-06-07) +###📃 release notes +- Solve `websocket-extensions` dependency vulnerability; +- Improve the README instructions; +- Add Google Analytics integration to the repository using ga-beacon; +- Update the footer section to provide the GitHub fork link; +- Create the initial Wiki documentation; +- Improve the skill icons nomenclature, making it generic; +- Remove deprecated test files ( The new Unit and Integration tests are in development ) ; +- Remove CDN assets from the master branch, allowing offline development. + +#[1.0.0](https://github.com/guilhermeborgesbastos/live-resume/releases/tag/v1.0) (2020-05-22) +###📃 Initial release +- The Angular application is ready for production using ES6. The ES5 release can be found in the es5 branch. \ No newline at end of file diff --git a/README.md b/README.md index 606ed388c..b191369f1 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,10 @@ Get rid of your old and deprecated text resume by using the first **Open-source Web Application** _(100% free)_, which makes a professional personal website and portfolio easy and quick to build. -## What's included❓ +## What is included❓ * A fully functional _Angular 9_ application with a customizable template and content; -* Totally responsive for the mobile and desktop devices; +* Totally responsive for the mobile and desktop devices _(allow mobile gestures too... ;))_; * Internationalization for English and Portuguese _(easy for adding/removing new languages - in18 lib)_; * Mobile navigation sharing _(Share the resume with native apps like Whatsapp, LinkedIn, Facebook, etc...)_; * A complete [Wiki](https://github.com/guilhermeborgesbastos/live-resume/wiki) that provides support; @@ -39,9 +39,12 @@ Get rid of your old and deprecated text resume by using the first **Open-source * Firebase integration in the contact form; * Composed of 5 custom sections ([Welcome](https://guilhermeborgesbastos.com/), [About Me](https://guilhermeborgesbastos.com/about), [Experiences](https://guilhermeborgesbastos.com/experience), [Posts](https://guilhermeborgesbastos.com/posts), and [Contact](https://guilhermeborgesbastos.com/contact)); * Router fragment friendly (e.g: https://guilhermeborgesbastos.com/posts ); -* Source code verified by static code analyzers (safe and ready for production); +* Source code verified by static code analyzers _(safe and ready for production)_; -## 🗂Wiki Documentation & 💬Community Chat +## Changelog +[Learn about the latest improvements.](https://github.com/guilhermeborgesbastos/live-resume/CHANGELOG.md) + +## 🗂 Wiki Documentation & 💬 Community Chat To get more help on the setup, customization or any other aspect, accessing the following: @@ -66,7 +69,7 @@ npm -v 4. If you haven't installed NPM in your machine then go to [this link](https://www.npmjs.com/get-npm) in order to install NPM. -## 📥Installing and 📁Executing locally +## 📥 Installing and Executing locally > A video tutorial is also available [watch it](https://youtu.be/SmSCux_qx_Q). @@ -94,11 +97,11 @@ ng serve --host 0.0.0.0 --configuration=en > Please, feel free to make improvements, or any sort of changes and send it back via **pull request**. Your contribution is always welcome! -## How to 🔨customize? +## 🔨 How to customize? In the [Wiki Doc.](https://github.com/guilhermeborgesbastos/live-resume/wiki/applying-customizations) there is a specific page supporting you on how to apply customizations to the layout and more... [See page](https://github.com/guilhermeborgesbastos/live-resume/wiki/applying-customizations) -## 🖋Contribute +## 🖋 Contribute Feel free to add new features, language supports, fix bugs, or improve the docs. Any kind of help is appreciated! If you make any kind of improvements, please, send them back as a **Pull Request**. Let's keep making it better and up-to-date. @@ -117,11 +120,8 @@ This project uses several open source packages: > LinkedIn [profile](https://www.linkedin.com/in/guilhermeborgesbastos)
> Facebook [profile](https://www.facebook.com/guilherme.borgesbastos) -## 📝License +## 📝 License The theme is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT). [![Analytics](https://ga-beacon.appspot.com/UA-168686195-1/live-resume/home-page?pixel)](https://github.com/igrigorik/ga-beacon) - - - diff --git a/package-lock.json b/package-lock.json index d134e1833..5bfd7225e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "live-resume", - "version": "1.0.0", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -4173,8 +4173,7 @@ "chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chrome-trace-event": { "version": "1.0.2", @@ -6505,6 +6504,11 @@ "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", "dev": true }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -8654,7 +8658,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, "requires": { "minipass": "^2.9.0" }, @@ -8663,7 +8666,6 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -8672,8 +8674,7 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, @@ -8720,7 +8721,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, "requires": { "minimist": "^1.2.5" } @@ -12385,10 +12385,9 @@ "dev": true }, "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, + "version": "4.4.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.15.tgz", + "integrity": "sha512-ItbufpujXkry7bHH9NpQyTXPbJ72iTlXgkBAYsAjDXk3Ds8t/3NfO5P4xZGy7u+sYuQUbimgzswX4uQIEeNVOA==", "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", @@ -12403,7 +12402,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, "requires": { "minipass": "^2.6.0" } @@ -12412,7 +12410,6 @@ "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -12421,8 +12418,7 @@ "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" } } }, diff --git a/package.json b/package.json index 77aa60716..851a5b998 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "live-resume", - "version": "1.0.0", + "version": "1.3.0", "scripts": { "ng": "ng", "start": "ng serve", @@ -36,6 +36,7 @@ "compass-mixins": "^0.12.10", "elliptic": "^6.5.4", "firebase": "^7.14.2", + "hammerjs": "^2.0.8", "http-proxy": "^1.18.1", "ini": "^1.3.8", "ng-navigator-share": "^1.0.3", @@ -43,6 +44,7 @@ "rxjs": "^6.5.5", "serialize-javascript": "^4.0.0", "socket.io": "^2.4.1", + "tar": "^4.4.15", "tslib": "^1.13.0", "webpack-subresource-integrity": "^1.5.2", "websocket-extensions": "^0.1.4", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 87c85fce1..664a1552d 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -18,10 +18,19 @@ import { AngularFireDatabaseModule } from "@angular/fire/database"; import { AngularFireAnalyticsModule } from "@angular/fire/analytics"; import { environment } from "../environments/environment"; +import { HammerModule, HammerGestureConfig, HAMMER_GESTURE_CONFIG } from "@angular/platform-browser"; +import * as Hammer from "hammerjs"; + +export class MyHammerConfig extends HammerGestureConfig { + overrides = { + swipe: { direction: Hammer.DIRECTION_ALL }, + }; +} + registerLocaleData(localeEn, "en"); registerLocaleData(localePt, "pt-BR", localePtExtra); @NgModule({ - imports: [ + imports: [ BrowserModule, AppRoutingModule, CoreModule, @@ -30,10 +39,17 @@ registerLocaleData(localePt, "pt-BR", localePtExtra); PageNotFoundRoutingModule, AngularFireModule.initializeApp(environment.firebaseConfig), AngularFireDatabaseModule, - AngularFireAnalyticsModule + AngularFireAnalyticsModule, + HammerModule ], declarations: [ AppComponent ], - bootstrap: [ AppComponent ] + bootstrap: [ AppComponent ], + providers: [ + { + provide: HAMMER_GESTURE_CONFIG, + useClass: MyHammerConfig, + }, + ] }) export class AppModule {} \ No newline at end of file diff --git a/src/app/core/shared/abstract.swipe.section.ts b/src/app/core/shared/abstract.swipe.section.ts new file mode 100644 index 000000000..4b788ce9c --- /dev/null +++ b/src/app/core/shared/abstract.swipe.section.ts @@ -0,0 +1,43 @@ +import { SwipeSection } from "./swipe.section"; + +enum Direction { + LEFT, + RIGHT, + NOT_READABLE +} + +export abstract class AbstractSwipeSection implements SwipeSection { + + private horizontalSwipeRatio: number; + + private readonly horizontalStartPoint = 0; + + constructor(horizontalSwipeRatio: number = 40) { + this.horizontalSwipeRatio = horizontalSwipeRatio; + } + + onSwipe(event: any): void { + const direction: Direction = this.getEventSwipeDirection(event); + if(!this.disablePreviousNavigation() && direction === Direction.RIGHT) { + this.onClickPrevious(); + } else if(!this.disableNextNavigation() && direction === Direction.LEFT) { + this.onClickNext(); + } + } + + private getEventSwipeDirection(event: any): Direction | undefined { + if(Math.abs(event.deltaX) > this.horizontalSwipeRatio) { + return event.deltaX > this.horizontalStartPoint ? Direction.RIGHT : Direction.LEFT; + } + return Direction.NOT_READABLE; + } + + abstract disablePreviousNavigation(): boolean; + + abstract disableNextNavigation(): boolean; + + abstract onClickPrevious(): void; + + abstract onClickNext(): void; + +} \ No newline at end of file diff --git a/src/app/core/shared/swipe.section.ts b/src/app/core/shared/swipe.section.ts new file mode 100644 index 000000000..af31837ee --- /dev/null +++ b/src/app/core/shared/swipe.section.ts @@ -0,0 +1,12 @@ +export declare interface SwipeSection { + + onSwipe(event: any): void; + + disablePreviousNavigation(): boolean; + + disableNextNavigation(): boolean; + + onClickPrevious(): void; + + onClickNext(): void; +} \ No newline at end of file diff --git a/src/app/experience/experience.component.html b/src/app/experience/experience.component.html index 530397eb1..1b0aa4a89 100644 --- a/src/app/experience/experience.component.html +++ b/src/app/experience/experience.component.html @@ -6,12 +6,12 @@

Experiences