From f6569d79d90f1280cd6e3e3482e3c68a7ac02c67 Mon Sep 17 00:00:00 2001 From: loopilla Date: Tue, 24 Jan 2017 16:07:11 +0100 Subject: [PATCH 1/4] Adding bourbon.io support and use some refill patterns. --- .vscode/settings.json | 3 + README.md | 8 +- package.json | 5 +- src/app/app.component.html | 3 + src/app/app.component.scss | 7 + src/app/app.component.ts | 2 +- src/app/app.module.ts | 4 + src/app/home/home.component.html | 1 + src/app/navigation/navigation.component.html | 40 +++ src/app/navigation/navigation.component.scss | 273 ++++++++++++++++++ .../navigation/navigation.component.spec.ts | 0 src/app/navigation/navigation.component.ts | 10 + src/app/parallax/parallax.component.html | 6 + src/app/parallax/parallax.component.scss | 35 +++ src/app/parallax/parallax.component.spec.ts | 0 src/app/parallax/parallax.component.ts | 42 +++ src/public/img/footer_lodyas.png | Bin 0 -> 33702 bytes src/style/app.scss | 2 +- webpack.config.js | 7 +- 19 files changed, 443 insertions(+), 5 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/app/navigation/navigation.component.html create mode 100644 src/app/navigation/navigation.component.scss create mode 100644 src/app/navigation/navigation.component.spec.ts create mode 100644 src/app/navigation/navigation.component.ts create mode 100644 src/app/parallax/parallax.component.html create mode 100644 src/app/parallax/parallax.component.scss create mode 100644 src/app/parallax/parallax.component.spec.ts create mode 100644 src/app/parallax/parallax.component.ts create mode 100644 src/public/img/footer_lodyas.png diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..ccdda087 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.check.workspaceVersion": false +} \ No newline at end of file diff --git a/README.md b/README.md index 3a43c6a2..dabfd770 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -# angular2-webpack +# angular2-webpack extended with bourbon.io +This is an extended version of the base repo. It includes the bourbon.io sass library and implements some bourbon/refill patterns. +Also shows example to use the different events handling in Angular2 context. + +Note: +* the port has been changed to 9000. + [![Dependency Status](https://david-dm.org/preboot/angular2-webpack/status.svg)](https://david-dm.org/preboot/angular2-webpack#info=dependencies) [![devDependency Status](https://david-dm.org/preboot/angular2-webpack/dev-status.svg)](https://david-dm.org/preboot/angular2-webpack#info=devDependencies) [![Join the chat at https://gitter.im/preboot/angular2-webpack](https://badges.gitter.im/preboot/angular2-webpack.svg)](https://gitter.im/preboot/angular2-webpack?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) diff --git a/package.json b/package.json index eb3e2739..f6a1e7fb 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "clean-start": "npm run clean-install && npm start", "watch": "webpack --watch --progress --profile", "build": "rimraf dist && webpack --progress --profile --bail", - "server": "webpack-dev-server --inline --progress --port 8080", + "server": "webpack-dev-server --inline --progress --port 9000", "webdriver-update": "webdriver-manager update", "webdriver-start": "webdriver-manager start", "lint": "tslint --force \"src/**/*.ts\"", @@ -33,7 +33,10 @@ "@angular/platform-browser": "2.4.2", "@angular/platform-browser-dynamic": "2.4.2", "@angular/router": "3.4.2", + "bourbon": "^4.2.7", + "bourbon-neat": "^1.8.0", "core-js": "^2.4.1", + "normalize-scss": "^6.0.0", "reflect-metadata": "^0.1.3", "rxjs": "5.0.1", "zone.js": "^0.7.2" diff --git a/src/app/app.component.html b/src/app/app.component.html index 208e6687..423b4ba4 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,9 +1,12 @@ + +

Hello from {{api.title}}!

diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 895a09ab..334e1a25 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -1,3 +1,9 @@ +@import 'http://github.com/normalize'; +@import 'http://github.com/bourbon'; +@import 'http://github.com/neat'; + +@include normalize(); + // styles applied on :host are applied on the current component, "app" in this case :host { display: block; @@ -14,6 +20,7 @@ header { } main { + @include outer-container(80%); padding: 1em; font-family: Arial, Helvetica, sans-serif; text-align: center; diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 4fc43212..6124d1eb 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -7,7 +7,7 @@ import '../style/app.scss'; @Component({ selector: 'my-app', // templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'], + styleUrls: ['./app.component.scss'] }) export class AppComponent { url = 'https://github.com/preboot/angular2-webpack'; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index cea4ed87..365bbdb2 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -4,6 +4,8 @@ import { HttpModule } from '@angular/http'; import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component'; +import { NavigationComponent } from './navigation/navigation.component'; +import { ParallaxComponent } from './parallax/parallax.component'; import { HomeComponent } from './home/home.component'; import { AboutComponent } from './about/about.component'; import { ApiService } from './shared'; @@ -20,6 +22,8 @@ import { removeNgStyles, createNewHosts } from '@angularclass/hmr'; ], declarations: [ AppComponent, + NavigationComponent, + ParallaxComponent, HomeComponent, AboutComponent ], diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 604d9e1d..0e573e3a 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,3 +1,4 @@ +

Home Works!

