From 40c646ecedb81257b747039ebd4cc09fda8c04e5 Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Fri, 4 Nov 2016 07:40:21 -0700 Subject: [PATCH 1/7] chore: remove unnecessary bad-code-excerpt-skip-patterns (#2745) * chore: remove unnecessary bad-code-excerpt-skip-patterns * chore(ts/style-guide): fix BAD FILENAME in code-tabs --- public/docs/ts/latest/guide/style-guide.jade | 4 ++-- scripts/config/bad-code-excerpt-skip-patterns.txt | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/public/docs/ts/latest/guide/style-guide.jade b/public/docs/ts/latest/guide/style-guide.jade index 2b3910da6f..b1ecef666b 100644 --- a/public/docs/ts/latest/guide/style-guide.jade +++ b/public/docs/ts/latest/guide/style-guide.jade @@ -1363,7 +1363,7 @@ a(href="#toc") Back to top style-guide/ts/04-10/app/shared/filter-text/filter-text.component.ts, style-guide/ts/04-10/app/shared/filter-text/filter-text.service.ts, style-guide/ts/04-10/app/heroes/heroes.component.ts, - style-guide/ts/04-10/app/heroes/heroes.component.html, + style-guide/ts/04-10/app/heroes/heroes.component.html `, `,,,`, `app/shared/shared.module.ts, @@ -1371,7 +1371,7 @@ a(href="#toc") Back to top app/shared/filter-text/filter-text.component.ts, app/shared/filter-text/filter-text.service.ts, app/heroes/heroes.component.ts, - app/heroes/heroes.component.html, + app/heroes/heroes.component.html `) :marked diff --git a/scripts/config/bad-code-excerpt-skip-patterns.txt b/scripts/config/bad-code-excerpt-skip-patterns.txt index 731cbff933..1331f28b30 100644 --- a/scripts/config/bad-code-excerpt-skip-patterns.txt +++ b/scripts/config/bad-code-excerpt-skip-patterns.txt @@ -1,8 +1,5 @@ # Comments & blank lines are ignored. Entry format (make pattern as specific as possible): # # reason / issue number -/[jt]s/.*/api/router-deprecated/ # Obsolete API entries. No issue open yet. -/ts/latest/guide/style-guide.html # https://github.com/angular/angular.io/issues/2123 -/ts/latest/guide/upgrade.html # In a transient state until RC6 - @filipe.silva /[jt]s/.*/api/forms/index/NG_VALIDATORS-let.html # RC6 contains broken example tags /dart/latest/tutorial/toh-pt5.html From a3466b9cd37dc05361c4be5cf70ee0d26d960ad9 Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Fri, 4 Nov 2016 08:06:13 -0700 Subject: [PATCH 2/7] chore: don't shred _boilerplate files nor dart build files (#2747) --- gulpfile.js | 2 +- tools/doc-shredder/doc-shredder.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index a6d2aff1b9..eb1b04cc7b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -808,7 +808,7 @@ gulp.task('_harp-compile', function() { gulp.task('_shred-devguide-examples', ['_shred-clean-devguide', '_copy-example-boilerplate'], function() { // Split big shredding task into partials 2016-06-14 - var examplePaths = globby.sync(EXAMPLES_PATH+'/*/', {ignore: ['/node_modules']}); + var examplePaths = globby.sync(EXAMPLES_PATH+'/*/', {ignore: ['**/node_modules', '**/_boilerplate']}); var promise = Promise.resolve(true); examplePaths.forEach(function (examplePath) { promise = promise.then(() => docShredder.shredSingleExampleDir(_devguideShredOptions, examplePath)); diff --git a/tools/doc-shredder/doc-shredder.js b/tools/doc-shredder/doc-shredder.js index 6ff536d782..7cb4586d23 100644 --- a/tools/doc-shredder/doc-shredder.js +++ b/tools/doc-shredder/doc-shredder.js @@ -4,7 +4,7 @@ var del = require('del'); var Dgeni = require('dgeni'); var _ = require('lodash'); var globby = require('globby'); -var ignoreDirs = ['**/node_modules/**', '**/dist/**']; +var ignoreDirs = ['**/node_modules/**', '**/dist/**', '**/dart/**/build/**', '**/.pub/**']; var _getLogLevel = function (options) { return options.logLevel || 'info'; } From 83faca0f9459159152fe921d41ece64906c5282a Mon Sep 17 00:00:00 2001 From: Benjamin Dopplinger Date: Sat, 5 Nov 2016 03:46:36 +1100 Subject: [PATCH 3/7] docs(dart): remove unnecessary directives import (#2282) --- public/docs/_examples/forms/dart/pubspec.yaml | 1 - public/docs/_examples/template-syntax/dart/pubspec.yaml | 1 - 2 files changed, 2 deletions(-) diff --git a/public/docs/_examples/forms/dart/pubspec.yaml b/public/docs/_examples/forms/dart/pubspec.yaml index 62c3e32f16..5a456f3c18 100644 --- a/public/docs/_examples/forms/dart/pubspec.yaml +++ b/public/docs/_examples/forms/dart/pubspec.yaml @@ -12,7 +12,6 @@ transformers: - angular2: platform_directives: - 'package:angular2/common.dart#COMMON_DIRECTIVES' - - 'package:angular2/common.dart#FORM_DIRECTIVES' platform_pipes: - 'package:angular2/common.dart#COMMON_PIPES' entry_points: web/main.dart diff --git a/public/docs/_examples/template-syntax/dart/pubspec.yaml b/public/docs/_examples/template-syntax/dart/pubspec.yaml index 7de95f550e..17ccc01d50 100644 --- a/public/docs/_examples/template-syntax/dart/pubspec.yaml +++ b/public/docs/_examples/template-syntax/dart/pubspec.yaml @@ -12,7 +12,6 @@ transformers: - angular2: platform_directives: - 'package:angular2/common.dart#COMMON_DIRECTIVES' - - 'package:angular2/common.dart#FORM_DIRECTIVES' platform_pipes: - 'package:angular2/common.dart#COMMON_PIPES' entry_points: web/main.dart From e813fb4716e67f806119dff659aca152da238b08 Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Wed, 2 Nov 2016 16:16:35 -0700 Subject: [PATCH 4/7] chore: fix firebase.json; check-deploy to active firebase project Remove project name from firebase.json, since that is deprecated. The `check-deploy` gulp task now checks that an active project is defined at the start of `check-deploy`. To set the active project use: `firebase use `. Fixes #2576 --- .firebaserc | 4 +- firebase.json | 149 +++++++++++++++++++++++++------------------------- gulpfile.js | 21 +++++-- 3 files changed, 95 insertions(+), 79 deletions(-) diff --git a/.firebaserc b/.firebaserc index 2ef123c5bd..77c09fb883 100644 --- a/.firebaserc +++ b/.firebaserc @@ -1,6 +1,8 @@ { "projects": { "live": "angular-io", - "ngdocsdev": "ngdocsdev" + "ngdocsdev": "ngdocsdev", + "kw-dev": "kw-angular-io", + "dev": "angular-io-dev" } } \ No newline at end of file diff --git a/firebase.json b/firebase.json index 90419f857a..3b5a956478 100644 --- a/firebase.json +++ b/firebase.json @@ -1,75 +1,76 @@ { - "firebase": "angular-io", - "public": "www", - "rewrites": [ - { - "source": "/docs/dart/latest/testing", - "destination":"/docs/dart/latest/guide/testing.html" - }, - { - "source": "/docs/dart/latest/tutorial", - "destination": "/docs/dart/latest/index.html" - }, - { - "source": "/docs/js/latest/testing", - "destination": "/docs/js/latest/guide/testing.html" - }, - { - "source": "/docs/js/latest/tutorial", - "destination": "/docs/js/latest/index.html" - }, - { - "source": "/docs/ts/latest/guide/setup.html", - "destination": "/docs/ts/latest/index.html" - }, - { - "source": "/docs/ts/latest/testing", - "destination": "/docs/ts/latest/guide/testing.html" - }, - { - "source": "/cheatsheet", - "destination": "/docs/ts/latest/guide/cheatsheet.html" - }, - { - "source": "/cheatsheet.json", - "destination": "/docs/ts/latest/guide/cheatsheet.json" - }, - { - "source": "/AngularCheatSheet_Letter.pdf", - "destination": "/docs/ts/latest/guide/AngularCheatSheet_Letter.pdf" - }, - { - "source": "/AngularCheatSheet_Poster.pdf", - "destination": "/docs/ts/latest/guide/AngularCheatSheet_Poster.pdf" - }, - { - "source": "/cardboard", - "destination": "/cardboard/index.html" - }, - { - "source": "/license", - "destination": "/license.txt" - }, - { - "source": "/events", - "destination": "/events.html" - }, - { - "source": "/survey", - "destination": "/survey.html" - }, - { - "source": "/dart", - "destination": "/docs/dart/latest/index.html" - }, - { - "source": "/styleguide", - "destination": "/docs/ts/latest/guide/style-guide.html" - } - ], - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ] -} + "hosting": { + "public": "www", + "rewrites": [ + { + "source": "/docs/dart/latest/testing", + "destination": "/docs/dart/latest/guide/testing.html" + }, + { + "source": "/docs/dart/latest/tutorial", + "destination": "/docs/dart/latest/index.html" + }, + { + "source": "/docs/js/latest/testing", + "destination": "/docs/js/latest/guide/testing.html" + }, + { + "source": "/docs/js/latest/tutorial", + "destination": "/docs/js/latest/index.html" + }, + { + "source": "/docs/ts/latest/guide/setup.html", + "destination": "/docs/ts/latest/index.html" + }, + { + "source": "/docs/ts/latest/testing", + "destination": "/docs/ts/latest/guide/testing.html" + }, + { + "source": "/cheatsheet", + "destination": "/docs/ts/latest/guide/cheatsheet.html" + }, + { + "source": "/cheatsheet.json", + "destination": "/docs/ts/latest/guide/cheatsheet.json" + }, + { + "source": "/AngularCheatSheet_Letter.pdf", + "destination": "/docs/ts/latest/guide/AngularCheatSheet_Letter.pdf" + }, + { + "source": "/AngularCheatSheet_Poster.pdf", + "destination": "/docs/ts/latest/guide/AngularCheatSheet_Poster.pdf" + }, + { + "source": "/cardboard", + "destination": "/cardboard/index.html" + }, + { + "source": "/license", + "destination": "/license.txt" + }, + { + "source": "/events", + "destination": "/events.html" + }, + { + "source": "/survey", + "destination": "/survey.html" + }, + { + "source": "/dart", + "destination": "/docs/dart/latest/index.html" + }, + { + "source": "/styleguide", + "destination": "/docs/ts/latest/guide/style-guide.html" + } + ], + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ] + } +} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index eb1b04cc7b..01f192a37f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,7 @@ var fsExtra = require('fs-extra'); var fs = fsExtra; var exec = require('child_process').exec; var execPromise = Q.denodeify(exec); +var execSync = require('child_process').execSync; // cross platform version of spawn that also works on windows. var xSpawn = require('cross-spawn'); var prompt = require('prompt'); @@ -744,7 +745,7 @@ gulp.task('build-compile', ['build-docs'], function() { return harpCompile(); }); -gulp.task('check-deploy', ['build-docs'], function() { +gulp.task('check-deploy', ['firebase-use-proj-check', 'build-docs'], () => { return harpCompile().then(function() { gutil.log('compile ok'); gutil.log('running live server ...'); @@ -753,7 +754,7 @@ gulp.task('check-deploy', ['build-docs'], function() { }).then(function(shouldDeploy) { if (shouldDeploy) { gutil.log('deploying...'); - return execPromise('firebase deploy'); + return execPromise(`firebase deploy -p ${WWW}`); } else { return ['Not deploying']; } @@ -764,6 +765,17 @@ gulp.task('check-deploy', ['build-docs'], function() { }); }); +gulp.task('firebase-use-proj-check', cb => { + try { + execSync('firebase use'); + } catch (e) { + // Rerun command so user gets project + alias info + execSync('firebase use', {stdio:[0,1,2]}); + throw `\nAborting: no firebase project selected. Run:\n\n firebase use \n\n`; + } + return cb(); +}); + gulp.task('test-api-builder', function (cb) { execCommands(['npm run test-api-builder'], {}, cb); }); @@ -1071,7 +1083,6 @@ function backupApiHtmlFilesExist(folderName) { } function harpJsonSetJade2NgTo(v) { - const execSync = require('child_process').execSync; const harpJsonPath = path.join(ANGULAR_IO_PROJECT_PATH, 'harp.json'); execSync(`perl -pi -e 's/("jade2ng": *)\\w+/$1${v}/' ${harpJsonPath}`); const harpJson = require(harpJsonPath); @@ -1204,10 +1215,12 @@ function watchAndSync(options, cb) { // returns a promise; function askDeploy() { + // Show user what the currently active firebase project is: + execSync('firebase use', {stdio:[0,1,2]}); prompt.start(); var schema = { name: 'shouldDeploy', - description: 'Deploy to Firebase? (y/n)', + description: `Deploy ${WWW} to firebase? (y/n)`, type: 'string', pattern: /Y|N|y|n/, message: "Respond with either a 'y' or 'n'", From 6ec0e8c3768d8892b1685c0a61313101987957c6 Mon Sep 17 00:00:00 2001 From: Patrice Chalin Date: Fri, 4 Nov 2016 14:11:32 -0700 Subject: [PATCH 5/7] chore: update harp release and drop terraform patch script (#2754) --- package.json | 2 +- scripts/install.sh | 3 --- scripts/patch.sh | 17 ----------------- 3 files changed, 1 insertion(+), 21 deletions(-) delete mode 100755 scripts/patch.sh diff --git a/package.json b/package.json index c15d92ecb3..955de60cd4 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "gulp-tslint": "^5.0.0", "gulp-util": "^3.0.6", "gulp-watch": "^4.3.4", - "harp": "0.21.0-pre.1", + "harp": "^0.21.0", "html2jade": "^0.8.4", "indent-string": "^2.1.0", "jasmine-core": "^2.3.4", diff --git a/scripts/install.sh b/scripts/install.sh index 79242a0d16..a478f6880f 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -16,9 +16,6 @@ fi echo "Installing main packages ..." npm install --no-optional -echo "Patching ..." -source ./scripts/patch.sh - if [ -z "$TRAVIS" ]; then echo "Rebuilding node-sass, just in case ..." npm rebuild node-sass; diff --git a/scripts/patch.sh b/scripts/patch.sh deleted file mode 100755 index 87876b20b5..0000000000 --- a/scripts/patch.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -set -e -o pipefail - -TARGET=node_modules/terraform/lib/helpers/raw.js - -# Around line 282 change from/to: -# var namespace = sourcePath.split(".")[0].split("/") -# var namespace = sourcePath.split('.').slice(0, -1).join('.').split('/') - -if [ -e "$TARGET" ]; then - perl -i.bak -pe 's/^(\s+var namespace.*split\("."\))\[0\]/\1.slice(0, -1).join(".")/' "$TARGET" - echo "Patched '$TARGET'." -else - echo "Nothing to patch. Can't find file '$TARGET'." - exit 1; -fi From 74ef87feacb912e851545de62291263535b2c9f1 Mon Sep 17 00:00:00 2001 From: Ward Bell Date: Fri, 4 Nov 2016 21:59:51 -0700 Subject: [PATCH 6/7] docs: systemjs.config.plunker -> systemjs.config.web w/ auto-bootstrap (#2756) see PR #2756 --- gulpfile.js | 2 +- ....build.js => systemjs.config.web.build.js} | 38 ++++++++++++++++++- ...nfig.plunker.js => systemjs.config.web.js} | 38 ++++++++++++++++++- .../_examples/testing/ts/browser-test-shim.js | 2 + tools/plunker-builder/builder.js | 8 ++-- 5 files changed, 78 insertions(+), 10 deletions(-) rename public/docs/_examples/_boilerplate/{systemjs.config.plunker.build.js => systemjs.config.web.build.js} (70%) rename public/docs/_examples/_boilerplate/{systemjs.config.plunker.js => systemjs.config.web.js} (61%) diff --git a/gulpfile.js b/gulpfile.js index 01f192a37f..6dac9d40c4 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -637,7 +637,7 @@ gulp.task('build-dart-api-docs', ['_shred-api-examples', 'dartdoc'], function() return buildApiDocsForDart(); }); -// Using the --build flag will use systemjs.config.plunker.build.js (for preview builds) +// Using the --build flag will use systemjs.config.web.build.js (for preview builds) gulp.task('build-plunkers', ['_copy-example-boilerplate'], function() { regularPlunker.buildPlunkers(EXAMPLES_PATH, LIVE_EXAMPLES_PATH, { errFn: gutil.log, build: argv.build }); return embeddedPlunker.buildPlunkers(EXAMPLES_PATH, LIVE_EXAMPLES_PATH, { errFn: gutil.log, build: argv.build, targetSelf: argv.targetSelf }); diff --git a/public/docs/_examples/_boilerplate/systemjs.config.plunker.build.js b/public/docs/_examples/_boilerplate/systemjs.config.web.build.js similarity index 70% rename from public/docs/_examples/_boilerplate/systemjs.config.plunker.build.js rename to public/docs/_examples/_boilerplate/systemjs.config.web.build.js index e89a192c77..3fa201a280 100644 --- a/public/docs/_examples/_boilerplate/systemjs.config.plunker.build.js +++ b/public/docs/_examples/_boilerplate/systemjs.config.web.build.js @@ -1,5 +1,5 @@ /** - * PLUNKER VERSION FOR CURRENT ANGULAR BUILD + * WEB VERSION FOR CURRENT ANGULAR BUILD * (based on systemjs.config.js in angular.io) * System configuration for Angular samples * Adjust as necessary for your application needs. @@ -11,7 +11,19 @@ // DEMO ONLY! REAL CODE SHOULD NOT TRANSPILE IN THE BROWSER transpiler: 'ts', typescriptOptions: { - tsconfig: true + // Complete copy of compiler options in standard tsconfig.json + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] }, meta: { 'typescript': { @@ -67,4 +79,26 @@ } } }); + + if (!global.noBootstrap) { bootstrap(); } + + // Bootstrap the `AppModule`(skip the `app/main.ts` that normally does this) + function bootstrap() { + + // Stub out `app/main.ts` so System.import('app') doesn't fail if called in the index.html + System.set(System.normalizeSync('app/main.ts'), System.newModule({ })); + + // bootstrap and launch the app (equivalent to standard main.ts) + Promise.all([ + System.import('@angular/platform-browser-dynamic'), + System.import('app/app.module') + ]) + .then(function (imports) { + var platform = imports[0]; + var app = imports[1]; + platform.platformBrowserDynamic().bootstrapModule(app.AppModule); + }) + .catch(function(err){ console.error(err); }); + } + })(this); diff --git a/public/docs/_examples/_boilerplate/systemjs.config.plunker.js b/public/docs/_examples/_boilerplate/systemjs.config.web.js similarity index 61% rename from public/docs/_examples/_boilerplate/systemjs.config.plunker.js rename to public/docs/_examples/_boilerplate/systemjs.config.web.js index 4504d87d72..40e6a67fc6 100644 --- a/public/docs/_examples/_boilerplate/systemjs.config.plunker.js +++ b/public/docs/_examples/_boilerplate/systemjs.config.web.js @@ -1,5 +1,5 @@ /** - * PLUNKER VERSION + * WEB ANGULAR VERSION * (based on systemjs.config.js in angular.io) * System configuration for Angular samples * Adjust as necessary for your application needs. @@ -9,7 +9,19 @@ // DEMO ONLY! REAL CODE SHOULD NOT TRANSPILE IN THE BROWSER transpiler: 'ts', typescriptOptions: { - tsconfig: true + // Complete copy of compiler options in standard tsconfig.json + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "removeComments": false, + "noImplicitAny": true, + "suppressImplicitAnyIndexErrors": true, + "typeRoots": [ + "../../node_modules/@types/" + ] }, meta: { 'typescript': { @@ -54,4 +66,26 @@ } } }); + + if (!global.noBootstrap) { bootstrap(); } + + // Bootstrap the `AppModule`(skip the `app/main.ts` that normally does this) + function bootstrap() { + + // Stub out `app/main.ts` so System.import('app') doesn't fail if called in the index.html + System.set(System.normalizeSync('app/main.ts'), System.newModule({ })); + + // bootstrap and launch the app (equivalent to standard main.ts) + Promise.all([ + System.import('@angular/platform-browser-dynamic'), + System.import('app/app.module') + ]) + .then(function (imports) { + var platform = imports[0]; + var app = imports[1]; + platform.platformBrowserDynamic().bootstrapModule(app.AppModule); + }) + .catch(function(err){ console.error(err); }); + } + })(this); diff --git a/public/docs/_examples/testing/ts/browser-test-shim.js b/public/docs/_examples/testing/ts/browser-test-shim.js index 1cbabc3f64..efca6c3554 100644 --- a/public/docs/_examples/testing/ts/browser-test-shim.js +++ b/public/docs/_examples/testing/ts/browser-test-shim.js @@ -33,6 +33,8 @@ System.config({ }, }); +document['noBootstrap'] = true; // do not run system.config.web.js bootstrap + System.import('systemjs.config.js') .then(importSystemJsExtras) .then(initTestBed) diff --git a/tools/plunker-builder/builder.js b/tools/plunker-builder/builder.js index f055fd963b..175e69ec54 100644 --- a/tools/plunker-builder/builder.js +++ b/tools/plunker-builder/builder.js @@ -41,7 +41,6 @@ class PlunkerBuilder { if (config.basePath.indexOf('/ts') > -1) { // uses systemjs.config.js so add plunker version this.options.addField(postData, 'systemjs.config.js', this.systemjsConfig); - this.options.addField(postData, 'tsconfig.json', this.tsconfig); } } @@ -210,13 +209,12 @@ class PlunkerBuilder { _getPlunkerFiles() { // Assume plunker version is sibling of node_modules version this.readme = fs.readFileSync(this.basePath + '/_boilerplate/plunker.README.md', 'utf-8'); - var systemJsConfigPath = '/_boilerplate/systemjs.config.plunker.js'; + var systemJsConfigPath = '/_boilerplate/systemjs.config.web.js'; if (this.options.build) { - systemJsConfigPath = '/_boilerplate/systemjs.config.plunker.build.js'; + systemJsConfigPath = '/_boilerplate/systemjs.config.web.build.js'; } this.systemjsConfig = fs.readFileSync(this.basePath + systemJsConfigPath, 'utf-8'); this.systemjsConfig += this.copyrights.jsCss; - this.tsconfig = fs.readFileSync(`${this.basePath}/_boilerplate/tsconfig.json`, 'utf-8'); } _htmlToElement(document, html) { @@ -255,8 +253,8 @@ class PlunkerBuilder { } }); - // var defaultExcludes = [ '!**/node_modules/**','!**/tsconfig.json', '!**/*plnkr.json', '!**/*plnkr.html', '!**/*plnkr.no-link.html' ]; var defaultExcludes = [ + '!**/app/main.ts', '!**/tsconfig.json', '!**/*plnkr.*', '!**/package.json', From 6714e171c8bda46b2a37b5be8726aca69d464fde Mon Sep 17 00:00:00 2001 From: Naomi Black Date: Sat, 5 Nov 2016 02:16:07 -0700 Subject: [PATCH 7/7] banner(china): announce gdd china events --- public/_includes/_hero-home.jade | 7 +++- public/events.jade | 32 +++++++++++++++--- .../images/logos/google/gdd-logo.png | Bin 0 -> 7167 bytes 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 public/resources/images/logos/google/gdd-logo.png diff --git a/public/_includes/_hero-home.jade b/public/_includes/_hero-home.jade index e29c2953ae..5264cfc00c 100644 --- a/public/_includes/_hero-home.jade +++ b/public/_includes/_hero-home.jade @@ -7,7 +7,12 @@ header(class="background-sky l-relative") announcement-bar + .announcement-bar-slide.clearfix + img(src="/resources/images/logos/google/gdd-logo.png" width="64") + p Google Developer Day Beijing & Shanghai 12/2016 + a(href="http://services.google.cn/fb/forms/gddcn2016/" target="_blank" class="button md-button") Register now + .announcement-bar-slide.clearfix img(src="/resources/images/logos/anglebrackets/devintersection.png" width="64") p Join us for DEVintersection Amsterdam Nov 14-16! - a(href="https://www.devintersectioneurope.com/#!/" target="_blank" class="button md-button") Register now \ No newline at end of file + a(href="https://www.devintersectioneurope.com/#!/" target="_blank" class="button md-button") Register now diff --git a/public/events.jade b/public/events.jade index 0e9e927816..261248c3cd 100644 --- a/public/events.jade +++ b/public/events.jade @@ -39,12 +39,34 @@ table.is-full-width td Paris, France td Dec. 5, 2016 - + tr th a( target="_blank" - href="https://ng-be.org/" - ) NG-BE - td Ghent, Belgium - td Dec. 9, 2016 + href="http://www.google.cn/intl/en/events/developerday2016/" + ) Google Developer Day China (Beijing) + td Beijing, China + td Dec. 8, 2016 + + + tr + th + a( + target="_blank" + href="https://ng-be.org/" + ) NG-BE + td Ghent, Belgium + td Dec. 9, 2016 + + + tr + th + a( + target="_blank" + href="http://www.google.cn/intl/en/events/developerday2016/" + ) Google Developer Day China (Shanghai) + td Shanghai, China + td Dec. 14, 2016 + + diff --git a/public/resources/images/logos/google/gdd-logo.png b/public/resources/images/logos/google/gdd-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..06826b95d1b3cbad2c22f537a4eecf07ae30ef26 GIT binary patch literal 7167 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