diff --git a/src/app/navigation/navigation.component.html b/src/app/navigation/navigation.component.html new file mode 100644 index 00000000..70f1f84b --- /dev/null +++ b/src/app/navigation/navigation.component.html @@ -0,0 +1,40 @@ + diff --git a/src/app/navigation/navigation.component.scss b/src/app/navigation/navigation.component.scss new file mode 100644 index 00000000..12a2c760 --- /dev/null +++ b/src/app/navigation/navigation.component.scss @@ -0,0 +1,273 @@ +@import 'http://github.com/bourbon'; +@import 'http://github.com/neat'; + +.centered-navigation { + $base-border-radius: 3px !default; + $dark-gray: #333 !default; + $large-screen: 53.75em !default; + $base-font-color: $dark-gray !default; + $centered-navigation-padding: 1em; + $centered-navigation-logo-height: 2em; + $centered-navigation-background: #E7F1EC; + $centered-navigation-color: transparentize($base-font-color, 0.3); + $centered-navigation-color-hover: $base-font-color; + $centered-navigation-height: 60px; + $centered-navigation-item-padding: 1em; + $centered-navigation-submenu-padding: 1em; + $centered-navigation-submenu-width: 12em; + $centered-navigation-item-nudge: 2.2em; + $horizontal-bar-mode: $large-screen; + + background-color: $centered-navigation-background; + border-bottom: 1px solid darken($centered-navigation-background, 6%); + min-height: $centered-navigation-height; + width: 100%; + z-index: 9999; + + // Mobile view + + .mobile-logo { + display: inline; + float: left; + max-height: $centered-navigation-height; + padding-left: $centered-navigation-padding; + + img { + max-height: $centered-navigation-height; + opacity: 0.6; + padding: 0.8em 0; + } + + @include media($horizontal-bar-mode) { + display: none; + } + } + + .centered-navigation-mobile-menu { + color: $centered-navigation-color; + display: block; + float: right; + line-height: $centered-navigation-height; + margin: 0; + padding-right: $centered-navigation-submenu-padding; + text-decoration: none; + text-transform: uppercase; + + @include media ($horizontal-bar-mode) { + display: none; + } + + &:focus, + &:hover { + color: $centered-navigation-color-hover; + } + } + + // Nav menu + + .centered-navigation-wrapper { + @include outer-container; + @include clearfix; + position: relative; + z-index: 999; + } + + ul.centered-navigation-menu { + clear: both; + display: none; + margin: 0 auto; + overflow: visible; + padding: 0; + -webkit-transform-style: preserve-3d; // stop webkit flicker + width: 100%; + z-index: 99999; + + &.show { + display: block; + } + + @include media ($horizontal-bar-mode) { + display: block; + text-align: center; + } + } + + // The nav items + + .nav-link:first-child { + @include media($horizontal-bar-mode) { + margin-left: $centered-navigation-item-nudge; + } + } + + ul li.nav-link { + background: $centered-navigation-background; + display: block; + line-height: $centered-navigation-height; + overflow: hidden; + padding-right: $centered-navigation-submenu-padding; + text-align: right; + width: 100%; + z-index: 9999; + + a { + color: $centered-navigation-color; + display: inline-block; + outline: none; + text-decoration: none; + + &:focus, + &:hover { + color: $centered-navigation-color-hover; + } + } + + @include media($horizontal-bar-mode) { + background: transparent; + display: inline; + line-height: $centered-navigation-height; + + a { + padding-right: $centered-navigation-item-padding; + } + } + } + + li.logo.nav-link { + display: none; + line-height: 0; + + @include media($horizontal-bar-mode) { + display: inline; + } + } + + .logo img { + margin-bottom: -$centered-navigation-logo-height / 3; + max-height: $centered-navigation-logo-height; + opacity: 0.6; + } + + // Sub menus + + li.more.nav-link { + padding-right: 0; + + @include media($large-screen) { + padding-right: $centered-navigation-submenu-padding; + } + + > ul > li:first-child a { + padding-top: 1em; + } + + a { + margin-right: $centered-navigation-submenu-padding; + } + + > a { + padding-right: 0.6em; + } + + > a::after { + @include position(absolute, auto -0.4em auto auto); + color: $centered-navigation-color; + content: "\25BE"; + } + } + + li.more { + overflow: visible; + padding-right: 0; + + a { + padding-right: $centered-navigation-submenu-padding; + } + + > a { + padding-right: 1.6em; + position: relative; + + @include media($large-screen) { + margin-right: $centered-navigation-submenu-padding; + } + + &::after { + content: "›"; + font-size: 1.2em; + position: absolute; + right: $centered-navigation-submenu-padding / 2; + } + } + + &:focus > .submenu, + &:hover > .submenu { + display: block; + } + + @include media($horizontal-bar-mode) { + padding-right: $centered-navigation-submenu-padding; + position: relative; + } + } + + ul.submenu { + display: none; + padding-left: 0; + + @include media($horizontal-bar-mode) { + left: -$centered-navigation-submenu-padding; + position: absolute; + top: 1.5em; + } + + .submenu.fly-out-right { + @include media($horizontal-bar-mode) { + left: $centered-navigation-submenu-width - 0.2em; + top: 0; + } + } + + .submenu.fly-out-left { + @include media($horizontal-bar-mode) { + left: -$centered-navigation-submenu-width + 0.2em; + top: 0; + } + } + + li { + display: block; + padding-right: 0; + + @include media($horizontal-bar-mode) { + line-height: $centered-navigation-height / 1.3; + + &:first-child > a { + border-top-left-radius: $base-border-radius; + border-top-right-radius: $base-border-radius; + } + + &:last-child > a { + border-bottom-left-radius: $base-border-radius; + border-bottom-right-radius: $base-border-radius; + padding-bottom: 0.7em; + } + } + + a { + background-color: darken($centered-navigation-background, 3%); + display: inline-block; + text-align: right; + text-decoration: none; + width: 100%; + + @include media($horizontal-bar-mode) { + background-color: $centered-navigation-background; + padding-left: $centered-navigation-submenu-padding; + text-align: left; + width: $centered-navigation-submenu-width; + } + } + } + } +} diff --git a/src/app/navigation/navigation.component.spec.ts b/src/app/navigation/navigation.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/app/navigation/navigation.component.ts b/src/app/navigation/navigation.component.ts new file mode 100644 index 00000000..a3c0edba --- /dev/null +++ b/src/app/navigation/navigation.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-navigation', + templateUrl: './navigation.component.html', + styleUrls: ['./navigation.component.scss'] +}) +export class NavigationComponent { + +} \ No newline at end of file diff --git a/src/app/parallax/parallax.component.html b/src/app/parallax/parallax.component.html new file mode 100644 index 00000000..16537342 --- /dev/null +++ b/src/app/parallax/parallax.component.html @@ -0,0 +1,6 @@ +
+
+

Angular2 with Bourbon.io support

+
+
+
diff --git a/src/app/parallax/parallax.component.scss b/src/app/parallax/parallax.component.scss new file mode 100644 index 00000000..3c9471d9 --- /dev/null +++ b/src/app/parallax/parallax.component.scss @@ -0,0 +1,35 @@ +@import 'http://github.com/bourbon'; +@import 'http://github.com/neat'; + +$parallax-window-height: 60em; +$parallax-background-height: $parallax-window-height * 2; + +.parallax-window { + max-height: $parallax-window-height; + overflow: hidden; + position: relative; + text-align: center; + width: 100%; +} + +.parallax-static-content { + color: black; + //color: #9A9A8A; + padding: 8em 0; + position: relative; + z-index: 9; +} + +.parallax-background { + background: url("https://raw.githubusercontent.com/thoughtbot/refills/master/source/images/mountains.png") repeat; + background-position: top; + background-size: cover; + background-color: beige; + height: $parallax-background-height; + left: 0; + position: absolute; + top: - $parallax-window-height / 3; + width: 100%; +} + +// Based on http://codepen.io/skeurentjes/ diff --git a/src/app/parallax/parallax.component.spec.ts b/src/app/parallax/parallax.component.spec.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/app/parallax/parallax.component.ts b/src/app/parallax/parallax.component.ts new file mode 100644 index 00000000..755c477b --- /dev/null +++ b/src/app/parallax/parallax.component.ts @@ -0,0 +1,42 @@ +import { Component, AfterViewInit, EventEmitter, Output, HostListener } from '@angular/core'; + +@Component({ + selector: 'parralax-hero', + templateUrl: './parallax.component.html', + styleUrls: ['./parallax.component.scss'] +}) +export class ParallaxComponent implements AfterViewInit { + @HostListener('window:scroll', ['$event']) + scroll(event) { + console.log('Call from child'); + this.parallax(); + }; + + ngAfterViewInit () { + console.log('ngAfterViewInit()'); // document ready + if( document.querySelector("#js-parallax-window") ) { + this.parallax(); + } + } + + parallax() { + if( document.querySelector("#js-parallax-window") ) { + console.log('Todo parallax()'); + // var plxBackground = document.querySelector("#js-parallax-background"); + // var plxWindow = document.querySelector("#js-parallax-window"); + + // var plxWindowTopToPageTop = plxWindow.clientTop; + // var windowTopToPageTop = window.scroll().top; + // var plxWindowTopToWindowTop = plxWindowTopToPageTop - windowTopToPageTop; + + // var plxBackgroundTopToPageTop = plxBackground.clientTop; + // var windowInnerHeight = window.innerHeight; + // var plxBackgroundTopToWindowTop = plxBackgroundTopToPageTop - windowTopToPageTop; + // var plxBackgroundTopToWindowBottom = windowInnerHeight - plxBackgroundTopToWindowTop; + // var plxSpeed = 0.35; + + // plxBackground. style.top = ('top', - (plxWindowTopToWindowTop * plxSpeed) + 'px'); + } + } + +} diff --git a/src/public/img/footer_lodyas.png b/src/public/img/footer_lodyas.png new file mode 100644 index 0000000000000000000000000000000000000000..8b1d392408147834387766c9212cffbf549fb0d4 GIT binary patch literal 33702 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 literal 0 HcmV?d00001 diff --git a/src/style/app.scss b/src/style/app.scss index d73ea23c..d8b8665b 100644 --- a/src/style/app.scss +++ b/src/style/app.scss @@ -1,6 +1,6 @@ // styles in src/style directory are applied to the whole page body { - background: #0147A7; + background: url('http://github.com/img/footer_lodyas.png') #0147A7; color: #fff; } a { diff --git a/webpack.config.js b/webpack.config.js index 5327254a..e472f6cf 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -57,7 +57,7 @@ module.exports = function makeWebpackConfig() { */ config.output = isTest ? {} : { path: root('dist'), - publicPath: isProd ? '/' : 'http://localhost:8080/', + publicPath: isProd ? '/' : 'http://localhost:9000/', filename: isProd ? 'js/[name].[hash].js' : 'js/[name].js', chunkFilename: isProd ? '[id].[hash].chunk.js' : '[id].chunk.js' }; @@ -189,6 +189,11 @@ module.exports = function makeWebpackConfig() { */ sassLoader: { //includePaths: [path.resolve(__dirname, "node_modules/foundation-sites/scss")] + includePaths: [ + require('bourbon').includePaths, + require('bourbon-neat').includePaths, + path.resolve(__dirname, "node_modules/normalize-scss/sass") + ] }, /** * PostCSS From d3171fba1669993b63e46e611cb3004ff6dc5e52 Mon Sep 17 00:00:00 2001 From: loopilla Date: Fri, 27 Jan 2017 17:45:45 +0100 Subject: [PATCH 2/4] adding parallax effect --- src/app/app.component.html | 13 +++++++ src/app/parallax/parallax.component.html | 6 ++-- src/app/parallax/parallax.component.scss | 2 +- src/app/parallax/parallax.component.ts | 43 +++++++++++++--------- src/app/parallax/styled.directive.ts | 45 ++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 20 deletions(-) create mode 100644 src/app/parallax/styled.directive.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index 423b4ba4..00ca5f9f 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -14,6 +14,19 @@

Hello from {{api.title}}!

+ +
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pellentesque, ante vel rutrum pharetra, magna arcu vestibulum nulla, sed dapibus mauris nibh eu ante. Curabitur pharetra, ante quis tristique suscipit, magna mi semper magna, egestas ullamcorper dolor dui nec velit. Vivamus semper mauris sit amet mattis rutrum. Nulla ut molestie nunc, quis efficitur mi. Sed ut fringilla odio. Ut sagittis tincidunt sapien, a rhoncus augue consectetur sit amet. Fusce auctor quam vitae sapien porta consequat. Proin sed porta tellus. Quisque convallis sem sed diam auctor, eget vehicula odio sodales. Donec aliquet ante elit. Mauris facilisis faucibus iaculis. Cras sit amet arcu porttitor, porttitor sapien sed, euismod augue. Pellentesque dui nisl, posuere et tortor quis, porta elementum lorem. Vestibulum vitae nulla eget diam fringilla porttitor.

+ +

Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec malesuada velit bibendum nisl accumsan, non feugiat augue suscipit. Fusce ultrices pulvinar sapien, vel tristique eros bibendum sit amet. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla at nisi risus. Nullam imperdiet urna eget ligula lacinia condimentum. In hac habitasse platea dictumst. Curabitur quis velit at metus accumsan sodales. Fusce cursus molestie sem a vestibulum. Quisque feugiat, turpis at porta euismod, enim massa facilisis risus, in commodo nibh ex non purus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin ultrices volutpat accumsan.

+ +

Nulla porta pretium nisi, scelerisque volutpat velit. Curabitur sagittis magna in dolor scelerisque fermentum. Sed tincidunt sollicitudin semper. Donec blandit diam lorem, sed lobortis lectus rutrum convallis. Pellentesque pharetra mauris non metus lacinia, non varius urna efficitur. Maecenas ac tortor nec tortor venenatis mollis a non urna. Nulla vestibulum, nibh ut hendrerit ultrices, elit quam lobortis sem, at vulputate velit nisl eu lorem. Suspendisse a tellus interdum, pulvinar lacus a, venenatis nulla.

+ +

In fermentum tellus velit, sit amet vehicula orci ullamcorper sit amet. Fusce blandit interdum tellus, nec facilisis neque auctor eget. Interdum et malesuada fames ac ante ipsum primis in faucibus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam mattis eget felis et auctor. Pellentesque vel odio ante. Vivamus facilisis tellus ut volutpat feugiat. Ut vitae blandit odio. Ut faucibus risus eu molestie molestie. Maecenas vitae ante viverra, tincidunt magna at, congue est. Quisque vel turpis vel elit rhoncus consequat.

+ +

Suspendisse potenti. Nunc in consectetur neque. Donec a urna in lacus varius lobortis. Mauris in augue eget erat hendrerit laoreet et in nunc. Praesent auctor lacus vel viverra porttitor. Duis porttitor mattis tempus. Mauris dolor magna, sagittis et justo sed, ornare aliquet metus. Suspendisse sollicitudin, ligula eu fermentum volutpat, metus dolor commodo magna, vel fringilla est lorem quis orci. Sed at faucibus erat, eget maximus risus. Mauris laoreet massa ornare ultricies pharetra. Duis eros odio, malesuada a efficitur ac, maximus ac urna. Cras facilisis enim sagittis, congue tellus sed, ultrices purus. Duis nunc est, laoreet ut libero vitae, ullamcorper maximus lectus. Donec vestibulum laoreet accumsan. Nulla sed nisl commodo metus consectetur vehicula et convallis sem.

+
+